diff --git a/src/Data/ProtoLens/Setup.hs b/src/Data/ProtoLens/Setup.hs index e68f32b..f381199 100644 --- a/src/Data/ProtoLens/Setup.hs +++ b/src/Data/ProtoLens/Setup.hs @@ -41,9 +41,6 @@ import Distribution.PackageDescription , exeName , exposedModules , extraSrcFiles -#if !MIN_VERSION_Cabal(2,0,0) - , hsSourceDirs -#endif #if MIN_VERSION_Cabal(2,4,0) , specVersion #endif @@ -53,7 +50,7 @@ import Distribution.PackageDescription , testBuildInfo , testName ) -import qualified Distribution.Simple.BuildPaths as BuildPaths +import Distribution.Simple.BuildPaths (autogenComponentModulesDir) import Distribution.Simple.InstallDirs (datadir) import Distribution.Simple.LocalBuildInfo ( LocalBuildInfo(..) @@ -61,9 +58,10 @@ import Distribution.Simple.LocalBuildInfo , ComponentName(..) , ComponentLocalBuildInfo , componentPackageDeps -#if MIN_VERSION_Cabal(2,0,0) , allComponentsInBuildOrder , componentNameMap +#if MIN_VERSION_Cabal(3,0,0) + , LibraryName(..) #endif ) import qualified Distribution.Simple.PackageIndex as PackageIndex @@ -205,16 +203,6 @@ generatingSpecificProtos root getProtos hooks = hooks { buildHook = \p l h f -> generate l >> buildHook hooks p l h f , haddockHook = \p l h f -> generate l >> haddockHook hooks p l h f , replHook = \p l h f args -> generate l >> replHook hooks p l h f args -#if !MIN_VERSION_Cabal(2,0,0) - -- Older versions of Cabal don't support the autogen-modules field. - -- Work around it by manually generating the modules and putting them - -- in a place where `cabal sdist` will pick them up. - , sDistHook = \p maybe_l h f -> case maybe_l of - Nothing -> error "Can't run protoc; run 'cabal configure' first." - Just l -> do - generate l - sDistHook hooks (fudgePackageDesc l p) maybe_l h f -#endif , postCopy = \a flags pkg lbi -> do let verb = fromFlag $ copyVerbosity flags let destDir = datadir (absoluteInstallDirs pkg lbi @@ -316,39 +304,6 @@ copyProtosToDataDir verb root destDir files = do protoLensImportsPrefix :: FilePath protoLensImportsPrefix = "proto-lens-imports" -#if !MIN_VERSION_Cabal(2,0,0) --- | Add the autogen directory to the hs-source-dirs of all the targets in the --- .cabal file. Used to fool 'sdist' by pointing it to the generated source --- files. -fudgePackageDesc :: LocalBuildInfo -> PackageDescription -> PackageDescription -fudgePackageDesc lbi p = p - { library = - (\lib -> lib { libBuildInfo = fudgeBuildInfo CLibName $ libBuildInfo lib }) - <$> library p - , executables = - (\exe -> exe { buildInfo = fudgeBuildInfo (CExeName $ exeName exe) - $ buildInfo exe }) - <$> executables p - , testSuites = - (\test -> test { testBuildInfo = fudgeBuildInfo (CTestName $ testName test) - $ testBuildInfo test }) - <$> testSuites p - , benchmarks = - (\bench -> bench { benchmarkBuildInfo = - fudgeBuildInfo (CBenchName $ benchmarkName bench) - $ benchmarkBuildInfo bench }) - <$> benchmarks p - } - where - comps = allComponents lbi - fudgeBuildInfo n bi - | Just compLBI <- Map.lookup n comps - = bi { hsSourceDirs = autogenComponentModulesDir lbi compLBI - : hsSourceDirs bi } - | otherwise = bi -- Could happen if a component isn't active; try - -- anyway and see whether Cabal complains later on. -#endif - -- | Returns whether the @root@ is a parent folder of @f@. isSubdirectoryOf :: FilePath -> FilePath -> Bool isSubdirectoryOf root f @@ -423,15 +378,18 @@ collectActiveModules collectActiveModules l = map (\(n, c) -> (c, f n)) $ Map.toList $ allComponents l where p = localPkgDescr l - f CLibName = maybeToList (library p) >>= +#if MIN_VERSION_Cabal(3,0,0) + f (CLibName LMainLibName) +#else + f CLibName +#endif + = maybeToList (library p) >>= \lib -> exposedModules lib ++ otherModules (libBuildInfo lib) f (CExeName n) = otherModules . buildInfo $ exes Map.! n f (CTestName n) = otherModules . testBuildInfo $ tests Map.! n f (CBenchName n) = otherModules . benchmarkBuildInfo $ benchs Map.! n -#if MIN_VERSION_Cabal(2,0,0) f _ = [] -- TODO: other lib kinds; for now just suppress the warning -#endif exes = Map.fromList [(exeName e, e) | e <- executables p] tests = Map.fromList [(testName e, e) | e <- testSuites p] benchs = Map.fromList [(benchmarkName e, e) | e <- benchmarks p] @@ -441,22 +399,14 @@ collectActiveModules l = map (\(n, c) -> (c, f n)) $ Map.toList $ allComponents -- | List all the packages that this one depends on. collectDeps :: LocalBuildInfo -> [InstalledPackageInfo.InstalledPackageInfo] -#if MIN_VERSION_Cabal(2,0,0) collectDeps l = do c <- allComponentsInBuildOrder l (i,_) <- componentPackageDeps c Just p <- [PackageIndex.lookupUnitId (installedPkgs l) i] return p -#else -collectDeps l = do - (_, c ,_) <- componentsConfigs l - (_, i) <- componentPackageDeps c - PackageIndex.lookupSourcePackageId (installedPkgs l) i -#endif -- | All the components that will be built by this Cabal command. allComponents :: LocalBuildInfo -> Map.Map ComponentName ComponentLocalBuildInfo -#if MIN_VERSION_Cabal(2,0,0) allComponents l = fmap requireOne $ componentNameMap l where -- TODO: this doesn't support Backpack, which can have more than one @@ -464,16 +414,3 @@ allComponents l = fmap requireOne $ componentNameMap l requireOne [x] = x requireOne xs = error $ "Data.ProtoLens.Setup.allComponents: expected one " ++ "component per name, got " ++ show xs - -#else -allComponents l = Map.fromList [(c, b) | (c, b, _) <- componentsConfigs l] -#endif - --- | Get the component-level "autogen" directory where we're putting the --- generated .hs files. (For Cabal-1.0, use the shared 'BuildPaths.autogenModulesDir'.) -autogenComponentModulesDir :: LocalBuildInfo -> ComponentLocalBuildInfo -> FilePath -#if MIN_VERSION_Cabal(2,0,0) -autogenComponentModulesDir = BuildPaths.autogenComponentModulesDir -#else -autogenComponentModulesDir lbi _ = BuildPaths.autogenModulesDir lbi -#endif