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