| OLD | NEW |
| (Empty) |
| 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 | |
| 10 my @deferr = `link @ARGV`; | |
| 11 | |
| 12 my $preamble = ""; | |
| 13 my @fipsdll; | |
| 14 my @fipsrest; | |
| 15 my %nosym; | |
| 16 | |
| 17 # Add symbols to a hash for easy lookup | |
| 18 | |
| 19 foreach (@deferr) | |
| 20 { | |
| 21 if (/^.*symbol (\S+)$/) | |
| 22 { | |
| 23 $nosym{$1} = 1; | |
| 24 } | |
| 25 } | |
| 26 | |
| 27 open (IN, "ms/libeay32.def") || die "Can't Open DEF file for spliting"; | |
| 28 | |
| 29 my $started = 0; | |
| 30 | |
| 31 # Parse libeay32.def into two arrays depending on whether the symbol matches | |
| 32 # the missing list. | |
| 33 | |
| 34 | |
| 35 foreach (<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 | |
| 55 close IN; | |
| 56 | |
| 57 # Hack! Add some additional exports needed for libcryptofips.dll | |
| 58 # | |
| 59 | |
| 60 push @fipsdll, "\tOPENSSL_showfatal\n"; | |
| 61 push @fipsdll, "\tOPENSSL_cpuid_setup\n"; | |
| 62 | |
| 63 # Write out DEF files for each array | |
| 64 | |
| 65 write_def("ms/libosslfips.def", "LIBOSSLFIPS", $preamble, \@fipsdll); | |
| 66 write_def("ms/libeayfips.def", "", $preamble, \@fipsrest); | |
| 67 | |
| 68 | |
| 69 sub 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 | |
| OLD | NEW |