Dependency nix file - https://gist.github.com/MrSorcus/29012dde638ad7ad790f0eee05cf2635
Insert it in configuration.nix:
environment.systemPackages = [
(import ./example_pkg.nix)
];
Package nix file - https://gist.github.com/MrSorcus/1a172342cdb3df5aa11354e047b5b92c
But nix-shell tells me about undefined variable.
error: undefined variable ‘example_pkg’ at ./src/default.nix:10:3
(use ‘--show-trace’ to show detailed location information)
Replacement example_pkg to import ./example_pkg.nix does not change anything.
How can i add/linking package (my_package) with dependency (example_pkg)?
P.S. To some extent, Nixos does not simplify, but complicates.
I'd suggest using newScope self, see:
All packages in self can have each other in arguments.
Doesn't help...
/nix/store/v5464abdvkql4cikkpm24kks5ih5j678-binutils-2.28.1/bin/ld: cannot find -lexample_pkg
I could try to help you out if you'd show me complete set of Nix expressions that you are trying to build.
https://gist.github.com/MrSorcus/df0ae0d794c8500f470bd944ce64be9c - Dependency (Binn library).
https://gist.github.com/MrSorcus/56b4307e1d242b531c74ea080532c9a8 - Package (Nix expr for crystal script).
https://gist.github.com/MrSorcus/a907ca926b5d7cac313b97037efc7a0f - Crystal script
Directory - ./test and files ./test/binn.nix, ./test/default.nix, ./test/binding.cr.
Go to directory ./test/ and call nix-shell.
Got error:
root@nixos_laptop> nix-shell
error: undefined variable ‘binn’ at ./test/default.nix:20:3
(use ‘--show-trace’ to show detailed location information)
Ok, change binn to self.binn
Now i can be opened nix-shell, but cannot linking with library. Logs here -
https://gist.github.com/MrSorcus/f329c892e2574e1d74626a3eb2eb50f0
Here you are, it works now: mrsorcus.tar.gz
Problems that I've noticed in your code:
binding.cr, first line: should be without lib prefix, i.e. @[Link("libbinn")] -> @[Link("binn")], this goes straight into the linker as -lbinn.binn.nix, src: better to use fetchFromGitHub when you fetch from GitHub. It's both faster and more neat. Also, you don't have a hash (sha256) or revision (rev) in src: both should be present in order for fetcher to work.binn.nix, buildInputs: binn actually uses GCC even if Clang is installed, see their Makefile.binn.nix, preBuild: it's cleaner to just substitute /usr to $out, see: https://nixos.org/nixpkgs/manual/#fun-substituteInPlaceBesides that, I've cleaned up default.nix and removed unused stuff to make it more straightforward. Both nix-shell and nix-build work:
[chronos@yegatool:~/Desktop/mrsorcus]$ nix-build
/nix/store/5vr6d9hbm03x167rjwl721d55hwhha33-binn-crystal-binding
[chronos@yegatool:~/Desktop/mrsorcus]$ ./result
Pointer(Binn::Binn)@0x18c62d0
[chronos@yegatool:~/Desktop/mrsorcus]$ nix-shell
[nix-shell:~/Desktop/mrsorcus]$ crystal build binding.cr
[nix-shell:~/Desktop/mrsorcus]$ ./binding
Pointer(Binn::Binn)@0xedc2d0
It's a very good answer, thank you so much.
Also, feel free to add Binn to Nixpkgs if you want :-)
Most helpful comment
Here you are, it works now: mrsorcus.tar.gz
Problems that I've noticed in your code:
binding.cr, first line: should be withoutlibprefix, i.e.@[Link("libbinn")]->@[Link("binn")], this goes straight into the linker as-lbinn.binn.nix,src: better to usefetchFromGitHubwhen you fetch from GitHub. It's both faster and more neat. Also, you don't have a hash (sha256) or revision (rev) insrc: both should be present in order for fetcher to work.binn.nix,buildInputs: binn actually uses GCC even if Clang is installed, see their Makefile.binn.nix,preBuild: it's cleaner to just substitute/usrto$out, see: https://nixos.org/nixpkgs/manual/#fun-substituteInPlaceBesides that, I've cleaned up
default.nixand removed unused stuff to make it more straightforward. Bothnix-shellandnix-buildwork: