xref: /minix3/usr.sbin/traceroute/trrt2netbsd (revision 7f5f010bbdf8790a2e9ca9b907117ed4eb0d2ad3)
1*7f5f010bSBen Gras#!/usr/local/bin/perl
2*7f5f010bSBen Gras#
3*7f5f010bSBen Gras#	$NetBSD: trrt2netbsd,v 1.4 1999/06/16 20:47:57 is Exp $
4*7f5f010bSBen Gras#
5*7f5f010bSBen Gras#  Perl script to convert a standard distribution directory for traceroute into
6*7f5f010bSBen Gras#	a NetBSD source tree.
7*7f5f010bSBen Gras#
8*7f5f010bSBen Gras#  This is done as a script so that as each distribution is released,
9*7f5f010bSBen Gras#	only changes from the previous one need to be dealt with as
10*7f5f010bSBen Gras#	modifications to this script and related files.  This should
11*7f5f010bSBen Gras#	reduce the cost of updating from a new release of traceroute by an
12*7f5f010bSBen Gras#	order of magnitude (or more?)
13*7f5f010bSBen Gras#
14*7f5f010bSBen Gras#  This script requires two environment variables set:
15*7f5f010bSBen Gras#	SRCDIR - traceroute source directory
16*7f5f010bSBen Gras#	TARGETDIR - name of the high level directory to make
17*7f5f010bSBen Gras#
18*7f5f010bSBen Gras#  Written by Christos Zoulas Oct 2nd, 1997 for traceroute-1.4a5
19*7f5f010bSBen Gras#
20*7f5f010bSBen Gras
21*7f5f010bSBen Gras$version = "1.4a5";
22*7f5f010bSBen Gras
23*7f5f010bSBen Gras# definitions ...
24*7f5f010bSBen Gras
25*7f5f010bSBen Gras@subdirs = ("usr.sbin/traceroute");
26*7f5f010bSBen Gras
27*7f5f010bSBen Gras@trrtf = ("ifaddrlist.c", "savestr.c", "traceroute.c");
28*7f5f010bSBen Gras
29*7f5f010bSBen Gras@trrthf = ("gnuc.h", "ifaddrlist.h", "savestr.h");
30*7f5f010bSBen Gras
31*7f5f010bSBen Gras@trrtmf = ("traceroute.8");
32*7f5f010bSBen Gras@trrtdf = ("CHANGES", "README");
33*7f5f010bSBen Gras@trrtaf = ("mean.awk", "median.awk");
34*7f5f010bSBen Gras
35*7f5f010bSBen Gras
36*7f5f010bSBen Gras# sed edit list: file, sed-program
37*7f5f010bSBen Gras%sedlist = ();
38*7f5f010bSBen Gras
39*7f5f010bSBen Gras#
40*7f5f010bSBen Gras# Utility Subroutines
41*7f5f010bSBen Gras#
42*7f5f010bSBen Gras
43*7f5f010bSBen Grassub makedir {
44*7f5f010bSBen Gras    system("mkdir -p @_");
45*7f5f010bSBen Gras}
46*7f5f010bSBen Gras
47*7f5f010bSBen Gras# &fixrcs (fromfile, tofile);
48*7f5f010bSBen Grassub fixrcs
49*7f5f010bSBen Gras{
50*7f5f010bSBen Gras    my ($f, $t) = @_;
51*7f5f010bSBen Gras    my @keywords = ("Author", "Date", "Header", "Id", "Locker", "Log",
52*7f5f010bSBen Gras		    "Name", "RCSfile", "Revision", "Source", "State");
53*7f5f010bSBen Gras    my $state = 0;
54*7f5f010bSBen Gras    my $hdr = 0;
55*7f5f010bSBen Gras
56*7f5f010bSBen Gras    open(IFILE, "<$f") || die "Cannot open $f";
57*7f5f010bSBen Gras    open(OFILE, ">$t") || die "Cannot create $t";
58*7f5f010bSBen Gras
59*7f5f010bSBen Gras    if ($t =~ /.*\.[0-9]/) {
60*7f5f010bSBen Gras	print OFILE '.\\" $', 'NetBSD',  '$', "\n.\\\"", "\n";
61*7f5f010bSBen Gras    }
62*7f5f010bSBen Gras    elsif ($t =~ /.*\.[ch]/) {
63*7f5f010bSBen Gras	print OFILE "/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
64*7f5f010bSBen Gras    }
65*7f5f010bSBen Gras    elsif ($t =~ /.*\.[yl]/) {
66*7f5f010bSBen Gras	$hdr = 1;
67*7f5f010bSBen Gras    }
68*7f5f010bSBen Gras    else {
69*7f5f010bSBen Gras	print OFILE '$', 'NetBSD', '$', "\n";
70*7f5f010bSBen Gras    }
71*7f5f010bSBen Gras    while (<IFILE>) {
72*7f5f010bSBen Gras	if ($hdr == 1) {
73*7f5f010bSBen Gras	    if (/%{/) {
74*7f5f010bSBen Gras		print OFILE "%{\n/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
75*7f5f010bSBen Gras		$hdr = 0;
76*7f5f010bSBen Gras		next;
77*7f5f010bSBen Gras	    }
78*7f5f010bSBen Gras	}
79*7f5f010bSBen Gras	if ($state == 2) {
80*7f5f010bSBen Gras	    if (/#endif/) {
81*7f5f010bSBen Gras		print OFILE "#else\n__RCSID(", '"$', 'NetBSD', '$"',
82*7f5f010bSBen Gras		    ");\n#endif\n";
83*7f5f010bSBen Gras		$state = 0;
84*7f5f010bSBen Gras	    }
85*7f5f010bSBen Gras	}
86*7f5f010bSBen Gras	if ($state == 1) {
87*7f5f010bSBen Gras	    print OFILE "#if 0\n";
88*7f5f010bSBen Gras	    $state = 2;
89*7f5f010bSBen Gras	}
90*7f5f010bSBen Gras	if (/#ifndef lint/) {
91*7f5f010bSBen Gras	    print OFILE "#include <sys/cdefs.h>\n";
92*7f5f010bSBen Gras	    $state = 1;
93*7f5f010bSBen Gras	}
94*7f5f010bSBen Gras	foreach $key (@keywords) {
95*7f5f010bSBen Gras	    s/\$$key\$/$key/g;
96*7f5f010bSBen Gras	    s/\$$key:(.*)\$/$key:$1/g;
97*7f5f010bSBen Gras	}
98*7f5f010bSBen Gras	print OFILE $_;
99*7f5f010bSBen Gras    }
100*7f5f010bSBen Gras    close(IFILE) || die "closing input file";
101*7f5f010bSBen Gras    close(OFILE) || die "closing output file";
102*7f5f010bSBen Gras}
103*7f5f010bSBen Gras
104*7f5f010bSBen Gras# &copyfiles (fromdir, todir, list of files);
105*7f5f010bSBen Grassub copyfiles {
106*7f5f010bSBen Gras    local ($fdir, $tdir, @list) = @_;
107*7f5f010bSBen Gras    local ($f);
108*7f5f010bSBen Gras
109*7f5f010bSBen Gras    foreach $f (@list) {
110*7f5f010bSBen Gras	print "  $fdir/$f --> $tdir/$f\n";
111*7f5f010bSBen Gras	&fixrcs("$fdir/$f", "$tdir/$f");
112*7f5f010bSBen Gras    }
113*7f5f010bSBen Gras}
114*7f5f010bSBen Gras
115*7f5f010bSBen Gras# &copyfile (fromfile, tofile);
116*7f5f010bSBen Grassub copyfile {
117*7f5f010bSBen Gras    local ($f, $t) = @_;
118*7f5f010bSBen Gras
119*7f5f010bSBen Gras    print "  $f --> $t\n";
120*7f5f010bSBen Gras    system ("cp $f $t");
121*7f5f010bSBen Gras}
122*7f5f010bSBen Gras
123*7f5f010bSBen Grassub uniq {
124*7f5f010bSBen Gras    local (@inlist) = @_;
125*7f5f010bSBen Gras    local (@outlist);
126*7f5f010bSBen Gras
127*7f5f010bSBen Gras    @outlist = ($inlist[0]);
128*7f5f010bSBen Gras    for ( $i=1; $i < @inlist; $i++ ) {
129*7f5f010bSBen Gras	if ($inlist[$i] ne $inlist[$i-1]) {
130*7f5f010bSBen Gras	    push (@outlist, $inlist[$i]);
131*7f5f010bSBen Gras	}
132*7f5f010bSBen Gras    }
133*7f5f010bSBen Gras
134*7f5f010bSBen Gras    @outlist;
135*7f5f010bSBen Gras}
136*7f5f010bSBen Gras
137*7f5f010bSBen Grassub dumpsrcs {
138*7f5f010bSBen Gras    local (@names) = @_;
139*7f5f010bSBen Gras    local ($count);
140*7f5f010bSBen Gras
141*7f5f010bSBen Gras    $count = 0;
142*7f5f010bSBen Gras    while ($f = pop(@names)) {
143*7f5f010bSBen Gras        print ODATA "$f ";
144*7f5f010bSBen Gras	if ($count == 5 && @names > 0) {
145*7f5f010bSBen Gras	    print ODATA "\\\n";
146*7f5f010bSBen Gras	    $count = 0;
147*7f5f010bSBen Gras	} else {
148*7f5f010bSBen Gras	    $count += 1;
149*7f5f010bSBen Gras	}
150*7f5f010bSBen Gras    }
151*7f5f010bSBen Gras    if ($count != 0) {
152*7f5f010bSBen Gras	print ODATA "\n";
153*7f5f010bSBen Gras    }
154*7f5f010bSBen Gras}
155*7f5f010bSBen Gras
156*7f5f010bSBen Gras#
157*7f5f010bSBen Gras# Main program.
158*7f5f010bSBen Gras#
159*7f5f010bSBen Gras
160*7f5f010bSBen Gras$srcdir = $ENV{'SRCDIR'};
161*7f5f010bSBen Gras$targetdir = $ENV{'TARGETDIR'};
162*7f5f010bSBen Gras$incdirs = "-I. -I$srcdir/config -I$srcdir";
163*7f5f010bSBen Gras
164*7f5f010bSBen Grasif (!$srcdir | !targetdir) {
165*7f5f010bSBen Gras    die "You must define the environment variables SRCDIR and TARGETDIR.\n"
166*7f5f010bSBen Gras}
167*7f5f010bSBen Grasprint "Making the NetBSD directory tree.\n";
168*7f5f010bSBen Grasforeach $f (@subdirs) {
169*7f5f010bSBen Gras    print "   -->$f\n";
170*7f5f010bSBen Gras    makedir ("$targetdir/$f");
171*7f5f010bSBen Gras}
172*7f5f010bSBen Gras
173*7f5f010bSBen Grasprint "Populating the usr.sbin/traceroute directory.\n";
174*7f5f010bSBen Gras&copyfiles ("$srcdir", "$targetdir/usr.sbin/traceroute", @trrtf, @trrthf, @trrtdf,
175*7f5f010bSBen Gras	    @trrtmf, @trrtaf);
176*7f5f010bSBen Gras
177*7f5f010bSBen Gras#
178*7f5f010bSBen Gras# Build makefiles
179*7f5f010bSBen Gras#
180*7f5f010bSBen Gras
181*7f5f010bSBen Gras$first = "True";
182*7f5f010bSBen Graswhile ($line = <DATA>) {
183*7f5f010bSBen Gras    chop ($line);
184*7f5f010bSBen Gras    if (substr($line,0,2) eq "%%") {
185*7f5f010bSBen Gras	@cmd = split (/ /,$line);
186*7f5f010bSBen Gras	if ($cmd[1] eq "file") {
187*7f5f010bSBen Gras	    print "Building $targetdir/$cmd[2]\n";
188*7f5f010bSBen Gras	    if ($first eq "") {
189*7f5f010bSBen Gras		close (ODATA);
190*7f5f010bSBen Gras	    } else {
191*7f5f010bSBen Gras		$first = "";
192*7f5f010bSBen Gras	    }
193*7f5f010bSBen Gras	    open (ODATA, ">$targetdir/$cmd[2]") ||
194*7f5f010bSBen Gras		die "Could not create $targetdir/$cmd[2]";
195*7f5f010bSBen Gras	} elsif ($cmd[1] eq "awks") {
196*7f5f010bSBen Gras	    print "  Defining AWKS\n";
197*7f5f010bSBen Gras	    if ($first) {
198*7f5f010bSBen Gras		die "Data file must start with a %% file!";
199*7f5f010bSBen Gras	    }
200*7f5f010bSBen Gras	    print ODATA "AWKS=\t";
201*7f5f010bSBen Gras	    &dumpsrcs (@trrtaf);
202*7f5f010bSBen Gras	} elsif ($cmd[1] eq "srcs") {
203*7f5f010bSBen Gras	    print "  Defining SRCS\n";
204*7f5f010bSBen Gras	    if ($first) {
205*7f5f010bSBen Gras		die "Data file must start with a %% file!";
206*7f5f010bSBen Gras	    }
207*7f5f010bSBen Gras	    print ODATA "SRCS=\t";
208*7f5f010bSBen Gras	    &dumpsrcs (@trrtf);
209*7f5f010bSBen Gras	} elsif ($cmd[1] eq "man") {
210*7f5f010bSBen Gras	    print "  Defining MAN\n";
211*7f5f010bSBen Gras	    if ($first) {
212*7f5f010bSBen Gras		die "Data file must start with a %% file!";
213*7f5f010bSBen Gras	    }
214*7f5f010bSBen Gras	    print ODATA "MAN=\t";
215*7f5f010bSBen Gras	    &dumpsrcs (@trrtmf);
216*7f5f010bSBen Gras	} elsif ($cmd[1] eq "version") {
217*7f5f010bSBen Gras	    print "  Defining VERSION\n";
218*7f5f010bSBen Gras	    print ODATA "char version[] = \"$version\";";
219*7f5f010bSBen Gras	} elsif ($cmd[1] eq "NetBSD") {
220*7f5f010bSBen Gras	    if ($first) {
221*7f5f010bSBen Gras		die "Data section must start with a %% file!";
222*7f5f010bSBen Gras	    }
223*7f5f010bSBen Gras	    print ODATA "$cmd[2]	\$"."NetBSD".": \$	$cmd[3]\n";
224*7f5f010bSBen Gras	}
225*7f5f010bSBen Gras    } else {
226*7f5f010bSBen Gras	if ($first) {
227*7f5f010bSBen Gras	    die "Data file must start with a %% file!";
228*7f5f010bSBen Gras	}
229*7f5f010bSBen Gras	print ODATA "$line\n";
230*7f5f010bSBen Gras    }
231*7f5f010bSBen Gras}
232*7f5f010bSBen Grasclose (ODATA);
233*7f5f010bSBen Gras
234*7f5f010bSBen Gras#
235*7f5f010bSBen Gras# Sed transformations of files
236*7f5f010bSBen Gras#
237*7f5f010bSBen Grasforeach $n (keys(%sedlist)) {
238*7f5f010bSBen Gras    print "Modifying $n\n";
239*7f5f010bSBen Gras    system ("cd $targetdir; sed $sedlist{$n} $n > tmp;  mv -f tmp $n");
240*7f5f010bSBen Gras}
241*7f5f010bSBen Gras
242*7f5f010bSBen Gras#
243*7f5f010bSBen Gras# end of the script
244*7f5f010bSBen Gras#
245*7f5f010bSBen Gras
246*7f5f010bSBen Gras# what follows is the data for makefiles and other special files
247*7f5f010bSBen Gras# that need to be created.
248*7f5f010bSBen Gras
249*7f5f010bSBen Gras__END__
250*7f5f010bSBen Gras%% file usr.sbin/traceroute/Makefile
251*7f5f010bSBen Gras%% NetBSD #
252*7f5f010bSBen Gras
253*7f5f010bSBen GrasWARNS?=	1
254*7f5f010bSBen GrasPROG=	traceroute
255*7f5f010bSBen Gras%% man
256*7f5f010bSBen Gras
257*7f5f010bSBen GrasCPPFLAGS+=-DHAVE_MALLOC_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SOCKIO_H=1
258*7f5f010bSBen GrasCPPFLAGS+=-DHAVE_STRERROR=1 -DHAVE_SETLINEBUF=1 -DHAVE_SOCKADDR_SA_LEN=1
259*7f5f010bSBen GrasCPPFLAGS+=-DHAVE_RAW_OPTIONS=1
260*7f5f010bSBen Gras
261*7f5f010bSBen GrasBINOWN= root
262*7f5f010bSBen GrasBINMODE=4555
263*7f5f010bSBen Gras
264*7f5f010bSBen Gras%% srcs
265*7f5f010bSBen GrasSRCS+= version.c
266*7f5f010bSBen Gras
267*7f5f010bSBen Gras%% awks
268*7f5f010bSBen Gras
269*7f5f010bSBen Gras.include <bsd.prog.mk>
270*7f5f010bSBen Gras%% file usr.sbin/traceroute/version.c
271*7f5f010bSBen Gras%% NetBSD /* */
272*7f5f010bSBen Gras%% version
273