3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/stdenv/darwin
Randy Eckenrode 856ebe6fec
darwin.stdenv: allow patchShebangs during the bootstrap
This fixes pyicu (and any other package that uses `icu-config` instead
of the CMake or some other module to get the build flags).

What happened here is the bootstrap disables `patchShebangs` to avoid
propagating the bootstrap tools to the final stdenv (due to `sh` and
`bash` being on the `PATH` from the bootstrap tools). Because of that,
the `#!/bin/sh` line in `icu-config` was not updated, causing it to
invoke the system bash on Darwin. While that is undesirable in its own
right, when the system bash is invoked as `sh`, `echo -n` will print
`-n`, resulting in the breakage see in https://github.com/NixOS/nixpkgs/pull/241951#issuecomment-1627604354.

The fix is to build bash earlier in the bootstrap while making sure it
is picked up over the one in the bootstrap tools. That allows
`patchShebangs` to be enabled during the bootstrap. Any package with
scripts that is included in the final stdenv should now have its
scripts’ shebang lines properly patched.
2023-07-09 16:53:55 -06:00
..
default.nix darwin.stdenv: allow patchShebangs during the bootstrap 2023-07-09 16:53:55 -06:00
fixed-xnu-python3.patch
make-bootstrap-tools.nix gnugrep/stdenv: Fix PCRE support by replacing PCRE lib 2023-05-15 10:21:34 +02:00
patch-bootstrap-tools-next.sh stdenvBootstrapTools: native aarch64-darwin build 2023-02-11 20:11:55 +01:00
portable-libsystem.sh darwin.stdenv: only run install_name_tool on files 2023-07-08 20:49:50 -06:00
README.md darwin.stdenv: refactor stdenv definition 2023-07-02 17:56:24 -04:00
unpack-bootstrap-tools-aarch64.sh
unpack-bootstrap-tools.sh

Darwin stdenv design goals

There are two more goals worth calling out explicitly:

  1. The standard environment should build successfully with sandboxing enabled on Darwin. It is fine if a package requires a sandboxProfile to build, but it should not be necessary to disable the sandbox to build the stdenv successfully; and
  2. The output should depend weakly on the bootstrap tools. Historically, Darwin required updating the bootstrap tools prior to updating the version of LLVM used in the standard environment. By not depending on a specific version, the LLVM used on Darwin can be updated simply by bumping the definition of llvmPackages in all-packages.nix.

Updating the stdenv

There are effectively two steps when updating the standard environment:

  1. Update the definition of llvmPackages in all-packages.nix for Darwin to match the value of llvmPackages.latest in all-packages.nix. Timing-wise, this done currently using the spring release of LLVM and once llvmPackages.latest has been updated to match. If the LLVM project has announced a release schedule of patch updates, wait until those are in nixpkgs. Otherwise, the LLVM updates will have to go through staging instead of being merged into master; and
  2. Fix the resulting breakage. Most things break due to additional warnings being turned into errors or additional strictness applied by LLVM. Fixes may come in the form of disabling those new warnings or by fixing the actual source (e.g., with a patch or update upstream). If the fix is trivial (e.g., adding a missing int to an implicit declaration), it is better to fix the problem instead of silencing the warning.