import Distribution.Simple import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Setup import Distribution.PackageDescription import System.FilePath import System.Directory import Control.Monad binDir :: FilePath binDir = "bin-animascii" -- come setup semplice, ma copia il binario dove diciamo noi main :: IO () main = defaultMainWithHooks nhs where nhs = simpleUserHooks { postBuild = f } f :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO () f _ _ _ lbi = let ep = exePath lbi dd = "." binDir "animascii" in reBuildBinDir >> copyFile ep dd -- creasenonesiste -- muovi file -- mettici config etc -- todo hackish, there has to be a better method [setup] exePath :: LocalBuildInfo -> FilePath exePath lbi = buildDir lbi "animascii" "animascii" reBuildBinDir :: IO () reBuildBinDir = -- delete old doesDirectoryExist binDir >>= \b -> when b (removeDirectoryRecursive binDir) >> -- create new createDirectory binDir >> mapM_ createDirectory [binDir "input-dir", binDir "output-dir"] >> -- populate files writeFile (binDir "config.ini") configIni >> writeFile (binDir "input-dir" "example-ani.txt") animaTxt configIni :: String configIni = unlines ["# This is the configuration file for animascii.", "# If you want to know what the options do, visit", "# http://ariis.it/static/articles/animascii/page.html", "", "[general]", "fps=30", "", "[directory]", "input=input-dir", "output=output-dir", "", "[render]", "gif=true", "serial=false", "", "[gif]", "fgcol=white", "bgcol=black"] animaTxt :: String animaTxt = unlines ["=========", "", "", "", "-----10--", "/", "", "", "------5--", " /", "/", "", "------5--", " /", "\\/", "", "------5--", "e /", "H\\/", "L", "------5--", " e /", "/H\\/", "/ \\", "------5--", " e /", " /H\\/", " - \\", "------5--", " e /", " /H\\/", " -\\", "------5--", " e /", " /H\\/", " L", "------5--", " e /", " /H\\/", " / \\", "-----30--"]