isDragonfly instead of isDragonFly causes vty-crossplatform to fail to build
Closed this issue · 6 comments
Describe the bug
I'm trying to cross-compile an application to Windows. The application depends on vty-crossplatform, which has some interesting conditionals in its cabal file:
As you can see, it includes a cabal conditional test of os(dragonfly).
Now, look at the code generated in hackage.nix for this package:
As you can see, the generated Nix in hackage.nix has mapped this to a test of system.isDragonfly.
This fails for me, and I get an error like this:
error: attribute 'isDragonfly' missing
...
Did you mean isDragonFly?
Additional context
This error is difficult to trigger, since if you're building on Linux or macOS you short-circuit before hitting this test. It only came up when trying to cross-compile.
I couldn't figure out where these system.* properties are defined. But it appears that the code that generates hackage.nix is following a simple procedure where it capitalizes the word and adds "is," so os(windows) -> system.isWindows and so on.
I forked vty-crossplatform to remove the problematic line from the cabal file. Then I promptly ran into another one, related to the os(hpux) test:
error: attribute 'isHpux' missing
The test for os(hpux)? Hmm... I wonder how to fix this, someone could put in arbitrary strings os(bluebeard) or something...
I would suggest
- Special case certain values so
os(dragonfly)->system.isDragonFly - Make a list of attrs that are known to exist on the
systemin the Nix code, and for those keep the current behavior (modulo the name remapping in 1.). For unrecognized attrs, emit a Nix check that's more conservative, like
(hasAttr "isBluebeard" system && system.isBluebeard)or even emit a warning:
(if hasAttr "isBluebeard" system then system.isBluebeard else builtins.trace "Warning: system.isBluebeard from os() condition was not defined" false)This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Not stale! Would love to see a fix here, I can't build vty-crossplatform without a patch.
Thanks!