Skip to content

Commit

Permalink
build-support: add writableTmpDirAsHomeHook hook
Browse files Browse the repository at this point in the history
  • Loading branch information
drupol committed Jan 11, 2025
1 parent df1b6cc commit 1a6ea00
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
3 changes: 3 additions & 0 deletions doc/redirects.json
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,9 @@
"add-bin-to-path.sh": [
"index.html#add-bin-to-path.sh"
],
"writable-tmpdir-as-home.sh": [
"index.html#writable-tmpdir-as-home.sh"
],
"bintools-wrapper": [
"index.html#bintools-wrapper"
],
Expand Down
10 changes: 10 additions & 0 deletions doc/stdenv/stdenv.chapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -1392,6 +1392,16 @@ in the `./bin/` location are accessible.
It is particularly useful during testing, especially for packages that require
their executables to be available in the `PATH`.

### `writable-tmpdir-as-home.sh` {#writable-tmpdir-as-home.sh}

This setup hook ensures that the directory specified by the `HOME` environment
variable is writable. If it is not, the hook assigns `HOME` to a writable
temporary directory. This adjustment is necessary for certain packages that
require write access to the home directory during their check phases.

By setting `HOME` to a temporary directory, this setup hook prevents failures in
packages that attempt to write to the home directory.

### Bintools Wrapper and hook {#bintools-wrapper}

The Bintools Wrapper wraps the binary utilities for a bunch of miscellaneous purposes. These are GNU Binutils when targeting Linux, and a mix of cctools and GNU binutils for Darwin. \[The “Bintools” name is supposed to be a compromise between “Binutils” and “cctools” not denoting any specific implementation.\] Specifically, the underlying bintools package, and a C standard library (glibc or Darwin’s libSystem, just for the dynamic loader) are all fed in, and dependency finding, hardening (see below), and purity checks for each are handled by the Bintools Wrapper. Packages typically depend on CC Wrapper, which in turn (at run time) depends on the Bintools Wrapper.
Expand Down
14 changes: 14 additions & 0 deletions pkgs/build-support/setup-hooks/writable-tmpdir-as-home.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# shellcheck shell=bash
# This setup hook set the HOME environment variable to a temporary directory.

export HOME

writableTmpDirAsHome () {
if [[ ! -w "$HOME" ]]; then
HOME=$(mktemp -d)
export HOME
fi
}

# shellcheck disable=SC2154
addEnvHooks "$targetOffset" writableTmpDirAsHome
7 changes: 7 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,13 @@ with pkgs;
name = "setup-debug-info-dirs-hook";
} ../build-support/setup-hooks/setup-debug-info-dirs.sh;

writableTmpDirAsHomeHook = callPackage (
{ makeSetupHook }:
makeSetupHook {
name = "writable-tmpdir-as-home-hook";
} ../build-support/setup-hooks/writable-tmpdir-as-home.sh
) { };

useOldCXXAbi = makeSetupHook {
name = "use-old-cxx-abi-hook";
} ../build-support/setup-hooks/use-old-cxx-abi.sh;
Expand Down

0 comments on commit 1a6ea00

Please sign in to comment.