{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} -- gcc ats-src/libnumbertheory.o -shared -o ats-src/libnumbertheory.so -- gcc number-theory-ffi_dats.c -c -fPIC -o ats-src/libnumbertheory.o -IATS2-Postiats-include-0.3.8/ -IATS2-Postiats-include-0.3.8/ccomp/runtime/ module Development.Shake.ATS.Type ( ForeignCabal (..) , Version (..) , BinaryTarget (..) ) where import Data.Binary (Binary (..)) import Data.List (intercalate) import qualified Data.Text.Lazy as TL import GHC.Generics (Generic) -- We should have four build types: -- -- 1. Static library -- -- 2. Dynamic library -- -- 3. Binary -- -- 4. C sources -- -- AND variations on these where a Haskell library is to be built -- Or a C library. data BinaryTarget = BinaryTarget { cc :: String -- ^ C compiler to be used. , cFlags :: [String] -- ^ Flags to be passed to the C compiler , libVersion :: Version , compilerVer :: Version , gc :: Bool -- ^ Whether to configure build for use with the garbage collector. , libs :: [String] -- ^ Libraries against which to link , src :: String -- ^ Source file for binary. , hsLibs :: [ForeignCabal] -- ^ Cabal-based Haskell libraries , genTargets :: [(String, String)] -- ^ Files to be run through @hs2ats@. , binTarget :: String -- ^ Binary target } -- | Data type containing information about Haskell components of a build. data ForeignCabal = ForeignCabal { cabalFile :: TL.Text -- ^ @.cabal@ file associated with the library , objectFile :: TL.Text -- ^ Object file to be generated } newtype Version = Version [Integer] deriving (Eq, Generic, Binary) instance Show Version where show (Version is) = intercalate "." (show <$> is)