Script to automagically synchronize the object file lists

Add a script to automagically synchronize the list of object files
between the various Makefiles.
This commit is contained in:
H. Peter Anvin 2008-06-15 16:54:29 -07:00
parent eb96812e9f
commit 7806e96508
6 changed files with 115 additions and 14 deletions

View file

@ -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

View file

@ -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

View file

@ -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)
#--- 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)
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)

View file

@ -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"

View file

@ -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"'

86
syncfiles.pl Executable file
View file

@ -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;
}