CPL-0.0.8: windows/build_zip.hs
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}
import Control.Exception
import Control.Monad
import Data.String
import Data.Version
import Distribution.Package
import Distribution.PackageDescription
import Distribution.PackageDescription.Parse
import Distribution.Verbosity
import qualified System.Info as SysInfo
import System.Process
import Turtle hiding (FilePath)
getGitHash :: IO (Maybe String)
getGitHash =
liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
`catch` \(_::SomeException) -> return Nothing
getVersion :: FilePath -> IO Version
getVersion cabalFile = do
pkg <- readPackageDescription silent cabalFile
return $ pkgVersion $ package $ packageDescription $ pkg
main :: IO ()
main = do
gitHashMaybe <- getGitHash
version <- getVersion "../CPL.cabal"
let suffix_githash =
case gitHashMaybe of
Nothing -> ""
Just gitHash -> "_" ++ gitHash
dir :: IsString a => a
dir = fromString $ "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch
let binDir = dir </> "bin"
samplesDir = dir </> "samples"
zipFile :: IsString a => a
zipFile = fromString (dir ++ ".zip")
testfile zipFile >>= \b -> when b (rm zipFile)
testfile dir >>= \b -> when b (rmtree dir)
mktree dir
mktree binDir
mktree samplesDir
cp "../dist/build/cpl/cpl.exe" (binDir </> "cpl.exe")
sh $ do
fpath <- ls "../samples"
cp fpath (samplesDir </> filename fpath)
cp "../COPYING" (dir </> "COPYING")
cp "../README.markdown" (dir </> "README.markdown")
cp "../CHANGELOG.markdown" (dir </> "CHANGELOG.markdown")
procs "7z" ["a", "-r", zipFile, dir] empty
return ()