284 lines
6.5 KiB
Perl
284 lines
6.5 KiB
Perl
#!/usr/local/bin/perl
|
|
#
|
|
# $NetBSD: file2netbsd,v 1.2 1998/09/20 15:36:46 christos Exp $
|
|
#
|
|
# Perl script to convert a standard distribution directory for file into
|
|
# a NetBSD source tree.
|
|
#
|
|
# This is done as a script so that as each distribution is released,
|
|
# only changes from the previous one need to be dealt with as
|
|
# modifications to this script and related files. This should
|
|
# reduce the cost of updating from a new release of xntp by an
|
|
# order of magnitude (or more?)
|
|
#
|
|
# This script requires two environment variables set:
|
|
# SRCDIR - file source directory
|
|
# TARGETDIR - name of the high level directory to make
|
|
#
|
|
# Written by Christos Zoulas July 17, 1997 for file-3.26
|
|
#
|
|
|
|
$version = "3.26";
|
|
|
|
# definitions ...
|
|
|
|
@subdirs = ("usr.bin/file", "usr.bin/file/magdir");
|
|
|
|
|
|
@filef = ("LEGAL.NOTICE", "MAINT",
|
|
"PORTING", "README", "apprentice.c", "ascmagic.c",
|
|
"compress.c", "file.c", "file.h", "fsmagic.c",
|
|
"internat.c", "is_tar.c", "names.h", "patchlevel.h",
|
|
"print.c", "readelf.c", "readelf.h", "softmagic.c", "tar.h");
|
|
|
|
#
|
|
# Utility Subroutines
|
|
#
|
|
|
|
sub makedir {
|
|
system("mkdir -p @_");
|
|
}
|
|
|
|
# &fixrcs (fromfile, tofile);
|
|
sub fixrcs
|
|
{
|
|
my ($f, $t) = @_;
|
|
my @keywords = ("Author", "Date", "Header", "Id", "Locker", "Log",
|
|
"Name", "RCSfile", "Revision", "Source", "State");
|
|
my $state = 0;
|
|
my $hdr = 0;
|
|
|
|
open(IFILE, "<$f") || die "Cannot open $f";
|
|
open(OFILE, ">$t") || die "Cannot create $t";
|
|
|
|
if ($t =~ /.*\.[0-9]/) {
|
|
print OFILE '.\\" $', 'NetBSD', '$', "\n", '.\\"', "\n";
|
|
}
|
|
elsif ($t =~ /.*\.[ch]/) {
|
|
print OFILE "/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
|
|
}
|
|
elsif ($t =~ /.*\.[yl]/) {
|
|
$hdr = 1;
|
|
}
|
|
else {
|
|
print OFILE '$', 'NetBSD', '$', "\n";
|
|
}
|
|
while (<IFILE>) {
|
|
if ($hdr == 1) {
|
|
if (/%{/) {
|
|
print OFILE "%{\n/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
|
|
$hdr = 0;
|
|
next;
|
|
}
|
|
}
|
|
if ($state == 2) {
|
|
if (/#endif/) {
|
|
print OFILE "#else\n__RCSID(", '"$', 'NetBSD', '$"',
|
|
");\n#endif\n";
|
|
$state = 0;
|
|
}
|
|
}
|
|
if ($state == 1) {
|
|
print OFILE "#if 0\n";
|
|
$state = 2;
|
|
}
|
|
if (/#ifndef lint/) {
|
|
print OFILE "#include <sys/cdefs.h>\n";
|
|
$state = 1;
|
|
}
|
|
foreach $key (@keywords) {
|
|
s/\$$key\$/$key/g;
|
|
s/\$$key:(.*)\$/$key:$1/g;
|
|
}
|
|
print OFILE $_;
|
|
}
|
|
close(IFILE) || die "closing input file";
|
|
close(OFILE) || die "closing output file";
|
|
}
|
|
|
|
# ©files (fromdir, todir, list of files);
|
|
sub copyfiles {
|
|
local ($fdir, $tdir, @list) = @_;
|
|
local ($f);
|
|
|
|
foreach $f (@list) {
|
|
print " $fdir/$f --> $tdir/$f\n";
|
|
&fixrcs("$fdir/$f", "$tdir/$f");
|
|
}
|
|
}
|
|
|
|
# ©file (fromfile, tofile);
|
|
sub copyfile {
|
|
local ($f, $t) = @_;
|
|
|
|
print " $f --> $t\n";
|
|
&fixrcs("$f", "$t");
|
|
}
|
|
|
|
sub uniq {
|
|
local (@inlist) = @_;
|
|
local (@outlist);
|
|
|
|
@outlist = ($inlist[0]);
|
|
for ( $i=1; $i < @inlist; $i++ ) {
|
|
if ($inlist[$i] ne $inlist[$i-1]) {
|
|
push (@outlist, $inlist[$i]);
|
|
}
|
|
}
|
|
|
|
@outlist;
|
|
}
|
|
|
|
sub dumpsrcs {
|
|
local (@names) = @_;
|
|
local ($count);
|
|
|
|
print ODATA "SRCS=\t";
|
|
$count = 0;
|
|
while ($f = pop(@names)) {
|
|
print ODATA "$f ";
|
|
if ($count == 5 && @names > 0) {
|
|
print ODATA "\\\n";
|
|
$count = 0;
|
|
} else {
|
|
$count += 1;
|
|
}
|
|
}
|
|
if ($count != 0) {
|
|
print ODATA "\n";
|
|
}
|
|
}
|
|
|
|
#
|
|
# Main progarm.
|
|
#
|
|
|
|
$srcdir = $ENV{'SRCDIR'};
|
|
$targetdir = $ENV{'TARGETDIR'};
|
|
$incdirs = "-I. -I$srcdir/config -I$srcdir";
|
|
|
|
if (!$srcdir | !targetdir) {
|
|
die "You must define the environment variables SRCDIR and TARGETDIR.\n"
|
|
}
|
|
print "Making the NetBSD directory tree.\n";
|
|
foreach $f (@subdirs) {
|
|
print " -->$f\n";
|
|
makedir ("$targetdir/$f");
|
|
}
|
|
|
|
print "Populating the usr.bin/file directory.\n";
|
|
©files ("$srcdir", "$targetdir/usr.bin/file", @filef);
|
|
©file("$srcdir/file.man", "$targetdir/usr.bin/file/file.1");
|
|
©file("$srcdir/magic.man", "$targetdir/usr.bin/file/magic.5");
|
|
system("cat $srcdir/Header > $targetdir/usr.bin/file/Header");
|
|
system("cat $srcdir/Localstuff > $targetdir/usr.bin/file/Localstuff");
|
|
|
|
print "Populating the usr.bin/file/magdir directory.\n";
|
|
system("cp -rp $srcdir/Magdir/* $targetdir/usr.bin/file/magdir; chmod -r ug+w magdir");
|
|
|
|
#
|
|
# Build makefiles
|
|
#
|
|
|
|
$first = "True";
|
|
while ($line = <DATA>) {
|
|
chop ($line);
|
|
if (substr($line,0,2) eq "%%") {
|
|
@cmd = split (/ /,$line);
|
|
if ($cmd[1] eq "file") {
|
|
print "Building $targetdir/$cmd[2]\n";
|
|
if ($first eq "") {
|
|
close (ODATA);
|
|
} else {
|
|
$first = "";
|
|
}
|
|
open (ODATA, ">$targetdir/$cmd[2]") ||
|
|
die "Could not create $targetdir/$cmd[2]";
|
|
} elsif ($cmd[1] eq "srcs") {
|
|
print " Defining SRCS for $cmd[2]\n";
|
|
if ($first) {
|
|
die "Data file must start with a %% file!";
|
|
}
|
|
if ($cmd[2] eq "amd") {
|
|
&dumpsrcs (@amdf, @amdef);
|
|
} elsif ($cmd[2] eq "amq") {
|
|
&dumpsrcs (@amqf, @amqef);
|
|
} elsif ($cmd[2] eq "pawd") {
|
|
&dumpsrcs (@pawdf, @pawdef);
|
|
} elsif ($cmd[2] eq "hlfsd") {
|
|
&dumpsrcs (@hlfsdf, @hlfsdef);
|
|
} elsif ($cmd[2] eq "fixmount") {
|
|
&dumpsrcs (@fixmountf, @fixmountef);
|
|
} elsif ($cmd[2] eq "fsinfo") {
|
|
&dumpsrcs (@fsinfof, @fsinfoef);
|
|
} elsif ($cmd[2] eq "libamu") {
|
|
&dumpsrcs (@libamuf, @libamuef);
|
|
} elsif ($cmd[2] eq "mk-amd-map") {
|
|
&dumpsrcs (@mkamdmapf, @mkamdmapef);
|
|
} elsif ($cmd[2] eq "wire-test") {
|
|
&dumpsrcs (@wiretestf, @wiretestef);
|
|
} elsif ($cmd[2] eq "doc") {
|
|
&dumpsrcs (@docf, @docef);
|
|
} else {
|
|
die "Unknown SRCS command";
|
|
}
|
|
} elsif ($cmd[1] eq "NetBSD") {
|
|
if ($first) {
|
|
die "Data section must start with a %% file!";
|
|
}
|
|
print ODATA "$cmd[2] \$"."NetBSD".": \$\n";
|
|
}
|
|
} else {
|
|
if ($first) {
|
|
die "Data file must start with a %% file!";
|
|
}
|
|
print ODATA "$line\n";
|
|
}
|
|
}
|
|
close (ODATA);
|
|
|
|
#
|
|
# Sed transformations of files
|
|
#
|
|
|
|
foreach $n (keys(%sedlist)) {
|
|
print "Modifying $n\n";
|
|
system ("cd $targetdir; sed $sedlist{$n} $n > tmp; mv -f tmp $n");
|
|
}
|
|
|
|
#
|
|
# end of the script
|
|
#
|
|
|
|
# what follows is the data for makefiles and other special files
|
|
# that need to be created.
|
|
|
|
__END__
|
|
%% file usr.bin/file/Makefile
|
|
%% NetBSD #
|
|
|
|
FILESDIR= /usr/share/misc
|
|
FILES= magic
|
|
MAGIC= ${FILESDIR}/${FILES}
|
|
|
|
PROG= file
|
|
SRCS= file.c apprentice.c fsmagic.c softmagic.c ascmagic.c is_tar.c \
|
|
print.c compress.c readelf.c internat.c
|
|
CPPFLAGS+= -DMAGIC='"$(MAGIC)"' -DHAVE_SYS_WAIT_H -DHAVE_ST_RDEV
|
|
CPPFLAGS+= -DBUILTIN_ELF -DELFCORE
|
|
MAN= file.1 magic.5
|
|
|
|
CLEANFILES+= magic
|
|
all: file magic
|
|
|
|
MAGDIRF:sh= echo $(.CURDIR)/magdir/[0-9a-z]*
|
|
MAGFILES= $(.CURDIR)/Header \
|
|
$(.CURDIR)/Localstuff \
|
|
$(.CURDIR)/magdir/netbsd \
|
|
${MAGDIRF}
|
|
|
|
magic: $(MAGFILES)
|
|
cat $(MAGFILES) > $(.TARGET)
|
|
|
|
.include <bsd.prog.mk>
|