summaryrefslogtreecommitdiffstats
path: root/win32utils/legacy/makedefs.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--win32utils/legacy/makedefs.pl165
1 files changed, 165 insertions, 0 deletions
diff --git a/win32utils/legacy/makedefs.pl b/win32utils/legacy/makedefs.pl
new file mode 100644
index 0000000..0d7f54f
--- /dev/null
+++ b/win32utils/legacy/makedefs.pl
@@ -0,0 +1,165 @@
+#!/usr/bin/perl
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# $Id$
+
+# makedefs.pl
+# This script goes through all of the lib header files and creates a .def file
+# for each DLL for Win32. It recurses as necessary through the subdirectories
+#
+# This program should only be run if it is necessary to regenerate
+# the .def files. Normally these files should be updated by hand, adding
+# new functions to the end and removing obsolete ones.
+# If you do regenerate them you will also need to modify them by hand to
+# to pick up those routines not detected by this program (like openlog).
+#
+# Search String: ^(([_a-z0-9])*( ))*prefix_[_a-z0-9]+_[a-z0-9]+( )*\(
+# List of directories
+
+@prefixlist = ("isc", "isccfg", "dns", "isccc", "bind9", "lwres", "irs");
+@iscdirlist = ("isc/include/isc","isc/win32/include/isc","isc/include/pk11",
+ "isc/include/pkcs11","isc/win32/include/pkcs11");
+@iscprefixlist = ("isc", "pk11", "pkcs");
+
+@isccfgdirlist = ("isccfg/include/isccfg");
+@isccfgprefixlist = ("cfg");
+
+@iscccdirlist = ("isccc/include/isccc");
+@iscccprefixlist = ("isccc");
+
+@dnsdirlist = ("dns/include/dns","dns/include/dst");
+@dnsprefixlist = ("dns", "dst");
+
+@lwresdirlist = ("lwres/include/lwres","lwres/win32/include/lwres");
+@lwresprefixlist = ("lwres");
+
+@bind9dirlist = ("bind9/include/bind9");
+@bind9prefixlist = ("bind9");
+
+@irsdirlist = ("irs/include/irs","irs/win32/include/irs");
+@irsprefixlist = ("irs");
+
+# Run the changes for each directory in the directory list
+
+$ind = 0;
+createoutfile($iscprefixlist[0]);
+foreach $dir (@iscdirlist) {
+ createdeffile($dir, $iscprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($isccfgprefixlist[0]);
+foreach $dir (@isccfgdirlist) {
+ createdeffile($dir, $isccfgprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($dnsprefixlist[0]);
+foreach $dir (@dnsdirlist) {
+ createdeffile($dir, $dnsprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($iscccprefixlist[0]);
+foreach $dir (@iscccdirlist) {
+ createdeffile($dir, $iscccprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($lwresprefixlist[0]);
+foreach $dir (@lwresdirlist) {
+ createdeffile($dir, $lwresprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($bind9prefixlist[0]);
+foreach $dir (@bind9dirlist) {
+ createdeffile($dir, $bind9prefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+$ind = 0;
+createoutfile($irsprefixlist[0]);
+foreach $dir (@irsdirlist) {
+ createdeffile($dir, $irsprefixlist[$ind]);
+ $ind++;
+}
+close OUTDEFFILE;
+
+exit;
+
+#
+# Subroutines
+#
+sub createdeffile {
+ $xdir = $_[0];
+
+ #
+ # Get the List of files in the directory to be processed.
+ #
+ #^(([_a-z0-9])*( ))*prefix_[_a-z]+_[a-z]+( )*\(
+ $prefix = $_[1];
+ $pattern = "\^\(\(\[\_a\-z0\-9\]\)\*\( \)\)\*\(\\*\( \)\+\)\*$prefix";
+ $pattern = "$pattern\_\[\_a\-z0\-9\]\+_\[a\-z0\-9\]\+\( \)\*\\\(";
+
+ opendir(DIR,$xdir) || die "No Directory: $!";
+ @files = grep(/\.h$/i, readdir(DIR));
+ closedir(DIR);
+
+ foreach $filename (sort @files) {
+ #
+ # Open the file and locate the pattern.
+ #
+ open (HFILE, "$xdir/$filename") ||
+ die "Can't open file $filename : $!";
+
+ while (<HFILE>) {
+ if(/$pattern/) {
+ $func = $&;
+ chop($func);
+ $space = rindex($func, " ") + 1;
+ if($space >= 0) {
+ # strip out return values
+ $func = substr($func, $space, 100);
+ }
+ print OUTDEFFILE "$func\n";
+ }
+ }
+ # Set up the Patterns
+ close(HFILE);
+ }
+}
+
+# This is the routine that applies the changes
+
+# output the result to the platform specific directory.
+sub createoutfile {
+ $outfile = "lib$_[0].def";
+
+ open (OUTDEFFILE, ">$outfile")
+ || die "Can't open output file $outfile: $!";
+ print OUTDEFFILE "LIBRARY lib$_[0]\n";
+ print OUTDEFFILE "\n";
+ print OUTDEFFILE "; Exported Functions\n";
+ print OUTDEFFILE "EXPORTS\n";
+ print OUTDEFFILE "\n";
+}