* Use named pipes explicitly instead of through bash's process
substitution feature (which appears to be buggy - there's no way to wait for an output redirection, and bash sometimes appears to die due to subtle timing conditions). This also removes the most egregious dependency on bash. svn path=/nixpkgs/trunk/; revision=1258
This commit is contained in:
parent
2ec94563bc
commit
f7035ee5ca
6 changed files with 21 additions and 54 deletions
|
@ -1,19 +0,0 @@
|
|||
{stdenv, genericStdenv, gccWrapper}:
|
||||
|
||||
genericStdenv {
|
||||
name = "stdenv-darwin";
|
||||
preHook = ./prehook.sh;
|
||||
initialPath = "/usr/local /usr /";
|
||||
|
||||
inherit stdenv;
|
||||
|
||||
gcc = gccWrapper {
|
||||
name = "gcc-darwin";
|
||||
nativeTools = true;
|
||||
nativeGlibc = true;
|
||||
nativePrefix = "/usr";
|
||||
inherit stdenv;
|
||||
};
|
||||
|
||||
shell = "/bin/bash";
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
export NIX_ENFORCE_PURITY=
|
||||
export NIX_DONT_SET_RPATH=1
|
||||
export NIX_NO_SELF_RPATH=1
|
||||
dontFixLibtool=1
|
||||
NIX_STRIP_DEBUG=0
|
||||
echo XXX $NIX_DONT_SET_RPATH
|
|
@ -203,19 +203,24 @@ ensureDir() {
|
|||
}
|
||||
|
||||
|
||||
# Redirect stdout/stderr to a `tee' process that writes the specified
|
||||
# file (and also to our original stdout). This requires bash. The
|
||||
# original stdout is saved in descriptor 3.
|
||||
# Redirect stdout/stderr to a named pipe connected to a `tee' process
|
||||
# that writes the specified file (and also to our original stdout).
|
||||
# The original stdout is saved in descriptor 3.
|
||||
startLog() {
|
||||
local logFile=${logNr}_$1
|
||||
logNr=$((logNr + 1))
|
||||
if test "$logPhases" = 1; then
|
||||
ensureDir $logDir
|
||||
|
||||
exec 3>&1
|
||||
|
||||
if test "$dontLogThroughTee" != 1; then
|
||||
# Put this in an `eval' so that non-bash shells (or bash
|
||||
# invoked as `sh') won't choke on parsing this file.
|
||||
eval "exec > >(tee $logDir/$logFile) 2>&1"
|
||||
# This required named pipes (fifos).
|
||||
logFifo=$NIX_BUILD_TOP/log_fifo
|
||||
test -p $logFifo || mkfifo $logFifo
|
||||
tee $logDir/$logFile < $logFifo &
|
||||
logTeePid=$!
|
||||
exec > $logFifo 2>&1
|
||||
else
|
||||
exec > $logDir/$logFile 2>&1
|
||||
fi
|
||||
|
@ -232,6 +237,14 @@ logNr=0
|
|||
stopLog() {
|
||||
if test "$logPhases" = 1; then
|
||||
exec >&3 2>&1
|
||||
|
||||
# Wait until the tee process has died. Otherwise output from
|
||||
# different phases may be mixed up.
|
||||
if test -n "$logTeePid"; then
|
||||
wait $logTeePid
|
||||
logTeePid=
|
||||
rm $logFifo
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
{stdenv, glibc, pkgs, genericStdenv, gccWrapper}:
|
||||
|
||||
genericStdenv {
|
||||
name = "stdenv-nix-linux";
|
||||
preHook = ./prehook.sh;
|
||||
initialPath = (import ../nix/path.nix) {pkgs = pkgs;};
|
||||
|
||||
inherit stdenv;
|
||||
|
||||
gcc = gccWrapper {
|
||||
name = pkgs.gcc.name;
|
||||
nativeTools = false;
|
||||
nativeGlibc = false;
|
||||
inherit (pkgs) gcc binutils;
|
||||
inherit stdenv glibc;
|
||||
shell = pkgs.bash ~ /bin/sh;
|
||||
};
|
||||
|
||||
shell = pkgs.bash ~ /bin/bash;
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
export NIX_ENFORCE_PURITY=1
|
|
@ -150,7 +150,7 @@
|
|||
|
||||
|
||||
# Testing the new stdenv-linux (TODO: remove this eventually).
|
||||
stdenvLinuxTest = (import ../stdenv/nix-linux-branch) {
|
||||
stdenvLinuxTest = (import ../stdenv/nix-linux) {
|
||||
stdenv = stdenvLinuxBoot2;
|
||||
pkgs = stdenvLinuxBoot2Pkgs;
|
||||
glibc = stdenvLinuxGlibc;
|
||||
|
@ -158,7 +158,7 @@
|
|||
inherit gccWrapper;
|
||||
};
|
||||
|
||||
stdenvDarwinTest = (import ../stdenv/darwin-branch) {
|
||||
stdenvDarwinTest = (import ../stdenv/darwin) {
|
||||
stdenv = stdenvInitial;
|
||||
genericStdenv = import ../stdenv/generic-branch;
|
||||
inherit gccWrapper;
|
||||
|
|
Loading…
Reference in a new issue