packages feed

animascii-0.1.0.0: Setup.hs

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