diff --git a/Cabal/Distribution/Backpack/ComponentsGraph.hs b/Cabal/Distribution/Backpack/ComponentsGraph.hs index b086f68d79b..02d7aa911a5 100644 --- a/Cabal/Distribution/Backpack/ComponentsGraph.hs +++ b/Cabal/Distribution/Backpack/ComponentsGraph.hs @@ -64,12 +64,25 @@ mkComponentsGraph enabled pkg_descr = componentDeps component = (CExeName <$> getAllInternalToolDependencies pkg_descr bi) - ++ [ if pkgname == packageName pkg_descr - then CLibName LMainLibName - else CLibName (LSubLibName toolname) - | Dependency pkgname _ _ <- targetBuildDepends bi - , let toolname = packageNameToUnqualComponentName pkgname - , toolname `elem` internalPkgDeps ] + ++ do + Dependency pkgname _ lns <- targetBuildDepends bi + let uqn = packageNameToUnqualComponentName pkgname + guard (uqn `elem` internalPkgDeps) + ln <- toList lns + + -- given package "pkg" with "sublib" library: + case ln of + LMainLibName + -- build-depends: pkg + | pkgname == packageName pkg_descr -> return (CLibName LMainLibName) + -- build-depends: sublib + | otherwise -> return (CLibName (LSubLibName uqn)) + LSubLibName uqn' + -- build-depends: pkg:sublib + | pkgname == packageName pkg_descr + , uqn' `elem` internalPkgDeps -> return (CLibName (LSubLibName uqn')) + -- build-depends: sublib:something else + | otherwise -> [] where bi = componentBuildInfo component internalPkgDeps = map (conv . libName) (allLibraries pkg_descr) diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out index 274d492cb51..b3e8aed99bd 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out @@ -1,5 +1,15 @@ # cabal v2-build Resolving dependencies... -Error: - Dependency cycle between the following components: library - In the inplace package 'issue-6894' +Build profile: -w ghc- -O1 +In order, the following will be built: + - issue-6894 (lib:sublib) (first run) + - issue-6894 (lib) (first run) +Warning: issue.cabal:7:30: colon specifier is experimental feature (issue #5660) +Configuring library 'sublib' for issue-6894.. +Preprocessing library 'sublib' for issue-6894.. +Building library 'sublib' for issue-6894.. +Warning: issue.cabal:7:30: colon specifier is experimental feature (issue #5660) +Configuring library for issue-6894.. +Warning: The package has an extraneous version range for a dependency on an internal library: issue:{sublib} >=0 && ==6894. This version range includes the current package but isn't needed as the current package's library will always be used. +Preprocessing library for issue-6894.. +Building library for issue-6894.. diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.test.hs b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.test.hs index 2fac6fcfc10..2d840c018aa 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.test.hs +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.test.hs @@ -1,3 +1,3 @@ import Test.Cabal.Prelude main = cabalTest $ - fails $ cabal "v2-build" ["issue"] + cabal "v2-build" ["issue"] diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.cabal.out index c2f87fcf4e6..a919ff7a59e 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.cabal.out @@ -1,7 +1,8 @@ # Setup configure Warning: issue.cabal:7:30: colon specifier is experimental feature (issue #5660) Configuring issue-6894... -Error: - Components in the package issue-6894 depend on each other in a cyclic way: - 'library' depends on 'library' # Setup build +Preprocessing library 'sublib' for issue-6894.. +Building library 'sublib' for issue-6894.. +Preprocessing library for issue-6894.. +Building library for issue-6894.. diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.out index c2f87fcf4e6..a919ff7a59e 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.out @@ -1,7 +1,8 @@ # Setup configure Warning: issue.cabal:7:30: colon specifier is experimental feature (issue #5660) Configuring issue-6894... -Error: - Components in the package issue-6894 depend on each other in a cyclic way: - 'library' depends on 'library' # Setup build +Preprocessing library 'sublib' for issue-6894.. +Building library 'sublib' for issue-6894.. +Preprocessing library for issue-6894.. +Building library for issue-6894.. diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.test.hs b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.test.hs index d92ad6d8d45..5172e8fd0f9 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.test.hs +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/setup.test.hs @@ -1,3 +1,3 @@ import Test.Cabal.Prelude main = setupAndCabalTest $ do - fails $ setup_build [] + setup_build []