------------------------------------------------------------------------------- |-- Module : Distribution.Simple.Build.Macros-- Copyright : Simon Marlow 2008---- Maintainer : cabal-devel@haskell.org-- Portability : portable---- Generate cabal_macros.h - CPP macros for package version testing---- When using CPP you get---- > VERSION_<package>-- > MIN_VERSION_<package>(A,B,C)---- for each /package/ in @build-depends@, which is true if the version of-- /package/ in use is @>= A.B.C@, using the normal ordering on version-- numbers.---- TODO Figure out what to do about backpack and internal libraries. It is very-- suspicious that this stuff works with munged package identifiersmoduleDistribution.Simple.Build.Macros(generateCabalMacrosHeader ,generatePackageVersionMacros )whereimportDistribution.Compat.PreludeimportPrelude()importDistribution.PackageDescriptionimportDistribution.PrettyimportDistribution.Simple.LocalBuildInfo importDistribution.Simple.Program.Db importDistribution.Simple.Program.Types importDistribution.Types.MungedPackageIdimportDistribution.Types.MungedPackageNameimportDistribution.VersionimportqualifiedDistribution.Simple.Build.Macros.Z asZ-- | The contents of the @cabal_macros.h@ for the given configured package.generateCabalMacrosHeader ::PackageDescription->LocalBuildInfo ->ComponentLocalBuildInfo ->StringgenerateCabalMacrosHeader :: PackageDescription
-> LocalBuildInfo -> ComponentLocalBuildInfo -> String
generateCabalMacrosHeader PackageDescription
pkg_descr LocalBuildInfo
lbi ComponentLocalBuildInfo
clbi =Z -> String
Z.render Z.Z {zPackages :: [ZPackage]
Z.zPackages =(PackageId -> ZPackage) -> [PackageId] -> [ZPackage]
forall a b. (a -> b) -> [a] -> [b]
mapPackageId -> ZPackage
mkZPackage ([PackageId] -> [ZPackage]) -> [PackageId] -> [ZPackage]
forall a b. (a -> b) -> a -> b
$PackageDescription -> PackageId
packagePackageDescription
pkg_descr PackageId -> [PackageId] -> [PackageId]
forall a. a -> [a] -> [a]
:((UnitId, MungedPackageId) -> PackageId)
-> [(UnitId, MungedPackageId)] -> [PackageId]
forall a b. (a -> b) -> [a] -> [b]
map(UnitId, MungedPackageId) -> PackageId
forall {a}. (a, MungedPackageId) -> PackageId
getPid (ComponentLocalBuildInfo -> [(UnitId, MungedPackageId)]
componentPackageDeps ComponentLocalBuildInfo
clbi ),zTools :: [ZTool]
Z.zTools =[Z.ZTool {ztoolName :: String
Z.ztoolName =ConfiguredProgram -> String
programId ConfiguredProgram
prog ,ztoolVersion :: Version
Z.ztoolVersion =Version
ver ,ztoolX :: String
Z.ztoolX =String
major1 ,ztoolY :: String
Z.ztoolY =String
major2 ,ztoolZ :: String
Z.ztoolZ =String
minor }|ConfiguredProgram
prog <-ProgramDb -> [ConfiguredProgram]
configuredPrograms (ProgramDb -> [ConfiguredProgram])
-> ProgramDb -> [ConfiguredProgram]
forall a b. (a -> b) -> a -> b
$LocalBuildInfo -> ProgramDb
withPrograms LocalBuildInfo
lbi ,Version
ver <-Maybe Version -> [Version]
forall a. Maybe a -> [a]
maybeToList(ConfiguredProgram -> Maybe Version
programVersion ConfiguredProgram
prog ),let(String
major1 ,String
major2 ,String
minor )=Version -> (String, String, String)
majorMinor Version
ver ],zPackageKey :: String
Z.zPackageKey =caseComponentLocalBuildInfo
clbi ofLibComponentLocalBuildInfo {componentCompatPackageKey :: ComponentLocalBuildInfo -> String
componentCompatPackageKey =String
compatPackageKey }->String
compatPackageKey ComponentLocalBuildInfo
_->String
"",zComponentId :: String
Z.zComponentId =ComponentId -> String
forall a. Pretty a => a -> String
prettyShow(ComponentLocalBuildInfo -> ComponentId
componentComponentId ComponentLocalBuildInfo
clbi ),zPackageVersion :: Version
Z.zPackageVersion =PackageId -> Version
pkgVersion(PackageDescription -> PackageId
packagePackageDescription
pkg_descr ),zNotNull :: String -> Bool
Z.zNotNull =Bool -> Bool
not(Bool -> Bool) -> (String -> Bool) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null,zManglePkgName :: PackageName -> String
Z.zManglePkgName =(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
fixchar (String -> String)
-> (PackageName -> String) -> PackageName -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.PackageName -> String
unPackageName,zMangleStr :: String -> String
Z.zMangleStr =(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
fixchar }wheregetPid :: (a, MungedPackageId) -> PackageId
getPid (a
_,MungedPackageId(MungedPackageNamePackageName
pn LibraryName
_)Version
v )=-- NB: Drop the library name! We're just reporting package versions.-- This would have to be revisited if you are allowed to depend-- on different versions of the same packagePackageName -> Version -> PackageId
PackageIdentifierPackageName
pn Version
v -- | Helper function that generates just the @VERSION_pkg@ and @MIN_VERSION_pkg@-- macros for a list of package ids (usually used with the specific deps of-- a configured package).generatePackageVersionMacros ::Version->[PackageId]->StringgeneratePackageVersionMacros :: Version -> [PackageId] -> String
generatePackageVersionMacros Version
ver [PackageId]
pkgids =Z -> String
Z.render Z.Z {zPackages :: [ZPackage]
Z.zPackages =(PackageId -> ZPackage) -> [PackageId] -> [ZPackage]
forall a b. (a -> b) -> [a] -> [b]
mapPackageId -> ZPackage
mkZPackage [PackageId]
pkgids ,zTools :: [ZTool]
Z.zTools =[],zPackageKey :: String
Z.zPackageKey =String
"",zComponentId :: String
Z.zComponentId =String
"",zPackageVersion :: Version
Z.zPackageVersion =Version
ver ,zNotNull :: String -> Bool
Z.zNotNull =Bool -> Bool
not(Bool -> Bool) -> (String -> Bool) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null,zManglePkgName :: PackageName -> String
Z.zManglePkgName =(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
fixchar (String -> String)
-> (PackageName -> String) -> PackageName -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.PackageName -> String
unPackageName,zMangleStr :: String -> String
Z.zMangleStr =(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
fixchar }mkZPackage ::PackageId->Z.ZPackage mkZPackage :: PackageId -> ZPackage
mkZPackage (PackageIdentifierPackageName
name Version
ver )=Z.ZPackage {zpkgName :: PackageName
Z.zpkgName =PackageName
name ,zpkgVersion :: Version
Z.zpkgVersion =Version
ver ,zpkgX :: String
Z.zpkgX =String
major1 ,zpkgY :: String
Z.zpkgY =String
major2 ,zpkgZ :: String
Z.zpkgZ =String
minor }where(String
major1 ,String
major2 ,String
minor )=Version -> (String, String, String)
majorMinor Version
ver majorMinor ::Version->(String,String,String)majorMinor :: Version -> (String, String, String)
majorMinor Version
ver =case(Int -> String) -> [Int] -> [String]
forall a b. (a -> b) -> [a] -> [b]
mapInt -> String
forall a. Show a => a -> String
show(Version -> [Int]
versionNumbersVersion
ver )of[]->(String
"0",String
"0",String
"0")[String
x ]->(String
x ,String
"0",String
"0")[String
x ,String
y ]->(String
x ,String
y ,String
"0")(String
x :String
y :String
z :[String]
_)->(String
x ,String
y ,String
z )fixchar ::Char->Charfixchar :: Char -> Char
fixchar Char
'-'=Char
'_'fixchar Char
c =Char
c 

AltStyle によって変換されたページ (->オリジナル) /