| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | #! /bin/sh# Copyright (C) 2003-2017 Free Software Foundation, Inc.## This program 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.## This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.# Check whether double colon rules work.  The Unix V7 make manual# mentions double-colon rules, but POSIX does not.  They seem to be# supported by all Make implementation as far as we can tell. This test# case is a spy: we want to detect if there exist implementations where# these do not work.  We might use these rules to simplify the rebuild# rules (instead of the $? hack).# Tom Tromey write:# | In the distant past we used :: rules extensively.# | Fran?ois convinced me to get rid of them:# |# | Thu Nov 23 18:02:38 1995  Tom Tromey  <tromey@cambric># | [ ... ]# |         * subdirs.am: Removed "::" rules# |         * header.am, libraries.am, mans.am, texinfos.am, footer.am:# |         Removed "::" rules# |         * scripts.am, programs.am, libprograms.am: Removed "::" rules# |# |# | I no longer remember the rationale for this.  It may have only been a# | belief that they were unportable.# On a related topic, the Autoconf manual has the following text:# |     'VPATH' and double-colon rules# |           Any assignment to 'VPATH' causes Sun 'make' to only execute# |           the first set of double-colon rules.  (This comment has been# |           here since 1994 and the context has been lost.  It's probably# |           about SunOS 4.  If you can reproduce this, please send us a# |           test case for illustration.)# We already know that overlapping ::-rule like##   a :: b#   	echo rule1 >> $@#   a :: c#   	echo rule2 >> $@#   a :: b c#   	echo rule3 >> $@## do not work equally on all platforms.  It seems that in all cases# Make attempts to run all matching rules.  However at least GNU Make,# NetBSD Make, and FreeBSD Make will detect that $@ was updated by the# first matching rule and skip remaining matches (with the above# example that means that unless 'a' was declared PHONY, only "rule1"# will be appended to 'a' if both b and c have changed).  Other# implementations like OSF1 Make and HP-UX Make do not perform such a# check and execute all matching rules whatever they do ("rule1",# "rule2", abd "rule3" will all be appended to 'a' if b and c have# changed).# So it seems only non-overlapping ::-rule may be portable.  This is# what we check now.. test-init.shcat >Makefile <<\EOFa :: b	echo rule1 >> $@a :: c	echo rule2 >> $@EOFtouch b c$sleep: > a$MAKEtest x"$(cat a)" = x$sleeptouch b$MAKEtest "$(cat a)" = "rule1"# Ensure a is strictly newer than b, so HP-UX make does not execute rule2.$sleep: > a$sleeptouch c$MAKEtest "$(cat a)" = "rule2"# Unfortunately, the following is not portable to FreeBSD/NetBSD/OpenBSD# make, see explanation above.#: > a#$sleep#touch b c#$MAKE#grep rule1 a#grep rule2 a:
 |