GLFW-b-0.0.2.3: Setup.hs
module Main (main) where
import Distribution.System ( buildOS, OS(..) )
import Distribution.Simple.InstallDirs ( libdir )
import Distribution.Simple.Setup ( ConfigFlags, fromFlag, configVerbosity
, InstallFlags, defaultCopyFlags
, installDistPref, CleanFlags
, toFlag, CopyDest(NoCopyDest)
, installVerbosity, cleanVerbosity
, CopyFlags(..)
, configProgramArgs )
import Distribution.Simple.Utils ( rawSystemExit, installOrdinaryFile )
import Distribution.Verbosity ( verbose )
import Distribution.Simple ( defaultMainWithHooks
, simpleUserHooks
, buildHook, Args, confHook
, UserHooks(preConf, preClean,
postCopy, postInst) )
import Distribution.Simple.LocalBuildInfo ( absoluteInstallDirs
, LocalBuildInfo(..) )
import Distribution.PackageDescription ( emptyBuildInfo
, updatePackageDescription
, HookedBuildInfo
, BuildInfo(..)
, PackageDescription )
import System.FilePath ( (</>) )
extraLibDir :: FilePath
extraLibDir = "build"
main :: IO ()
main = defaultMainWithHooks simpleUserHooks
{ preConf = \a f -> makeGlfw a f >> preConf simpleUserHooks a f
, confHook = \a cfs -> do
let pkgForce = [("ghc-pkg",["--force"]) | buildOS == OSX ]
cfs' = cfs { configProgramArgs = configProgramArgs cfs ++ pkgForce }
confHook simpleUserHooks a cfs'
, preClean = \a f -> makeClean a f >> preClean simpleUserHooks a f
, buildHook = \pkgDesc lbi h f ->
buildHook simpleUserHooks (glfwPkgDesc pkgDesc) lbi h f
, postCopy = postCopyGlfw
, postInst = postInstGlfw
}
makeGlfw :: Args -> ConfigFlags -> IO ()
makeGlfw _ flags = do
let verbosity = fromFlag $ configVerbosity flags
case buildOS of
OSX -> do
let make = rawSystemExit verbosity "env" $
"make" : (if verbosity >= verbose then [] else ["--quiet"])
make
_ -> return ()
makeClean :: Args -> CleanFlags -> IO ()
makeClean _ flags = do
let verbosity = fromFlag $ cleanVerbosity flags
case buildOS of
OSX -> do
let make = rawSystemExit verbosity "env" $
["make"] ++ (if verbosity >= verbose then [] else ["--quiet"])
++ ["clean"]
make
_ -> return ()
glfwPkgDesc :: PackageDescription -> PackageDescription
glfwPkgDesc pkgDesc =
case buildOS of
OSX -> updatePackageDescription libDirGlfw pkgDesc
_ -> pkgDesc
libDirGlfw :: HookedBuildInfo
libDirGlfw = (Just buildinfo, [])
where buildinfo = emptyBuildInfo { extraLibDirs = [ extraLibDir ] }
postInstGlfw :: Args -> InstallFlags -> PackageDescription
-> LocalBuildInfo -> IO ()
postInstGlfw _ flags pkgDesc lbi =
case buildOS of
OSX -> do
let copyflags = defaultCopyFlags
{ copyDistPref = installDistPref flags
, copyDest = toFlag NoCopyDest
, copyVerbosity = installVerbosity flags
}
postCopyGlfw undefined copyflags pkgDesc lbi
_ -> return ()
postCopyGlfw :: Args -> CopyFlags -> PackageDescription
-> LocalBuildInfo -> IO ()
postCopyGlfw _ flags pkgDesc lbi =
case buildOS of
OSX -> do
let installDirs = absoluteInstallDirs pkgDesc lbi
. fromFlag . copyDest $ flags
libPref = libdir installDirs
verbosity = fromFlag $ copyVerbosity flags
copy dest f = installOrdinaryFile verbosity (extraLibDir</>f) (dest</>f)
maybe (return ()) (copy libPref) (Just libName)
_ -> return ()
libName :: FilePath
libName = "libglfw.a"