{-# LANGUAGE CPP, BangPatterns, RecordWildCards, RankNTypes, ViewPatterns,
TupleSections #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
#ifdef MIN_VERSION_Cabal
#undef CH_MIN_VERSION_Cabal
#define CH_MIN_VERSION_Cabal MIN_VERSION_Cabal
#endif
module CabalHelper.Runtime.Compat
( UnitId
, componentNameToCh
, unUnqualComponentName'
, componentNameFromComponent
, componentOutDir
, internalPackageDBPath
, unFlagAssignment
) where
import System.FilePath
import Distribution.PackageDescription
( PackageDescription
, GenericPackageDescription(..)
, Flag(..)
, FlagName
, FlagAssignment
, Executable(..)
, Library(..)
, TestSuite(..)
, Benchmark(..)
, BuildInfo(..)
, TestSuiteInterface(..)
, BenchmarkInterface(..)
, withLib
)
import Distribution.Simple.LocalBuildInfo
( ComponentName(..)
, Component(..)
, LocalBuildInfo(..)
)
#if CH_MIN_VERSION_Cabal(1,24,0)
import Distribution.Package (UnitId)
#else
import Distribution.Package (InstalledPackageId)
#endif
#if CH_MIN_VERSION_Cabal(1,25,0)
import Distribution.PackageDescription
( unFlagName
)
import Distribution.Types.ForeignLib
( ForeignLib(..)
)
import Distribution.Types.UnqualComponentName
( UnqualComponentName
, unUnqualComponentName
)
#else
import Distribution.PackageDescription
( FlagName(FlagName)
)
#endif
#if CH_MIN_VERSION_Cabal(2,0,0)
import Distribution.Simple.LocalBuildInfo
( allLibModules
, componentBuildDir
)
import Distribution.Simple.Register
( internalPackageDBPath
)
import Distribution.Backpack
( OpenUnitId(..),
OpenModule(..)
)
import Distribution.ModuleName
( ModuleName
)
import Distribution.Types.ComponentId
( unComponentId
)
import Distribution.Types.ComponentLocalBuildInfo
( maybeComponentInstantiatedWith
)
import Distribution.Types.ModuleRenaming
( ModuleRenaming(..),
isDefaultRenaming
)
import Distribution.Types.MungedPackageId
( MungedPackageId
)
import Distribution.Types.UnitId
( UnitId
, unDefUnitId
, unUnitId
)
import Distribution.Types.UnitId
( DefUnitId
)
import Distribution.Utils.NubList
( toNubListR
)
import Distribution.Version
( versionNumbers
, mkVersion
)
import qualified Distribution.InstalledPackageInfo as Installed
#endif
#if CH_MIN_VERSION_Cabal(3,2,0)
import Distribution.Types.Flag
( unFlagAssignment
)
#elif CH_MIN_VERSION_Cabal(2,2,0)
import Distribution.Types.GenericPackageDescription
( unFlagAssignment
)
#else
#define NOP_UN_FLAG_ASSIGNMENT 1
#endif
#if CH_MIN_VERSION_Cabal(2,5,0)
import Distribution.Types.LibraryName
( LibraryName (..)
)
#endif
import CabalHelper.Shared.Common
import CabalHelper.Shared.InterfaceTypes
#if !CH_MIN_VERSION_Cabal(1,24,0)
type UnitId = InstalledPackageId
#endif
componentNameToCh :: ComponentName -> ChComponentName
#if CH_MIN_VERSION_Cabal(2,5,0)
componentNameToCh :: ComponentName -> ChComponentName
componentNameToCh (CLibName LMainLibName) = ChLibraryName -> ChComponentName
ChLibName ChLibraryName
ChMainLibName
componentNameToCh (CLibName (LSubLibName n :: UnqualComponentName
n)) = ChLibraryName -> ChComponentName
ChLibName (ChLibraryName -> ChComponentName)
-> ChLibraryName -> ChComponentName
forall a b. (a -> b) -> a -> b
$ String -> ChLibraryName
ChSubLibName (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
n)
#elif CH_MIN_VERSION_Cabal(2,0,0)
componentNameToCh CLibName = ChLibName ChMainLibName
componentNameToCh (CSubLibName n) = ChLibName $ ChSubLibName (unUnqualComponentName' n)
#else
componentNameToCh CLibName = ChLibName ChMainLibName
#endif
#if CH_MIN_VERSION_Cabal(2,0,0)
componentNameToCh (CFLibName n :: UnqualComponentName
n) = String -> ChComponentName
ChFLibName (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
n)
#endif
componentNameToCh (CExeName n :: UnqualComponentName
n) = String -> ChComponentName
ChExeName (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
n)
componentNameToCh (CTestName n :: UnqualComponentName
n) = String -> ChComponentName
ChTestName (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
n)
componentNameToCh (CBenchName n :: UnqualComponentName
n) = String -> ChComponentName
ChBenchName (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
n)
#if CH_MIN_VERSION_Cabal(1,25,0)
unUnqualComponentName' :: UnqualComponentName -> String
unUnqualComponentName' :: UnqualComponentName -> String
unUnqualComponentName' = UnqualComponentName -> String
unUnqualComponentName
#else
unUnqualComponentName' :: a -> a
unUnqualComponentName' = id
#endif
componentNameFromComponent :: Component -> ComponentName
#if CH_MIN_VERSION_Cabal(2,5,0)
componentNameFromComponent :: Component -> ComponentName
componentNameFromComponent (CLib Library { libName :: Library -> LibraryName
libName = LibraryName
n }) = LibraryName -> ComponentName
CLibName LibraryName
n
componentNameFromComponent (CFLib ForeignLib {..}) = UnqualComponentName -> ComponentName
CFLibName UnqualComponentName
foreignLibName
#elif CH_MIN_VERSION_Cabal(1,25,0)
componentNameFromComponent (CLib Library { libName = Nothing }) = CLibName
componentNameFromComponent (CLib Library { libName = Just n }) = CSubLibName n
componentNameFromComponent (CFLib ForeignLib {..}) = CFLibName foreignLibName
#else
componentNameFromComponent (CLib Library {}) = CLibName
#endif
componentNameFromComponent (CExe Executable {..}) = UnqualComponentName -> ComponentName
CExeName UnqualComponentName
exeName
componentNameFromComponent (CTest TestSuite {..}) = UnqualComponentName -> ComponentName
CTestName UnqualComponentName
testName
componentNameFromComponent (CBench Benchmark {..}) = UnqualComponentName -> ComponentName
CBenchName UnqualComponentName
benchmarkName
componentOutDir :: LocalBuildInfo -> Component -> FilePath
componentOutDir :: LocalBuildInfo -> Component -> String
componentOutDir lbi :: LocalBuildInfo
lbi (CLib Library {..})=
LocalBuildInfo -> String
buildDir LocalBuildInfo
lbi
#if CH_MIN_VERSION_Cabal(2,0,0)
componentOutDir lbi :: LocalBuildInfo
lbi (CFLib ForeignLib {..}) =
LocalBuildInfo -> String -> String
componentOutDir' LocalBuildInfo
lbi (UnqualComponentName -> String
unUnqualComponentName UnqualComponentName
foreignLibName)
#endif
componentOutDir lbi :: LocalBuildInfo
lbi (CExe Executable {..}) =
LocalBuildInfo -> String -> String
componentOutDir' LocalBuildInfo
lbi (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
exeName)
componentOutDir lbi :: LocalBuildInfo
lbi (CTest TestSuite { testInterface :: TestSuite -> TestSuiteInterface
testInterface = TestSuiteLibV09 _ _, ..}) =
LocalBuildInfo -> String -> String
componentOutDir' LocalBuildInfo
lbi (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
testName String -> String -> String
forall a. [a] -> [a] -> [a]
++ "Stub")
componentOutDir lbi :: LocalBuildInfo
lbi (CTest TestSuite { testInterface :: TestSuite -> TestSuiteInterface
testInterface = TestSuiteInterface
_, ..}) =
LocalBuildInfo -> String -> String
componentOutDir' LocalBuildInfo
lbi (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
testName)
componentOutDir lbi :: LocalBuildInfo
lbi (CBench Benchmark { benchmarkInterface :: Benchmark -> BenchmarkInterface
benchmarkInterface = BenchmarkInterface
_, ..})=
LocalBuildInfo -> String -> String
componentOutDir' LocalBuildInfo
lbi (UnqualComponentName -> String
unUnqualComponentName' UnqualComponentName
benchmarkName)
componentOutDir' :: LocalBuildInfo -> String -> FilePath
componentOutDir' :: LocalBuildInfo -> String -> String
componentOutDir' lbi :: LocalBuildInfo
lbi compName' :: String
compName' =
let targetDir :: String
targetDir = (LocalBuildInfo -> String
buildDir LocalBuildInfo
lbi) String -> String -> String
</> String
compName'
compDir :: String
compDir = String
targetDir String -> String -> String
</> (String
compName' String -> String -> String
forall a. [a] -> [a] -> [a]
++ "-tmp")
in String
compDir
#if !CH_MIN_VERSION_Cabal(2,0,0)
internalPackageDBPath :: LocalBuildInfo -> FilePath -> FilePath
internalPackageDBPath lbi distPref =
distPref </> "package.conf.inplace"
#endif
#ifdef NOP_UN_FLAG_ASSIGNMENT
unFlagAssignment = id
#endif