summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-15 16:54:29 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-15 16:54:29 -0700
commit7806e96508788e6db786025b00ac78464b18f482 (patch)
tree1c9d290fe6c414b2c8fe4ba65c86bdadda743aa9
parenteb96812e9fc9af8a14408e3e510b0321b58ce5db (diff)
downloadnasm-7806e96508788e6db786025b00ac78464b18f482.tar.gz
nasm-7806e96508788e6db786025b00ac78464b18f482.tar.bz2
nasm-7806e96508788e6db786025b00ac78464b18f482.zip
Script to automagically synchronize the object file lists
Add a script to automagically synchronize the list of object files between the various Makefiles.
-rw-r--r--Makefile.in3
-rw-r--r--Mkfiles/msvc.mak3
-rw-r--r--Mkfiles/netware.mak33
-rw-r--r--Mkfiles/openwcom.mak3
-rw-r--r--Mkfiles/owlinux.mak3
-rwxr-xr-xsyncfiles.pl86
6 files changed, 116 insertions, 15 deletions
diff --git a/Makefile.in b/Makefile.in
index 7d32d06..10a8368 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 937e106..7264ff4 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 59891de..775ead9 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 c72c792..bee458e 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 fef0103..fbd36e3 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 0000000..5be984a
--- /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 = <FILE>)) {
+ if ($line =~ /^\#\s+\@(\S+)\:\s*\"([^\"]+)\"/) {
+ $hints{$1} = $2;
+ }
+ }
+
+ # Read and process the file
+ seek(FILE,0,0);
+ @lines = ();
+ $processing = 0;
+ while (defined($line = <FILE>)) {
+ 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;
+}