module Development.Shake.ATS.Environment ( fixDir
, pkgHome
, patsHome
, ccToDir
) where
import Control.Monad.IO.Class
import qualified Data.Text.Lazy as TL
import Development.Shake.ATS.Type
import Development.Shake.C
import Development.Shake.FilePath
import System.Environment (getEnv)
ccToDir :: CCompiler -> String
ccToDir (GCC (Just s)) = reverse (drop 1 $ reverse s) ++ "/"
ccToDir _ = ""
pkgHome :: MonadIO m => CCompiler -> m String
pkgHome cc' = liftIO $ (++ ("/.atspkg/" ++ ccToDir cc')) <$> getEnv "HOME"
patsHome :: MonadIO m => Version -> m String
patsHome v = fmap (++ (show v ++ "/")) (pkgHome (GCC Nothing))
fixDir :: FilePath -> String -> String
fixDir p =
TL.unpack
. TL.replace (TL.pack "./") (TL.pack $ p ++ "/")
. TL.replace (TL.pack "../") (TL.pack $ joinPath (init $ splitPath p) ++ "/")
. TL.replace (TL.pack "$PATSHOMELOCS") (TL.pack ".atspkg/contrib")
. TL.pack