aboutsummaryrefslogtreecommitdiff
path: root/openssl/util/mksdef.pl
blob: 065dc675f1e252daec9651f14980810afad7a077 (plain)
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;
	}