diff --git a/scripts/build-remote.pl.in b/scripts/build-remote.pl.in index 8e3da2553f..65c9009b3f 100755 --- a/scripts/build-remote.pl.in +++ b/scripts/build-remote.pl.in @@ -42,7 +42,7 @@ sub all { $_ || return 0 for @_; 1 } # Initialisation. my $loadIncreased = 0; -my ($localSystem, $maxSilentTime) = @ARGV; +my ($localSystem, $maxSilentTime, $printBuildTrace) = @ARGV; $maxSilentTime = 0 unless defined $maxSilentTime; my $currentLoad = $ENV{"NIX_CURRENT_LOAD"}; @@ -197,12 +197,15 @@ REQ: while (1) { # Tell Nix we've accepted the build. -print STDERR "building `$drvPath' on `$hostName'\n"; sendReply "accept"; my @inputs = split /\s/, readline(STDIN); my @outputs = split /\s/, readline(STDIN); +print STDERR "building `$drvPath' on `$hostName'\n"; +print STDERR "@ build-remote $drvPath $hostName\n" if $printBuildTrace; + + my $maybeSign = ""; $maybeSign = "--sign" if -e "/nix/etc/nix/signing-key.sec"; diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 30e37e4e9e..210486fbc2 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -678,7 +678,9 @@ HookInstance::HookInstance() throw SysError("dupping builder's stdout/stderr"); execl(buildHook.c_str(), buildHook.c_str(), thisSystem.c_str(), - (format("%1%") % maxSilentTime).str().c_str(), NULL); + (format("%1%") % maxSilentTime).str().c_str(), + (format("%1%") % printBuildTrace).str().c_str(), + NULL); throw SysError(format("executing `%1%'") % buildHook); @@ -1362,7 +1364,8 @@ HookReply DerivationGoal::tryBuildHook() reply = string(s, 2); break; } - handleChildOutput(worker.hook->fromHook.readSide, s + "\n"); + s += "\n"; + writeToStderr((unsigned char *) s.c_str(), s.size()); } debug(format("hook reply is `%1%'") % reply); @@ -2023,11 +2026,16 @@ void DerivationGoal::deleteTmpDir(bool force) void DerivationGoal::handleChildOutput(int fd, const string & data) { - if (verbosity >= buildVerbosity) - writeToStderr((unsigned char *) data.c_str(), data.size()); if ((hook && fd == hook->builderOut.readSide) || (!hook && fd == builderOut.readSide)) + { + if (verbosity >= buildVerbosity) + writeToStderr((unsigned char *) data.c_str(), data.size()); writeFull(fdLogFile, (unsigned char *) data.c_str(), data.size()); + } + + if (hook && fd == hook->fromHook.readSide) + writeToStderr((unsigned char *) data.c_str(), data.size()); }