Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix predicate which determines whether to build a shared library
Consider the which determines whether we should build shared libraries. pkgsUseSharedLibrary :: Set PackageId pkgsUseSharedLibrary = packagesWithLibDepsDownwardClosedProperty needsSharedLib where needsSharedLib pkg = fromMaybe compilerShouldUseSharedLibByDefault (liftM2 (||) pkgSharedLib pkgDynExe) where pkgid = packageId pkg pkgSharedLib = perPkgOptionMaybe pkgid packageConfigSharedLib pkgDynExe = perPkgOptionMaybe pkgid packageConfigDynExe In English the intended logic is: If we have enabled shared libraries or dynamic executables then we need to build a shared libary. but, a common mistake: (liftM2 (||) pkgSharedLib pkgDynExe) instead says, if we explicitly request shared libraries and also explicitly configure whether we want dynamic executables then build a shared library. It should instead use the monoid instance: getMax <$> ((Max <$> pkgSharedLib) <> (Max <$> pkgDynExe)) which captures the original logic. This failure is currently manifested in the way that if you write --disable-shared then --enable-shared is still passed to ./Setup. If you pass both --disable-shared and --disable-executable-dynamic then you don't build a shared object. Fixes #10050
- Loading branch information