diff options
Diffstat (limited to 'WebSetup.hs')
| -rw-r--r-- | WebSetup.hs | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/WebSetup.hs b/WebSetup.hs index ee9f741d6..e6c776bb9 100644 --- a/WebSetup.hs +++ b/WebSetup.hs @@ -1,12 +1,13 @@ module WebSetup(buildWeb,installWeb,copyWeb,numJobs,execute) where -import System.Directory(createDirectoryIfMissing,copyFile) +import System.Directory(createDirectoryIfMissing,copyFile,doesDirectoryExist) import System.FilePath((</>),dropExtension) import System.Process(rawSystem) import System.Exit(ExitCode(..)) -import Distribution.Simple.Setup(BuildFlags(..),Flag(..),CopyDest(..),copyDest) -import Distribution.Simple.LocalBuildInfo(datadir,buildDir,absoluteInstallDirs) -import Distribution.Simple.Utils(die) +import Distribution.Simple.Setup(BuildFlags(..),Flag(..),CopyFlags(..),CopyDest(..),copyDest) +import Distribution.Simple.LocalBuildInfo(LocalBuildInfo(..),datadir,buildDir,absoluteInstallDirs) +import Distribution.Simple.Utils(die) -- deprecated as of Cabal >= 2 +import Distribution.PackageDescription(PackageDescription(..)) {- To test the GF web services, the minibar and the grammar editor, use @@ -16,28 +17,47 @@ import Distribution.Simple.Utils(die) Chrome). The example grammars listed below will be available in the minibar. -} -example_grammars = -- :: [(pgf, subdir, src)] +{- + Update 2018-07-04 + + The example grammars have now been removed from the GF repository. + This script will look for them in ../gf-contrib and build them from there if possible. + If not, the user will be given a message and nothing is build or copied. + (Unfortunately cabal install seems to hide all messages from stdout, + so users won't see this message unless they check the log.) +-} + +example_grammars :: [(String, String, [String])] -- [(pgf, subdir, source modules)] +example_grammars = [("Letter.pgf","letter",letterSrc) ,("Foods.pgf","foods",foodsSrc) ,("Phrasebook.pgf","phrasebook",phrasebookSrc) ] where - --foodsSrc = "Foods???.gf" -- doesn't work on Win32 foodsSrc = ["Foods"++lang++".gf"|lang<-foodsLangs] foodsLangs = words "Afr Amh Bul Cat Cze Dut Eng Epo Fin Fre Ger Gle Heb Hin Ice Ita Jpn Lav Mlt Mon Nep Pes Por Ron Spa Swe Tha Tsn Tur Urd" - --phrasebookSrc = "Phrasebook???.gf" -- doesn't work on Win32 phrasebookSrc = ["Phrasebook"++lang++".gf"|lang<-phrasebookLangs] phrasebookLangs = words "Bul Cat Chi Dan Dut Eng Lav Hin Nor Spa Swe Tha" -- only fastish languages - --letterSrc = "Letter???.gf" letterSrc = ["Letter"++lang++".gf"|lang<-letterLangs] letterLangs = words "Eng Fin Fre Heb Rus Swe" - -buildWeb gf (flags,pkg,lbi) = - do --putStrLn "buildWeb" - mapM_ build_pgf example_grammars +contrib_dir :: FilePath +contrib_dir = ".."</>"gf-contrib" + +buildWeb :: String -> (BuildFlags, PackageDescription, LocalBuildInfo) -> IO () +buildWeb gf (flags,pkg,lbi) = do + contrib_exists <- doesDirectoryExist contrib_dir + if contrib_exists + then mapM_ build_pgf example_grammars + else putStr $ unlines + [ "---" + , "Example grammars are no longer included in the main GF repository, but have moved to gf-contrib." + , "If you want these example grammars to be built, clone this repository in the same top-level directory as GF:" + , "https://github.com/GrammaticalFramework/gf-contrib.git" + , "---" + ] where gfo_dir = buildDir lbi </> "examples" @@ -47,7 +67,7 @@ buildWeb gf (flags,pkg,lbi) = execute gf args where tmp_dir = gfo_dir</>subdir - dir = "examples"</>subdir + dir = contrib_dir</>subdir args = numJobs flags++["-make","-s"] -- ,"-optimize-pgf" ++["--gfo-dir="++tmp_dir, "--gf-lib-path="++buildDir lbi </> "rgl", @@ -55,18 +75,24 @@ buildWeb gf (flags,pkg,lbi) = "--output-dir="++gfo_dir] ++[dir</>file|file<-src] +installWeb :: (PackageDescription, LocalBuildInfo) -> IO () installWeb = setupWeb NoCopyDest +copyWeb :: CopyFlags -> (PackageDescription, LocalBuildInfo) -> IO () copyWeb flags = setupWeb dest where dest = case copyDest flags of NoFlag -> NoCopyDest Flag d -> d -setupWeb dest (pkg,lbi) = - do mapM_ (createDirectoryIfMissing True) [grammars_dir,cloud_dir] - mapM_ copy_pgf example_grammars - copyGFLogo +setupWeb :: CopyDest -> (PackageDescription, LocalBuildInfo) -> IO () +setupWeb dest (pkg,lbi) = do + mapM_ (createDirectoryIfMissing True) [grammars_dir,cloud_dir] + contrib_exists <- doesDirectoryExist contrib_dir + if contrib_exists + then mapM_ copy_pgf example_grammars + else return () -- message already displayed from buildWeb + copyGFLogo where grammars_dir = www_dir </> "grammars" cloud_dir = www_dir </> "tmp" -- hmm @@ -85,10 +111,10 @@ setupWeb dest (pkg,lbi) = do createDirectoryIfMissing True logo_dir copyFile ("doc"</>"Logos"</>gf_logo) (logo_dir</>gf_logo) +-- | Run an arbitrary system command +execute :: String -> [String] -> IO () execute command args = do let cmdline = command ++ " " ++ unwords (map showArg args) --- putStrLn $ "Running: " ++ cmdline --- appendFile "running" (cmdline++"\n") e <- rawSystem command args case e of ExitSuccess -> return () @@ -97,8 +123,8 @@ execute command args = where showArg arg = if ' ' `elem` arg then "'" ++ arg ++ "'" else arg --- | This function is used to enable parallel compilation of the RGL and --- example grammars +-- | This function is used to enable parallel compilation of the RGL and example grammars +numJobs :: BuildFlags -> [String] numJobs flags = if null n then ["-j","+RTS","-A20M","-N","-RTS"] |
