forked from GitHub/gf-core
68 lines
2.3 KiB
Haskell
68 lines
2.3 KiB
Haskell
import Distribution.Simple(defaultMainWithHooks,UserHooks(..),simpleUserHooks)
|
|
import Distribution.Simple.LocalBuildInfo(LocalBuildInfo(..),absoluteInstallDirs,datadir)
|
|
import Distribution.Simple.Setup(BuildFlags(..),Flag(..),InstallFlags(..),CopyDest(..),CopyFlags(..),SDistFlags(..))
|
|
import Distribution.PackageDescription(PackageDescription(..),emptyHookedBuildInfo)
|
|
|
|
import WebSetup
|
|
|
|
-- | Notice about RGL not built anymore
|
|
noRGLmsg :: IO ()
|
|
noRGLmsg = putStrLn "Notice: the RGL is not built as part of GF anymore. See https://github.com/GrammaticalFramework/gf-rgl"
|
|
|
|
-- | Cabal doesn't know how to correctly create the source distribution, so
|
|
-- we print an error message with the correct instructions when someone tries
|
|
-- `cabal sdist`.
|
|
sdistError :: PackageDescription -> Maybe LocalBuildInfo -> UserHooks -> SDistFlags -> IO ()
|
|
sdistError _ _ _ _ = fail "Use `make sdist` to create the source distribution file"
|
|
|
|
main :: IO ()
|
|
main = defaultMainWithHooks simpleUserHooks
|
|
{ preBuild = gfPreBuild
|
|
, postBuild = gfPostBuild
|
|
, preInst = gfPreInst
|
|
, postInst = gfPostInst
|
|
, postCopy = gfPostCopy
|
|
, sDistHook = sdistError
|
|
}
|
|
where
|
|
gfPreBuild args = gfPre args . buildDistPref
|
|
gfPreInst args = gfPre args . installDistPref
|
|
|
|
gfPre args distFlag = do
|
|
return emptyHookedBuildInfo
|
|
|
|
gfPostBuild args flags pkg lbi = do
|
|
noRGLmsg
|
|
|
|
gfPostInst args flags pkg lbi = do
|
|
noRGLmsg
|
|
saveInstallPath args flags (pkg,lbi)
|
|
installWeb (pkg,lbi)
|
|
|
|
gfPostCopy args flags pkg lbi = do
|
|
noRGLmsg
|
|
saveCopyPath args flags (pkg,lbi)
|
|
copyWeb flags (pkg,lbi)
|
|
|
|
saveInstallPath :: [String] -> InstallFlags -> (PackageDescription, LocalBuildInfo) -> IO ()
|
|
saveInstallPath args flags bi = do
|
|
let
|
|
dest = NoCopyDest
|
|
dir = datadir (uncurry absoluteInstallDirs bi dest)
|
|
writeFile dataDirFile dir
|
|
|
|
saveCopyPath :: [String] -> CopyFlags -> (PackageDescription, LocalBuildInfo) -> IO ()
|
|
saveCopyPath args flags bi = do
|
|
let
|
|
dest = case copyDest flags of
|
|
NoFlag -> NoCopyDest
|
|
Flag d -> d
|
|
dir = datadir (uncurry absoluteInstallDirs bi dest)
|
|
writeFile dataDirFile dir
|
|
|
|
-- | Name of file where installation's data directory is recording
|
|
-- This is a last-resort way in which the seprate RGL build script
|
|
-- can determine where to put the compiled RGL files
|
|
dataDirFile :: String
|
|
dataDirFile = "DATA_DIR"
|