pier-0.1.0.0: src/Pier/Build/Executable.hs
{-# LANGUAGE DeriveAnyClass #-}
module Pier.Build.Executable
( askBuiltExecutable
, BuiltExecutableQ(..)
, BuiltExecutable(..)
, progExe
) where
import Data.Semigroup
import Data.Set (Set)
import Development.Shake
import Development.Shake.Classes
import Distribution.Package (PackageName)
import Distribution.Text (display)
import GHC.Generics (Generic(..))
import Pier.Core.Artifact
import Pier.Core.Persistent
data BuiltExecutable = BuiltExecutable
{ builtBinary :: Artifact
, builtExeDataFiles :: Set Artifact
} deriving (Show, Eq, Generic, Hashable, Binary, NFData)
data BuiltExecutableQ = BuiltExecutableQ PackageName String
deriving (Typeable, Eq, Generic, Hashable, Binary, NFData)
type instance RuleResult BuiltExecutableQ = BuiltExecutable
instance Show BuiltExecutableQ where
show (BuiltExecutableQ p e) = "Executable " ++ e ++ " from " ++ display p
askBuiltExecutable :: PackageName -> String -> Action BuiltExecutable
askBuiltExecutable p e = askPersistent $ BuiltExecutableQ p e
progExe :: BuiltExecutable -> [String] -> Command
progExe exe args = progA (builtBinary exe) args
<> inputs (builtExeDataFiles exe)