From a7ede157d2a82467fd65998c8e633d1c5b8442d3 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Tue, 19 Dec 2023 17:48:05 +0200 Subject: [PATCH] Include `include-dirs` in build directory (for Configure generated headers) Fixes https://github.com/phadej/cabal-extras/issues/139 --- cabal-docspec/Changelog.md | 3 ++- cabal-docspec/src/CabalDocspec/Main.hs | 4 +-- cabal-docspec/src/CabalDocspec/Phase1.hs | 32 ++++++++++++++++++------ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/cabal-docspec/Changelog.md b/cabal-docspec/Changelog.md index 6492211..7101933 100644 --- a/cabal-docspec/Changelog.md +++ b/cabal-docspec/Changelog.md @@ -1,7 +1,8 @@ -# 0.0.0.202312dd +# 0.0.0.20231219 - Pass `default-language` flag to GHC - Fix issue with CPP defines without an explicit value (i.e. `-DFOO`, not `-DBAR=42`) +- Include `include-dirs` in build directory (for Configure generated headers) # 0.0.0.20230406 diff --git a/cabal-docspec/src/CabalDocspec/Main.hs b/cabal-docspec/src/CabalDocspec/Main.hs index 15a5ca1..0effa87 100644 --- a/cabal-docspec/src/CabalDocspec/Main.hs +++ b/cabal-docspec/src/CabalDocspec/Main.hs @@ -252,7 +252,7 @@ testComponent tracer0 tracerTop dynOptsCli ghcInfo buildDir cabalCfg plan env pk -- first phase: read modules and extract the comments let pkgVer = C.packageVersion (pkgGpd pkg) modules <- for modulePaths $ \(modname, modpath) -> - phase1 tracer ghcInfo pkgVer (pkgDir pkg) cppEnabled cppDirs pkgIds bi modname modpath + phase1 tracer ghcInfo (Just buildDir) (C.packageName (pkgGpd pkg)) pkgVer (pkgDir pkg) cppEnabled cppDirs pkgIds bi modname modpath -- extract doctests from the modules. let parsed :: [Module [Located DocTest]] @@ -347,7 +347,7 @@ testComponentNo tracer0 tracerTop dynOptsCli ghcInfo cabalCfg dbG pkg = do -- first phase: read modules and extract the comments let pkgVer = C.packageVersion (pkgGpd pkg) modules <- for modulePaths $ \(modname, modpath) -> - phase1 tracer ghcInfo pkgVer (pkgDir pkg) cppEnabled cppDirs pkgIds bi modname modpath + phase1 tracer ghcInfo Nothing (C.packageName (pkgGpd pkg)) pkgVer (pkgDir pkg) cppEnabled cppDirs pkgIds bi modname modpath -- extract doctests from the modules. let parsed :: [Module [Located DocTest]] diff --git a/cabal-docspec/src/CabalDocspec/Phase1.hs b/cabal-docspec/src/CabalDocspec/Phase1.hs index 372a5d7..25ca8b8 100644 --- a/cabal-docspec/src/CabalDocspec/Phase1.hs +++ b/cabal-docspec/src/CabalDocspec/Phase1.hs @@ -22,16 +22,18 @@ import CabalDocspec.Trace phase1 :: TracerPeu r Tr -> GhcInfo - -> Version -- ^ package version - -> Path Absolute -- ^ package directory - -> Bool -- ^ cpp extension - -> [Path Absolute] -- ^ additional include directories - -> [PackageIdentifier] -- ^ dependencies + -> Maybe (Path Absolute) -- ^ builddir + -> PackageName -- ^ package name + -> Version -- ^ package version + -> Path Absolute -- ^ package directory + -> Bool -- ^ cpp extension + -> [Path Absolute] -- ^ additional include directories + -> [PackageIdentifier] -- ^ dependencies -> C.BuildInfo -> C.ModuleName -> Path Absolute -> Peu r (Module (Located String)) -phase1 tracer ghcInfo pkgVer pkgDir cppEnabled cppDirs pkgIds bi modname modpath = do +phase1 tracer ghcInfo mbuildDir pkgName_ pkgVer pkgDir cppEnabled cppDirs pkgIds bi modname modpath = do traceApp tracer $ TracePhase1 modname modpath contents <- fromUTF8BS <$> readByteString modpath @@ -59,7 +61,16 @@ phase1 tracer ghcInfo pkgVer pkgDir cppEnabled cppDirs pkgIds bi modname modpath -- so may break [ pkgDir fromUnrootedFilePath dir | dir <- C.includeDirs bi - ] ++ cppDirs + ] ++ + [ buildDir + fromUnrootedFilePath "build" + componentDir ghcInfo (PackageIdentifier pkgName_ pkgVer) + fromUnrootedFilePath "build" + fromUnrootedFilePath dir + | buildDir <- toList mbuildDir + , dir <- C.includeDirs bi + ] ++ + cppDirs cppDefines :: [(String, String)] cppDefines = @@ -70,6 +81,13 @@ phase1 tracer ghcInfo pkgVer pkgDir cppEnabled cppDirs pkgIds bi modname modpath , Just d' <- return (parseDefineFlag d) ] +-- x86_64-linux/ghc-9.8.1/streamly-0.10.0 +componentDir :: GhcInfo -> PackageIdentifier -> Path Unrooted +componentDir ghcInfo pid = + fromUnrootedFilePath(ghcPlatform ghcInfo) + fromUnrootedFilePath ("ghc-" ++ prettyShow (ghcVersion ghcInfo)) + fromUnrootedFilePath (prettyShow pid) + cppGhcVersion :: Version -> String cppGhcVersion v = case C.versionNumbers v of [] -> "0"