trrt2netbsd revision 1.3
11.1Schristos#!/usr/local/bin/perl 21.1Schristos# 31.3Schristos# $NetBSD: trrt2netbsd,v 1.3 1999/02/26 22:43:03 christos Exp $ 41.1Schristos# 51.1Schristos# Perl script to convert a standard distribution directory for traceroute into 61.1Schristos# a NetBSD source tree. 71.1Schristos# 81.1Schristos# This is done as a script so that as each distribution is released, 91.1Schristos# only changes from the previous one need to be dealt with as 101.1Schristos# modifications to this script and related files. This should 111.1Schristos# reduce the cost of updating from a new release of traceroute by an 121.1Schristos# order of magnitude (or more?) 131.1Schristos# 141.1Schristos# This script requires two environment variables set: 151.1Schristos# SRCDIR - traceroute source directory 161.1Schristos# TARGETDIR - name of the high level directory to make 171.1Schristos# 181.1Schristos# Written by Christos Zoulas Oct 2nd, 1997 for traceroute-1.4a5 191.1Schristos# 201.1Schristos 211.1Schristos$version = "1.4a5"; 221.1Schristos 231.1Schristos# definitions ... 241.1Schristos 251.1Schristos@subdirs = ("usr.sbin/traceroute"); 261.1Schristos 271.1Schristos@trrtf = ("ifaddrlist.c", "savestr.c", "traceroute.c"); 281.1Schristos 291.1Schristos@trrthf = ("gnuc.h", "ifaddrlist.h", "savestr.h"); 301.1Schristos 311.1Schristos@trrtmf = ("traceroute.8"); 321.1Schristos@trrtdf = ("CHANGES", "README"); 331.1Schristos@trrtaf = ("mean.awk", "median.awk"); 341.1Schristos 351.1Schristos 361.1Schristos# sed edit list: file, sed-program 371.1Schristos%sedlist = (); 381.1Schristos 391.1Schristos# 401.1Schristos# Utility Subroutines 411.1Schristos# 421.1Schristos 431.1Schristossub makedir { 441.1Schristos system("mkdir -p @_"); 451.1Schristos} 461.1Schristos 471.1Schristos# &fixrcs (fromfile, tofile); 481.1Schristossub fixrcs 491.1Schristos{ 501.1Schristos my ($f, $t) = @_; 511.1Schristos my @keywords = ("Author", "Date", "Header", "Id", "Locker", "Log", 521.1Schristos "Name", "RCSfile", "Revision", "Source", "State"); 531.1Schristos my $state = 0; 541.1Schristos my $hdr = 0; 551.1Schristos 561.1Schristos open(IFILE, "<$f") || die "Cannot open $f"; 571.1Schristos open(OFILE, ">$t") || die "Cannot create $t"; 581.1Schristos 591.1Schristos if ($t =~ /.*\.[0-9]/) { 601.1Schristos print OFILE '.\\" $', 'NetBSD', '$', "\n.\\\"", "\n"; 611.1Schristos } 621.1Schristos elsif ($t =~ /.*\.[ch]/) { 631.1Schristos print OFILE "/*\t", '$', 'NetBSD', '$', "\t*/\n\n"; 641.1Schristos } 651.1Schristos elsif ($t =~ /.*\.[yl]/) { 661.1Schristos $hdr = 1; 671.1Schristos } 681.1Schristos else { 691.1Schristos print OFILE '$', 'NetBSD', '$', "\n"; 701.1Schristos } 711.1Schristos while (<IFILE>) { 721.1Schristos if ($hdr == 1) { 731.1Schristos if (/%{/) { 741.1Schristos print OFILE "%{\n/*\t", '$', 'NetBSD', '$', "\t*/\n\n"; 751.1Schristos $hdr = 0; 761.1Schristos next; 771.1Schristos } 781.1Schristos } 791.1Schristos if ($state == 2) { 801.1Schristos if (/#endif/) { 811.1Schristos print OFILE "#else\n__RCSID(", '"$', 'NetBSD', '$"', 821.1Schristos ");\n#endif\n"; 831.1Schristos $state = 0; 841.1Schristos } 851.1Schristos } 861.1Schristos if ($state == 1) { 871.1Schristos print OFILE "#if 0\n"; 881.1Schristos $state = 2; 891.1Schristos } 901.1Schristos if (/#ifndef lint/) { 911.1Schristos print OFILE "#include <sys/cdefs.h>\n"; 921.1Schristos $state = 1; 931.1Schristos } 941.1Schristos foreach $key (@keywords) { 951.1Schristos s/\$$key\$/$key/g; 961.1Schristos s/\$$key:(.*)\$/$key:$1/g; 971.1Schristos } 981.1Schristos print OFILE $_; 991.1Schristos } 1001.1Schristos close(IFILE) || die "closing input file"; 1011.1Schristos close(OFILE) || die "closing output file"; 1021.1Schristos} 1031.1Schristos 1041.1Schristos# ©files (fromdir, todir, list of files); 1051.1Schristossub copyfiles { 1061.1Schristos local ($fdir, $tdir, @list) = @_; 1071.1Schristos local ($f); 1081.1Schristos 1091.1Schristos foreach $f (@list) { 1101.1Schristos print " $fdir/$f --> $tdir/$f\n"; 1111.1Schristos &fixrcs("$fdir/$f", "$tdir/$f"); 1121.1Schristos } 1131.1Schristos} 1141.1Schristos 1151.1Schristos# ©file (fromfile, tofile); 1161.1Schristossub copyfile { 1171.1Schristos local ($f, $t) = @_; 1181.1Schristos 1191.1Schristos print " $f --> $t\n"; 1201.1Schristos system ("cp $f $t"); 1211.1Schristos} 1221.1Schristos 1231.1Schristossub uniq { 1241.1Schristos local (@inlist) = @_; 1251.1Schristos local (@outlist); 1261.1Schristos 1271.1Schristos @outlist = ($inlist[0]); 1281.1Schristos for ( $i=1; $i < @inlist; $i++ ) { 1291.1Schristos if ($inlist[$i] ne $inlist[$i-1]) { 1301.1Schristos push (@outlist, $inlist[$i]); 1311.1Schristos } 1321.1Schristos } 1331.1Schristos 1341.1Schristos @outlist; 1351.1Schristos} 1361.1Schristos 1371.1Schristossub dumpsrcs { 1381.1Schristos local (@names) = @_; 1391.1Schristos local ($count); 1401.1Schristos 1411.1Schristos $count = 0; 1421.1Schristos while ($f = pop(@names)) { 1431.1Schristos print ODATA "$f "; 1441.1Schristos if ($count == 5 && @names > 0) { 1451.1Schristos print ODATA "\\\n"; 1461.1Schristos $count = 0; 1471.1Schristos } else { 1481.1Schristos $count += 1; 1491.1Schristos } 1501.1Schristos } 1511.1Schristos if ($count != 0) { 1521.1Schristos print ODATA "\n"; 1531.1Schristos } 1541.1Schristos} 1551.1Schristos 1561.1Schristos# 1571.1Schristos# Main progarm. 1581.1Schristos# 1591.1Schristos 1601.1Schristos$srcdir = $ENV{'SRCDIR'}; 1611.1Schristos$targetdir = $ENV{'TARGETDIR'}; 1621.1Schristos$incdirs = "-I. -I$srcdir/config -I$srcdir"; 1631.1Schristos 1641.1Schristosif (!$srcdir | !targetdir) { 1651.1Schristos die "You must define the environment variables SRCDIR and TARGETDIR.\n" 1661.1Schristos} 1671.1Schristosprint "Making the NetBSD directory tree.\n"; 1681.1Schristosforeach $f (@subdirs) { 1691.1Schristos print " -->$f\n"; 1701.1Schristos makedir ("$targetdir/$f"); 1711.1Schristos} 1721.1Schristos 1731.1Schristosprint "Populating the usr.sbin/traceroute directory.\n"; 1741.1Schristos©files ("$srcdir", "$targetdir/usr.sbin/traceroute", @trrtf, @trrthf, @trrtdf, 1751.1Schristos @trrtmf, @trrtaf); 1761.1Schristos 1771.1Schristos# 1781.1Schristos# Build makefiles 1791.1Schristos# 1801.1Schristos 1811.1Schristos$first = "True"; 1821.1Schristoswhile ($line = <DATA>) { 1831.1Schristos chop ($line); 1841.1Schristos if (substr($line,0,2) eq "%%") { 1851.1Schristos @cmd = split (/ /,$line); 1861.1Schristos if ($cmd[1] eq "file") { 1871.1Schristos print "Building $targetdir/$cmd[2]\n"; 1881.1Schristos if ($first eq "") { 1891.1Schristos close (ODATA); 1901.1Schristos } else { 1911.1Schristos $first = ""; 1921.1Schristos } 1931.1Schristos open (ODATA, ">$targetdir/$cmd[2]") || 1941.1Schristos die "Could not create $targetdir/$cmd[2]"; 1951.1Schristos } elsif ($cmd[1] eq "awks") { 1961.1Schristos print " Defining AWKS\n"; 1971.1Schristos if ($first) { 1981.1Schristos die "Data file must start with a %% file!"; 1991.1Schristos } 2001.1Schristos print ODATA "AWKS=\t"; 2011.1Schristos &dumpsrcs (@trrtaf); 2021.1Schristos } elsif ($cmd[1] eq "srcs") { 2031.1Schristos print " Defining SRCS\n"; 2041.1Schristos if ($first) { 2051.1Schristos die "Data file must start with a %% file!"; 2061.1Schristos } 2071.1Schristos print ODATA "SRCS=\t"; 2081.1Schristos &dumpsrcs (@trrtf); 2091.1Schristos } elsif ($cmd[1] eq "man") { 2101.1Schristos print " Defining MAN\n"; 2111.1Schristos if ($first) { 2121.1Schristos die "Data file must start with a %% file!"; 2131.1Schristos } 2141.1Schristos print ODATA "MAN=\t"; 2151.1Schristos &dumpsrcs (@trrtmf); 2161.1Schristos } elsif ($cmd[1] eq "version") { 2171.1Schristos print " Defining VERSION\n"; 2181.1Schristos print ODATA "char version[] = \"$version\";"; 2191.1Schristos } elsif ($cmd[1] eq "NetBSD") { 2201.1Schristos if ($first) { 2211.1Schristos die "Data section must start with a %% file!"; 2221.1Schristos } 2231.1Schristos print ODATA "$cmd[2] \$"."NetBSD".": \$ $cmd[3]\n"; 2241.1Schristos } 2251.1Schristos } else { 2261.1Schristos if ($first) { 2271.1Schristos die "Data file must start with a %% file!"; 2281.1Schristos } 2291.1Schristos print ODATA "$line\n"; 2301.1Schristos } 2311.1Schristos} 2321.1Schristosclose (ODATA); 2331.1Schristos 2341.1Schristos# 2351.1Schristos# Sed transformations of files 2361.1Schristos# 2371.1Schristosforeach $n (keys(%sedlist)) { 2381.1Schristos print "Modifying $n\n"; 2391.1Schristos system ("cd $targetdir; sed $sedlist{$n} $n > tmp; mv -f tmp $n"); 2401.1Schristos} 2411.1Schristos 2421.1Schristos# 2431.1Schristos# end of the script 2441.1Schristos# 2451.1Schristos 2461.1Schristos# what follows is the data for makefiles and other special files 2471.1Schristos# that need to be created. 2481.1Schristos 2491.1Schristos__END__ 2501.1Schristos%% file usr.sbin/traceroute/Makefile 2511.1Schristos%% NetBSD # 2521.1Schristos 2531.1SchristosWARNS?= 1 2541.1SchristosPROG= traceroute 2551.1Schristos%% man 2561.1Schristos 2571.2SlukemCPPFLAGS+=-DHAVE_MALLOC_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SOCKIO_H=1 2581.2SlukemCPPFLAGS+=-DHAVE_STRERROR=1 -DHAVE_SETLINEBUF=1 -DHAVE_SOCKADDR_SA_LEN=1 2591.3SchristosCPPFLAGS+=-DHAVE_RAW_OPTIONS=1 2601.1Schristos 2611.1SchristosBINOWN= root 2621.1SchristosBINMODE=4555 2631.1Schristos 2641.1Schristos%% srcs 2651.1SchristosSRCS+= version.c 2661.1Schristos 2671.1Schristos%% awks 2681.1Schristos 2691.1Schristos.include <bsd.prog.mk> 2701.1Schristos%% file usr.sbin/traceroute/version.c 2711.1Schristos%% NetBSD /* */ 2721.1Schristos%% version 273