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--"]