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