Skip to content

Commit 23bd28a

Browse files
authored
Merge pull request #6066 from commercialhaskell/munged
Use Cabal functions for munged package ids.
2 parents feaca9e + 536bb66 commit 23bd28a

File tree

3 files changed

+36
-31
lines changed

3 files changed

+36
-31
lines changed

src/Stack/Build/Execute.hs

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,12 @@ import Data.Time
5555
( ZonedTime, getZonedTime, formatTime, defaultTimeLocale )
5656
import qualified Data.ByteString.Char8 as S8
5757
import qualified Distribution.PackageDescription as C
58+
import Distribution.Pretty ( prettyShow )
5859
import qualified Distribution.Simple.Build.Macros as C
5960
import Distribution.System ( OS (Windows), Platform (Platform) )
6061
import qualified Distribution.Text as C
62+
import Distribution.Types.MungedPackageName
63+
( encodeCompatPackageName )
6164
import Distribution.Types.PackageName ( mkPackageName )
6265
import Distribution.Types.UnqualComponentName
6366
( mkUnqualComponentName )
@@ -1619,7 +1622,7 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap
16191622
liftIO $ atomically $
16201623
modifyTVar eeGhcPkgIds $ Map.insert taskProvides installed
16211624
where
1622-
pname = pkgName taskProvides
1625+
PackageIdentifier pname pversion = taskProvides
16231626
doHaddock mcurator package =
16241627
taskBuildHaddock
16251628
&& not isFinalBuild
@@ -1710,20 +1713,17 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap
17101713
-- However, we must unregister any such library in the new snapshot, in case
17111714
-- it was built with different flags.
17121715
let
1713-
subLibNames = map T.unpack . Set.toList $ case taskType of
1716+
subLibNames = Set.toList $ case taskType of
17141717
TTLocalMutable lp -> packageInternalLibraries $ lpPackage lp
17151718
TTRemotePackage _ p _ -> packageInternalLibraries p
1716-
PackageIdentifier name version = taskProvides
1717-
mainLibName = packageNameString name
1718-
mainLibVersion = versionString version
1719-
pkgName = mainLibName ++ "-" ++ mainLibVersion
1720-
-- z-package-z-internal for internal lib internal of package package
1721-
toCabalInternalLibName n =
1722-
concat ["z-", mainLibName, "-z-", n, "-", mainLibVersion]
1723-
allToUnregister =
1724-
map (const pkgName) (maybeToList mlib)
1725-
++ map toCabalInternalLibName subLibNames
1726-
allToRegister = maybeToList mlib ++ sublibs
1719+
toMungedPackageId :: Text -> MungedPackageId
1720+
toMungedPackageId sublib =
1721+
let sublibName = LSubLibName $ mkUnqualComponentName $ T.unpack sublib
1722+
in MungedPackageId (MungedPackageName pname sublibName) pversion
1723+
allToUnregister = mcons
1724+
(prettyShow taskProvides <$ mlib)
1725+
(map (prettyShow . toMungedPackageId) subLibNames)
1726+
allToRegister = mcons mlib sublibs
17271727

17281728
unless (null allToRegister) $
17291729
withMVar eeInstallLock $ \() -> do
@@ -2027,21 +2027,13 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap
20272027
HasLibraries _ -> do
20282028
sublibsPkgIds <- fmap catMaybes $
20292029
forM (Set.toList $ packageInternalLibraries package) $ \sublib -> do
2030-
-- z-haddock-library-z-attoparsec for internal lib attoparsec of
2031-
-- haddock-library
2032-
let sublibName = T.concat
2033-
[ "z-"
2034-
, T.pack $ packageNameString $ packageName package
2035-
, "-z-"
2036-
, sublib
2037-
]
2038-
case parsePackageName $ T.unpack sublibName of
2039-
Nothing -> pure Nothing -- invalid lib, ignored
2040-
Just subLibName ->
2041-
loadInstalledPkg
2042-
[installedPkgDb]
2043-
installedDumpPkgsTVar
2044-
subLibName
2030+
let sublibName = MungedPackageName
2031+
(packageName package)
2032+
(LSubLibName $ mkUnqualComponentName $ T.unpack sublib)
2033+
loadInstalledPkg
2034+
[installedPkgDb]
2035+
installedDumpPkgsTVar
2036+
(encodeCompatPackageName sublibName)
20452037

20462038
mpkgid <- loadInstalledPkg
20472039
[installedPkgDb]
@@ -2080,6 +2072,11 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap
20802072

20812073
pure mpkgid
20822074

2075+
loadInstalledPkg ::
2076+
[Path Abs Dir]
2077+
-> TVar (Map GhcPkgId DumpPackage)
2078+
-> PackageName
2079+
-> RIO env (Maybe GhcPkgId)
20832080
loadInstalledPkg pkgDbs tvar name = do
20842081
pkgexe <- getGhcPkgExe
20852082
dps <- ghcPkgDescribe pkgexe name pkgDbs $ conduitDumpPackage .| CL.consume
@@ -2098,7 +2095,9 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap
20982095
-- .stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/alpha/alpha.jsexe/ (NOTE: a dir)
20992096
getExecutableBuildStatuses ::
21002097
HasEnvConfig env
2101-
=> Package -> Path Abs Dir -> RIO env (Map Text ExecutableBuildStatus)
2098+
=> Package
2099+
-> Path Abs Dir
2100+
-> RIO env (Map Text ExecutableBuildStatus)
21022101
getExecutableBuildStatuses package pkgDir = do
21032102
distDir <- distDirFromDir pkgDir
21042103
platform <- view platformL

src/Stack/Build/Haddock.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,7 @@ generateHaddockIndex descr bco dumpPackages docRelFP destDir = do
251251
(packageNameString name FP.<.> "haddock")
252252
docPathRelFP =
253253
fmap ((docRelFP FP.</>) . FP.takeFileName) dpHaddockHtml
254-
interfaces = intercalate "," $
255-
maybeToList docPathRelFP ++ [srcInterfaceFP]
254+
interfaces = intercalate "," $ mcons docPathRelFP [srcInterfaceFP]
256255

257256
destInterfaceAbsFile <-
258257
parseCollapsedAbsFile (toFilePath destDir FP.</> destInterfaceRelFP)

src/Stack/Prelude.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ module Stack.Prelude
2828
, ppException
2929
, prettyThrowIO
3030
, prettyThrowM
31+
, mcons
32+
, MungedPackageId (..)
3133
, MungedPackageName (..)
3234
, LibraryName (..)
3335
, module X
@@ -89,6 +91,7 @@ import Data.Conduit.Process.Typed
8991
( byteStringInput, createSource, withLoggedProcess_ )
9092
import qualified Data.Text.IO as T
9193
import Distribution.Types.LibraryName ( LibraryName (..) )
94+
import Distribution.Types.MungedPackageId ( MungedPackageId (..) )
9295
import Distribution.Types.MungedPackageName ( MungedPackageName (..) )
9396
import Pantry as X hiding ( Package (..), loadSnapshot )
9497
import Path as X
@@ -366,3 +369,7 @@ prettyThrowIO = throwIO . PrettyException
366369
-- the monad @m@.
367370
prettyThrowM :: (Exception e, MonadThrow m, Pretty e) => e -> m a
368371
prettyThrowM = throwM . PrettyException
372+
373+
-- | Maybe cons.
374+
mcons :: Maybe a -> [a] -> [a]
375+
mcons ma as = maybe as (:as) ma

0 commit comments

Comments
 (0)