123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- # 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;
- }
|