Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com From: Alexandre Duret-Lutz To: Eric Blake Cc: Jim Meyering , cygwin AT cygwin DOT com, bug-coreutils AT gnu DOT org, automake AT gnu DOT org Subject: Re: make -k fails on cygwin References: <41E3DE88 DOT 300 AT byu DOT net> <851xcruc38 DOT fsf AT pi DOT meyering DOT net> <41E530DD DOT 4000900 AT byu DOT net> <853bx6siik DOT fsf AT pi DOT meyering DOT net> <41E7491F DOT 1020800 AT byu DOT net> X-Home-Page: http://gadl.free.fr/ X-GPG-Keyserver: http://pgp.mit.edu/ X-GPG-Fingerprint: FCA0 8615 0211 941A 2AB9 FA66 3859 C03B 2E23 6E47 Date: Sat, 15 Jan 2005 14:35:11 +0100 In-Reply-To: <41E7491F.1020800@byu.net> (Eric Blake's message of "Thu, 13 Jan 2005 21:22:55 -0700") User-Agent: Gnus/5.110003 (No Gnus v0.3) Emacs/21.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Message-ID: <2005-01-15-14-35-12+9760+adl@gnu.org> X-Attribution: adl >>> "Eric" == Eric Blake writes: Eric> `info make' also has a page dedicated to "Phony Targets" Eric> that discusses the more portable way to have a recursive Eric> target, Not really: this only describes how one can setup recursive targets with GNU make. Option -C is neither portable nor standard. How about the following patch to Automake? The very last paragraph of check4.test shows how I was able to reproduce the problem with GNU make (without cygwin modifications). 2005-01-15 Alexandre Duret-Lutz * lib/am/subdirs.am ($(RECURSIVE_TARGETS), mostlyclean-recursive, clean-recursive, distclean-recursive, maintainer-clean-recursive): Process all words of $MAKEFLAGS when checking for -k. * tests/check4.test: New file. * tests/Makefile.am (TESTS): Add check4.test. Report from Eric Blake. Index: lib/am/subdirs.am =================================================================== RCS file: /cvs/automake/automake/lib/am/subdirs.am,v retrieving revision 1.56 diff -u -r1.56 subdirs.am --- lib/am/subdirs.am 6 Jul 2003 19:30:46 -0000 1.56 +++ lib/am/subdirs.am 15 Jan 2005 13:23:12 -0000 @@ -1,5 +1,5 @@ ## automake - create Makefile.in from Makefile.am -## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003 +## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005 ## Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify @@ -30,7 +30,15 @@ # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ +## Using $failcom allows "-k" to keep its natural meaning when running a +## recursive rule. + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ @@ -42,9 +50,7 @@ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -## This trick allows "-k" to keep its natural meaning when running a -## recursive rule. - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ @@ -67,7 +73,15 @@ ## bombs. mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: - @set fnord $$MAKEFLAGS; amf=$$2; \ +## Using $failcom allows "-k" to keep its natural meaning when running a +## recursive rule. + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ ## For distclean and maintainer-clean we make sure to use the full ## list of subdirectories. We do this so that `configure; make @@ -93,7 +107,5 @@ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -## This trick allows "-k" to keep its natural meaning when running a -## recursive rule. - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done && test -z "$$fail" Index: tests/Makefile.am =================================================================== RCS file: /cvs/automake/automake/tests/Makefile.am,v retrieving revision 1.565.2.11 diff -u -r1.565.2.11 Makefile.am --- tests/Makefile.am 1 Jan 2005 14:00:43 -0000 1.565.2.11 +++ tests/Makefile.am 15 Jan 2005 13:23:12 -0000 @@ -74,6 +74,7 @@ check.test \ check2.test \ check3.test \ +check4.test \ checkall.test \ clean.test \ clean2.test \ Index: tests/check4.test =================================================================== RCS file: tests/check4.test diff -N tests/check4.test --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ tests/check4.test 15 Jan 2005 13:23:12 -0000 @@ -0,0 +1,88 @@ +#! /bin/sh +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Make sure `make -k check' processes all directories. + +. ./defs || exit 1 + +set -e + +cat >> configure.in << 'END' +AC_CONFIG_FILES([dir/Makefile]) +AC_OUTPUT +END + +mkdir dir + +cat > Makefile.am <<'END' +SUBDIRS = dir +TESTS = ok.sh +END + +echo TESTS = fail.sh >dir/Makefile.am + +cat >ok.sh <<'END' +#!/bin/sh +: +END + +cat >dir/fail.sh <<'END' +#!/bin/sh +exit 1 +END + +chmod +x ok.sh dir/fail.sh + +$ACLOCAL +$AUTOCONF +$AUTOMAKE +./configure --prefix `pwd`/inst +$MAKE check >stdout && exit 1 +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout && exit 1 + +# The exit status of `make -k' can be anything +# (depending on the Make implementation) +$MAKE -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout + +# should also works when -k is not in first position +$MAKE -s -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout + +# The rest of the test is for GNU Make. + +# Use --version AND -v, because SGI Make doesn't fail on --version. +# Also grep for GNU because newer versions of FreeBSD make do +# not complain about `--version' (they seem to silently ignore it). +($MAKE --version -v | grep GNU) || exit 0 + +# Try with a long-option that do not have a short option equivalent +# (here, --no-print-directory). That should cause all options to +# appear verbatim in MAKEFLAGS. +$MAKE --no-print-directory -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout -- Alexandre Duret-Lutz -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/