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