haskell / haskell/cabal

`code-generators` fails to find executable defined in same package as test suite

Open
#8,421 6 comments 1 reaction 0 assignees View on GitHub
attention: pr-welcome re: code-generators type: bug type: enhancement
Dominant language
Haskell
Stars
1.7k
Forks
750
Avg merge
4d 3h
Merged PRs (30d)
28

Description

I recently attempted to make use of the [`code-generators`](https://github.com/haskell/cabal/pull/7688) feature that debuted in `Cabal-3.8`. Unfortunately, I ran into an apparent limitation in which the code generator executable cannot be defined in the same package as the test suite that makes use of it.

**To Reproduce**

1. Clone https://github.com/RyanGlScott/code-generators-issue, which contains a minimal reproducer for the issue.
2. By default, this repo makes use of a code generator defined in a separate package, which is named `codegen-different-package`. To observe that this works as expected, run `cabal v2-test`:



```
$ cabal v2-test
Resolving dependencies...
Build profile: -w ghc-9.2.4 -O1
In order, the following will be built (use -v for more details):
- codegen-different-package-0.1 (exe:codegen-different-package-exe) (first run)
- code-generators-issue-0.1 (test:code-generators-issue-test) (first run)
Configuring executable 'codegen-different-package-exe' for codegen-different-package-0.1..
Preprocessing executable 'codegen-different-package-exe' for codegen-different-package-0.1..
Building executable 'codegen-different-package-exe' for codegen-different-package-0.1..
[1 of 1] Compiling Main ( src/CodegenDifferentPackage.hs, /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/codegen-different-package-0.1/x/codegen-different-package-exe/build/codegen-different-package-exe/codegen-different-package-exe-tmp/Main.o )
Linking /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/codegen-different-package-0.1/x/codegen-different-package-exe/build/codegen-different-package-exe/codegen-different-package-exe ...
Configuring test suite 'code-generators-issue-test' for code-generators-issue-0.1..
Preprocessing test suite 'code-generators-issue-test' for code-generators-issue-0.1..
Building test suite 'code-generators-issue-test' for code-generators-issue-0.1..
[1 of 2] Compiling GeneratedFile ( /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/build/code-generators-issue-test/code-generators-issue-test-gen/GeneratedFile.hs, /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/build/code-generators-issue-test/code-generators-issue-test-tmp/GeneratedFile.o )
[2 of 2] Compiling Main ( test/Test.hs, /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/build/code-generators-issue-test/code-generators-issue-test-tmp/Main.o )
Linking /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/build/code-generators-issue-test/code-generators-issue-test ...
Running 1 test suites...
Test suite code-generators-issue-test: RUNNING...
Test suite code-generators-issue-test: PASS
Test suite logged to:
/home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/test/code-generators-issue-0.1-code-generators-issue-test.log
1 of 1 test suites (1 of 1 test cases) passed.
```

3. To observe the bug, patch `code-generators-issue.cabal` to make use of a code generator defined in the same package (`codegen-same-package`):

```diff
diff --git a/code-generators-issue.cabal b/code-generators-issue.cabal
index 4317924..7d26933 100644
--- a/code-generators-issue.cabal
+++ b/code-generators-issue.cabal
@@ -27,7 +27,5 @@ test-suite code-generators-issue-test
ghc-options: -Wall
default-language: Haskell2010
build-depends: base >= 4 && < 5
- build-tool-depends: codegen-different-package:codegen-different-package-exe
- code-generators: codegen-different-package-exe
- -- build-tool-depends: code-generators-issue:codegen-same-package-exe
- -- code-generators: codegen-same-package-exe
+ build-tool-depends: code-generators-issue:codegen-same-package-exe
+ code-generators: codegen-same-package-exe
```

Starting from a clean slate:

```
$ cabal v2-clean
```

This time, if you run `cabal v2-test`, it fails:

```
$ cabal v2-test
Resolving dependencies...
Build profile: -w ghc-9.2.4 -O1
In order, the following will be built (use -v for more details):
- code-generators-issue-0.1 (exe:codegen-same-package-exe) (first run)
- code-generators-issue-0.1 (test:code-generators-issue-test) (first run)
Configuring executable 'codegen-same-package-exe' for code-generators-issue-0.1..
Preprocessing executable 'codegen-same-package-exe' for code-generators-issue-0.1..
Building executable 'codegen-same-package-exe' for code-generators-issue-0.1..
[1 of 1] Compiling Main ( codegen-same-package/CodegenSamePackage.hs, /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/x/codegen-same-package-exe/build/codegen-same-package-exe/codegen-same-package-exe-tmp/Main.o )
Linking /home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/x/codegen-same-package-exe/build/codegen-same-package-exe/codegen-same-package-exe ...
Configuring test suite 'code-generators-issue-test' for code-generators-issue-0.1..
Preprocessing test suite 'code-generators-issue-test' for code-generators-issue-0.1..
/home/ryanglscott/Documents/Hacking/Haskell/code-generators-issue/dist-newstyle/build/x86_64-linux/ghc-9.2.4/code-generators-issue-0.1/t/code-generators-issue-test/build/codegen-same-package-exe/codegen-same-package-exe: createProcess: posix_spawnp: does not exist (No such file or directory)
```

**Expected behavior**
I would expect `cabal v2-test` to succeed regardless of which form of code generator is used.

**System information**
- Ubuntu 20.04 (64-bit)
- ```
$ cabal --version
cabal-install version 3.8.1.0
compiled using version 3.8.1.0 of the Cabal library

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 9.2.4
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.