Message ID | 1400861244-15972-1-git-send-email-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
23.05.2014 20:07, Peter Maydell wrote: > When libtool support was added to configure, the new temporary files > were left out of the list of files cleaned up on exit; this results > in a lot of stale .lo files being left around in /tmp. Worse, libtool > creates a /tmp/.libs directory which we can't easily clean up. > > Put all our temporary files in a single temporary directory created > as a subdirectory of the build directory, so we can easily clean it up, > and don't need fragile or complicated code for creation to avoid it > clashing with temporary directories from other instances of QEMU > configure or being subject to attack from adversaries who can write > to /tmp. > > Since the temporaries now live in the build tree, we have no > need to jump through hoops with a trap handler to try to remove > them when configure exits; this fixes some weird bugs where hitting > ^C during a configure run wouldn't actually make it stop, because > we would run the trap handler but then not stop. (It is possible > to get the trap handler semantics right but it is convoluted largely > because of bugs in dash, so it is simpler to just avoid it.) > > Note that "temporary files go in the build directory, not /tmp" is > the way autoconf behaves. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > Reviewed-by: Eric Blake <eblake@redhat.com> *ACK*. Applied to -trivial, thank you for doing this! /mjt
diff --git a/.gitignore b/.gitignore index 8a52709..c658613 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /config-host.* /config-target.* /config.status +/config-temp /trace/generated-tracers.h /trace/generated-tracers.c /trace/generated-tracers-dtrace.h diff --git a/configure b/configure index 605a0ec..e6f0d29 100755 --- a/configure +++ b/configure @@ -2,26 +2,28 @@ # # qemu configure script (c) 2003 Fabrice Bellard # -# set temporary file name -if test ! -z "$TMPDIR" ; then - TMPDIR1="${TMPDIR}" -elif test ! -z "$TEMPDIR" ; then - TMPDIR1="${TEMPDIR}" -else - TMPDIR1="/tmp" + +# Temporary directory used for files created while +# configure runs. Since it is in the build directory +# we can safely blow away any previous version of it +# (and we need not jump through hoops to try to delete +# it when configure exits.) +TMPDIR1="config-temp" +rm -rf "${TMPDIR1}" +mkdir -p "${TMPDIR1}" +if [ $? -ne 0 ]; then + echo "ERROR: failed to create temporary directory" + exit 1 fi -TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c" -TMPB="qemu-conf-${RANDOM}-$$-${RANDOM}" +TMPB="qemu-conf" +TMPC="${TMPDIR1}/${TMPB}.c" TMPO="${TMPDIR1}/${TMPB}.o" TMPCXX="${TMPDIR1}/${TMPB}.cxx" TMPL="${TMPDIR1}/${TMPB}.lo" TMPA="${TMPDIR1}/lib${TMPB}.la" -TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe" +TMPE="${TMPDIR1}/${TMPB}.exe" -# NB: do not call "exit" in the trap handler; this is buggy with some shells; -# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org> -trap "rm -f $TMPC $TMPO $TMPCXX $TMPE" EXIT INT QUIT TERM rm -f config.log # Print a helpful header at the top of config.log @@ -5219,3 +5221,4 @@ printf " '%s'" "$0" "$@" >>config.status echo >>config.status chmod +x config.status +rm -r "$TMPDIR1"