{-# LANGUAGE Safe #-}
module Cli.CompileMetadata (
CategoryIdentifier(..),
CompileMetadata(..),
ModuleConfig(..),
ObjectFile(..),
isCategoryObjectFile,
mergeObjectFiles,
) where
import Data.List (nub)
import Cli.CompileOptions
data CompileMetadata =
CompileMetadata {
cmVersionHash :: String,
cmPath :: String,
cmNamespace :: String,
cmPublicDeps :: [String],
cmPrivateDeps :: [String],
cmCategories :: [String],
cmSubdirs :: [String],
cmPublicFiles :: [String],
cmPrivateFiles :: [String],
cmTestFiles :: [String],
cmHxxFiles :: [String],
cmCxxFiles :: [String],
cmLinkFlags :: [String],
cmObjectFiles :: [ObjectFile]
}
deriving (Eq,Show)
data ObjectFile =
CategoryObjectFile {
cofCategory :: CategoryIdentifier,
cofRequires :: [CategoryIdentifier],
cofFiles :: [String]
} |
OtherObjectFile {
oofFile :: String
}
deriving (Eq,Show)
data CategoryIdentifier =
CategoryIdentifier {
ciPath :: String,
ciCategory :: String,
ciNamespace :: String
} |
UnresolvedCategory {
ucCategory :: String
}
deriving (Eq,Ord,Show)
mergeObjectFiles :: ObjectFile -> ObjectFile -> ObjectFile
mergeObjectFiles (CategoryObjectFile c rs1 fs1) (CategoryObjectFile _ rs2 fs2) =
CategoryObjectFile c (nub $ rs1 ++ rs2) (nub $ fs1 ++ fs2)
mergeObjectFiles o _ = o
isCategoryObjectFile :: ObjectFile -> Bool
isCategoryObjectFile (CategoryObjectFile _ _ _) = True
isCategoryObjectFile (OtherObjectFile _) = False
data ModuleConfig =
ModuleConfig {
rmRoot :: String,
rmPath :: String,
rmPublicDeps :: [String],
rmPrivateDeps :: [String],
rmExtraFiles :: [ExtraSource],
rmExtraPaths :: [String],
rmMode :: CompileMode
}
deriving (Eq,Show)