summary refs log tree commit diff
path: root/pkgs/build-support/rust/hooks/cargo-install-hook.sh
blob: 69ce7266936659441d8e0f37e0b7aa0d0cc7c591 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cargoInstallPostBuildHook() {
    echo "Executing cargoInstallPostBuildHook"

    releaseDir=target/@shortTarget@/$cargoBuildType
    tmpDir="${releaseDir}-tmp";

    mkdir -p $tmpDir
    cp -r ${releaseDir}/* $tmpDir/
    bins=$(find $tmpDir \
      -maxdepth 1 \
      -type f \
      -executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \))

    echo "Finished cargoInstallPostBuildHook"
}

cargoInstallHook() {
    echo "Executing cargoInstallHook"

    runHook preInstall

    # rename the output dir to a architecture independent one

    releaseDir=target/@shortTarget@/$cargoBuildType
    tmpDir="${releaseDir}-tmp";

    mapfile -t targets < <(find "$NIX_BUILD_TOP" -type d | grep "${tmpDir}$")
    for target in "${targets[@]}"; do
      rm -rf "$target/../../${cargoBuildType}"
      ln -srf "$target" "$target/../../"
    done
    mkdir -p $out/bin $out/lib

    xargs -r cp -t $out/bin <<< $bins
    find $tmpDir \
      -maxdepth 1 \
      -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \
      -print0 | xargs -r -0 cp -t $out/lib
    rmdir --ignore-fail-on-non-empty $out/lib $out/bin
    runHook postInstall

    echo "Finished cargoInstallHook"
}


if [ -z "${dontCargoInstall-}" ] && [ -z "${installPhase-}" ]; then
  installPhase=cargoInstallHook
  postBuildHooks+=(cargoInstallPostBuildHook)
fi