Skip to content
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

Cannot build happy 2.x from hackage #2274

Open
avdv opened this issue Dec 10, 2024 · 0 comments
Open

Cannot build happy 2.x from hackage #2274

avdv opened this issue Dec 10, 2024 · 0 comments

Comments

@avdv
Copy link
Member

avdv commented Dec 10, 2024

Describe the bug
After updating the stackage snapshot to 2024-10-10, we get happy version 2.0.2 from hackage.

This version is no longer a simple executable but the package has been split into the command line tool and a library with multiple sublibraries.

First off, this means we have to declare dependencies between components of the library manually:

stack_snapshot(
     name = "stackage",
     components = { 
         "happy-lib": [                                                                                                                                                      
            "lib",                                                                                                                                                          
            "lib:grammar",                                                                                                                                                  
            "lib:backend-glr",                                                                                                                                              
            "lib:backend-lalr",                                                                                                                                             
            "lib:frontend",                                                                                                                                                 
            "lib:tabular",                                                                                                                                                  
        ],                                                                                                                                                                  
     },
     components_dependencies = {
        "happy-lib": repr({                                                                                                                                                 
            "lib:backend-glr": ["lib:grammar", "lib:tabular"],                                                                                                              
            "lib:backend-lalr": ["lib:grammar", "lib:tabular"],                                                                                                             
            "lib:frontend": ["lib:grammar"],                                                                                                                                
            "lib:happy-lib": ["lib:grammar", "lib:backend-glr", "lib:backend-lalr", "lib:frontend", "lib:tabular"],                                                         
            "lib:tabular": ["lib:grammar"],                                                                                                                                 
        }),                                                                                                                                                                 
     },
   ...
)

Next, the problem is that the happy-lib component is basically empty (ie. it does not produce a static nor shared library and no haddock) since it just re-exports modules from sub-libraries.

Furthermore, the backend sublibraries depend on the Paths_happy_lib module (see here) to locate its data-dir which fails at runtime since the location of the data-dir in the runfiles tree is completely different to what the Cabal generated (relocatable) Paths modules expects:

happy: /home/claudio/.cache/bazel/_bazel_claudio/f3d395587a4c32cd78e0bbc3318c2a29/execroot/rules_haskell_tests/bazel-out/k8-opt-exec-C7777A24/bin/external/stackage/happy-2.0.2/_install/happy-lib-2.0.2-backend-lalr_data/HappyTemplate.hs: openFile: does not exist (No such file or directory)

We would need to pass generate_paths_module = True to the haskell_cabal_libary stanzas generated by stack_snapshot. But that would also require patching the .cabal file to disable auto-generation of the Paths modules and add the runfiles library as a dependency. Probably the best option would be to vendor the sources in this case.

To Reproduce
Use stack_snapshot with happy >= 2 and try to run it as a tool.

Expected behavior
We should be able to build happy (and happy-lib).

Environment

  • OS name + version: linux / nixOS
  • Bazel version: 6.5.0
  • Version of the rules: 1.0.0

Additional context
Add any other context about the problem here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant