]> git.ipfire.org Git - thirdparty/openssl.git/blame - Configure
Import of old SSLeay release: SSLeay 0.8.1b
[thirdparty/openssl.git] / Configure
CommitLineData
d02b48c6
RE
1#!/usr/local/bin/perl
2#
3# see PROBLEMS for instructions on what sort of things to do when
4# tracking a bug --tjh
5#
6# extra options
7# -DRSAref build to use RSAref
8# -DNO_IDEA build with no IDEA algorithm
9# -DNO_RC4 build with no RC4 algorithm
10# -DNO_RC2 build with no RC2 algorithm
11# -DNO_BF build with no Blowfish algorithm
12# -DNO_DES build with no DES/3DES algorithm
13# -DNO_MD2 build with no MD2 algorithm
14#
15# DES_PTR use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
16# DES_RISC1 use different DES_ENCRYPT macro that helps reduce register
17# dependancies but needs to more registers, good for RISC CPU's
18# DES_RISC2 A different RISC variant.
19# DES_UNROLL unroll the inner DES loop, sometimes helps, somtimes hinders.
20# DES_INT use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
21# This is used on the DEC Alpha where long is 8 bytes
22# and int is 4
23# BN_LLONG use the type 'long long' in crypto/bn/bn.h
24# MD2_CHAR use 'char' instead of 'int' for MD2_INT in crypto/md/md2.h
25# MD2_LONG use 'long' instead of 'int' for MD2_INT in crypto/md/md2.h
26# IDEA_SHORT use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
27# IDEA_LONG use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
28# RC2_SHORT use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
29# RC2_LONG use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
30# RC4_CHAR use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
31# RC4_LONG use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
32# RC4_INDEX define RC4_INDEX in crypto/rc4/rc4_enc.c. This turns on
33# array lookups instead of pointer use.
34# BF_PTR use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
35# BF_PTR2 use a pentium/intel specific version.
36
37$x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
38
39# MD2_CHAR slags pentium pros
40$x86_gcc_opts="RC4_INDEX MD2_INT BF_PTR2";
41
42# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
43# Don't worry about these normally
44
45$tcc="cc";
46$tflags="-fast -Xa";
47$tbn_mul="";
48$tlib="-lnsl -lsocket";
49#$bits1="SIXTEEN_BIT ";
50#$bits2="THIRTY_TWO_BIT ";
51$bits1="THIRTY_TWO_BIT ";
52$bits2="SIXTY_FOUR_BIT ";
53
54# -DB_ENDIAN slows things down on a sparc
55
56#config-string CC : CFLAGS : LDFLAGS : special header file mods:bn_asm \
57# des_asm:bf_asm
58%table=(
59#"b", "$tcc:$tflags:$tlib:$bits1:$tbn_mul::",
60#"bl-4c-2c", "$tcc:$tflags:$tlib:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:$tbn_mul::",
61#"bl-4c-ri", "$tcc:$tflags:$tlib:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:$tbn_mul::",
62#"b2-is-ri-dp", "$tcc:$tflags:$tlib:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:$tbn_mul::",
63
64# A few of my development configs
65"purify", "purify gcc:-g -DPURIFY -Wall:-lsocket -lnsl::::",
66"debug", "gcc:-DREF_CHECK -DCRYPTO_MDEBUG -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::::",
67"dist", "cc:-O -DNOPROTO::::",
68
69# Basic configs that should work on any box
70"gcc", "gcc:-O3::BN_LLONG:::",
71"cc", "cc:-O -DNOPROTO -DNOCONST:::::",
72
73# My solaris setups
74"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN:\
75 -lsocket -lnsl:BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-sol.o:asm/dx86-sol.o asm/cx86-sol.o:asm/bx86-sol.o",
76"solaris-sparc-gcc","gcc:-O3 -fomit-frame-pointer -mv8 -Wall:\
77 -lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:::",
78# DO NOT use /xO[34] on sparc with SC3.0.
79# It is broken, and will not pass the tests
80"solaris-sparc-cc","cc:-fast -O -Xa -DB_ENDIAN:\
81 -lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_UNROLL BF_PTR:asm/sparc.o::",
82# SC4.0 is ok, better than gcc, except for the bignum stuff.
83# -fast slows things like DES down quite a lot
84"solaris-sparc-sc4","cc:-xO5 -Xa -DB_ENDIAN:-lsocket -lnsl:\
85 BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparc.o::",
86"solaris-usparc-sc4","cc:-xtarget=ultra -xarch=v8plus -Xa -xO5 -DB_ENDIAN:\
87 -lsocket -lnsl:\
88 BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparc.o::",
89
90# Sunos configs, assuming sparc for the gcc one.
91"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::DES_UNROLL:::",
92"sunos-gcc","gcc:-O3 -mv8::BN_LLONG RC4_CHAR DES_UNROLL DES_PTR DES_RISC1:::",
93
94# SGI configurations. If the box is rather old (r3000 cpu), you will
95# probably have to remove the '-mips2' flag. I've only been using
96# IRIX 5.[23].
97#"irix-gcc","gcc:-O2 -mips2::BN_LLONG RC4_INDEX RC4_CHAR:::",
98"irix-gcc","gcc:-O2 -DTERMIOS -DB_ENDIAN::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::",
99"irix-cc", "cc:-O2 -DTERMIOS -DB_ENDIAN::DES_PTR DES_RISC2 DES_UNROLL BF_PTR:asm/r3000.o::",
100"debug-irix-cc", "cc:-w2 -g -DCRYPTO_MDEBUG -DTERMIOS -DB_ENDIAN:::asm/r3000.o::",
101
102# HPUX config. I've been building on HPUX 9, so the options may be
103# different on version 10. The pa-risc2.o assember file is 2 times
104# faster than the old asm/pa-risc.o version but it may not run on old
105# PA-RISC CPUs. If you have problems, swap back to the old one.
106# Both were generated by gcc, so use the C version with the PA-RISC specific
107# options turned on if you are using gcc.
108"hpux-cc", "cc:-DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae +ESlit +O4 -Wl,-a,archive::DES_PTR DES_UNROLL DES_RISC1:asm/pa-risc2.o::",
109"hpux-kr-cc", "cc:-DB_ENDIAN -DNOCONST -DNOPROTO -D_HPUX_SOURCE::DES_PTR DES_UNROLL:asm/pa-risc2.o::",
110"hpux-gcc", "gcc:-DB_ENDIAN -O3::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
111
112# Dec Alpha, OSF/1 - the alpha400-cc is the flags for a 21164A with
113# the new compiler
114"alpha-gcc","gcc:-O3::SIXTY_FOUR_BIT_LONGS DES_INT DES_PTR DES_RISC2:asm/alpha.o::",
115"alpha-cc", "cc:-O2::SIXTY_FOUR_BIT_LONGS DES_INT DES_PTR DES_RISC2:asm/alpha.o::",
116"alpha400-cc", "cc:-arch host -tune host -fast -std -O4 -inline speed::SIXTY_FOUR_BIT_LONG:asm/alpha.o::",
117
118# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
119# x86-lnx.o file file since it is hand tweaked assembler.
120"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized::BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnx.o:asm/dx86-elf.o asm/cx86-elf.o:asm/bx86-elf.o",
121"debug-linux-elf","gcc:-DREF_CHECK -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall:-lefence:BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnx.o:asm/dx86-elf.o asm/cx86-elf.o:asm/bx86-elf.o",
122"linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnxa.o:asm/dx86-out.o asm/cx86-out.o:asm/bx86-out.o",
123"NetBSD-sparc", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::",
124"NetBSD-x86", "gcc:-DTERMIOS -D_ANSI_SOURCE -O3 -fomit-frame-pointer -m486 -Wall::BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnxa.o:asm/dx86-out.o asm/cx86-out.o:asm/bx86-out.o",
125"FreeBSD", "gcc:-DTERMIOS -D_ANSI_SOURCE -fomit-frame-pointer -O3 -m486 -Wall::BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnxa.o:asm/dx86-out.o asm/cx86-out.o:asm/bx86-out.o",
126#"bsdi-gcc", "shlicc2:-O3 -ffast-math-m486::RSA_LLONG $x86_gcc_des $x86_gcc_opts:::",
127#"bsdi-gcc", "gcc:-O3 -ffast-math -DPERL5 -m486::RSA_LLONG $x86_gc_des $x86_gcc_opts:asm/x86-bsdi.o:asm/dx86bsdi.o asm/cx86bsdi.o:asm/bx86bsdi.o",
128"bsdi-gcc", "gcc:-O3 -ffast-math -DPERL5 -m486::RSA_LLONG $x86_gc_des $x86_gcc_opts:::",
129"nextstep", "cc:-O3 -Wall::BN_LLONG $x86_gcc_des $x86_gcc_opts:::",
130
131# UnixWare 2.0
132"unixware-2.0","cc:-O:-lsocket -lnsl:$x86_gcc_des $x86_gcc_opts:::",
133"unixware-2.0-pentium","cc:-O -Kpentium -Kthread:-lsocket -lnsl:MD2_CHAR RC4_INDEX $x86_des_des::",
134
135# IBM's AIX.
136"aix-cc", "cc:-O -DAIX -DB_ENDIAN::BN_LLONG RC4_CHAR:::",
137"aix-gcc", "gcc:-O2 -DAIX -DB_ENDIAN::BN_LLONG RC4_CHAR:::",
138
139# DGUX, 88100.
140"dgux-R3-gcc", "gcc:-O3 -fomit-frame-pointer::RC4_INDEX DES_UNROLL:::",
141"dgux-R4-gcc", "gcc:-O3 -fomit-frame-pointer:-lnsl -lsocket:RC4_INDEX:RC4_INDEX DES_UNROLL:::",
142"dgux-R4-x86-gcc", "gcc:-O3 -fomit-frame-pointer -DL_ENDIAN:-lnsl -lsocket:BN_LLONG $x86_gcc_des $x86_gcc_opts:asm/x86-lnx.o:asm/dx86-elf.o asm/cx86-elf.o:asm/bx86-elf.o",
143
144# SCO 5
145"sco5-cc", "cc:-O:-lsocket:$x86_gcc_des $x86_gcc_opts:::", # des options?
146
147# Sinix RM400
148"SINIX-N","/usr/ucb/cc:-O2 -misaligned:-lucb:RC4_INDEX RC4_CHAR:::",
149
150# Windows NT, Microsoft Visual C++ 4.0
151
152# hmm... bug in perl under NT, I need to concatinate :-(
153"VC-NT","cl:::BN_LLONG RC4_INDEX ".$x86_gcc_opts.":::",
154"VC-WIN32","cl:::BN_LLONG RC4_INDEX ".$x86_gcc_opts.":::",
155"VC-WIN16","cl:::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
156"VC-W31-16","cl:::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
157"VC-W31-32","cl:::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
158"VC-MSDOS","cl:::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
159
160# Borland C++ 4.5
161"BC-32","bcc32:::DES_PTR RC4_INDEX:::",
162"BC-16","bcc:::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
163);
164
165$postfix="org";
166$Makefile="Makefile.ssl";
167$des_locl="crypto/des/des_locl.h";
168$des ="crypto/des/des.h";
169$bn ="crypto/bn/bn.h";
170$md2 ="crypto/md/md2.h";
171$rc4 ="crypto/rc4/rc4.h";
172$rc4_enc="crypto/rc4/rc4_enc.c";
173$idea ="crypto/idea/idea.h";
174$rc2 ="crypto/rc2/rc2.h";
175$bf ="crypto/bf/bf_locl.h";
176$bn_mulw="bn_mulw.o";
177$des_enc="des_enc.o fcrypt_b.o";
178$bf_enc ="bf_enc.o";
179
180if ($#ARGV < 0)
181 {
182 &bad_target;
183 exit(1);
184 }
185
186$flags="";
187foreach (@ARGV)
188 {
189 if ($_ =~ /^-/)
190 {
191 if ($_ =~ /^-[lL](.*)$/)
192 {
193 $libs.=$_." ";
194 }
195 elsif ($_ =~ /^-D(.*)$/)
196 {
197 $flags.=$_." ";
198 }
199 else
200 {
201 die "unknown options, only -Dxxx, -Lxxx -lxxx supported\n";
202 }
203 }
204 else
205 {
206 die "target already defined - $target\n" if ($target ne "");
207 $target=$_;
208 if (!defined($table{$target}))
209 {
210 &bad_target;
211 exit(1);
212 }
213 }
214 }
215
216if (!defined($table{$target}))
217 {
218 &bad_target;
219 exit(1);
220 }
221
222($cc,$cflags,$lflags,$bn_ops,$bn_obj,$des_obj,$bf_obj)=
223 split(/\s*:\s*/,$table{$target});
224$cflags="$flags$cflags" if ($flags ne "");
225$lflags="$libs$lflags"if ($libs ne "");
226
227$bn_obj=$bn_mulw unless ($bn_obj =~ /\.o$/);
228$des_obj=$des_enc unless ($des_obj =~ /\.o$/);
229$bf_obj=$bf_enc unless ($bf_obj =~ /\.o$/);
230
231$n=&file_new($Makefile);
232open(IN,"<".$Makefile) || die "unable to read $Makefile:$!\n";
233open(OUT,">".$n) || die "unable to read $n:$!\n";
234while (<IN>)
235 {
236 chop;
237 s/^CC=.*$/CC= $cc/;
238 s/^CFLAG=.*$/CFLAG= $cflags/;
239 s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
240 s/^BN_MULW=.*$/BN_MULW= $bn_obj/;
241 s/^DES_ENC=.*$/DES_ENC= $des_obj/;
242 s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
243 print OUT $_."\n";
244 }
245close(IN);
246close(OUT);
247&Rename($Makefile,&file_old($Makefile));
248&Rename($n,$Makefile);
249print "CC =$cc\n";
250print "CFLAG =$cflags\n";
251print "EX_LIBS=$lflags\n";
252print "BN_MULW=$bn_obj\n";
253print "DES_ENC=$des_obj\n";
254print "BF_ENC =$bf_obj\n";
255
256$des_ptr=0;
257$des_risc1=0;
258$des_risc2=0;
259$des_unroll=0;
260$bn_ll=0;
261$def_int=2;
262$rc4_int=$def_int;
263$md2_int=$def_int;
264$idea_int=$def_int;
265$rc2_int=$def_int;
266$rc4_idx=0;
267$bf_ptr=0;
268@type=("char","short","int","long");
269($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
270
271foreach (sort split(/\s+/,$bn_ops))
272 {
273 $des_ptr=1 if /DES_PTR/;
274 $des_risc1=1 if /DES_RISC1/;
275 $des_risc2=1 if /DES_RISC2/;
276 $des_unroll=1 if /DES_UNROLL/;
277 $des_int=1 if /DES_INT/;
278 $bn_ll=1 if /BN_LLONG/;
279 $rc4_int=0 if /RC4_CHAR/;
280 $rc4_int=3 if /RC4_LONG/;
281 $rc4_idx=1 if /RC4_INDEX/;
282 $md2_int=0 if /MD2_CHAR/;
283 $md2_int=3 if /MD2_LONG/;
284 $idea_int=1 if /IDEA_SHORT/;
285 $idea_int=3 if /IDEA_LONG/;
286 $rc2_int=1 if /RC2_SHORT/;
287 $rc2_int=3 if /RC2_LONG/;
288 $bf_ptr=1 if $_ eq "BF_PTR";
289 $bf_ptr=2 if $_ eq "BF_PTR2";
290 ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
291 ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
292 ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
293 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
294 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
295 }
296
297(($in=$bn) =~ s/\.([^.]+)/.$postfix/);
298$n=&file_new($bn);
299open(IN,"<".$in) || die "unable to read $bn:$!\n";
300open(OUT,">$n") || die "unable to read $n:$!\n";
301while (<IN>)
302 {
303 if (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
304 { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
305 elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
306 { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
307 elsif (/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
308 { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
309 elsif (/^#((define)|(undef))\s+SIXTEEN_BIT/)
310 { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
311 elsif (/^#((define)|(undef))\s+EIGHT_BIT/)
312 { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
313 elsif (/^#((define)|(undef))\s+BN_LLONG\s*$/)
314 { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
315 else
316 { print OUT $_; }
317 }
318close(IN);
319close(OUT);
320&Rename($bn,&file_old($bn));
321&Rename($n,$bn);
322
323(($in=$des) =~ s/\.([^.]+)/.$postfix/);
324$n=&file_new($des);
325open(IN,"<".$in) || die "unable to read $des:$!\n";
326open(OUT,">$n") || die "unable to read $n:$!\n";
327while (<IN>)
328 {
329 if (/^\#define\s+DES_LONG\s+.*/)
330 { printf OUT "#define DES_LONG unsigned %s\n",
331 ($des_int)?'int':'long'; }
332 else
333 { print OUT $_; }
334 }
335close(IN);
336close(OUT);
337&Rename($des,&file_old($des));
338&Rename($n,$des);
339
340(($in=$des_locl) =~ s/\.([^.]+)/.$postfix/);
341$n=&file_new($des_locl);
342open(IN,"<".$in) || die "unable to read $des_locl:$!\n";
343open(OUT,">$n") || die "unable to read $n:$!\n";
344while (<IN>)
345 {
346 if (/^\#(define|undef)\s+DES_PTR/)
347 { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
348 elsif (/^\#(define|undef)\s+DES_RISC1/)
349 { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
350 elsif (/^\#(define|undef)\s+DES_RISC2/)
351 { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
352 elsif (/^\#(define|undef)\s+DES_UNROLL/)
353 { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
354 else
355 { print OUT $_; }
356 }
357close(IN);
358close(OUT);
359&Rename($des_locl,&file_old($des_locl));
360&Rename($n,$des_locl);
361
362(($in=$rc4) =~ s/\.([^.]+)/.$postfix/);
363$n=&file_new($rc4);
364open(IN,"<".$in) || die "unable to read $rc4:$!\n";
365open(OUT,">$n") || die "unable to read $n:$!\n";
366while (<IN>)
367 {
368 if (/^#define\s+RC4_INT\s/)
369 { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
370 else
371 { print OUT $_; }
372 }
373close(IN);
374close(OUT);
375&Rename($rc4,&file_old($rc4));
376&Rename($n,$rc4);
377
378(($in=$rc4_enc) =~ s/\.([^.]+)/.$postfix/);
379$n=&file_new($rc4_enc);
380open(IN,"<".$in) || die "unable to read $rc4_enc:$!\n";
381open(OUT,">$n") || die "unable to read $n:$!\n";
382while (<IN>)
383 {
384 if (/^#((define)|(undef))\s+RC4_INDEX/)
385 { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
386 else
387 { print OUT $_; }
388 }
389close(IN);
390close(OUT);
391&Rename($rc4_enc,&file_old($rc4_enc));
392&Rename($n,$rc4_enc);
393
394(($in=$md2) =~ s/\.([^.]+)/.$postfix/);
395$n=&file_new($md2);
396open(IN,"<".$in) || die "unable to read $bn:$!\n";
397open(OUT,">$n") || die "unable to read $n:$!\n";
398while (<IN>)
399 {
400 if (/^#define\s+MD2_INT\s/)
401 { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
402 else
403 { print OUT $_; }
404 }
405close(IN);
406close(OUT);
407&Rename($md2,&file_old($md2));
408&Rename($n,$md2);
409
410(($in=$idea) =~ s/\.([^.]+)/.$postfix/);
411$n=&file_new($idea);
412open(IN,"<".$in) || die "unable to read $idea:$!\n";
413open(OUT,">$n") || die "unable to read $n:$!\n";
414while (<IN>)
415 {
416 if (/^#define\s+IDEA_INT\s/)
417 {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
418 else
419 { print OUT $_; }
420 }
421close(IN);
422close(OUT);
423&Rename($idea,&file_old($idea));
424&Rename($n,$idea);
425
426(($in=$rc2) =~ s/\.([^.]+)/.$postfix/);
427$n=&file_new($rc2);
428open(IN,"<".$in) || die "unable to read $rc2:$!\n";
429open(OUT,">$n") || die "unable to read $n:$!\n";
430while (<IN>)
431 {
432 if (/^#define\s+RC2_INT\s/)
433 {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
434 else
435 { print OUT $_; }
436 }
437close(IN);
438close(OUT);
439&Rename($rc2,&file_old($rc2));
440&Rename($n,$rc2);
441
442(($in=$bf) =~ s/\.([^.]+)/.$postfix/);
443$n=&file_new($bf);
444open(IN,"<".$in) || die "unable to read $bf:$!\n";
445open(OUT,">$n") || die "unable to read $n:$!\n";
446while (<IN>)
447 {
448 if (/^#(define|undef)\s+BF_PTR/)
449 {
450 printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
451 printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
452 printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
453 }
454 else
455 { print OUT $_; }
456 }
457close(IN);
458close(OUT);
459&Rename($bf,&file_old($bf));
460&Rename($n,$bf);
461
462print "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
463print "SIXTY_FOUR_BIT mode\n" if $b64;
464print "THIRTY_TWO_BIT mode\n" if $b32;
465print "SIXTEEN_BIT mode\n" if $b16;
466print "EIGHT_BIT mode\n" if $b8;
467print "DES_PTR used\n" if $des_ptr;
468print "DES_RISC1 used\n" if $des_risc1;
469print "DES_RISC2 used\n" if $des_risc2;
470print "DES_UNROLL used\n" if $des_unroll;
471print "DES_INT used\n" if $des_int;
472print "BN_LLONG mode\n" if $bn_ll;
473print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
474print "RC4_INDEX mode\n" if $rc4_idx;
475print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
476print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
477print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
478print "BF_PTR used\n" if $bf_ptr == 1;
479print "BF_PTR2 used\n" if $bf_ptr == 2;
480exit(0);
481
482sub bad_target
483 {
484 print STDERR "Usage: Configure [-Dxxx] [-Lxxx] [-lxxx] os/compiler\n";
485 print STDERR "pick os/compiler from:";
486 $j=0;
487 foreach $i (sort keys %table)
488 {
489 next if /^b-/;
490 print STDERR "\n" if ($j++ % 4) == 0;
491 printf(STDERR "%-18s ",$i);
492 }
493 print STDERR "\n";
494 }
495
496sub Rename
497 {
498 local($from,$to)=@_;
499
500 unlink($to);
501 rename($from,$to) || die "unable to rename $from to $to:$!\n";
502 }
503
504sub file_new { local($a)=@_; $a =~ s/(\.[^.]+$|$)/.new/; $a; }
505sub file_old { local($a)=@_; $a =~ s/(\.[^.]+$|$)/.old/; $a; }