Skip to content

Commit d85890a

Browse files
author
H. Peter Anvin (Intel)
committed
Makefile.in: fix warning dependencies
Fix circular dependency on asm/warnings.c by factoring out warnings.$(O) from the dependencies, and use a separate <file>.time which "generate" the main source file as a "side effect", giving us a null target. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
1 parent 1a3bf7a commit d85890a

File tree

3 files changed

+95
-36
lines changed

3 files changed

+95
-36
lines changed

Makefile.in

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ ifeq ($(TRACE),1)
7575
endif
7676

7777
.SUFFIXES:
78-
.SUFFIXES: $(X) .$(O) .$(A) .xml .1 .c .i .s .txt
78+
.SUFFIXES: $(X) .$(O) .$(A) .xml .1 .c .i .s .txt .time
7979

8080
.PHONY: all doc rdf install clean distclean cleaner spotless install_rdf test
8181
.PHONY: install_doc everything install_everything strip perlreq dist tags TAGS
@@ -100,7 +100,10 @@ endif
100100
NASM = asm/nasm.$(O)
101101
NDISASM = disasm/ndisasm.$(O)
102102

103-
LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
103+
PROGOBJ = $(NASM) $(NDISASM)
104+
PROGS = nasm$(X) ndisasm$(X)
105+
106+
LIBOBJ_NW = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
104107
stdlib/strnlen.$(O) stdlib/strrchrnul.$(O) \
105108
\
106109
nasmlib/ver.$(O) \
@@ -122,7 +125,7 @@ LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
122125
x86/regs.$(O) x86/regvals.$(O) x86/regflags.$(O) x86/regdis.$(O) \
123126
x86/disp8.$(O) x86/iflag.$(O) \
124127
\
125-
asm/error.$(O) asm/warnings.$(O) \
128+
asm/error.$(O) \
126129
asm/floats.$(O) \
127130
asm/directiv.$(O) asm/directbl.$(O) \
128131
asm/pragma.$(O) \
@@ -147,15 +150,20 @@ LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
147150
\
148151
disasm/disasm.$(O) disasm/sync.$(O)
149152

150-
ALLOBJ = $(NASM) $(NDISASM) $(LIBOBJ)
153+
# Warnings depend on all source files, so handle them separately
154+
WARNOBJ = asm/warnings.$(O)
155+
156+
LIBOBJ = $(LIBOBJ_NW) $(WARNOBJ)
157+
ALLOBJ_NW = $(PROGOBJ) $(LIBOBJ_NW)
158+
ALLOBJ = $(PROGOBJ) $(LIBOBJ)
151159

152160
SUBDIRS = stdlib nasmlib output asm disasm x86 common macros
153161
XSUBDIRS = test doc nsis rdoff
154162
DEPDIRS = . include config x86 rdoff $(SUBDIRS)
155163
#-- End File Lists --#
156164

157165
all: dirs
158-
$(MAKE) nasm$(X) ndisasm$(X) rdf
166+
$(MAKE) $(PROGS) rdf
159167

160168
NASMLIB = libnasm.$(A)
161169

@@ -271,18 +279,30 @@ warnings:
271279
$(RM_F) $(WARNFILES)
272280
$(MAKE) asm/warnings.time
273281

274-
asm/warnings.time: $(ALLOBJ:.@OBJEXT@=.c)
282+
asm/warnings.time: $(ALLOBJ_NW:.$(O)=.c)
275283
: > asm/warnings.time
276-
$(MAKE) $(WARNFILES)
284+
$(MAKE) $(WARNFILES:=.time)
277285

278-
asm/warnings.c: asm/warnings.pl asm/warnings.time
286+
asm/warnings.c.time: asm/warnings.pl asm/warnings.time
279287
$(RUNPERL) $(srcdir)/asm/warnings.pl c asm/warnings.c $(srcdir)
288+
: > asm/warnings.c.time
289+
290+
asm/warnings.c: asm/warnings.c.time
291+
@: Side effect
280292

281-
include/warnings.h: asm/warnings.pl asm/warnings.time
293+
include/warnings.h.time: asm/warnings.pl asm/warnings.time
282294
$(RUNPERL) $(srcdir)/asm/warnings.pl h include/warnings.h $(srcdir)
295+
: > include/warnings.h.time
283296

284-
doc/warnings.src: asm/warnings.pl asm/warnings.time
297+
include/warnings.h: include/warnings.h.time
298+
@: Side effect
299+
300+
doc/warnings.src.time: asm/warnings.pl asm/warnings.time
285301
$(RUNPERL) $(srcdir)/asm/warnings.pl doc doc/warnings.src $(srcdir)
302+
: > doc/warnings.src.time
303+
304+
doc/warnings.src : doc/warnings.src.time
305+
@: Side effect
286306

287307
# Assembler token hash
288308
asm/tokhash.c: x86/insns.dat x86/regs.dat asm/tokens.dat asm/tokhash.pl \
@@ -385,10 +405,9 @@ nsis: nsis/nasm.nsi nsis/arch.nsh nsis/version.nsh
385405
# Generated manpages, also pregenerated for distribution
386406
manpages: nasm.1 ndisasm.1
387407

388-
install: nasm$(X) ndisasm$(X)
408+
install: $(PROGS)
389409
$(MKDIR_P) $(DESTDIR)$(bindir)
390-
$(INSTALL_PROGRAM) nasm$(X) $(DESTDIR)$(bindir)/nasm$(X)
391-
$(INSTALL_PROGRAM) ndisasm$(X) $(DESTDIR)$(bindir)/ndisasm$(X)
410+
$(INSTALL_PROGRAM) $(PROGS) $(DESTDIR)$(bindir)/
392411
$(MKDIR_P) $(DESTDIR)$(mandir)/man1
393412
$(INSTALL_DATA) $(srcdir)/nasm.1 $(DESTDIR)$(mandir)/man1/nasm.1
394413
$(INSTALL_DATA) $(srcdir)/ndisasm.1 $(DESTDIR)$(mandir)/man1/ndisasm.1
@@ -397,7 +416,7 @@ clean:
397416
for d in . $(SUBDIRS) $(XSUBDIRS); do \
398417
$(RM_F) "$$d"/*.$(O) "$$d"/*.s "$$d"/*.i "$$d"/*.$(A) ; \
399418
done
400-
$(RM_F) nasm$(X) ndisasm$(X)
419+
$(RM_F) $(PROGS)
401420
$(RM_F) nasm-*-installer-*.exe
402421
$(RM_F) tags TAGS
403422
$(RM_F) nsis/arch.nsh
@@ -412,18 +431,18 @@ distclean: clean
412431
done
413432
$(RM_F) test/*.$(O)
414433
$(RM_RF) autom4te*.cache
415-
$(RM_F) Makefile *.dep asm/warnings.time
434+
$(RM_F) Makefile *.dep
416435

417436
cleaner: clean
418437
$(RM_F) $(PERLREQ) *.1 nasm.spec
419438
$(MAKE) -C doc clean
420-
$(RM_F) *.dep asm/warnings.time
439+
$(RM_F) *.dep */*.time
421440

422441
spotless: distclean cleaner
423442
$(RM_F) doc/Makefile
424443

425444
strip:
426-
$(STRIP) --strip-unneeded nasm$(X) ndisasm$(X)
445+
$(STRIP) --strip-unneeded $(PROGS)
427446

428447
TAGS:
429448
$(RM_F) TAGS
@@ -496,13 +515,13 @@ nasm.spec: nasm.spec.in nasm.spec.sed version.sed perlbreq.si
496515
splint:
497516
splint -weak *.c
498517

499-
test: nasm$(X)
518+
test: $(PROGS)
500519
cd test && $(RUNPERL) performtest.pl --nasm=../nasm *.asm
501520

502-
golden: nasm$(X)
521+
golden: $(PROGS)
503522
cd test && $(RUNPERL) performtest.pl --golden --nasm=../nasm *.asm
504523

505-
travis: nasm$(X)
524+
travis: $(PROGS)
506525
$(PYTHON3) travis/nasm-t.py run
507526

508527
#

Mkfiles/msvc.mak

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ X = .exe
6464
NASM = asm\nasm.$(O)
6565
NDISASM = disasm\ndisasm.$(O)
6666

67-
LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) \
67+
PROGOBJ = $(NASM) $(NDISASM)
68+
PROGS = nasm$(X) ndisasm$(X)
69+
70+
LIBOBJ_NW = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) \
6871
stdlib\strnlen.$(O) stdlib\strrchrnul.$(O) \
6972
\
7073
nasmlib\ver.$(O) \
@@ -86,7 +89,7 @@ LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) \
8689
x86\regs.$(O) x86\regvals.$(O) x86\regflags.$(O) x86\regdis.$(O) \
8790
x86\disp8.$(O) x86\iflag.$(O) \
8891
\
89-
asm\error.$(O) asm\warnings.$(O) \
92+
asm\error.$(O) \
9093
asm\floats.$(O) \
9194
asm\directiv.$(O) asm\directbl.$(O) \
9295
asm\pragma.$(O) \
@@ -111,7 +114,12 @@ LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) \
111114
\
112115
disasm\disasm.$(O) disasm\sync.$(O)
113116

114-
ALLOBJ = $(NASM) $(NDISASM) $(LIBOBJ)
117+
# Warnings depend on all source files, so handle them separately
118+
WARNOBJ = asm\warnings.$(O)
119+
120+
LIBOBJ = $(LIBOBJ_NW) $(WARNOBJ)
121+
ALLOBJ_NW = $(PROGOBJ) $(LIBOBJ_NW)
122+
ALLOBJ = $(PROGOBJ) $(LIBOBJ)
115123

116124
SUBDIRS = stdlib nasmlib output asm disasm x86 common macros
117125
XSUBDIRS = test doc nsis rdoff
@@ -230,18 +238,30 @@ warnings:
230238
$(RM_F) $(WARNFILES)
231239
$(MAKE) asm\warnings.time
232240

233-
asm\warnings.time: $(ALLOBJ:.@OBJEXT@=.c)
241+
asm\warnings.time: $(ALLOBJ_NW:.$(O)=.c)
234242
: > asm\warnings.time
235-
$(MAKE) $(WARNFILES)
243+
$(MAKE) $(WARNFILES:=.time)
236244

237-
asm\warnings.c: asm\warnings.pl asm\warnings.time
245+
asm\warnings.c.time: asm\warnings.pl asm\warnings.time
238246
$(RUNPERL) $(srcdir)\asm\warnings.pl c asm\warnings.c $(srcdir)
247+
: > asm\warnings.c.time
248+
249+
asm\warnings.c: asm\warnings.c.time
250+
@: Side effect
239251

240-
include\warnings.h: asm\warnings.pl asm\warnings.time
252+
include\warnings.h.time: asm\warnings.pl asm\warnings.time
241253
$(RUNPERL) $(srcdir)\asm\warnings.pl h include\warnings.h $(srcdir)
254+
: > include\warnings.h.time
242255

243-
doc\warnings.src: asm\warnings.pl asm\warnings.time
256+
include\warnings.h: include\warnings.h.time
257+
@: Side effect
258+
259+
doc\warnings.src.time: asm\warnings.pl asm\warnings.time
244260
$(RUNPERL) $(srcdir)\asm\warnings.pl doc doc\warnings.src $(srcdir)
261+
: > doc\warnings.src.time
262+
263+
doc\warnings.src : doc\warnings.src.time
264+
@: Side effect
245265

246266
# Assembler token hash
247267
asm\tokhash.c: x86\insns.dat x86\regs.dat asm\tokens.dat asm\tokhash.pl \

Mkfiles/openwcom.mak

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ X = .exe
5353
NASM = asm\nasm.$(O)
5454
NDISASM = disasm\ndisasm.$(O)
5555

56-
LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) &
56+
PROGOBJ = $(NASM) $(NDISASM)
57+
PROGS = nasm$(X) ndisasm$(X)
58+
59+
LIBOBJ_NW = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) &
5760
stdlib\strnlen.$(O) stdlib\strrchrnul.$(O) &
5861
&
5962
nasmlib\ver.$(O) &
@@ -75,7 +78,7 @@ LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) &
7578
x86\regs.$(O) x86\regvals.$(O) x86\regflags.$(O) x86\regdis.$(O) &
7679
x86\disp8.$(O) x86\iflag.$(O) &
7780
&
78-
asm\error.$(O) asm\warnings.$(O) &
81+
asm\error.$(O) &
7982
asm\floats.$(O) &
8083
asm\directiv.$(O) asm\directbl.$(O) &
8184
asm\pragma.$(O) &
@@ -100,7 +103,12 @@ LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) &
100103
&
101104
disasm\disasm.$(O) disasm\sync.$(O)
102105

103-
ALLOBJ = $(NASM) $(NDISASM) $(LIBOBJ)
106+
# Warnings depend on all source files, so handle them separately
107+
WARNOBJ = asm\warnings.$(O)
108+
109+
LIBOBJ = $(LIBOBJ_NW) $(WARNOBJ)
110+
ALLOBJ_NW = $(PROGOBJ) $(LIBOBJ_NW)
111+
ALLOBJ = $(PROGOBJ) $(LIBOBJ)
104112

105113
SUBDIRS = stdlib nasmlib output asm disasm x86 common macros
106114
XSUBDIRS = test doc nsis rdoff
@@ -243,18 +251,30 @@ warnings:
243251
$(RM_F) $(WARNFILES)
244252
$(MAKE) asm\warnings.time
245253

246-
asm\warnings.time: $(ALLOBJ:.@OBJEXT@=.c)
254+
asm\warnings.time: $(ALLOBJ_NW:.$(O)=.c)
247255
: > asm\warnings.time
248-
$(MAKE) $(WARNFILES)
256+
$(MAKE) $(WARNFILES:=.time)
249257

250-
asm\warnings.c: asm\warnings.pl asm\warnings.time
258+
asm\warnings.c.time: asm\warnings.pl asm\warnings.time
251259
$(RUNPERL) $(srcdir)\asm\warnings.pl c asm\warnings.c $(srcdir)
260+
: > asm\warnings.c.time
261+
262+
asm\warnings.c: asm\warnings.c.time
263+
@: Side effect
252264

253-
include\warnings.h: asm\warnings.pl asm\warnings.time
265+
include\warnings.h.time: asm\warnings.pl asm\warnings.time
254266
$(RUNPERL) $(srcdir)\asm\warnings.pl h include\warnings.h $(srcdir)
267+
: > include\warnings.h.time
255268

256-
doc\warnings.src: asm\warnings.pl asm\warnings.time
269+
include\warnings.h: include\warnings.h.time
270+
@: Side effect
271+
272+
doc\warnings.src.time: asm\warnings.pl asm\warnings.time
257273
$(RUNPERL) $(srcdir)\asm\warnings.pl doc doc\warnings.src $(srcdir)
274+
: > doc\warnings.src.time
275+
276+
doc\warnings.src : doc\warnings.src.time
277+
@: Side effect
258278

259279
# Assembler token hash
260280
asm\tokhash.c: x86\insns.dat x86\regs.dat asm\tokens.dat asm\tokhash.pl &

0 commit comments

Comments
 (0)