hs-0.1.0.0: src/HS/Cmd/Dump.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
module HS.Cmd.Dump (cmdDump) where
import Data.Maybe
import qualified Data.Text.IO as T
import Fmt
import HS.Cfg.CfgFile
import HS.Types
import System.Directory
import System.FilePath
import Text.Enum.Text
-- | command driver to write the `cabal` wrappers out to @~/.hs/bin@
cmdDump :: Cfg -> Maybe InstallMode -> IO ()
cmdDump cfg mb = do
bin <- bin_dir cfg
fmtLn $ "writing to "+|bin|+":"
sequence_
[ write_wrapper cfg bin im tnm vrn
| vrn <- versions
, tnm <- [minBound..maxBound]
]
where
im = fromMaybe (_cfg_mode cfg) mb
write_wrapper :: Cfg -> FilePath -> InstallMode -> ToolName -> CompilerVersion -> IO ()
write_wrapper _ dir imd tn cv = do
fmtLn $ " "+|tl|+""
T.writeFile fp $ fmt $ unlinesF
[ "#!/usr/bin/env bash"
, "hs run "+|tl|+" --"+|imd|+" -- \"$@\"" :: Builder
]
setPermissions fp . setOwnerExecutable True =<< getPermissions fp
where
fp = dir </> fmt tl
tl = ""+|tn|+"-"+|cv|+"" :: Builder
bin_dir :: Cfg -> IO FilePath
bin_dir _ = mk =<< dotHs
where
mk dh = const bin <$> createDirectoryIfMissing True bin
where
bin = dh </> "bin"
versions :: [CompilerVersion]
versions = either error id $ mapM parseText
[ "9.2.1"
, "9.0.2"
, "9.0.1"
, "8.10.6"
, "8.10.5"
, "8.10.4"
, "8.10.3"
, "8.10.2"
, "8.10.1"
, "8.8.4"
, "8.8.3"
, "8.8.2"
, "8.8.1"
, "8.6.5"
, "8.6.4"
, "8.6.3"
, "8.6.2"
, "8.6.1"
, "8.4.4"
, "8.4.3"
, "8.4.2"
, "8.4.1"
, "8.2.2"
, "8.2.1"
, "8.0.2"
, "8.0.1"
, "7.10.3"
, "7.10.2"
, "7.10.1"
, "7.8.4"
, "7.8.3"
, "7.8.2"
, "7.8.1"
, "7.6.3"
, "7.6.2"
, "7.6.1"
, "7.4.2"
, "7.4.1"
, "7.2.2"
, "7.2.1"
, "7.0.4"
, "7.0.3"
, "7.0.2"
, "7.0.1"
, "6.12.3"
, "6.12.2"
, "6.12.1"
]