import Distribution.Simple import Distribution.Simple.Setup import Distribution.Simple.LocalBuildInfo import Distribution.PackageDescription import Control.Monad (when, forM_) import System.Directory import System.FilePath main = defaultMainWithHooks $ simpleUserHooks { postBuild = \args buildflags pkgdesc buildinfo -> do when (buildinfo `has` "portable" || buildinfo `has` "portable-compiler") $ do -- Figure out paths let dirname = "haste-compiler" exes = map fst $ executableConfigs buildinfo builddir = buildDir buildinfo outdir = builddir dirname datadir = dataDir $ localPkgDescr buildinfo jsfiles = dataFiles $ localPkgDescr buildinfo dirExists <- doesDirectoryExist outdir when dirExists $ removeDirectoryRecursive outdir createDirectoryIfMissing True (outdir "js") -- Copy executables forM_ exes $ \exe -> do copyFile (builddir exe exe) (outdir exe) -- Copy libs forM_ jsfiles $ \js -> do copyFile (datadir js) (outdir "js" js) } has :: LocalBuildInfo -> String -> Bool has lbi fn = case lookup (FlagName fn) (configConfigurationsFlags (configFlags lbi)) of Just f -> f _ -> False