xref: /minix3/external/bsd/bind/dist/win32utils/legacy/makedefs.pl (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#!/usr/bin/perl
2*00b67f09SDavid van Moolenbroek#
3*00b67f09SDavid van Moolenbroek# Copyright (C) 2004, 2007, 2009, 2012-2014  Internet Systems Consortium, Inc. ("ISC")
4*00b67f09SDavid van Moolenbroek# Copyright (C) 2001  Internet Software Consortium.
5*00b67f09SDavid van Moolenbroek#
6*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek#
10*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek
18*00b67f09SDavid van Moolenbroek# Id
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van Moolenbroek# makedefs.pl
21*00b67f09SDavid van Moolenbroek# This script goes through all of the lib header files and creates a .def file
22*00b67f09SDavid van Moolenbroek# for each DLL for Win32. It recurses as necessary through the subdirectories
23*00b67f09SDavid van Moolenbroek#
24*00b67f09SDavid van Moolenbroek# This program should only be run if it is necessary to regenerate
25*00b67f09SDavid van Moolenbroek# the .def files.  Normally these files should be updated by  hand, adding
26*00b67f09SDavid van Moolenbroek# new functions to the end and removing obsolete ones.
27*00b67f09SDavid van Moolenbroek# If you do regenerate them you will also need to modify them by hand to
28*00b67f09SDavid van Moolenbroek# to pick up those routines not detected by this program (like openlog).
29*00b67f09SDavid van Moolenbroek#
30*00b67f09SDavid van Moolenbroek# Search String: ^(([_a-z0-9])*( ))*prefix_[_a-z0-9]+_[a-z0-9]+( )*\(
31*00b67f09SDavid van Moolenbroek# List of directories
32*00b67f09SDavid van Moolenbroek
33*00b67f09SDavid van Moolenbroek@prefixlist = ("isc", "isccfg", "dns", "isccc", "bind9", "lwres", "irs");
34*00b67f09SDavid van Moolenbroek@iscdirlist = ("isc/include/isc","isc/win32/include/isc","isc/include/pk11",
35*00b67f09SDavid van Moolenbroek	       "isc/include/pkcs11","isc/win32/include/pkcs11");
36*00b67f09SDavid van Moolenbroek@iscprefixlist = ("isc", "pk11", "pkcs");
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek@isccfgdirlist = ("isccfg/include/isccfg");
39*00b67f09SDavid van Moolenbroek@isccfgprefixlist = ("cfg");
40*00b67f09SDavid van Moolenbroek
41*00b67f09SDavid van Moolenbroek@iscccdirlist = ("isccc/include/isccc");
42*00b67f09SDavid van Moolenbroek@iscccprefixlist = ("isccc");
43*00b67f09SDavid van Moolenbroek
44*00b67f09SDavid van Moolenbroek@dnsdirlist = ("dns/include/dns","dns/include/dst");
45*00b67f09SDavid van Moolenbroek@dnsprefixlist = ("dns", "dst");
46*00b67f09SDavid van Moolenbroek
47*00b67f09SDavid van Moolenbroek@lwresdirlist = ("lwres/include/lwres","lwres/win32/include/lwres");
48*00b67f09SDavid van Moolenbroek@lwresprefixlist = ("lwres");
49*00b67f09SDavid van Moolenbroek
50*00b67f09SDavid van Moolenbroek@bind9dirlist = ("bind9/include/bind9");
51*00b67f09SDavid van Moolenbroek@bind9prefixlist = ("bind9");
52*00b67f09SDavid van Moolenbroek
53*00b67f09SDavid van Moolenbroek@irsdirlist = ("irs/include/irs","irs/win32/include/irs");
54*00b67f09SDavid van Moolenbroek@irsprefixlist = ("irs");
55*00b67f09SDavid van Moolenbroek
56*00b67f09SDavid van Moolenbroek# Run the changes for each directory in the directory list
57*00b67f09SDavid van Moolenbroek
58*00b67f09SDavid van Moolenbroek$ind = 0;
59*00b67f09SDavid van Moolenbroekcreateoutfile($iscprefixlist[0]);
60*00b67f09SDavid van Moolenbroekforeach $dir (@iscdirlist) {
61*00b67f09SDavid van Moolenbroek	createdeffile($dir, $iscprefixlist[$ind]);
62*00b67f09SDavid van Moolenbroek	$ind++;
63*00b67f09SDavid van Moolenbroek}
64*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
65*00b67f09SDavid van Moolenbroek
66*00b67f09SDavid van Moolenbroek$ind = 0;
67*00b67f09SDavid van Moolenbroekcreateoutfile($isccfgprefixlist[0]);
68*00b67f09SDavid van Moolenbroekforeach $dir (@isccfgdirlist) {
69*00b67f09SDavid van Moolenbroek	createdeffile($dir, $isccfgprefixlist[$ind]);
70*00b67f09SDavid van Moolenbroek	$ind++;
71*00b67f09SDavid van Moolenbroek}
72*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
73*00b67f09SDavid van Moolenbroek
74*00b67f09SDavid van Moolenbroek$ind = 0;
75*00b67f09SDavid van Moolenbroekcreateoutfile($dnsprefixlist[0]);
76*00b67f09SDavid van Moolenbroekforeach $dir (@dnsdirlist) {
77*00b67f09SDavid van Moolenbroek	createdeffile($dir, $dnsprefixlist[$ind]);
78*00b67f09SDavid van Moolenbroek	$ind++;
79*00b67f09SDavid van Moolenbroek}
80*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
81*00b67f09SDavid van Moolenbroek
82*00b67f09SDavid van Moolenbroek$ind = 0;
83*00b67f09SDavid van Moolenbroekcreateoutfile($iscccprefixlist[0]);
84*00b67f09SDavid van Moolenbroekforeach $dir (@iscccdirlist) {
85*00b67f09SDavid van Moolenbroek	createdeffile($dir, $iscccprefixlist[$ind]);
86*00b67f09SDavid van Moolenbroek	$ind++;
87*00b67f09SDavid van Moolenbroek}
88*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
89*00b67f09SDavid van Moolenbroek
90*00b67f09SDavid van Moolenbroek$ind = 0;
91*00b67f09SDavid van Moolenbroekcreateoutfile($lwresprefixlist[0]);
92*00b67f09SDavid van Moolenbroekforeach $dir (@lwresdirlist) {
93*00b67f09SDavid van Moolenbroek	createdeffile($dir, $lwresprefixlist[$ind]);
94*00b67f09SDavid van Moolenbroek	$ind++;
95*00b67f09SDavid van Moolenbroek}
96*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
97*00b67f09SDavid van Moolenbroek
98*00b67f09SDavid van Moolenbroek$ind = 0;
99*00b67f09SDavid van Moolenbroekcreateoutfile($bind9prefixlist[0]);
100*00b67f09SDavid van Moolenbroekforeach $dir (@bind9dirlist) {
101*00b67f09SDavid van Moolenbroek	createdeffile($dir, $bind9prefixlist[$ind]);
102*00b67f09SDavid van Moolenbroek	$ind++;
103*00b67f09SDavid van Moolenbroek}
104*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
105*00b67f09SDavid van Moolenbroek
106*00b67f09SDavid van Moolenbroek$ind = 0;
107*00b67f09SDavid van Moolenbroekcreateoutfile($irsprefixlist[0]);
108*00b67f09SDavid van Moolenbroekforeach $dir (@irsdirlist) {
109*00b67f09SDavid van Moolenbroek	createdeffile($dir, $irsprefixlist[$ind]);
110*00b67f09SDavid van Moolenbroek	$ind++;
111*00b67f09SDavid van Moolenbroek}
112*00b67f09SDavid van Moolenbroekclose OUTDEFFILE;
113*00b67f09SDavid van Moolenbroek
114*00b67f09SDavid van Moolenbroekexit;
115*00b67f09SDavid van Moolenbroek
116*00b67f09SDavid van Moolenbroek#
117*00b67f09SDavid van Moolenbroek# Subroutines
118*00b67f09SDavid van Moolenbroek#
119*00b67f09SDavid van Moolenbroeksub createdeffile {
120*00b67f09SDavid van Moolenbroek	$xdir = $_[0];
121*00b67f09SDavid van Moolenbroek
122*00b67f09SDavid van Moolenbroek	#
123*00b67f09SDavid van Moolenbroek	# Get the List of files in the directory to be processed.
124*00b67f09SDavid van Moolenbroek	#
125*00b67f09SDavid van Moolenbroek	#^(([_a-z0-9])*( ))*prefix_[_a-z]+_[a-z]+( )*\(
126*00b67f09SDavid van Moolenbroek	$prefix = $_[1];
127*00b67f09SDavid van Moolenbroek	$pattern = "\^\(\(\[\_a\-z0\-9\]\)\*\( \)\)\*\(\\*\( \)\+\)\*$prefix";
128*00b67f09SDavid van Moolenbroek	$pattern = "$pattern\_\[\_a\-z0\-9\]\+_\[a\-z0\-9\]\+\( \)\*\\\(";
129*00b67f09SDavid van Moolenbroek
130*00b67f09SDavid van Moolenbroek	opendir(DIR,$xdir) || die "No Directory: $!";
131*00b67f09SDavid van Moolenbroek	@files = grep(/\.h$/i, readdir(DIR));
132*00b67f09SDavid van Moolenbroek	closedir(DIR);
133*00b67f09SDavid van Moolenbroek
134*00b67f09SDavid van Moolenbroek	foreach $filename (sort @files) {
135*00b67f09SDavid van Moolenbroek		#
136*00b67f09SDavid van Moolenbroek		# Open the file and locate the pattern.
137*00b67f09SDavid van Moolenbroek		#
138*00b67f09SDavid van Moolenbroek		open (HFILE, "$xdir/$filename") ||
139*00b67f09SDavid van Moolenbroek		      die "Can't open file $filename : $!";
140*00b67f09SDavid van Moolenbroek
141*00b67f09SDavid van Moolenbroek		while (<HFILE>) {
142*00b67f09SDavid van Moolenbroek			if(/$pattern/) {
143*00b67f09SDavid van Moolenbroek				$func = $&;
144*00b67f09SDavid van Moolenbroek				chop($func);
145*00b67f09SDavid van Moolenbroek				$space = rindex($func, " ") + 1;
146*00b67f09SDavid van Moolenbroek				if($space >= 0) {
147*00b67f09SDavid van Moolenbroek					# strip out return values
148*00b67f09SDavid van Moolenbroek					$func = substr($func, $space, 100);
149*00b67f09SDavid van Moolenbroek				}
150*00b67f09SDavid van Moolenbroek				print OUTDEFFILE "$func\n";
151*00b67f09SDavid van Moolenbroek			}
152*00b67f09SDavid van Moolenbroek		}
153*00b67f09SDavid van Moolenbroek		# Set up the Patterns
154*00b67f09SDavid van Moolenbroek		close(HFILE);
155*00b67f09SDavid van Moolenbroek	}
156*00b67f09SDavid van Moolenbroek}
157*00b67f09SDavid van Moolenbroek
158*00b67f09SDavid van Moolenbroek# This is the routine that applies the changes
159*00b67f09SDavid van Moolenbroek
160*00b67f09SDavid van Moolenbroek# output the result to the platform specific directory.
161*00b67f09SDavid van Moolenbroeksub createoutfile {
162*00b67f09SDavid van Moolenbroek	$outfile = "lib$_[0].def";
163*00b67f09SDavid van Moolenbroek
164*00b67f09SDavid van Moolenbroek	open (OUTDEFFILE, ">$outfile")
165*00b67f09SDavid van Moolenbroek	    || die "Can't open output file $outfile: $!";
166*00b67f09SDavid van Moolenbroek	print OUTDEFFILE "LIBRARY lib$_[0]\n";
167*00b67f09SDavid van Moolenbroek	print OUTDEFFILE "\n";
168*00b67f09SDavid van Moolenbroek	print OUTDEFFILE "; Exported Functions\n";
169*00b67f09SDavid van Moolenbroek	print OUTDEFFILE "EXPORTS\n";
170*00b67f09SDavid van Moolenbroek	print OUTDEFFILE "\n";
171*00b67f09SDavid van Moolenbroek}
172