On 04/26/12 08:31, Marc Espie wrote:
> On Wed, Apr 25, 2012 at 11:34:24PM -0400, Alan Corey wrote:
>> I've seen this before, I wonder if there's some environment variable
>> I can set to stop it?
>
> Nope.
>
>> I try make fetch on a port, it fails due to a bad site. I hit
>> Ctrl-C to stop it, it goes to the next site and downloads the file.
>> Then it deletes the file when it finishes. I type make install and
>> it tries the bad site again...
>
> That's the way make works. Don't hit ^C.
>
> Changing this is impossible, since make sees the ^C, being the controlling
> process and all.
Hmmm, but still, if the process is interrupted, it should not continue
processing the rest of them, if the result is to be discarded anyway.
I believe this comes from a few places where we trap a few signals,
including SIGINT, to perform various cleanup operations. Those should,
apart from the cleanup, also exit the process, like the default SIGINT
handler would.
In the diff below, I put the cleanup in the "EXIT signal handler",
while the rest of the trapped signals merely do 'exit 1', triggering
the EXIT handler, but exiting the process with a non-zero exit code.
Fixes (as in immediately exists, and performs the appropriate cleanup)
the OP's example. Also contains the same change to all the traps in the
ports makefiles, but I only tested the OP's case, as I'm not sure where
the other cases are used.
OK?
/Alexander
Index: bsd.port.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
retrieving revision 1.1164
diff -u -p -r1.1164 bsd.port.mk
--- bsd.port.mk 22 Apr 2012 10:39:48 -0000 1.1164
+++ bsd.port.mk 26 Apr 2012 22:28:00 -0000
@@ -1528,7 +1528,9 @@ _DO_LOCK = \
. endfor
_SIMPLE_LOCK = \
- ${_LOCK}; locked=true; trap 'if $$locked; then ${_UNLOCK};
locked=false; fi' 0 1 2 3 13 15
+ ${_LOCK}; locked=true; \
+ trap 'if $$locked; then ${_UNLOCK}; locked=false; fi' 0; \
+ trap 'exit 1' 1 2 3 13 15
.endif
_SIMPLE_LOCK ?= :
@@ -2809,13 +2811,15 @@ describe:
readme:
@tmpdir=`mktemp -d ${TMPDIR}/readme.XXXXXX`; \
- trap "rm -r $$tmpdir" 0 1 2 3 13 15; \
+ trap "rm -r $$tmpdir" 0; \
+ trap 'exit 1' 1 2 3 13 15; \
cd ${.CURDIR} && PKGPATH=${PKGPATH} ${MAKE} TMPDIR=$$tmpdir
README_NAME=${README_NAME} \
${READMES_TOP}/${PKGPATH}/${FULLPKGNAME${SUBPACKAGE}}.html
readmes:
@tmpdir=`mktemp -d ${TMPDIR}/readme.XXXXXX`; \
- trap "rm -r $$tmpdir" 0 1 2 3 13 15; \
+ trap "rm -r $$tmpdir" 0; \
+ trap 'exit 1' 1 2 3 13 15; \
cd ${.CURDIR} && PKGPATH=${PKGPATH} ${MAKE} TMPDIR=$$tmpdir
README_NAME=${README_NAME} \
${_READMES}
Index: bsd.port.subdir.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/bsd.port.subdir.mk,v
retrieving revision 1.106
diff -u -p -r1.106 bsd.port.subdir.mk
--- bsd.port.subdir.mk 17 Feb 2012 07:41:22 -0000 1.106
+++ bsd.port.subdir.mk 26 Apr 2012 22:28:00 -0000
@@ -193,7 +193,8 @@ clean:
readmes:
@${_subdir_fragment}
@tmpdir=`mktemp -d ${TMPDIR}/readme.XXXXXX`; \
- trap 'rm -r $$tmpdir' 0 1 2 3 13 15; \
+ trap 'rm -r $$tmpdir' 0; \
+ trap 'exit 1' 1 2 3 13 15; \
cd ${.CURDIR} && ${MAKE} TMPDIR=$$tmpdir \
${READMES_TOP}/${PKGPATH}/README.html
Index: pkgpath.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/pkgpath.mk,v
retrieving revision 1.44
diff -u -p -r1.44 pkgpath.mk
--- pkgpath.mk 17 Feb 2012 07:40:35 -0000 1.44
+++ pkgpath.mk 26 Apr 2012 22:28:00 -0000
@@ -95,7 +95,8 @@ _depfile_fragment = \
case X$${_DEPENDS_FILE} in \
X) _DEPENDS_FILE=`mktemp ${TMPDIR}/depends.XXXXXXXXX|| exit 1`;
\
export _DEPENDS_FILE; \
- trap "rm -f $${_DEPENDS_FILE}" 0 1 2 3 13 15;; \
+ trap "rm -f $${_DEPENDS_FILE}" 0; \
+ trap 'exit 1' 1 2 3 13 15;; \
esac
# the cache may be filled in as root, so try to remove as normal user, THEN
@@ -104,7 +105,8 @@ _cache_fragment = \
case X$${_DEPENDS_CACHE} in \
X) _DEPENDS_CACHE=`mktemp -d ${TMPDIR}/dep_cache.XXXXXXXXX||
exit 1`; \
export _DEPENDS_CACHE; \
- trap "rm -rf 2>/dev/null $${_DEPENDS_CACHE} || ${SUDO} rm -rf
$${_DEPENDS_CACHE}" 0 1 2 3 13 15;; \
+ trap "rm -rf 2>/dev/null $${_DEPENDS_CACHE} || ${SUDO} rm -rf
$${_DEPENDS_CACHE}" 0; \
+ trap 'exit 1' 1 2 3 13 15;; \
esac; PKGPATH=${PKGPATH}; export PKGPATH
HTMLIFY = sed -e 's/&/\&/g' -e 's/>/\>/g' -e 's/</\</g'