Skip to content

Commit

Permalink
stdenv setup.sh: revert most of changes around #14907
Browse files Browse the repository at this point in the history
I'm giving this up. Feel free to find some reasonable variant that works
at least on Linux and Darwin. Problems encountered:
- During bootstrap of Darwin stdenv `env -0` and some bash features
  don't work.
- Without `env -0` the contents of some multi-line phases is taken as
  variable declarations, which wouldn't typically matter, but the PR
  wanted to refuse bash-invalid names which would be occasionally
  triggered. This commit dowgrades that to a warning with explanation.
  • Loading branch information
vcunat committed May 12, 2016
1 parent 6521529 commit 81df035
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions pkgs/stdenv/generic/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -408,14 +408,16 @@ substitute() {

if [ "$p" = --subst-var ]; then
varName="${params[$((n + 1))]}"
n=$((n + 1))
# check if the used nix attribute name is a valid bash name
if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
echo "substitution variables must be valid bash names, \"$varName\" isn't."
exit 1;
echo "WARNING: substitution variables should be valid bash names,"
echo " \"$varName\" isn't and therefore was skipped; it might be caused"
echo " by multi-line phases in variables - see #14907 for details."
continue
fi
pattern="@$varName@"
replacement="${!varName}"
n=$((n + 1))
fi

if [ "$p" = --subst-var-by ]; then
Expand Down Expand Up @@ -447,19 +449,14 @@ substituteAll() {
local output="$2"
local -a args=()

# We need to be careful due to vars with multi-line contents or weird names.
local IFS==
local varNames="$(env -0 | cut -z -d= -f1 | grep -z -v '^[_A-Z]' | tr '\000' '=')"
local varName
for varName in $varNames; do
# Select all environment variables that start with a lowercase character.
for varName in $(env | sed -e $'s/^\([a-z][^= \t]*\)=.*/\\1/; t \n d'); do
if [ "$NIX_DEBUG" = "1" ]; then
echo "@${varName}@ -> '${!varName}'"
fi
args+=("--subst-var" "$varName")
done

# restore default $IFS for the child
IFS=$' \t\n'
substitute "$input" "$output" "${args[@]}"
}

Expand Down

0 comments on commit 81df035

Please sign in to comment.