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