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