mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 13:09:33 -06:00
48 lines
1.5 KiB
Haskell
48 lines
1.5 KiB
Haskell
import Data.List(partition)
|
|
import Control.Monad(when)
|
|
import System.Cmd(system)
|
|
import System.Environment(getArgs)
|
|
|
|
-- (c) Aarne Ranta 2010 under GNU LGPL
|
|
|
|
-- Compile files into pgf, in chosen combinations.
|
|
|
|
-- Usage: runghc Compile (-make | -link)? Eng Fre Fin ...
|
|
-- The -make option links all pgf files to one in the end
|
|
-- The -link option only links, without first compiling
|
|
-- Arguments whose length are 3 characters are prefixed with mainmodu.
|
|
-- Other arguments are passed literally.
|
|
|
|
-- Thus, for instance, to produce an English-Swedish-Romanian phrasebook with English
|
|
-- disambiguation, the command is
|
|
--
|
|
-- runghc Compile -link Eng Swe Ron DisambPhrasebookEng
|
|
|
|
|
|
-- change this to apply to another project; alternatively, just use full file names
|
|
mainmodu = "Phrasebook"
|
|
|
|
main = do
|
|
(opts,langs) <- partition ((=='-') . head) `fmap` getArgs
|
|
let modus = [mkFile la | la <- langs]
|
|
let opt = elem "-opt" opts
|
|
putStrLn $ unwords modus
|
|
when (notElem "-link" opts) $ mapM_ (compileOne opt) modus
|
|
case opts of
|
|
_ | elem "-make" opts || elem "-link" opts -> do
|
|
let comm = "gf -make -s " ++ unwords (map (++ ".pgf") modus)
|
|
putStrLn comm
|
|
system comm
|
|
return ()
|
|
_ -> return ()
|
|
|
|
compileOne opt modu = do
|
|
let optim = if opt then " -optimize-pgf" else ""
|
|
comm = "gf -make -s" ++ optim ++ " -name=" ++
|
|
modu ++ " " ++ modu ++ ".gf" ++
|
|
" +RTS -K32M"
|
|
putStrLn comm
|
|
system comm
|
|
|
|
mkFile la = if length la == 3 then mainmodu ++ la else la
|