edit: for the solution, see my comment below
I need/want to build aeson and its subproject attoparsec-aeson from source (it’s a fork of the “official” aeson), but I’m stuck… can you help out?
The sources of attoparsec-aeson live in a subdirectory of the aeson ones, so I have the sources:
aeson-src = fetchFromGitHub {
...
};
and the “main” aeson library:
aeson = haskellPackages.mkDerivation {
pname = "aeson";
src = aeson-src;
...
};
When I get to attoparsec-aeson however I run into a wall: I tried to follow the documentation about sourceRoot
:
attoparsec-aeson = haskellPackages.mkDerivation {
pname = "attoparsec-aeson";
src = aeson-src;
sourceRoot = "./attoparsec-aeson"; # maybe this should be "${aeson-src}/attoparsec-aeson"?
# (it doesn't work either way)
...
};
but I get
error: function 'anonymous lambda' called with unexpected argument 'sourceRoot'
Did I fail to spot some major blunder (I am nowhere near an expert)?
Does sourceRoot
not apply to haskellPackages.mkDerivation
? What should I do to make it work?
BTW:
IDK if this may cause issues, but the attoparsec-aeson
sources include symlinks to files in the “main” attoparsec
sources:
~/git-clone-of-attoparsec-sources $ tree attoparsec-aeson/
attoparsec-aeson/
├── src
│ └── Data
│ └── Aeson
│ ├── Internal
│ │ ├── ByteString.hs -> ../../../../../src/Data/Aeson/Internal/ByteString.hs
│ │ ├── Text.hs -> ../../../../../src/Data/Aeson/Internal/Text.hs
│ │ └── Word8.hs -> ../../../../../src/Data/Aeson/Internal/Word8.hs
│ ├── Parser
│ │ └── Internal.hs
│ └── Parser.hs
├── attoparsec-aeson.cabal
└── LICENSE
I’m also not a nix expert and I’m not too familiar with Haskell build ecosystem, but doesn’t the
buildTarget
argument do what you need? https://nixos.org/manual/nixpkgs/stable/#haskell-derivation-args (it’s the last on the list)Name of the executable or library to build and install. If unset, all available targets are built and installed.
That’s the thing you want to build (a single project may generate multiple executables - eg. a server and a client) so it won’t help in this case but… I must say, I am impressed and really grateful that you went and looked that up for me! Thanks, mate!
In case anyone comes here with the same problem, the solution is:
attoparsec-aeson = haskellPackages.mkDerivation { ... postUnpack = '' mv source source-aeson cp -rL source-aeson/attoparsec-aeson source rm -fr source-aeson ''; ... }; ```*___*