Skip to content

Fix #6896 Allow dependency package to have no main library#6928

Merged
mpilgrem merged 4 commits into
masterfrom
re6896
Jun 7, 2026
Merged

Fix #6896 Allow dependency package to have no main library#6928
mpilgrem merged 4 commits into
masterfrom
re6896

Conversation

@mpilgrem

@mpilgrem mpilgrem commented Jun 2, 2026

Copy link
Copy Markdown
Member

See:

The basic idea is:

  • The InstalledLibraryInfo constructor is modified so that the GhcPkgId of a main library is optional.

  • MungedPackageIdentifier, rather than PackageIdentifier, is used for munged package identifiers - that is, the package identifiers of installed packages.

  • A ConfigCacheTypeFlagLibrary value is, like a ConfigCacheTypeFlagExecutable value, based on the package identifier (rather than the 'GhcPkgId' of the main library, which may not be present)

  • fetchAndMarkInstalledPackage allows for the absence of a buildable main library but the presence of sublibraries.

Two integration tests are added, one dealing with custom-setup dependencies.

  • Any changes that could be relevant to users have been recorded in ChangeLog.md.
  • The documentation has been updated, if necessary

Please also shortly describe how you tested your change. Bonus points for added tests!

@mpilgrem mpilgrem marked this pull request as draft June 2, 2026 22:55
@mpilgrem mpilgrem force-pushed the re6896 branch 5 times, most recently from 62c6cd6 to 2dd86fa Compare June 5, 2026 23:33
mpilgrem added 4 commits June 7, 2026 22:22
The basic idea is:

* The `InstalledLibraryInfo` constructor is modified so that the `GhcPkgId` of a main library is optional.

* A `ConfigCacheTypeFlagLibrary` value is, like a `ConfigCacheTypeFlagExecutable` value,  based on the package identifier (rather than the 'GhcPkgId' of the main library, which may not be present)

* `Stack.SDist` needs to be considered more carefully.

* `fetchAndMarkInstalledPackage` allows for the absence of a buildable main library but the presence of sublibraries.

An integration test is added.
@mpilgrem mpilgrem marked this pull request as ready for review June 7, 2026 22:26
@mpilgrem mpilgrem merged commit e6170f1 into master Jun 7, 2026
13 checks passed
@mpilgrem mpilgrem deleted the re6896 branch June 7, 2026 22:27
philippedev101 added a commit to philippedev101/stack that referenced this pull request Jun 9, 2026
Brings PR commercialhaskell#6865 up to current upstream master (e6170f1), past:

* commercialhaskell#6921 / commercialhaskell#6920: don't ignore deps named like sub-libs or foreign libs,
  plus the reformatting/refactor in front of that fix.
* commercialhaskell#6929: refactor/reformat sweep with `allDeps` documentation and a
  type synonym for the build-log suffix parameter.
* commercialhaskell#6928 / commercialhaskell#6896 / commercialhaskell#6912: `InstalledLibraryInfo` now carries
  `Maybe GhcPkgId` for the main library plus a
  `Map StackUnqualCompName GhcPkgId` of sub-libraries (some Cabal
  packages have only sub-libraries with no main library, and now Stack
  represents that). `Task.present`, the custom-setup dependency map,
  and `ConfigCacheTypeFlagLibrary` are now keyed by
  `MungedPackageId` / `PackageIdentifier` instead of by `GhcPkgId`.

Adapts the PR's code to the new shapes:

* `findGhcPkgId` filters for main-library entries (`LMainLibName`)
  in the new `Map MungedPackageId GhcPkgId`.
* `mkInstantiateWithOpts` takes the new map shape unchanged
  otherwise.
* `addInstantiationTasks` wraps each implementing-package identifier
  with `toCabalMungedPackageId pid Nothing` before adding it to a
  CInst task's `present` map.
* `ConfigCacheType`'s PersistField instance keeps the PR's
  `ConfigCacheTypeInstantiation Text` variant on top of upstream's
  `flagCache` helper restructure.

`Task.allInOne` is intentionally NOT restored here; that lands as a
separate commit on top of this merge.

The PR's other changes (Phase 1 component-keyed plan, Phase 2 per
component split path for Backpack-using packages, Phase 3 CInst tasks,
the existing fixes for commercialhaskell#3996 / commercialhaskell#3959 / commercialhaskell#6451, the custom-setup
TestSuite fix from PR commercialhaskell#6884, etc.) are unchanged.

Verified: full stack build + 858 unit tests pass on the merged tree.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant