diff options
author | Uri Baghin <uri@canva.com> | 2023-04-06 22:10:59 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-06 22:10:59 +1000 |
commit | 0a657473246481df9bbf9b3320bacea1819afb9e (patch) | |
tree | e88fa6c0e033cd6fd6e315c51d16cfd780c8edc5 /pkgs/build-support | |
parent | 936c0f659dd5fdb14cc8f12e12e845e75c3e13e2 (diff) | |
parent | f8ee061247b365a98322c102c5bfd900395a826c (diff) |
Merge pull request #224917 from uri-canva/uri/fix-symlinks
buildBazelPackage: fix difference between linux and darwin deps
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/build-bazel-package/default.nix | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/pkgs/build-support/build-bazel-package/default.nix b/pkgs/build-support/build-bazel-package/default.nix index 1901aa2235e73..a49d3c781ed83 100644 --- a/pkgs/build-support/build-bazel-package/default.nix +++ b/pkgs/build-support/build-bazel-package/default.nix @@ -1,6 +1,7 @@ { stdenv , cacert , lib +, writeCBin }: args@{ @@ -75,6 +76,28 @@ let ${lib.strings.concatStringsSep " " additionalFlags} \ ${lib.strings.concatStringsSep " " targets} ''; + # we need this to chmod dangling symlinks on darwin, gnu coreutils refuses to do so: + # chmod: cannot operate on dangling symlink '$symlink' + chmodder = writeCBin "chmodder" '' + #include <stdio.h> + #include <stdlib.h> + #include <sys/types.h> + #include <sys/stat.h> + #include <errno.h> + #include <string.h> + + int main(int argc, char** argv) { + mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO; + if (argc != 2) { + fprintf(stderr, "usage: chmodder file"); + exit(EXIT_FAILURE); + } + if (lchmod(argv[1], mode) != 0) { + fprintf(stderr, "failed to lchmod '%s': %s", argv[0], strerror(errno)); + exit(EXIT_FAILURE); + } + } + ''; in stdenv.mkDerivation (fBuildAttrs // { @@ -149,6 +172,10 @@ stdenv.mkDerivation (fBuildAttrs // { new_target="$(readlink "$symlink" | sed "s,$NIX_BUILD_TOP,NIX_BUILD_TOP,")" rm "$symlink" ln -sf "$new_target" "$symlink" + '' + lib.optionalString stdenv.isDarwin '' + # on linux symlink permissions cannot be modified, so we modify those on darwin to match the linux ones + ${chmodder}/bin/chmodder "$symlink" + '' + '' done echo '${bazel.name}' > $bazelOut/external/.nix-bazel-version |