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