diff options
Diffstat (limited to 'nixpkgs/pkgs/build-support/rust/build-rust-crate/install-crate.nix')
-rw-r--r-- | nixpkgs/pkgs/build-support/rust/build-rust-crate/install-crate.nix | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/build-support/rust/build-rust-crate/install-crate.nix b/nixpkgs/pkgs/build-support/rust/build-rust-crate/install-crate.nix new file mode 100644 index 000000000000..7c7c102833d8 --- /dev/null +++ b/nixpkgs/pkgs/build-support/rust/build-rust-crate/install-crate.nix @@ -0,0 +1,51 @@ +{ stdenv }: +crateName: metadata: buildTests: +if !buildTests then '' + runHook preInstall + # always create $out even if we do not have binaries. We are detecting binary targets during compilation, if those are missing there is no way to only have $lib + mkdir $out + if [[ -s target/env ]]; then + mkdir -p $lib + cp target/env $lib/env + fi + if [[ -s target/link.final ]]; then + mkdir -p $lib/lib + cp target/link.final $lib/lib/link + fi + if [[ "$(ls -A target/lib)" ]]; then + mkdir -p $lib/lib + cp -r target/lib/* $lib/lib #*/ + for library in $lib/lib/*.so $lib/lib/*.dylib; do #*/ + ln -s $library $(echo $library | sed -e "s/-${metadata}//") + done + fi + if [[ "$(ls -A target/build)" ]]; then # */ + mkdir -p $lib/lib + cp -r target/build/* $lib/lib # */ + fi + if [[ -d target/bin ]]; then + if [[ "$(ls -A target/bin)" ]]; then + mkdir -p $out/bin + cp -rP target/bin/* $out/bin # */ + fi + fi + runHook postInstall +'' else +# for tests we just put them all in the output. No execution. +'' + runHook preInstall + + mkdir -p $out/tests + if [ -e target/bin ]; then + find target/bin/ -type f -executable -exec cp {} $out/tests \; + fi + if [ -e target/lib ]; then + find target/lib/ -type f \! -name '*.rlib' \ + -a \! -name '*${stdenv.hostPlatform.extensions.library}' \ + -a \! -name '*.d' \ + -executable \ + -print0 | xargs --no-run-if-empty --null install --target $out/tests; + fi + + runHook postInstall +'' |