{-# LANGUAGE OverloadedStrings #-}

module Language.ATS.Package.Exec ( exec
                                 , buildAll
                                 ) where

import           Control.Composition
import           Data.Bool                 (bool)
import           Dhall                     hiding (bool)
import           Language.ATS.Package
import           Language.ATS.Package.Type
import           System.Directory          (doesFileExist)
import           System.Environment        (getEnv)

check :: IO Bool
check = do
    home <- getEnv "HOME"
    v <- want
    doesFileExist (home ++ "/.atspkg/" ++ show v ++ "/bin/patscc")

exec :: IO ()
exec = bool (buildAll >> mkPkg) mkPkg =<< check

want :: IO Version
want = Version . compiler <$> input auto "./atspkg.dhall"

buildAll :: IO ()
buildAll = on (>>) (=<< want) fetchCompiler setupCompiler