From: Paul Smith Date: Sat, 11 Jan 2014 21:10:02 +0000 (-0500) Subject: * main.c (die): Close output_context AND make_sync. X-Git-Tag: 4.1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c8b68a905871882905fad6ca72c499a98bc2513;p=thirdparty%2Fmake.git * main.c (die): Close output_context AND make_sync. die() can be invoked inside a separate output_context, if the $(error ...) function is expanded as part of a recipe. --- diff --git a/main.c b/main.c index fa0498f6..27d3a6eb 100644 --- a/main.c +++ b/main.c @@ -3406,9 +3406,14 @@ die (int status) if (output_context) { - assert (output_context == &make_sync); + /* die() might be called in a recipe output context due to an + $(error ...) function. */ + output_close (output_context); + + if (output_context != &make_sync) + output_close (&make_sync); + OUTPUT_UNSET (); - output_close (&make_sync); } output_close (NULL); diff --git a/tests/scripts/features/output-sync b/tests/scripts/features/output-sync index 75d7e81d..a7534cb7 100644 --- a/tests/scripts/features/output-sync +++ b/tests/scripts/features/output-sync @@ -330,5 +330,12 @@ t1: ; -\@\$(MAKE) -f $m1 rmfiles($m1); +# Test $(error ...) functions in recipes + +run_make_test(q! +foo: $(OBJS) ; echo $(or $(filter %.o,$^),$(error fail)) +!, + '-O', "#MAKEFILE#:2: *** fail. Stop.\n", 512); + # This tells the test driver that the perl test script executed properly. 1;