mksdef.pl revision 193645
1
2# Perl script to split libeay32.def into two distinct DEF files for use in
3# fipdso mode. It works out symbols in each case by running "link" command and
4# parsing the output to find the list of missing symbols then splitting
5# libeay32.def based on the result.
6
7
8# Get list of unknown symbols
9
10my @deferr = `link @ARGV`;
11
12my $preamble = "";
13my @fipsdll;
14my @fipsrest;
15my %nosym;
16
17# Add symbols to a hash for easy lookup
18
19foreach (@deferr)
20	{
21	if (/^.*symbol (\S+)$/)
22		{
23		$nosym{$1} = 1;
24		}
25	}
26
27open (IN, "ms/libeay32.def") || die "Can't Open DEF file for spliting";
28
29my $started = 0;
30
31# Parse libeay32.def into two arrays depending on whether the symbol matches
32# the missing list.
33
34
35foreach (<IN>)
36	{
37	if (/^\s*(\S+)\s*(\@\S+)\s*$/)
38		{
39		$started = 1;
40		if (exists $nosym{$1})
41			{
42			push @fipsrest, $_;
43			}
44		else
45			{
46			my $imptmp = sprintf "     %-39s %s\n",
47					"$1=libosslfips.$1", $2;
48			push @fipsrest, $imptmp;
49			push @fipsdll, "\t$1\n";
50			}
51		}
52	$preamble .= $_ unless $started;
53	}
54
55close IN;
56
57# Hack! Add some additional exports needed for libcryptofips.dll
58#
59
60push @fipsdll, "\tOPENSSL_showfatal\n";
61push @fipsdll, "\tOPENSSL_cpuid_setup\n";
62
63# Write out DEF files for each array
64
65write_def("ms/libosslfips.def", "LIBOSSLFIPS", $preamble, \@fipsdll);
66write_def("ms/libeayfips.def", "", $preamble, \@fipsrest);
67
68
69sub write_def
70	{
71	my ($fnam, $defname, $preamble, $rdefs) = @_;
72	open (OUT, ">$fnam") || die "Can't Open DEF file $fnam for Writing\n";
73
74	if ($defname ne "")
75		{
76		$preamble =~ s/LIBEAY32/$defname/g;
77		$preamble =~ s/LIBEAY/$defname/g;
78		}
79	print OUT $preamble;
80	foreach (@$rdefs)
81		{
82		print OUT $_;
83		}
84	close OUT;
85	}
86
87
88