Skip to content

gen-bounds does not work in multiprojects #7504

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
newhoggy opened this issue Aug 3, 2021 · 10 comments · May be fixed by #10840
Open

gen-bounds does not work in multiprojects #7504

newhoggy opened this issue Aug 3, 2021 · 10 comments · May be fixed by #10840

Comments

@newhoggy
Copy link

newhoggy commented Aug 3, 2021

Describe the bug
For multiprojects where one package depends on another inside the project, cabal gen-bounds does not work for projects that have local dependencies.

To Reproduce
Steps to reproduce the behavior:

$ tar zxvf gen-bounds.tar.gz
$ cd gen-bounds
$ cabal build all
$ cd package-b
$ cabal gen-bounds
Warning: The package list for 'hackage.haskell.org' is 15 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: package-b-0.1.0.0 (user goal)
[__1] unknown package: package-a (dependency of package-b)
[__1] fail (backjumping, conflict set: package-a, package-b)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: package-b, package-a

Projects that reference git repositories in cabal.project fail similarly.

Expected behavior
cabal should recognise it is in a multiproject and be able to find local dependencies.

System information

  • MacOS (and possibly others)
  • cabal-3.4, ghc-8.10.4

Additional context
Attached example code.
gen-bounds.tar.gz

@Mikolaj
Copy link
Member

Mikolaj commented Aug 3, 2021

Indeed, the use of ComponentRequestedSpec in genBounds seems suspect.

@ysangkok
Copy link
Member

I can't reproduce this with Cabal 3.6.0.0 and GHC 9.0.1. I did get an error regarding the base bounds, but I think that is not relevant to this issue. So I fixed it, and everything built.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 28, 2021

Actually, I can't reproduce with cabal-3.4 and ghc-8.10.7 (Linux). What was your OS, @ysangkok?

@newhoggy: any reason this can fail only on MacOS? Case sensitivity? Anything else?

Could anybody else wirh MacOS repro? Best if with cabal 3.4 and cabal 3.6.

@ysangkok
Copy link
Member

@Mikolaj I tested on Ubuntu 21.04.

@jneira
Copy link
Member

jneira commented May 15, 2022

@newhoggy could you confirm if it still is reproduced in your macos with other cabal and ghc versions?

@andreasabel
Copy link
Member

This still reproduces with latest cabal (on macOS with GHC 8.10.7). There was a typo in the reproducer (which I edited out just now). The correct reproducer is:

$ cabal build all
$ cd package-b
$ cabal gen-bounds
Error: cabal: Could not resolve dependencies:
[__0] trying: package-b-0.1.0.0 (user goal)
[__1] unknown package: package-a (dependency of package-b)
[__1] fail (backjumping, conflict set: package-a, package-b)

The problem is that local package-a, which package-b depends on, isn't known from the package-b directory as root. It is known from the project root (containing cabal.project), but cabal gen-bounds does not work on projects, only on individual cabal files.

So, the issue is just the same as in the OP.

@zimtsui
Copy link

zimtsui commented Sep 30, 2022

I can reproduce this problem with cabal 3.2, ghc 8.10.4

@Mikolaj
Copy link
Member

Mikolaj commented Sep 30, 2022

@zimtsui: thank you. So that doesn't seem like a recent regression, but probably something deeper.

@fendor
Copy link
Collaborator

fendor commented Sep 30, 2022

I guess gen-bounds just doesn't use the new-style project orchestration. Ideally, this just about migrating the old code to the new infrastructure.

@nuttycom
Copy link

I have a similar/related issue that a cabal.project file referring to a dependency on github prevents gen-bounds from working (though cabal build works fine.)

mpickering added a commit that referenced this issue Mar 20, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
mpickering added a commit that referenced this issue Mar 20, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
@mpickering mpickering linked a pull request Mar 20, 2025 that will close this issue
8 tasks
mpickering added a commit that referenced this issue Mar 20, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
mpickering added a commit that referenced this issue Mar 20, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
mpickering added a commit that referenced this issue Mar 21, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
mpickering added a commit that referenced this issue Mar 21, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
mpickering added a commit that referenced this issue Mar 21, 2025
This commit implements project-aware functionality for the `cabal gen-bounds` command,
allowing it to work correctly in multi-package projects. Previously, running `gen-bounds`
from within a package directory that depends on another local package would fail
because it couldn't find the local dependency.

The implementation follows the same pattern as other v2 commands, creating a full
project context that knows about all packages defined in the cabal.project file.
This allows `gen-bounds` to properly analyze dependencies between local packages
and suggest appropriate bounds.

```
cabal gen-bounds <TARGET>
```

Fixes #7504 #8654 #9752 #5932
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.