Merge pull request #40139 from obsidiansystems/modular-setup-hooks
treewide: Modular setup hooks
This commit is contained in:
commit
4f7cdd35d5
@ -12,16 +12,7 @@ var_templates_bool=(
|
|||||||
NIX+DONT_SET_RPATH
|
NIX+DONT_SET_RPATH
|
||||||
)
|
)
|
||||||
|
|
||||||
declare -a role_infixes=()
|
accumulateRoles
|
||||||
if [ "${NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_BUILD:-}" ]; then
|
|
||||||
role_infixes+=(_BUILD_)
|
|
||||||
fi
|
|
||||||
if [ "${NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_HOST:-}" ]; then
|
|
||||||
role_infixes+=(_)
|
|
||||||
fi
|
|
||||||
if [ "${NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_TARGET:-}" ]; then
|
|
||||||
role_infixes+=(_TARGET_)
|
|
||||||
fi
|
|
||||||
|
|
||||||
for var in "${var_templates_list[@]}"; do
|
for var in "${var_templates_list[@]}"; do
|
||||||
mangleVarList "$var" ${role_infixes[@]+"${role_infixes[@]}"}
|
mangleVarList "$var" ${role_infixes[@]+"${role_infixes[@]}"}
|
||||||
|
@ -190,7 +190,12 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
depsTargetTargetPropagated = extraPackages;
|
depsTargetTargetPropagated = extraPackages;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
wrapperName = "BINTOOLS_WRAPPER";
|
||||||
|
|
||||||
|
setupHooks = [
|
||||||
|
../setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
postFixup =
|
postFixup =
|
||||||
''
|
''
|
||||||
@ -289,7 +294,7 @@ stdenv.mkDerivation {
|
|||||||
set +u
|
set +u
|
||||||
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
|
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
|
||||||
substituteAll ${./add-hardening.sh} $out/nix-support/add-hardening.sh
|
substituteAll ${./add-hardening.sh} $out/nix-support/add-hardening.sh
|
||||||
substituteAll ${../cc-wrapper/utils.sh} $out/nix-support/utils.sh
|
substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash
|
||||||
|
|
||||||
##
|
##
|
||||||
## Extra custom steps
|
## Extra custom steps
|
||||||
@ -300,7 +305,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
inherit dynamicLinker expand-response-params;
|
inherit dynamicLinker expand-response-params;
|
||||||
|
|
||||||
# for substitution in utils.sh
|
# for substitution in utils.bash
|
||||||
expandResponseParams = "${expand-response-params}/bin/expand-response-params";
|
expandResponseParams = "${expand-response-params}/bin/expand-response-params";
|
||||||
|
|
||||||
meta =
|
meta =
|
||||||
|
@ -14,7 +14,7 @@ if [ -n "@coreutils_bin@" ]; then
|
|||||||
PATH="@coreutils_bin@/bin"
|
PATH="@coreutils_bin@/bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source @out@/nix-support/utils.sh
|
source @out@/nix-support/utils.bash
|
||||||
|
|
||||||
if [ -z "${NIX_BINTOOLS_WRAPPER_@infixSalt@_FLAGS_SET:-}" ]; then
|
if [ -z "${NIX_BINTOOLS_WRAPPER_@infixSalt@_FLAGS_SET:-}" ]; then
|
||||||
source @out@/nix-support/add-flags.sh
|
source @out@/nix-support/add-flags.sh
|
||||||
|
@ -11,44 +11,22 @@ set -u
|
|||||||
[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0
|
[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0
|
||||||
|
|
||||||
bintoolsWrapper_addLDVars () {
|
bintoolsWrapper_addLDVars () {
|
||||||
case $depHostOffset in
|
# See ../setup-hooks/role.bash
|
||||||
-1) local role='BUILD_' ;;
|
local role_post role_pre
|
||||||
0) local role='' ;;
|
getTargetRoleEnvHook
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "bintools-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then
|
if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then
|
||||||
export NIX_${role}LDFLAGS+=" -L$1/lib64"
|
export NIX_${role_pre}LDFLAGS+=" -L$1/lib64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -d "$1/lib" ]]; then
|
if [[ -d "$1/lib" ]]; then
|
||||||
export NIX_${role}LDFLAGS+=" -L$1/lib"
|
export NIX_${role_pre}LDFLAGS+=" -L$1/lib"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
case $targetOffset in
|
# See ../setup-hooks/role.bash
|
||||||
-1)
|
getTargetRole
|
||||||
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_BUILD=1
|
getTargetRoleWrapper
|
||||||
role_pre='BUILD_'
|
|
||||||
role_post='_FOR_BUILD'
|
|
||||||
;;
|
|
||||||
0)
|
|
||||||
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_HOST=1
|
|
||||||
role_pre=''
|
|
||||||
role_post=''
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_TARGET=1
|
|
||||||
role_pre='TARGET_'
|
|
||||||
role_post='_FOR_TARGET'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "cc-wrapper: used as improper sort of dependency" >2;
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
addEnvHooks "$targetOffset" bintoolsWrapper_addLDVars
|
addEnvHooks "$targetOffset" bintoolsWrapper_addLDVars
|
||||||
|
|
||||||
|
@ -14,18 +14,7 @@ var_templates_bool=(
|
|||||||
NIX+ENFORCE_NO_NATIVE
|
NIX+ENFORCE_NO_NATIVE
|
||||||
)
|
)
|
||||||
|
|
||||||
# Accumulate infixes for taking in the right input parameters. See setup-hook
|
accumulateRoles
|
||||||
# for details.
|
|
||||||
declare -a role_infixes=()
|
|
||||||
if [ "${NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD:-}" ]; then
|
|
||||||
role_infixes+=(_BUILD_)
|
|
||||||
fi
|
|
||||||
if [ "${NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST:-}" ]; then
|
|
||||||
role_infixes+=(_)
|
|
||||||
fi
|
|
||||||
if [ "${NIX_CC_WRAPPER_@infixSalt@_TARGET_TARGET:-}" ]; then
|
|
||||||
role_infixes+=(_TARGET_)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# We need to mangle names for hygiene, but also take parameters/overrides
|
# We need to mangle names for hygiene, but also take parameters/overrides
|
||||||
# from the environment.
|
# from the environment.
|
||||||
|
@ -15,7 +15,7 @@ if [[ -n "@coreutils_bin@" && -n "@gnugrep_bin@" ]]; then
|
|||||||
PATH="@coreutils_bin@/bin:@gnugrep_bin@/bin"
|
PATH="@coreutils_bin@/bin:@gnugrep_bin@/bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source @out@/nix-support/utils.sh
|
source @out@/nix-support/utils.bash
|
||||||
|
|
||||||
# Flirting with a layer violation here.
|
# Flirting with a layer violation here.
|
||||||
if [ -z "${NIX_BINTOOLS_WRAPPER_@infixSalt@_FLAGS_SET:-}" ]; then
|
if [ -z "${NIX_BINTOOLS_WRAPPER_@infixSalt@_FLAGS_SET:-}" ]; then
|
||||||
|
@ -191,7 +191,12 @@ stdenv.mkDerivation {
|
|||||||
propagatedBuildInputs = [ bintools ];
|
propagatedBuildInputs = [ bintools ];
|
||||||
depsTargetTargetPropagated = extraPackages;
|
depsTargetTargetPropagated = extraPackages;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
wrapperName = "CC_WRAPPER";
|
||||||
|
|
||||||
|
setupHooks = [
|
||||||
|
../setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
postFixup =
|
postFixup =
|
||||||
''
|
''
|
||||||
@ -277,7 +282,7 @@ stdenv.mkDerivation {
|
|||||||
+ ''
|
+ ''
|
||||||
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
|
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
|
||||||
substituteAll ${./add-hardening.sh} $out/nix-support/add-hardening.sh
|
substituteAll ${./add-hardening.sh} $out/nix-support/add-hardening.sh
|
||||||
substituteAll ${./utils.sh} $out/nix-support/utils.sh
|
substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash
|
||||||
|
|
||||||
##
|
##
|
||||||
## Extra custom steps
|
## Extra custom steps
|
||||||
@ -288,7 +293,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
inherit expand-response-params;
|
inherit expand-response-params;
|
||||||
|
|
||||||
# for substitution in utils.sh
|
# for substitution in utils.bash
|
||||||
expandResponseParams = "${expand-response-params}/bin/expand-response-params";
|
expandResponseParams = "${expand-response-params}/bin/expand-response-params";
|
||||||
|
|
||||||
meta =
|
meta =
|
||||||
|
@ -66,55 +66,22 @@ set -u
|
|||||||
# over no state, and there's no @-substitutions within, so any redefined
|
# over no state, and there's no @-substitutions within, so any redefined
|
||||||
# function is guaranteed to be exactly the same.
|
# function is guaranteed to be exactly the same.
|
||||||
ccWrapper_addCVars () {
|
ccWrapper_addCVars () {
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
# See ../setup-hooks/role.bash
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
local role_post role_pre
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
getTargetRoleEnvHook
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [[ -d "$1/include" ]]; then
|
if [[ -d "$1/include" ]]; then
|
||||||
export NIX_${role}CFLAGS_COMPILE+=" ${ccIncludeFlag:--isystem} $1/include"
|
export NIX_${role_pre}CFLAGS_COMPILE+=" ${ccIncludeFlag:--isystem} $1/include"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -d "$1/Library/Frameworks" ]]; then
|
if [[ -d "$1/Library/Frameworks" ]]; then
|
||||||
export NIX_${role}CFLAGS_COMPILE+=" -F$1/Library/Frameworks"
|
export NIX_${role_pre}CFLAGS_COMPILE+=" -F$1/Library/Frameworks"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Since the same cc-wrapper derivation can be depend on in multiple ways, we
|
# See ../setup-hooks/role.bash
|
||||||
# need to accumulate *each* role (i.e. target platform relative the depending
|
getTargetRole
|
||||||
# derivation) in which the cc-wrapper derivation is used.
|
getTargetRoleWrapper
|
||||||
# `NIX_CC_WRAPPER_@infixSalt@_TARGET_*` tracks this (needs to be an exported env
|
|
||||||
# var so can't use fancier data structures).
|
|
||||||
#
|
|
||||||
# We also need to worry about what role is being added on *this* invocation of
|
|
||||||
# setup-hook, which `role` tracks.
|
|
||||||
case $targetOffset in
|
|
||||||
-1)
|
|
||||||
export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1
|
|
||||||
role_pre='BUILD_'
|
|
||||||
role_post='_FOR_BUILD'
|
|
||||||
;;
|
|
||||||
0)
|
|
||||||
export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1
|
|
||||||
role_pre=''
|
|
||||||
role_post=''
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
export NIX_CC_WRAPPER_@infixSalt@_TARGET_TARGET=1
|
|
||||||
role_pre='TARGET_'
|
|
||||||
role_post='_FOR_TARGET'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "cc-wrapper: used as improper sort of dependency" >2;
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# We use the `targetOffset` to choose the right env hook to accumulate the right
|
# We use the `targetOffset` to choose the right env hook to accumulate the right
|
||||||
# sort of deps (those with that offset).
|
# sort of deps (those with that offset).
|
||||||
|
75
pkgs/build-support/setup-hooks/role.bash
Normal file
75
pkgs/build-support/setup-hooks/role.bash
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# Since the same derivation can be depend on in multiple ways, we need to
|
||||||
|
# accumulate *each* role (i.e. host and target platforms relative the depending
|
||||||
|
# derivation) in which the derivation is used.
|
||||||
|
#
|
||||||
|
# The role is intened to be use as part of other variables names like
|
||||||
|
# - $NIX_${role_pre}_SOMETHING
|
||||||
|
# - $NIX_SOMETHING_${role_post}
|
||||||
|
|
||||||
|
function getRole() {
|
||||||
|
case $1 in
|
||||||
|
-1)
|
||||||
|
role_pre='BUILD_'
|
||||||
|
role_post='_FOR_BUILD'
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
role_pre=''
|
||||||
|
role_post=''
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
role_pre='TARGET_'
|
||||||
|
role_post='_FOR_TARGET'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "@name@: used as improper sort of dependency" >2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# `hostOffset` describes how the host platform of the package is slid relative
|
||||||
|
# to the depending package. `targetOffset` likewise describes the target
|
||||||
|
# platform of the package. Both are brought into scope of the setup hook defined
|
||||||
|
# for dependency whose setup hook is being processed relative to the package
|
||||||
|
# being built.
|
||||||
|
|
||||||
|
function getHostRole() {
|
||||||
|
getRole "$hostOffset"
|
||||||
|
}
|
||||||
|
function getTargetRole() {
|
||||||
|
getRole "$targetOffset"
|
||||||
|
}
|
||||||
|
|
||||||
|
# `depHostOffset` describes how the host platform of the dependencies are slid
|
||||||
|
# relative to the depending package. `depTargetOffset` likewise describes the
|
||||||
|
# target platform of dependenices. Both are brought into scope of the
|
||||||
|
# environment hook defined for the dependency being applied relative to the
|
||||||
|
# package being built.
|
||||||
|
|
||||||
|
function getHostRoleEnvHook() {
|
||||||
|
getRole "$depHostOffset"
|
||||||
|
}
|
||||||
|
function getTargetRoleEnvHook() {
|
||||||
|
getRole "$depTargetOffset"
|
||||||
|
}
|
||||||
|
|
||||||
|
# This variant is inteneded specifically for code-prodocing tool wrapper scripts
|
||||||
|
# `NIX_@wrapperName@_@infixSalt@_TARGET_*` tracks this (needs to be an exported
|
||||||
|
# env var so can't use fancier data structures).
|
||||||
|
function getTargetRoleWrapper() {
|
||||||
|
case $targetOffset in
|
||||||
|
-1)
|
||||||
|
export NIX_@wrapperName@_@infixSalt@_TARGET_BUILD=1
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
export NIX_@wrapperName@_@infixSalt@_TARGET_HOST=1
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
export NIX_@wrapperName@_@infixSalt@_TARGET_TARGET=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "@name@: used as improper sort of dependency" >2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
@ -1,3 +1,18 @@
|
|||||||
|
# Accumulate infixes for taking in the right input parameters with the `mangle*`
|
||||||
|
# functions below. See setup-hook for details.
|
||||||
|
accumulateRoles() {
|
||||||
|
declare -ga role_infixes=()
|
||||||
|
if [ "${NIX_@wrapperName@_@infixSalt@_TARGET_BUILD:-}" ]; then
|
||||||
|
role_infixes+=(_BUILD_)
|
||||||
|
fi
|
||||||
|
if [ "${NIX_@wrapperName@_@infixSalt@_TARGET_HOST:-}" ]; then
|
||||||
|
role_infixes+=(_)
|
||||||
|
fi
|
||||||
|
if [ "${NIX_@wrapperName@_@infixSalt@_TARGET_TARGET:-}" ]; then
|
||||||
|
role_infixes+=(_TARGET_)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
mangleVarList() {
|
mangleVarList() {
|
||||||
local var="$1"
|
local var="$1"
|
||||||
shift
|
shift
|
@ -1,13 +1,5 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies are slid
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem $(echo -n @gcc@/include/c++/*) -isystem $(echo -n @gcc@/include/c++/*)/$(@gcc@/bin/gcc -dumpmachine)"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem $(echo -n @gcc@/include/c++/*) -isystem $(echo -n @gcc@/include/c++/*)/$(@gcc@/bin/gcc -dumpmachine)"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libstdc++"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libstdc++"
|
||||||
|
@ -39,7 +39,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies are slid
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -33,7 +33,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies are slid
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -31,7 +31,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -31,7 +31,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -44,7 +44,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -40,7 +40,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -40,7 +40,10 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
linkCxxAbi = stdenv.isLinux;
|
linkCxxAbi = stdenv.isLinux;
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://libcxx.llvm.org/;
|
homepage = http://libcxx.llvm.org/;
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
# The `hostOffset` describes how the host platform of the dependencies
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# relative to the depending package. It is brought into scope of the setup hook
|
getHostRole
|
||||||
# defined as the role of the dependency whose hooks is being run.
|
|
||||||
case $hostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
linkCxxAbi="@linkCxxAbi@"
|
linkCxxAbi="@linkCxxAbi@"
|
||||||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1"
|
||||||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
|
||||||
|
@ -48,7 +48,10 @@ stdenv.mkDerivation rec {
|
|||||||
# HACK, see #10874 (and 14664)
|
# HACK, see #10874 (and 14664)
|
||||||
buildInputs = stdenv.lib.optional (!stdenv.isLinux && !hostPlatform.isCygwin) libiconv;
|
buildInputs = stdenv.lib.optional (!stdenv.isLinux && !hostPlatform.isCygwin) libiconv;
|
||||||
|
|
||||||
setupHook = ./gettext-setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../build-support/setup-hooks/role.bash
|
||||||
|
./gettext-setup-hook.sh
|
||||||
|
];
|
||||||
gettextNeedsLdflags = hostPlatform.libc != "glibc" && !hostPlatform.isMusl;
|
gettextNeedsLdflags = hostPlatform.libc != "glibc" && !hostPlatform.isMusl;
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
gettextDataDirsHook() {
|
gettextDataDirsHook() {
|
||||||
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
|
getHostRoleEnvHook
|
||||||
if [ -d "$1/share/gettext" ]; then
|
if [ -d "$1/share/gettext" ]; then
|
||||||
addToSearchPath GETTEXTDATADIRS "$1/share/gettext"
|
addToSearchPath "GETTEXTDATADIRS${role_post}" "$1/share/gettext"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8,21 +10,8 @@ addEnvHooks "$hostOffset" gettextDataDirsHook
|
|||||||
|
|
||||||
# libintl must be listed in load flags on non-Glibc
|
# libintl must be listed in load flags on non-Glibc
|
||||||
# it doesn't hurt to have it in Glibc either though
|
# it doesn't hurt to have it in Glibc either though
|
||||||
gettextLdflags() {
|
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}LDFLAGS+=" -lintl"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ ! -z "@gettextNeedsLdflags@" ]; then
|
if [ ! -z "@gettextNeedsLdflags@" ]; then
|
||||||
addEnvHooks "$hostOffset" gettextLdflags
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
|
getHostRole
|
||||||
|
export NIX_${role_pre}LDFLAGS+=" -lintl"
|
||||||
fi
|
fi
|
||||||
|
@ -14,7 +14,10 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc";
|
sha256 = "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc";
|
||||||
};
|
};
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../build-support/setup-hooks/role.bash
|
||||||
|
./setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
postPatch =
|
postPatch =
|
||||||
lib.optionalString ((hostPlatform != buildPlatform && hostPlatform.libc == "msvcrt") || stdenv.cc.nativeLibc)
|
lib.optionalString ((hostPlatform != buildPlatform && hostPlatform.libc == "msvcrt") || stdenv.cc.nativeLibc)
|
||||||
|
@ -1,18 +1,6 @@
|
|||||||
# libiconv must be listed in load flags on non-Glibc
|
# libiconv must be listed in load flags on non-Glibc
|
||||||
# it doesn't hurt to have it in Glibc either though
|
# it doesn't hurt to have it in Glibc either though
|
||||||
iconvLdflags() {
|
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}LDFLAGS+=" -liconv"
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
}
|
getHostRole
|
||||||
|
export NIX_${role_pre}LDFLAGS+=" -liconv"
|
||||||
addEnvHooks "$hostOffset" iconvLdflags
|
|
||||||
|
@ -1,18 +1,6 @@
|
|||||||
setupCompatFlags() {
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
getHostRole
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}LDFLAGS+=" -lnbcompat"
|
export NIX_${role_pre}LDFLAGS+=" -lnbcompat"
|
||||||
export NIX_${role}CFLAGS_COMPILE+=" -DHAVE_NBTOOL_CONFIG_H"
|
export NIX_${role_pre}CFLAGS_COMPILE+=" -DHAVE_NBTOOL_CONFIG_H"
|
||||||
export NIX_${role}CFLAGS_COMPILE+=" -include nbtool_config.h"
|
export NIX_${role_pre}CFLAGS_COMPILE+=" -include nbtool_config.h"
|
||||||
}
|
|
||||||
|
|
||||||
addEnvHooks "$hostOffset" setupCompatFlags
|
|
||||||
|
@ -167,7 +167,10 @@ let
|
|||||||
sha256 = "17phkfafybxwhzng44k5bhmag6i55br53ky1nwcmw583kg2fa86z";
|
sha256 = "17phkfafybxwhzng44k5bhmag6i55br53ky1nwcmw583kg2fa86z";
|
||||||
version = "7.1.2";
|
version = "7.1.2";
|
||||||
|
|
||||||
setupHook = ./compat-setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../build-support/setup-hooks/role.bash
|
||||||
|
./compat-setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
# override defaults to prevent infinite recursion
|
# override defaults to prevent infinite recursion
|
||||||
nativeBuildInputs = [ makeMinimal ];
|
nativeBuildInputs = [ makeMinimal ];
|
||||||
@ -270,7 +273,10 @@ let
|
|||||||
|
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
setupHook = ./fts-setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../build-support/setup-hooks/role.bash
|
||||||
|
./fts-setup-hook.sh
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
stat = netBSDDerivation {
|
stat = netBSDDerivation {
|
||||||
|
@ -1,16 +1,4 @@
|
|||||||
ftsLdflags() {
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
getHostRole
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}LDFLAGS+=" -lfts"
|
export NIX_${role_pre}LDFLAGS+=" -lfts"
|
||||||
}
|
|
||||||
|
|
||||||
addEnvHooks "$hostOffset" ftsLdflags
|
|
||||||
|
@ -1,17 +1,4 @@
|
|||||||
ftsLdflags() {
|
# See pkgs/build-support/setup-hooks/role.bash
|
||||||
# The `depHostOffset` describes how the host platform of the dependencies
|
getHostRole
|
||||||
# are slid relative to the depending package. It is brought into scope of
|
|
||||||
# the environment hook defined as the role of the dependency being applied.
|
|
||||||
case $depHostOffset in
|
|
||||||
-1) local role='BUILD_' ;;
|
|
||||||
0) local role='' ;;
|
|
||||||
1) local role='TARGET_' ;;
|
|
||||||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
|
|
||||||
return 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export NIX_${role}LDFLAGS+=" -lfts"
|
|
||||||
}
|
|
||||||
|
|
||||||
addEnvHooks "$hostOffset" ftsLdflags
|
|
||||||
|
|
||||||
|
export NIX_${role_pre}LDFLAGS+=" -lfts"
|
||||||
|
@ -12,5 +12,8 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
||||||
|
|
||||||
setupHook = ./fts-setup-hook.sh;
|
setupHooks = [
|
||||||
|
../../../build-support/setup-hooks/role.bash
|
||||||
|
./fts-setup-hook.sh
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
@ -641,22 +641,9 @@ fi
|
|||||||
# Textual substitution functions.
|
# Textual substitution functions.
|
||||||
|
|
||||||
|
|
||||||
substitute() {
|
substituteStream() {
|
||||||
local input="$1"
|
local var=$1
|
||||||
local output="$2"
|
shift
|
||||||
shift 2
|
|
||||||
|
|
||||||
if [ ! -f "$input" ]; then
|
|
||||||
echo "substitute(): ERROR: file '$input' does not exist" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local content
|
|
||||||
# read returns non-0 on EOF, so we want read to fail
|
|
||||||
if IFS='' read -r -N 0 content < "$input"; then
|
|
||||||
echo "substitute(): ERROR: File \"$input\" has null bytes, won't process" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
while (( "$#" )); do
|
while (( "$#" )); do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@ -671,7 +658,7 @@ substitute() {
|
|||||||
shift 2
|
shift 2
|
||||||
# check if the used nix attribute name is a valid bash name
|
# check if the used nix attribute name is a valid bash name
|
||||||
if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
||||||
echo "substitute(): ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." >&2
|
echo "substituteStream(): ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
pattern="@$varName@"
|
pattern="@$varName@"
|
||||||
@ -685,18 +672,41 @@ substitute() {
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "substitute(): ERROR: Invalid command line argument: $1" >&2
|
echo "substituteStream(): ERROR: Invalid command line argument: $1" >&2
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
content="${content//"$pattern"/$replacement}"
|
eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -e "$output" ]; then chmod +w "$output"; fi
|
printf "%s" "${!var}"
|
||||||
printf "%s" "$content" > "$output"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
consumeEntire() {
|
||||||
|
# read returns non-0 on EOF, so we want read to fail
|
||||||
|
if IFS='' read -r -N 0 $1; then
|
||||||
|
echo "consumeEntire(): ERROR: Input null bytes, won't process" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
substitute() {
|
||||||
|
local input="$1"
|
||||||
|
local output="$2"
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
if [ ! -f "$input" ]; then
|
||||||
|
echo "substitute(): ERROR: file '$input' does not exist" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local content
|
||||||
|
consumeEntire content < "$input"
|
||||||
|
|
||||||
|
if [ -e "$output" ]; then chmod +w "$output"; fi
|
||||||
|
substituteStream content "$@" > "$output"
|
||||||
|
}
|
||||||
|
|
||||||
substituteInPlace() {
|
substituteInPlace() {
|
||||||
local fileName="$1"
|
local fileName="$1"
|
||||||
@ -704,20 +714,30 @@ substituteInPlace() {
|
|||||||
substitute "$fileName" "$fileName" "$@"
|
substitute "$fileName" "$fileName" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_allFlags() {
|
||||||
# Substitute all environment variables that start with a lowercase character and
|
|
||||||
# are valid Bash names.
|
|
||||||
substituteAll() {
|
|
||||||
local input="$1"
|
|
||||||
local output="$2"
|
|
||||||
local -a args=()
|
|
||||||
|
|
||||||
for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); do
|
for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); do
|
||||||
if (( "${NIX_DEBUG:-0}" >= 1 )); then
|
if (( "${NIX_DEBUG:-0}" >= 1 )); then
|
||||||
printf "@%s@ -> %q\n" "${varName}" "${!varName}"
|
printf "@%s@ -> %q\n" "${varName}" "${!varName}"
|
||||||
fi
|
fi
|
||||||
args+=("--subst-var" "$varName")
|
args+=("--subst-var" "$varName")
|
||||||
done
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
substituteAllStream() {
|
||||||
|
local -a args=()
|
||||||
|
_allFlags
|
||||||
|
|
||||||
|
substituteStream "$1" "${args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Substitute all environment variables that start with a lowercase character and
|
||||||
|
# are valid Bash names.
|
||||||
|
substituteAll() {
|
||||||
|
local input="$1"
|
||||||
|
local output="$2"
|
||||||
|
|
||||||
|
local -a args=()
|
||||||
|
_allFlags
|
||||||
|
|
||||||
substitute "$input" "$output" "${args[@]}"
|
substitute "$input" "$output" "${args[@]}"
|
||||||
}
|
}
|
||||||
@ -1111,6 +1131,19 @@ fixupPhase() {
|
|||||||
substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"
|
substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# TODO(@Ericson2314): Remove after https://github.com/NixOS/nixpkgs/pull/31414
|
||||||
|
if [ -n "${setupHooks:-}" ]; then
|
||||||
|
mkdir -p "${!outputDev}/nix-support"
|
||||||
|
local hook
|
||||||
|
for hook in $setupHooks; do
|
||||||
|
local content
|
||||||
|
consumeEntire content < "$hook"
|
||||||
|
substituteAllStream content >> "${!outputDev}/nix-support/setup-hook"
|
||||||
|
unset -v content
|
||||||
|
done
|
||||||
|
unset -v hook
|
||||||
|
fi
|
||||||
|
|
||||||
# Propagate user-env packages into the output with binaries, TODO?
|
# Propagate user-env packages into the output with binaries, TODO?
|
||||||
|
|
||||||
if [ -n "${propagatedUserEnvPkgs:-}" ]; then
|
if [ -n "${propagatedUserEnvPkgs:-}" ]; then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user