trrt2netbsd revision 1.3 1 1.1 christos #!/usr/local/bin/perl
2 1.1 christos #
3 1.3 christos # $NetBSD: trrt2netbsd,v 1.3 1999/02/26 22:43:03 christos 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.1 christos # Main progarm.
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