* Don't use the "replace-literal" command in stdenv; instead use
bash's pattern replacement feature. "replace-literal" is an
uncommon command so it was a headache during the bootstrap.
···1617mkdir $out
1819-# Can't use substitute() here, because replace may not have been
20-# built yet (in the bootstrap).
21sed \
22 -e "s^@preHook@^$_preHook^g" \
23 -e "s^@postHook@^$_postHook^g" \
···315 local output="$2"
316317 local -a params=("$@")
318- local -a args=()
319320 local n p pattern replacement varName
00321322 for ((n = 2; n < ${#params[*]}; n += 1)); do
323 p=${params[$n]}
324325- if test "$p" = "--replace"; then
326 pattern="${params[$((n + 1))]}"
327 replacement="${params[$((n + 2))]}"
328 n=$((n + 2))
329 fi
330331- if test "$p" = "--subst-var"; then
332 varName="${params[$((n + 1))]}"
333 pattern="@$varName@"
334 replacement="${!varName}"
335 n=$((n + 1))
336 fi
337338- if test "$p" = "--subst-var-by"; then
339 pattern="@${params[$((n + 1))]}@"
340 replacement="${params[$((n + 2))]}"
341 n=$((n + 2))
342 fi
343344- if test ${#args[@]} != 0; then
345- args[${#args[@]}]="-a"
346- fi
347- args[${#args[@]}]="$pattern"
348- args[${#args[@]}]="$replacement"
349 done
350351- replace-literal -e -s -- "${args[@]}" < "$input" > "$output".tmp
352- if test -x "$output"; then
353- chmod +x "$output".tmp
354- fi
355 mv -f "$output".tmp "$output"
356}
357
···315 local output="$2"
316317 local -a params=("$@")
0318319 local n p pattern replacement varName
320+321+ local content="$(cat $input)"
322323 for ((n = 2; n < ${#params[*]}; n += 1)); do
324 p=${params[$n]}
325326+ if [ "$p" = --replace ]; then
327 pattern="${params[$((n + 1))]}"
328 replacement="${params[$((n + 2))]}"
329 n=$((n + 2))
330 fi
331332+ if [ "$p" = --subst-var ]; then
333 varName="${params[$((n + 1))]}"
334 pattern="@$varName@"
335 replacement="${!varName}"
336 n=$((n + 1))
337 fi
338339+ if [ "$p" = --subst-var-by ]; then
340 pattern="@${params[$((n + 1))]}@"
341 replacement="${params[$((n + 2))]}"
342 n=$((n + 2))
343 fi
344345+ content="${content//"$pattern"/$replacement}"
0000346 done
347348+ # !!! This doesn't work properly if $content is "-n".
349+ echo -n "$content" > "$output".tmp
350+ if [ -x "$output" ]; then chmod +x "$output".tmp; fi
0351 mv -f "$output".tmp "$output"
352}
353