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# ©files (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# ©file (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©files ("$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