Date: Wed, 6 Dec 2000 08:20:31 -0800 (PST) From: dhw@whistle.com To: FreeBSD-gnats-submit@freebsd.org Cc: jrj@cc.purdue.edu, oliva@lsd.ic.unicamp.br Subject: bin/23328: make forgets about some .SUFFIXES sometimes Message-ID: <200012061620.eB6GKVh06467@m1022069438.whistle.com> Resent-Message-ID: <200012061630.eB6GU1u67142@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 23328 >Category: bin >Synopsis: make forgets about some .SUFFIXES sometimes >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Dec 06 08:30:01 PST 2000 >Closed-Date: >Last-Modified: >Originator: David Wolfskill >Release: FreeBSD 4.2-STABLE i386 >Organization: Whistle Communications >Environment: Originally noted in 4.1.1-S as of 29 September; reproduced in 4.2-S as of 21 November. Original failure was in trying to build amanda 2.4.2 (released) with "make"; it appears that some constructs created by automake tickled the bug in "make", while "gmake" was not affected (unsurprisingly). >Description: Certain contents of .SUFFIXES lines work normally, while slight modifications (including permutations of suffix entries) will cause "make" to "forget" how to handle files with certain suffixes. >How-To-Repeat: Create a test directory; copy in the following Makefile: --------->%-------- cut here ----------------- .SUFFIXES: # .SUFFIXES: .c .h .lo .o .obj .sh .pl .SUFFIXES: .c .h .lo .o .obj .pl .sh .sh: cat $< > $@ chmod +x $@ .pl: cat $< > $@ chmod +x $@ S= jj.sh kk.pl T= jj kk all: jj kk clean: rm -f ${T} realclean: rm -f ${S} ${T} test: touch ${S} ----------------- snip! --------%<--------- First, "make test"; this should create jj.sh & kk.pl. Then "make -n all"; I get: cat jj.sh > jj chmod +x jj make: don't know how to make kk. Stop (I just used the -n so I don't need to clean so often.) Then un-comment the commented .SUFFIXES line (line #2), and comment out the 3rd .SUFFIXES line instead. Re-do the "make -n all"; I get: cat jj.sh > jj chmod +x jj cat kk.pl > kk chmod +x kk Re-running the above tests under "script", with the "-d A" debugging flag, yields the following differences between the outputs: --- bad Wed Dec 6 08:13:34 2000 +++ good Wed Dec 6 08:13:44 2000 @@ -1,4 +1,4 @@ -Script started on Wed Dec 6 08:12:32 2000 +Script started on Wed Dec 6 08:13:08 2000 m1022069438[1]% make -n -d A all Global:.MAKEFLAGS = -n -d Global:.MAKEFLAGS = -n -d A @@ -234,11 +234,11 @@ inserting .c(0)...at end of list inserting .o(3)...at end of list defining transformation from `.sh' to `' -inserting .sh(6)...before .sh(22) +inserting .sh(5)...already there inserting (0)...at end of list transformation .sh complete defining transformation from `.pl' to `' -inserting .pl(5)...already there +inserting .pl(6)...before .sh(22) inserting (0)...at end of list transformation .pl complete Global:S = jj.sh kk.pl @@ -412,11 +412,11 @@ # To: # From: # Search Path: -# `.pl' [0] +# `.sh' [0] # To: # From: # Search Path: -# `.sh' [1] +# `.pl' [1] # To: # From: # Search Path: @@ -533,6 +533,8 @@ adding suffix rules trying jj.c...Searching for jj.c...failed. not there + trying jj.pl...Searching for jj.pl...failed. +not there trying jj.sh...Searching for jj.sh...in '.' got it jj:@ = jj @@ -551,33 +553,42 @@ jj:? = jj.sh cat jj.sh > jj chmod +x jj -update time: 8:12:40 Dec 06, 2000 +update time: 8:13:14 Dec 06, 2000 SuffFindDeps (kk) No known suffix on kk. Using .NULL suffix adding suffix rules trying kk.c...Searching for kk.c...failed. not there - trying kk.sh...Searching for kk.sh...failed. -not there - trying kk.sh...Searching for kk.sh...failed. -not there - trying kk.y...Searching for kk.y...failed. -not there - trying kk.l...Searching for kk.l...failed. -not there + trying kk.pl...Searching for kk.pl...in '.' +got it kk:@ = kk kk:* = kk -Searching for kk...failed. -Examining kk...Searching for kk...failed. -non-existent...non-existent and no sources...out-of-date. -kk:? = -kk:> = -make: don't know how to make kk. Stop + applying .pl -> to "kk" +SuffFindDeps (kk.pl) +kk.pl:@ = kk.pl +kk.pl:* = kk +Searching for kk.pl...in '.' +kk.pl:@ = kk.pl +kk.pl:* = kk +kk:< = kk.pl +Examining kk.pl...modified 7:26:56 Dec 06, 2000...up-to-date. +Examining kk...non-existent...modified before source...out-of-date. +kk:> = kk.pl +kk:? = kk.pl +cat kk.pl > kk +chmod +x kk +update time: 8:13:14 Dec 06, 2000 +Examining all...non-existent...modified before source...out-of-date. +all:> = jj +all:? = jj +all:> = jj kk +all:? = jj kk +update time: 8:13:14 Dec 06, 2000 #*** Input graph: # # *** MAIN TARGET *** # 2 unmade children -# non-existent (maybe): aborted +# last modified 8:13:14 Dec 06, 2000: made all : jj kk @@ -610,6 +621,7 @@ # kk [kk] # .END [.END] # jj.sh [jj.sh] +# kk.pl [kk.pl] #*** Global Variables: .LIBS = .INCLUDES = @@ -721,9 +733,9 @@ #*** Command-line Variables: #*** Directory Cache: -# Stats: 3 hits 14 misses 0 near misses 7 losers (30%) +# Stats: 5 hits 9 misses 0 near misses 7 losers (41%) # directory referenced hits -# . 2 2 +# . 2 4 # /usr/share/mk 1 1 #*** Suffixes: @@ -747,11 +759,11 @@ # To: # From: # Search Path: -# `.pl' [0] +# `.sh' [2] # To: # From: # Search Path: -# `.sh' [5] +# `.pl' [5] # To: # From: # Search Path: @@ -860,4 +872,4 @@ m1022069438[2]% ^Dexit -Script done on Wed Dec 6 08:12:43 2000 +Script done on Wed Dec 6 08:13:17 2000 >Fix: Another circumvention appears to be to comment out the first (empty) ".SUFFIXES" line. Unfortunately, in a situation where the Makefile itself is generated by other tools (such as automake), one doesn't necessarily have enough control to avoid the behavior in question... which appears pretty bogus, regardless. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200012061620.eB6GKVh06467>