~ubuntu-branches/ubuntu/maverick/openssl/maverick-security

« back to all changes in this revision

Viewing changes to .pc/perl-path.diff/util/pl/VC-32.pl

  • Committer: Bazaar Package Importer
  • Author(s): Marc Deslauriers
  • Date: 2010-06-14 09:08:29 UTC
  • mfrom: (11.1.14 sid)
  • Revision ID: james.westby@ubuntu.com-20100614090829-nf3nrftn7ly58mxv
Tags: 0.9.8o-1ubuntu1
* Merge from debian unstable, remaining changes (LP: #581167):
  - debian/patches/Bsymbolic-functions.patch: Link using
    -Bsymbolic-functions
  - Ship documentation in openssl-doc, suggested by the package.
  - Use a different priority for libssl0.9.8/restart-services
    depending on whether a desktop, or server dist-upgrade is being
    performed.
  - Display a system restart required notification bubble on libssl0.9.8
    upgrade.
  - Replace duplicate files in the doc directory with symlinks.
  - Move runtime libraries to /lib, for the benefit of wpasupplicant
  - Use host compiler when cross-building (patch from Neil Williams in
    Debian #465248).
  - Don't run 'make test' when cross-building.
  - Create libssl0.9.8-udeb, for the benefit of wget-udeb (LP: #503339).
  - debian/patches/aesni.patch: Backport Intel AES-NI support from
    http://rt.openssl.org/Ticket/Display.html?id=2067 (LP: #485518).
  - debian/patches/perlpath-quilt.patch: Don't change perl #! paths
    under .pc.
* Dropped patches, now upstream:
  - debian/patches/CVE-2009-3245.patch
  - debian/patches/CVE-2010-0740.patch
  - debian/patches/dtls-compatibility.patch
  - debian/patches/CVE-2009-4355.patch
* Dropped "Add support for lpia".
* Dropped "Disable SSLv2 during compile" as this had never actually
  disabled SSLv2.
* Don't disable CVE-2009-3555.patch for Maverick.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/local/bin/perl
 
2
# VC-32.pl - unified script for Microsoft Visual C++, covering Win32,
 
3
# Win64 and WinCE [follow $FLAVOR variable to trace the differences].
 
4
#
 
5
 
 
6
$ssl=   "ssleay32";
 
7
 
 
8
if ($fips && !$shlib)
 
9
        {
 
10
        $crypto="libeayfips32";
 
11
        $crypto_compat = "libeaycompat32.lib";
 
12
        }
 
13
else
 
14
        {
 
15
        $crypto="libeay32";
 
16
        }
 
17
 
 
18
if ($fipscanisterbuild)
 
19
        {
 
20
        $fips_canister_path = "\$(LIB_D)\\fipscanister.lib";
 
21
        }
 
22
 
 
23
$o='\\';
 
24
$cp='$(PERL) util/copy.pl';
 
25
$mkdir='$(PERL) util/mkdir-p.pl';
 
26
$rm='del /Q';
 
27
 
 
28
$zlib_lib="zlib1.lib";
 
29
 
 
30
# Santize -L options for ms link
 
31
$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g;
 
32
$l_flags =~ s/-L(\S+)/\/libpath:$1/g;
 
33
 
 
34
# C compiler stuff
 
35
$cc='cl';
 
36
if ($FLAVOR =~ /WIN64/)
 
37
    {
 
38
    # Note that we currently don't have /WX on Win64! There is a lot of
 
39
    # warnings, but only of two types:
 
40
    #
 
41
    # C4344: conversion from '__int64' to 'int/long', possible loss of data
 
42
    # C4267: conversion from 'size_t' to 'int/long', possible loss of data
 
43
    #
 
44
    # Amount of latter type is minimized by aliasing strlen to function of
 
45
    # own desing and limiting its return value to 2GB-1 (see e_os.h). As
 
46
    # per 0.9.8 release remaining warnings were explicitly examined and
 
47
    # considered safe to ignore.
 
48
    # 
 
49
    $base_cflags=' /W3 /Gs0 /GF /Gy /nologo -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DOPENSSL_SYSNAME_WIN32 -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE';
 
50
    $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE';        # shut up VC8
 
51
    $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE';       # shut up VC8
 
52
    my $f = $shlib || $fips ?' /MD':' /MT';
 
53
    $lib_cflag='/Zl' if (!$shlib);      # remove /DEFAULTLIBs from static lib
 
54
    $opt_cflags=$f.' /Ox';
 
55
    $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
 
56
    $lflags="/nologo /subsystem:console /opt:ref";
 
57
    }
 
58
elsif ($FLAVOR =~ /CE/)
 
59
    {
 
60
    # sanity check
 
61
    die '%OSVERSION% is not defined'    if (!defined($ENV{'OSVERSION'}));
 
62
    die '%PLATFORM% is not defined'     if (!defined($ENV{'PLATFORM'}));
 
63
    die '%TARGETCPU% is not defined'    if (!defined($ENV{'TARGETCPU'}));
 
64
 
 
65
    #
 
66
    # Idea behind this is to mimic flags set by eVC++ IDE...
 
67
    #
 
68
    $wcevers = $ENV{'OSVERSION'};                       # WCENNN
 
69
    die '%OSVERSION% value is insane'   if ($wcevers !~ /^WCE([1-9])([0-9]{2})$/);
 
70
    $wcecdefs = "-D_WIN32_WCE=$1$2 -DUNDER_CE=$1$2";    # -D_WIN32_WCE=NNN
 
71
    $wcelflag = "/subsystem:windowsce,$1.$2";           # ...,N.NN
 
72
 
 
73
    $wceplatf =  $ENV{'PLATFORM'};
 
74
    $wceplatf =~ tr/a-z0-9 /A-Z0-9_/d;
 
75
    $wcecdefs .= " -DWCE_PLATFORM_$wceplatf";
 
76
 
 
77
    $wcetgt = $ENV{'TARGETCPU'};        # just shorter name...
 
78
    SWITCH: for($wcetgt) {
 
79
        /^X86/          && do { $wcecdefs.=" -Dx86 -D_X86_ -D_i386_ -Di_386_";
 
80
                                $wcelflag.=" /machine:IX86";    last; };
 
81
        /^ARMV4[IT]/    && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt";
 
82
                                $wcecdefs.=" -DTHUMB -D_THUMB_" if($wcetgt=~/T$/);
 
83
                                $wcecdefs.=" -QRarch4T -QRinterwork-return";
 
84
                                $wcelflag.=" /machine:THUMB";   last; };
 
85
        /^ARM/          && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt";
 
86
                                $wcelflag.=" /machine:ARM";     last; };
 
87
        /^MIPSIV/       && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
 
88
                                $wcecdefs.=" -D_MIPS64 -QMmips4 -QMn32";
 
89
                                $wcelflag.=" /machine:MIPSFPU"; last; };
 
90
        /^MIPS16/       && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
 
91
                                $wcecdefs.=" -DMIPSII -QMmips16";
 
92
                                $wcelflag.=" /machine:MIPS16";  last; };
 
93
        /^MIPSII/       && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
 
94
                                $wcecdefs.=" -QMmips2";
 
95
                                $wcelflag.=" /machine:MIPS";    last; };
 
96
        /^R4[0-9]{3}/   && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000";
 
97
                                $wcelflag.=" /machine:MIPS";    last; };
 
98
        /^SH[0-9]/      && do { $wcecdefs.=" -D$wcetgt -D_$wcetgt_ -DSHx";
 
99
                                $wcecdefs.=" -Qsh4" if ($wcetgt =~ /^SH4/);
 
100
                                $wcelflag.=" /machine:$wcetgt"; last; };
 
101
        { $wcecdefs.=" -D$wcetgt -D_$wcetgt_";
 
102
          $wcelflag.=" /machine:$wcetgt";                       last; };
 
103
    }
 
104
 
 
105
    $cc='$(CC)';
 
106
    $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -I$(WCECOMPAT)/include -DOPENSSL_SMALL_FOOTPRINT';
 
107
    $base_cflags.=" $wcecdefs";
 
108
    $opt_cflags=' /MC /O1i';    # optimize for space, but with intrinsics...
 
109
    $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG';
 
110
    $lflags="/nologo /opt:ref $wcelflag";
 
111
    }
 
112
else    # Win32
 
113
    {
 
114
    $base_cflags=' /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32';
 
115
    $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE';        # shut up VC8
 
116
    $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE';       # shut up VC8
 
117
    my $f = $shlib || $fips ?' /MD':' /MT';
 
118
    $lib_cflag='/Zl' if (!$shlib);      # remove /DEFAULTLIBs from static lib
 
119
    $opt_cflags=$f.' /Ox /O2 /Ob2';
 
120
    $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
 
121
    $lflags="/nologo /subsystem:console /opt:ref";
 
122
    }
 
123
$mlflags='';
 
124
 
 
125
$out_def="out32"; $out_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/);
 
126
$tmp_def="tmp32"; $tmp_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/);
 
127
$inc_def="inc32";
 
128
 
 
129
if ($debug)
 
130
        {
 
131
        $cflags=$dbg_cflags.$base_cflags.' /Zi';
 
132
        $lflags.=" /debug";
 
133
        $mlflags.=' /debug';
 
134
        }
 
135
else
 
136
        {
 
137
        $cflags=$opt_cflags.$base_cflags;
 
138
        }
 
139
 
 
140
$obj='.obj';
 
141
$ofile="/Fo";
 
142
 
 
143
# EXE linking stuff
 
144
$link="link";
 
145
$rsc="rc";
 
146
$efile="/out:";
 
147
$exep='.exe';
 
148
if ($no_sock)           { $ex_libs=''; }
 
149
elsif ($FLAVOR =~ /CE/) { $ex_libs='winsock.lib'; }
 
150
else                    { $ex_libs='wsock32.lib'; }
 
151
 
 
152
my $oflow;
 
153
 
 
154
 
 
155
if ($FLAVOR =~ /WIN64/ and `cl 2>&1` =~ /14\.00\.4[0-9]{4}\./)
 
156
        {
 
157
        $oflow=' bufferoverflowu.lib';
 
158
        }
 
159
else
 
160
        {
 
161
        $oflow="";
 
162
        }
 
163
 
 
164
if ($FLAVOR =~ /CE/)
 
165
        {
 
166
        $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib';
 
167
        $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86");
 
168
        }
 
169
else
 
170
        {
 
171
        $ex_libs.=' gdi32.lib crypt32.lib advapi32.lib user32.lib';
 
172
        $ex_libs.= $oflow;
 
173
 
 
174
        }
 
175
 
 
176
# As native NT API is pure UNICODE, our WIN-NT build defaults to UNICODE,
 
177
# but gets linked with unicows.lib to ensure backward compatibility.
 
178
if ($FLAVOR =~ /NT/)
 
179
        {
 
180
        $cflags.=" -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE";
 
181
        $ex_libs="unicows.lib $ex_libs";
 
182
        }
 
183
# static library stuff
 
184
$mklib='lib /nologo';
 
185
$ranlib='';
 
186
$plib="";
 
187
$libp=".lib";
 
188
$shlibp=($shlib)?".dll":".lib";
 
189
$lfile='/out:';
 
190
 
 
191
$shlib_ex_obj="";
 
192
$app_ex_obj="setargv.obj" if ($FLAVOR !~ /CE/);
 
193
if ($nasm) {
 
194
        my $ver=`nasm -v 2>NUL`;
 
195
        my $vew=`nasmw -v 2>NUL`;
 
196
        # pick newest version
 
197
        $asm=($ver gt $vew?"nasm":"nasmw")." -f win32";
 
198
        $afile='-o ';
 
199
} elsif ($ml64) {
 
200
        $asm='ml64 /c /Cp /Cx';
 
201
        $asm.=' /Zi' if $debug;
 
202
        $afile='/Fo';
 
203
} else {
 
204
        $asm='ml /nologo /Cp /coff /c /Cx';
 
205
        $asm.=" /Zi" if $debug;
 
206
        $afile='/Fo';
 
207
}
 
208
 
 
209
$aes_asm_obj='';
 
210
$bn_asm_obj='';
 
211
$bn_asm_src='';
 
212
$des_enc_obj='';
 
213
$des_enc_src='';
 
214
$bf_enc_obj='';
 
215
$bf_enc_src='';
 
216
 
 
217
if (!$no_asm)
 
218
    {
 
219
    if ($FLAVOR =~ "WIN32")
 
220
        {
 
221
        $aes_asm_obj='crypto\aes\asm\a_win32.obj';
 
222
        $aes_asm_src='crypto\aes\asm\a_win32.asm';
 
223
        $bn_asm_obj='crypto\bn\asm\bn_win32.obj crypto\bn\asm\mt_win32.obj';
 
224
        $bn_asm_src='crypto\bn\asm\bn_win32.asm crypto\bn\asm\mt_win32.asm';
 
225
        $bnco_asm_obj='crypto\bn\asm\co_win32.obj';
 
226
        $bnco_asm_src='crypto\bn\asm\co_win32.asm';
 
227
        $des_enc_obj='crypto\des\asm\d_win32.obj crypto\des\asm\y_win32.obj';
 
228
        $des_enc_src='crypto\des\asm\d_win32.asm crypto\des\asm\y_win32.asm';
 
229
        $bf_enc_obj='crypto\bf\asm\b_win32.obj';
 
230
        $bf_enc_src='crypto\bf\asm\b_win32.asm';
 
231
        $cast_enc_obj='crypto\cast\asm\c_win32.obj';
 
232
        $cast_enc_src='crypto\cast\asm\c_win32.asm';
 
233
        $rc4_enc_obj='crypto\rc4\asm\r4_win32.obj';
 
234
        $rc4_enc_src='crypto\rc4\asm\r4_win32.asm';
 
235
        $rc5_enc_obj='crypto\rc5\asm\r5_win32.obj';
 
236
        $rc5_enc_src='crypto\rc5\asm\r5_win32.asm';
 
237
        $md5_asm_obj='crypto\md5\asm\m5_win32.obj';
 
238
        $md5_asm_src='crypto\md5\asm\m5_win32.asm';
 
239
        $sha1_asm_obj='crypto\sha\asm\s1_win32.obj crypto\sha\asm\sha512-sse2.obj';
 
240
        $sha1_asm_src='crypto\sha\asm\s1_win32.asm crypto\sha\asm\sha512-sse2.asm';
 
241
        $rmd160_asm_obj='crypto\ripemd\asm\rm_win32.obj';
 
242
        $rmd160_asm_src='crypto\ripemd\asm\rm_win32.asm';
 
243
        $cpuid_asm_obj='crypto\cpu_win32.obj';
 
244
        $cpuid_asm_src='crypto\cpu_win32.asm';
 
245
        $cflags.=" -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DAES_ASM -DBN_ASM -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_BN_ASM_MONT -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
 
246
        }
 
247
    elsif ($FLAVOR =~ "WIN64A")
 
248
        {
 
249
        $aes_asm_obj='$(OBJ_D)\aes-x86_64.obj';
 
250
        $aes_asm_src='crypto\aes\asm\aes-x86_64.asm';
 
251
        $bn_asm_obj='$(OBJ_D)\x86_64-mont.obj $(OBJ_D)\bn_asm.obj';
 
252
        $bn_asm_src='crypto\bn\asm\x86_64-mont.asm';
 
253
        $sha1_asm_obj='$(OBJ_D)\sha1-x86_64.obj $(OBJ_D)\sha256-x86_64.obj $(OBJ_D)\sha512-x86_64.obj';
 
254
        $sha1_asm_src='crypto\sha\asm\sha1-x86_64.asm crypto\sha\asm\sha256-x86_64.asm crypto\sha\asm\sha512-x86_64.asm';
 
255
        $cpuid_asm_obj='$(OBJ_D)\cpuid-x86_64.obj';
 
256
        $cpuid_asm_src='crypto\cpuid-x86_64.asm';
 
257
        $cflags.=" -DOPENSSL_CPUID_OBJ -DAES_ASM -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM";
 
258
        }
 
259
    }
 
260
 
 
261
if ($shlib && $FLAVOR !~ /CE/)
 
262
        {
 
263
        $mlflags.=" $lflags /dll";
 
264
#       $cflags =~ s| /MD| /MT|;
 
265
        $lib_cflag=" -D_WINDLL";
 
266
        $out_def="out32dll";
 
267
        $tmp_def="tmp32dll";
 
268
        #
 
269
        # Engage Applink...
 
270
        #
 
271
        $app_ex_obj.=" \$(OBJ_D)\\applink.obj /implib:\$(TMP_D)\\junk.lib";
 
272
        $cflags.=" -DOPENSSL_USE_APPLINK -I.";
 
273
        # I'm open for better suggestions than overriding $banner...
 
274
        $banner=<<'___';
 
275
        @echo Building OpenSSL
 
276
 
 
277
$(OBJ_D)\applink.obj:   ms\applink.c
 
278
        $(CC) /Fo$(OBJ_D)\applink.obj $(APP_CFLAGS) -c ms\applink.c
 
279
$(OBJ_D)\uplink.obj:    ms\uplink.c ms\applink.c
 
280
        $(CC) /Fo$(OBJ_D)\uplink.obj $(SHLIB_CFLAGS) -c ms\uplink.c
 
281
$(INCO_D)\applink.c:    ms\applink.c
 
282
        $(CP) ms\applink.c $(INCO_D)\applink.c
 
283
 
 
284
EXHEADER= $(EXHEADER) $(INCO_D)\applink.c
 
285
 
 
286
LIBS_DEP=$(LIBS_DEP) $(OBJ_D)\applink.obj
 
287
___
 
288
$banner .= "CRYPTOOBJ=\$(OBJ_D)\\uplink.obj \$(CRYPTOOBJ)\n";
 
289
        $banner.=<<'___' if ($FLAVOR =~ /WIN64/);
 
290
CRYPTOOBJ=ms\uptable.obj $(CRYPTOOBJ)
 
291
___
 
292
        }
 
293
elsif ($shlib && $FLAVOR =~ /CE/)
 
294
        {
 
295
        $mlflags.=" $lflags /dll";
 
296
        $lib_cflag=" -D_WINDLL -D_DLL";
 
297
        $out_def='out32dll_$(TARGETCPU)';
 
298
        $tmp_def='tmp32dll_$(TARGETCPU)';
 
299
        }
 
300
 
 
301
$cflags.=" /Fd$out_def";
 
302
 
 
303
sub do_lib_rule
 
304
        {
 
305
        my($objs,$target,$name,$shlib,$ign,$base_addr) = @_;
 
306
        local($ret);
 
307
 
 
308
        $taget =~ s/\//$o/g if $o ne '/';
 
309
        my $base_arg;
 
310
        if ($base_addr ne "")
 
311
                {
 
312
                $base_arg= " /base:$base_addr";
 
313
                }
 
314
        else
 
315
                {
 
316
                $base_arg = "";
 
317
                }
 
318
        if ($target =~ /O_CRYPTO/ && $fipsdso)
 
319
                {
 
320
                $name = "/def:ms/libeayfips.def";
 
321
                }
 
322
        elsif ($name ne "")
 
323
                {
 
324
                $name =~ tr/a-z/A-Z/;
 
325
                $name = "/def:ms/${name}.def";
 
326
                }
 
327
 
 
328
#       $target="\$(LIB_D)$o$target";
 
329
#       $ret.="$target: $objs\n";
 
330
        if (!$shlib)
 
331
                {
 
332
#               $ret.="\t\$(RM) \$(O_$Name)\n";
 
333
                $ex =' ';
 
334
                $ret.="$target: $objs\n";
 
335
                $ret.="\t\$(MKLIB) $lfile$target @<<\n  $objs $ex\n<<\n";
 
336
                }
 
337
        else
 
338
                {
 
339
                my $ex = "";            
 
340
                if ($target =~ /O_SSL/)
 
341
                        {
 
342
                        $ex .= " \$(L_CRYPTO)";
 
343
                        #$ex .= " \$(L_FIPS)" if $fipsdso;
 
344
                        }
 
345
                my $fipstarget;
 
346
                if ($fipsdso)
 
347
                        {
 
348
                        $fipstarget = "O_FIPS";
 
349
                        }
 
350
                else
 
351
                        {
 
352
                        $fipstarget = "O_CRYPTO";
 
353
                        }
 
354
 
 
355
 
 
356
                if ($name eq "")
 
357
                        {
 
358
                        $ex.= $oflow;
 
359
                        if ($target =~ /capi/)
 
360
                                {
 
361
                                $ex.=' crypt32.lib advapi32.lib';
 
362
                                }
 
363
                        }
 
364
                elsif ($FLAVOR =~ /CE/)
 
365
                        {
 
366
                        $ex.=' winsock.lib $(WCECOMPAT)/lib/wcecompatex.lib';
 
367
                        }
 
368
                else
 
369
                        {
 
370
                        $ex.=' unicows.lib' if ($FLAVOR =~ /NT/);
 
371
                        $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib';
 
372
                        $ex.=' crypt32.lib';
 
373
                        $ex.= $oflow;
 
374
                        }
 
375
                $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/;
 
376
 
 
377
                if ($fips && $target =~ /$fipstarget/)
 
378
                        {
 
379
                        $ex.= $mwex unless $fipscanisterbuild;
 
380
                        $ret.="$target: $objs \$(PREMAIN_DSO_EXE)";
 
381
                        if ($fipsdso)
 
382
                                {
 
383
                                $ex.=" \$(OBJ_D)\\\$(LIBFIPS).res";
 
384
                                $ret.=" \$(OBJ_D)\\\$(LIBFIPS).res";
 
385
                                $ret.=" ms/\$(LIBFIPS).def";
 
386
                                }
 
387
                        $ret.="\n\tSET FIPS_LINK=\$(LINK)\n";
 
388
                        $ret.="\tSET FIPS_CC=\$(CC)\n";
 
389
                        $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
 
390
                        $ret.="\tSET PREMAIN_DSO_EXE=\$(PREMAIN_DSO_EXE)\n";
 
391
                        $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
 
392
                        $ret.="\tSET FIPS_TARGET=$target\n";
 
393
                        $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
 
394
                        $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target ";
 
395
                        $ret.="$name @<<\n  \$(SHLIB_EX_OBJ) $objs ";
 
396
                        $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n";
 
397
                        }
 
398
                else
 
399
                        {
 
400
                        $ret.="$target: $objs";
 
401
                        if ($target =~ /O_CRYPTO/ && $fipsdso)
 
402
                                {
 
403
                                $ret .= " \$(O_FIPS)";
 
404
                                $ex .= " \$(L_FIPS)";
 
405
                                }
 
406
                        $ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n  \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
 
407
                        }
 
408
 
 
409
        $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n";
 
410
                }
 
411
        $ret.="\n";
 
412
        return($ret);
 
413
        }
 
414
 
 
415
sub do_link_rule
 
416
        {
 
417
        my($target,$files,$dep_libs,$libs,$standalone)=@_;
 
418
        local($ret,$_);
 
419
        $file =~ s/\//$o/g if $o ne '/';
 
420
        $n=&bname($targer);
 
421
        $ret.="$target: $files $dep_libs\n";
 
422
        if ($standalone == 1)
 
423
                {
 
424
                $ret.="  \$(LINK) \$(LFLAGS) $efile$target @<<\n\t";
 
425
                $ret.= "\$(EX_LIBS) " if ($files =~ /O_FIPSCANISTER/ && !$fipscanisterbuild);
 
426
                $ret.="$files $libs\n<<\n";
 
427
                }
 
428
        elsif ($standalone == 2)
 
429
                {
 
430
                $ret.="\tSET FIPS_LINK=\$(LINK)\n";
 
431
                $ret.="\tSET FIPS_CC=\$(CC)\n";
 
432
                $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
 
433
                $ret.="\tSET PREMAIN_DSO_EXE=\n";
 
434
                $ret.="\tSET FIPS_TARGET=$target\n";
 
435
                $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
 
436
                $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
 
437
                $ret.="\t\$(FIPSLINK) \$(LFLAGS) /map $efile$target @<<\n";
 
438
                $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n";
 
439
                }
 
440
        else
 
441
                {
 
442
                $ret.="\t\$(LINK) \$(LFLAGS) $efile$target @<<\n";
 
443
                $ret.="\t\$(APP_EX_OBJ) $files $libs\n<<\n";
 
444
                }
 
445
        $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;1\n\n";
 
446
        return($ret);
 
447
        }
 
448
 
 
449
sub do_rlink_rule
 
450
        {
 
451
        local($target,$rl_start, $rl_mid, $rl_end,$dep_libs,$libs)=@_;
 
452
        local($ret,$_);
 
453
        my $files = "$rl_start $rl_mid $rl_end";
 
454
 
 
455
        $file =~ s/\//$o/g if $o ne '/';
 
456
        $n=&bname($targer);
 
457
        $ret.="$target: $files $dep_libs \$(FIPS_SHA1_EXE)\n";
 
458
        $ret.="\t\$(PERL) ms\\segrenam.pl \$\$a $rl_start\n";
 
459
        $ret.="\t\$(PERL) ms\\segrenam.pl \$\$b $rl_mid\n";
 
460
        $ret.="\t\$(PERL) ms\\segrenam.pl \$\$c $rl_end\n";
 
461
        $ret.="\t\$(MKLIB) $lfile$target @<<\n\t$files\n<<\n";
 
462
        $ret.="\t\$(FIPS_SHA1_EXE) $target > ${target}.sha1\n";
 
463
        $ret.="\t\$(PERL) util${o}copy.pl -stripcr fips${o}fips_premain.c \$(LIB_D)${o}fips_premain.c\n";
 
464
        $ret.="\t\$(CP) fips${o}fips_premain.c.sha1 \$(LIB_D)${o}fips_premain.c.sha1\n";
 
465
        $ret.="\n";
 
466
        return($ret);
 
467
        }
 
468
 
 
469
sub do_sdef_rule
 
470
        {
 
471
        my $ret = "ms/\$(LIBFIPS).def: \$(O_FIPSCANISTER)\n";
 
472
        $ret.="\t\$(PERL) util/mksdef.pl \$(MLFLAGS) /out:dummy.dll /def:ms/libeay32.def @<<\n  \$(O_FIPSCANISTER)\n<<\n";
 
473
        $ret.="\n";
 
474
        return $ret;
 
475
        }
 
476
 
 
477
1;