From 7806e96508788e6db786025b00ac78464b18f482 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sun, 15 Jun 2008 16:54:29 -0700 Subject: [PATCH] Script to automagically synchronize the object file lists Add a script to automagically synchronize the list of object files between the various Makefiles. --- Makefile.in | 3 ++ Mkfiles/msvc.mak | 3 ++ Mkfiles/netware.mak | 33 +++++++++++--------- Mkfiles/openwcom.mak | 3 ++ Mkfiles/owlinux.mak | 3 ++ syncfiles.pl | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 116 insertions(+), 15 deletions(-) create mode 100755 syncfiles.pl diff --git a/Makefile.in b/Makefile.in index 7d32d06a..10a83680 100644 --- a/Makefile.in +++ b/Makefile.in @@ -58,6 +58,7 @@ X = @EXEEXT@ .1.man: $(NROFF) -man $< > $@ +#--- Begin File Lists ---# NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ float.$(O) insnsa.$(O) insnsb.$(O) \ assemble.$(O) labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) \ @@ -72,6 +73,7 @@ NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \ insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O) +#--- End File Lists ---# all: nasm$(X) ndisasm$(X) nasm.man ndisasm.man cd rdoff && $(MAKE) all @@ -224,6 +226,7 @@ splint: # it's expected to be invoked manually. # alldeps: perlreq + $(PERL) syncfiles.pl Makefile.in Mkfiles/*.mak $(PERL) mkdep.pl -M Makefile.in Mkfiles/*.mak -- \ . output lib ./config.status diff --git a/Mkfiles/msvc.mak b/Mkfiles/msvc.mak index 937e1060..7264ff44 100644 --- a/Mkfiles/msvc.mak +++ b/Mkfiles/msvc.mak @@ -32,6 +32,8 @@ X = .exe .c.obj: $(CC) /c $(ALL_CFLAGS) /Fo$@ $< +#--- Begin File Lists ---# +# Edit in Makefile.in, not here! NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ float.$(O) insnsa.$(O) insnsb.$(O) \ assemble.$(O) labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) \ @@ -46,6 +48,7 @@ NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \ insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O) +#--- End File Lists ---# all: nasm$(X) ndisasm$(X) rem cd rdoff && $(MAKE) all diff --git a/Mkfiles/netware.mak b/Mkfiles/netware.mak index 59891de0..775ead9c 100644 --- a/Mkfiles/netware.mak +++ b/Mkfiles/netware.mak @@ -1,4 +1,4 @@ -# -* makefile -*- GNU Makefile for NetWare target +# -*- makefile -*- GNU Makefile for NetWare target PROOT=. OBJDIR=release @@ -28,20 +28,23 @@ LDFLAGS+=-s O = o -NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ - float.$(O) insnsa.$(O) insnsb.$(O) \ - assemble.$(O) labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) \ - outform.$(O) output/outbin.$(O) \ - output/outaout.$(O) output/outcoff.$(O) \ - output/outelf32.$(O) output/outelf64.$(O) \ - output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \ - output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \ - preproc.$(O) quote.$(O) pptok.$(O) macros.$(O) \ - listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) strfunc.$(O) \ - tokhash.$(O) regvals.$(O) regflags.$(O) - -NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \ - insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O) +#--- Begin File Lists ---# +# Edit in Makefile.in, not here! +NASM = nasm.o nasmlib.o raa.o saa.o \ + float.o insnsa.o insnsb.o \ + assemble.o labels.o hashtbl.o crc64.o parser.o \ + outform.o output/outbin.o \ + output/outaout.o output/outcoff.o \ + output/outelf32.o output/outelf64.o \ + output/outobj.o output/outas86.o output/outrdf2.o \ + output/outdbg.o output/outieee.o output/outmacho.o \ + preproc.o quote.o pptok.o macros.o \ + listing.o eval.o exprlib.o stdscan.o strfunc.o \ + tokhash.o regvals.o regflags.o + +NDISASM = ndisasm.o disasm.o sync.o nasmlib.o \ + insnsd.o insnsb.o insnsn.o regs.o regdis.o +#--- End File Lists ---# NASM_OBJ = $(addprefix $(OBJDIR)/,$(notdir $(NASM))) $(EOLIST) NDIS_OBJ = $(addprefix $(OBJDIR)/,$(notdir $(NDISASM))) $(EOLIST) diff --git a/Mkfiles/openwcom.mak b/Mkfiles/openwcom.mak index c72c7923..bee458ec 100644 --- a/Mkfiles/openwcom.mak +++ b/Mkfiles/openwcom.mak @@ -44,6 +44,8 @@ X = .exe $(CC) -c $(ALL_CFLAGS) -fo=$^@ $[@ # Note: wcl386 is broken if forward slashes are used as path separators. +#--- Begin File Lists ---# +# Edit in Makefile.in, not here! NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) & float.$(O) insnsa.$(O) insnsb.$(O) & assemble.$(O) labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) & @@ -58,6 +60,7 @@ NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) & NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) & insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O) +#--- End File Lists ---# what: .SYMBOLIC @echo Please build "dos", "win32" or "os2" diff --git a/Mkfiles/owlinux.mak b/Mkfiles/owlinux.mak index fef01034..fbd36e3b 100644 --- a/Mkfiles/owlinux.mak +++ b/Mkfiles/owlinux.mak @@ -55,6 +55,8 @@ X = .exe .c.$(O): $(CC) -c $(ALL_CFLAGS) -fo=$@ $< +#--- Begin File Lists ---# +# Edit in Makefile.in, not here! NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ float.$(O) insnsa.$(O) insnsb.$(O) \ assemble.$(O) labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) \ @@ -69,6 +71,7 @@ NASM = nasm.$(O) nasmlib.$(O) raa.$(O) saa.$(O) \ NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \ insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O) +#--- End File Lists ---# what: @echo 'Please build "dos", "win32" or "os2"' diff --git a/syncfiles.pl b/syncfiles.pl new file mode 100755 index 00000000..5be984ac --- /dev/null +++ b/syncfiles.pl @@ -0,0 +1,86 @@ +#!/usr/bin/perl +# +# Sync the output file list between Makefiles +# Use the mkdep.pl parameters to get the filename syntax +# +# The first file is the source file; the other ones target. +# The initial file is assumed to be in Unix notation. +# +%def_hints = ('object-ending' => '.o', + 'path-separator' => '/', + 'continuation' => "\\"); + +sub do_transform($$) { + my($l, $h) = @_; + + $l =~ s/\x01/$$h{'object-ending'}/g; + $l =~ s/\x02/$$h{'path-separator'}/g; + $l =~ s/\x03/$$h{'continuation'}/g; + + return $l; +} + +@file_list = (); + +$first = 1; +$first_file = $ARGV[0]; +die unless (defined($first_file)); + +foreach $file (@ARGV) { + open(FILE, "< $file\0") or die; + + # First, read the syntax hints + %hints = %def_hints; + while (defined($line = )) { + if ($line =~ /^\#\s+\@(\S+)\:\s*\"([^\"]+)\"/) { + $hints{$1} = $2; + } + } + + # Read and process the file + seek(FILE,0,0); + @lines = (); + $processing = 0; + while (defined($line = )) { + chomp $line; + if ($processing) { + if ($line eq '#--- End File Lists ---#') { + push(@lines, $line."\n"); + $processing = 0; + } elsif ($first) { + my $xl = $line; + my $oe = "\Q$hints{'object-ending'}"; + my $ps = "\Q$hints{'path-separator'}"; + my $cn = "\Q$hints{'continuation'}"; + + $xl =~ s/${oe}(\s|$)/\x01$1/g; + $xl =~ s/${ps}/\x02/g; + $xl =~ s/${cn}$/\x03/; + push(@file_list, $xl); + push(@lines, $line); + } + } else { + push(@lines, $line."\n"); + if ($line eq '#--- Begin File Lists ---#') { + $processing = 1; + if (!$first) { + push(@lines, "# Edit in $first_file, not here!\n"); + foreach $l (@file_list) { + push(@lines, do_transform($l, \%hints)."\n"); + } + } + } + } + } + close(FILE); + + # Write the file back out + if (!$first) { + open(FILE, "> $file\0") or die; + print FILE @lines; + close(FILE); + } + + undef @lines; + $first = 0; +} -- 2.11.4.GIT