mk1mf.pl revision 205128
155714Skris#!/usr/local/bin/perl 255714Skris# A bit of an evil hack but it post processes the file ../MINFO which 355714Skris# is generated by `make files` in the top directory. 455714Skris# This script outputs one mega makefile that has no shell stuff or any 555714Skris# funny stuff 655714Skris# 755714Skris 855714Skris$INSTALLTOP="/usr/local/ssl"; 955714Skris$OPTIONS=""; 1055714Skris$ssl_version=""; 1159191Skris$banner="\t\@echo Building OpenSSL"; 1255714Skris 13160814Ssimonmy $no_static_engine = 0; 14160814Ssimonmy $engines = ""; 15160814Ssimonlocal $zlib_opt = 0; # 0 = no zlib, 1 = static, 2 = dynamic 16160814Ssimonlocal $zlib_lib = ""; 17160814Ssimon 18194206Ssimonlocal $fips_canister_path = ""; 19194206Ssimonmy $fips_premain_dso_exe_path = ""; 20194206Ssimonmy $fips_premain_c_path = ""; 21194206Ssimonmy $fips_sha1_exe_path = ""; 22160814Ssimon 23194206Ssimonlocal $fipscanisterbuild = 0; 24194206Ssimonlocal $fipsdso = 0; 25194206Ssimon 26194206Ssimonmy $fipslibdir = ""; 27194206Ssimonmy $baseaddr = ""; 28194206Ssimon 29194206Ssimonmy $ex_l_libs = ""; 30194206Ssimon 31142425Snectaropen(IN,"<Makefile") || die "unable to open Makefile!\n"; 3255714Skriswhile(<IN>) { 3355714Skris $ssl_version=$1 if (/^VERSION=(.*)$/); 3455714Skris $OPTIONS=$1 if (/^OPTIONS=(.*)$/); 3555714Skris $INSTALLTOP=$1 if (/^INSTALLTOP=(.*$)/); 3655714Skris} 3755714Skrisclose(IN); 3855714Skris 39142425Snectardie "Makefile is not the toplevel Makefile!\n" if $ssl_version eq ""; 4055714Skris 4155714Skris$infile="MINFO"; 4255714Skris 4355714Skris%ops=( 4455714Skris "VC-WIN32", "Microsoft Visual C++ [4-6] - Windows NT or 9X", 45160814Ssimon "VC-WIN64I", "Microsoft C/C++ - Win64/IA-64", 46160814Ssimon "VC-WIN64A", "Microsoft C/C++ - Win64/x64", 47109998Smarkm "VC-CE", "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY", 4855714Skris "VC-NT", "Microsoft Visual C++ [4-6] - Windows NT ONLY", 4955714Skris "Mingw32", "GNU C++ - Windows NT or 9x", 5055714Skris "Mingw32-files", "Create files with DOS copy ...", 5155714Skris "BC-NT", "Borland C++ 4.5 - Windows NT", 5255714Skris "linux-elf","Linux elf", 5355714Skris "ultrix-mips","DEC mips ultrix", 5455714Skris "FreeBSD","FreeBSD distribution", 55109998Smarkm "OS2-EMX", "EMX GCC OS/2", 56160814Ssimon "netware-clib", "CodeWarrior for NetWare - CLib - with WinSock Sockets", 57194206Ssimon "netware-clib-bsdsock", "CodeWarrior for NetWare - CLib - with BSD Sockets", 58160814Ssimon "netware-libc", "CodeWarrior for NetWare - LibC - with WinSock Sockets", 59160814Ssimon "netware-libc-bsdsock", "CodeWarrior for NetWare - LibC - with BSD Sockets", 6055714Skris "default","cc under unix", 6155714Skris ); 6255714Skris 6355714Skris$platform=""; 64160814Ssimonmy $xcflags=""; 6555714Skrisforeach (@ARGV) 6655714Skris { 6755714Skris if (!&read_options && !defined($ops{$_})) 6855714Skris { 6955714Skris print STDERR "unknown option - $_\n"; 7055714Skris print STDERR "usage: perl mk1mf.pl [options] [system]\n"; 7155714Skris print STDERR "\nwhere [system] can be one of the following\n"; 7255714Skris foreach $i (sort keys %ops) 7355714Skris { printf STDERR "\t%-10s\t%s\n",$i,$ops{$i}; } 7455714Skris print STDERR <<"EOF"; 7555714Skrisand [options] can be one of 7668651Skris no-md2 no-md4 no-md5 no-sha no-mdc2 - Skip this digest 7768651Skris no-ripemd 78109998Smarkm no-rc2 no-rc4 no-rc5 no-idea no-des - Skip this symetric cipher 79194206Ssimon no-bf no-cast no-aes no-camellia no-seed 8055714Skris no-rsa no-dsa no-dh - Skip this public key cipher 8155714Skris no-ssl2 no-ssl3 - Skip this version of SSL 8255714Skris just-ssl - remove all non-ssl keys/digest 8355714Skris no-asm - No x86 asm 84109998Smarkm no-krb5 - No KRB5 85109998Smarkm no-ec - No EC 86160814Ssimon no-ecdsa - No ECDSA 87160814Ssimon no-ecdh - No ECDH 88111147Snectar no-engine - No engine 89111147Snectar no-hw - No hw 9055714Skris nasm - Use NASM for x86 asm 91160814Ssimon nw-nasm - Use NASM x86 asm for NetWare 92194206Ssimon nw-mwasm - Use Metrowerks x86 asm for NetWare 9359191Skris gaswin - Use GNU as with Mingw32 9455714Skris no-socks - No socket code 9555714Skris no-err - No error strings 9655714Skris dll/shlib - Build shared libraries (MS) 9755714Skris debug - Debug build 9868651Skris profile - Profiling build 9955714Skris gcc - Use Gcc (unix) 10055714Skris 10155714SkrisValues that can be set 10255714SkrisTMP=tmpdir OUT=outdir SRC=srcdir BIN=binpath INC=header-outdir CC=C-compiler 10355714Skris 10455714Skris-L<ex_lib_path> -l<ex_lib> - extra library flags (unix) 10555714Skris-<ex_cc_flags> - extra 'cc' flags, 10655714Skris added (MS), or replace (unix) 10755714SkrisEOF 10855714Skris exit(1); 10955714Skris } 11055714Skris $platform=$_; 11155714Skris } 112109998Smarkmforeach (grep(!/^$/, split(/ /, $OPTIONS))) 11355714Skris { 11455714Skris print STDERR "unknown option - $_\n" if !&read_options; 11555714Skris } 11655714Skris 117160814Ssimon$no_static_engine = 0 if (!$shlib); 118160814Ssimon 11955714Skris$no_mdc2=1 if ($no_des); 12055714Skris 12155714Skris$no_ssl3=1 if ($no_md5 || $no_sha); 12255714Skris$no_ssl3=1 if ($no_rsa && $no_dh); 12355714Skris 124109998Smarkm$no_ssl2=1 if ($no_md5); 12555714Skris$no_ssl2=1 if ($no_rsa); 12655714Skris 12755714Skris$out_def="out"; 12855714Skris$inc_def="outinc"; 12955714Skris$tmp_def="tmp"; 13055714Skris 131160814Ssimon$perl="perl" unless defined $perl; 132160814Ssimon$mkdir="-mkdir" unless defined $mkdir; 13355714Skris 13455714Skris($ssl,$crypto)=("ssl","crypto"); 13555714Skris$ranlib="echo ranlib"; 13655714Skris 13755714Skris$cc=(defined($VARS{'CC'}))?$VARS{'CC'}:'cc'; 13855714Skris$src_dir=(defined($VARS{'SRC'}))?$VARS{'SRC'}:'.'; 13955714Skris$bin_dir=(defined($VARS{'BIN'}))?$VARS{'BIN'}:''; 14055714Skris 14155714Skris# $bin_dir.=$o causes a core dump on my sparc :-( 14255714Skris 143160814Ssimon 14455714Skris$NT=0; 14555714Skris 14655714Skrispush(@INC,"util/pl","pl"); 147160814Ssimonif (($platform =~ /VC-(.+)/)) 14855714Skris { 149160814Ssimon $FLAVOR=$1; 150160814Ssimon $NT = 1 if $1 eq "NT"; 15155714Skris require 'VC-32.pl'; 15255714Skris } 15355714Skriselsif ($platform eq "Mingw32") 15455714Skris { 15555714Skris require 'Mingw32.pl'; 15655714Skris } 15755714Skriselsif ($platform eq "Mingw32-files") 15855714Skris { 15955714Skris require 'Mingw32f.pl'; 16055714Skris } 16155714Skriselsif ($platform eq "BC-NT") 16255714Skris { 16355714Skris $bc=1; 16455714Skris require 'BC-32.pl'; 16555714Skris } 16655714Skriselsif ($platform eq "FreeBSD") 16755714Skris { 16855714Skris require 'unix.pl'; 16955714Skris $cflags='-DTERMIO -D_ANSI_SOURCE -O2 -fomit-frame-pointer'; 17055714Skris } 17155714Skriselsif ($platform eq "linux-elf") 17255714Skris { 17355714Skris require "unix.pl"; 17455714Skris require "linux.pl"; 17555714Skris $unix=1; 17655714Skris } 17755714Skriselsif ($platform eq "ultrix-mips") 17855714Skris { 17955714Skris require "unix.pl"; 18055714Skris require "ultrix.pl"; 18155714Skris $unix=1; 18255714Skris } 183109998Smarkmelsif ($platform eq "OS2-EMX") 184109998Smarkm { 185109998Smarkm $wc=1; 186109998Smarkm require 'OS2-EMX.pl'; 187109998Smarkm } 188160814Ssimonelsif (($platform eq "netware-clib") || ($platform eq "netware-libc") || 189194206Ssimon ($platform eq "netware-clib-bsdsock") || ($platform eq "netware-libc-bsdsock")) 190160814Ssimon { 191160814Ssimon $LIBC=1 if $platform eq "netware-libc" || $platform eq "netware-libc-bsdsock"; 192194206Ssimon $BSDSOCK=1 if ($platform eq "netware-libc-bsdsock") || ($platform eq "netware-clib-bsdsock"); 193160814Ssimon require 'netware.pl'; 194160814Ssimon } 19555714Skriselse 19655714Skris { 19755714Skris require "unix.pl"; 19855714Skris 19955714Skris $unix=1; 20055714Skris $cflags.=' -DTERMIO'; 20155714Skris } 20255714Skris 20355714Skris$out_dir=(defined($VARS{'OUT'}))?$VARS{'OUT'}:$out_def.($debug?".dbg":""); 20455714Skris$tmp_dir=(defined($VARS{'TMP'}))?$VARS{'TMP'}:$tmp_def.($debug?".dbg":""); 20555714Skris$inc_dir=(defined($VARS{'INC'}))?$VARS{'INC'}:$inc_def; 20655714Skris 20755714Skris$bin_dir=$bin_dir.$o unless ((substr($bin_dir,-1,1) eq $o) || ($bin_dir eq '')); 20855714Skris 209160814Ssimon$cflags= "$xcflags$cflags" if $xcflags ne ""; 210160814Ssimon 211109998Smarkm$cflags.=" -DOPENSSL_NO_IDEA" if $no_idea; 212109998Smarkm$cflags.=" -DOPENSSL_NO_AES" if $no_aes; 213162911Ssimon$cflags.=" -DOPENSSL_NO_CAMELLIA" if $no_camellia; 214194206Ssimon$cflags.=" -DOPENSSL_NO_SEED" if $no_seed; 215109998Smarkm$cflags.=" -DOPENSSL_NO_RC2" if $no_rc2; 216109998Smarkm$cflags.=" -DOPENSSL_NO_RC4" if $no_rc4; 217109998Smarkm$cflags.=" -DOPENSSL_NO_RC5" if $no_rc5; 218109998Smarkm$cflags.=" -DOPENSSL_NO_MD2" if $no_md2; 219109998Smarkm$cflags.=" -DOPENSSL_NO_MD4" if $no_md4; 220109998Smarkm$cflags.=" -DOPENSSL_NO_MD5" if $no_md5; 221109998Smarkm$cflags.=" -DOPENSSL_NO_SHA" if $no_sha; 222109998Smarkm$cflags.=" -DOPENSSL_NO_SHA1" if $no_sha1; 223111147Snectar$cflags.=" -DOPENSSL_NO_RIPEMD" if $no_ripemd; 224109998Smarkm$cflags.=" -DOPENSSL_NO_MDC2" if $no_mdc2; 225160814Ssimon$cflags.=" -DOPENSSL_NO_BF" if $no_bf; 226109998Smarkm$cflags.=" -DOPENSSL_NO_CAST" if $no_cast; 227109998Smarkm$cflags.=" -DOPENSSL_NO_DES" if $no_des; 228109998Smarkm$cflags.=" -DOPENSSL_NO_RSA" if $no_rsa; 229109998Smarkm$cflags.=" -DOPENSSL_NO_DSA" if $no_dsa; 230109998Smarkm$cflags.=" -DOPENSSL_NO_DH" if $no_dh; 231109998Smarkm$cflags.=" -DOPENSSL_NO_SOCK" if $no_sock; 232109998Smarkm$cflags.=" -DOPENSSL_NO_SSL2" if $no_ssl2; 233109998Smarkm$cflags.=" -DOPENSSL_NO_SSL3" if $no_ssl3; 234194206Ssimon$cflags.=" -DOPENSSL_NO_TLSEXT" if $no_tlsext; 235194206Ssimon$cflags.=" -DOPENSSL_NO_CMS" if $no_cms; 236194206Ssimon$cflags.=" -DOPENSSL_NO_JPAKE" if $no_jpake; 237194206Ssimon$cflags.=" -DOPENSSL_NO_CAPIENG" if $no_capieng; 238109998Smarkm$cflags.=" -DOPENSSL_NO_ERR" if $no_err; 239109998Smarkm$cflags.=" -DOPENSSL_NO_KRB5" if $no_krb5; 240109998Smarkm$cflags.=" -DOPENSSL_NO_EC" if $no_ec; 241160814Ssimon$cflags.=" -DOPENSSL_NO_ECDSA" if $no_ecdsa; 242160814Ssimon$cflags.=" -DOPENSSL_NO_ECDH" if $no_ecdh; 243111147Snectar$cflags.=" -DOPENSSL_NO_ENGINE" if $no_engine; 244111147Snectar$cflags.=" -DOPENSSL_NO_HW" if $no_hw; 245194206Ssimon$cflags.=" -DOPENSSL_FIPS" if $fips; 246160814Ssimon$cflags.= " -DZLIB" if $zlib_opt; 247160814Ssimon$cflags.= " -DZLIB_SHARED" if $zlib_opt == 2; 248160814Ssimon 249160814Ssimonif ($no_static_engine) 250160814Ssimon { 251160814Ssimon $cflags .= " -DOPENSSL_NO_STATIC_ENGINE"; 252160814Ssimon } 253160814Ssimonelse 254160814Ssimon { 255160814Ssimon $cflags .= " -DOPENSSL_NO_DYNAMIC_ENGINE"; 256160814Ssimon } 257160814Ssimon 258109998Smarkm#$cflags.=" -DRSAref" if $rsaref ne ""; 25955714Skris 26068651Skris## if ($unix) 26168651Skris## { $cflags="$c_flags" if ($c_flags ne ""); } 26268651Skris##else 26368651Skris { $cflags="$c_flags$cflags" if ($c_flags ne ""); } 26455714Skris 26555714Skris$ex_libs="$l_flags$ex_libs" if ($l_flags ne ""); 26655714Skris 267109998Smarkm%shlib_ex_cflags=("SSL" => " -DOPENSSL_BUILD_SHLIBSSL", 268194206Ssimon "CRYPTO" => " -DOPENSSL_BUILD_SHLIBCRYPTO", 269194206Ssimon "FIPS" => " -DOPENSSL_BUILD_SHLIBCRYPTO"); 270109998Smarkm 27155714Skrisif ($msdos) 27255714Skris { 27355714Skris $banner ="\t\@echo Make sure you have run 'perl Configure $platform' in the\n"; 27455714Skris $banner.="\t\@echo top level directory, if you don't have perl, you will\n"; 27555714Skris $banner.="\t\@echo need to probably edit crypto/bn/bn.h, check the\n"; 27655714Skris $banner.="\t\@echo documentation for details.\n"; 27755714Skris } 27855714Skris 27955714Skris# have to do this to allow $(CC) under unix 28055714Skris$link="$bin_dir$link" if ($link !~ /^\$/); 28155714Skris 28255714Skris$INSTALLTOP =~ s|/|$o|g; 28355714Skris 284160814Ssimon############################################# 285160814Ssimon# We parse in input file and 'store' info for later printing. 286160814Ssimonopen(IN,"<$infile") || die "unable to open $infile:$!\n"; 287160814Ssimon$_=<IN>; 288160814Ssimonfor (;;) 289160814Ssimon { 290160814Ssimon chop; 291160814Ssimon 292160814Ssimon ($key,$val)=/^([^=]+)=(.*)/; 293160814Ssimon if ($key eq "RELATIVE_DIRECTORY") 294160814Ssimon { 295160814Ssimon if ($lib ne "") 296160814Ssimon { 297194206Ssimon if ($fips && $dir =~ /^fips/) 298194206Ssimon { 299194206Ssimon $uc = "FIPS"; 300194206Ssimon } 301194206Ssimon else 302194206Ssimon { 303194206Ssimon $uc=$lib; 304194206Ssimon $uc =~ s/^lib(.*)\.a/$1/; 305194206Ssimon $uc =~ tr/a-z/A-Z/; 306194206Ssimon } 307194206Ssimon if (($uc ne "FIPS") || $fipscanisterbuild) 308194206Ssimon { 309194206Ssimon $lib_nam{$uc}=$uc; 310194206Ssimon $lib_obj{$uc}.=$libobj." "; 311194206Ssimon } 312160814Ssimon } 313160814Ssimon last if ($val eq "FINISHED"); 314160814Ssimon $lib=""; 315160814Ssimon $libobj=""; 316160814Ssimon $dir=$val; 317160814Ssimon } 318160814Ssimon 319160814Ssimon if ($key eq "KRB5_INCLUDES") 320160814Ssimon { $cflags .= " $val";} 321160814Ssimon 322160814Ssimon if ($key eq "ZLIB_INCLUDE") 323160814Ssimon { $cflags .= " $val" if $val ne "";} 324160814Ssimon 325160814Ssimon if ($key eq "LIBZLIB") 326160814Ssimon { $zlib_lib = "$val" if $val ne "";} 327160814Ssimon 328160814Ssimon if ($key eq "LIBKRB5") 329160814Ssimon { $ex_libs .= " $val" if $val ne "";} 330160814Ssimon 331160814Ssimon if ($key eq "TEST") 332160814Ssimon { $test.=&var_add($dir,$val, 0); } 333160814Ssimon 334160814Ssimon if (($key eq "PROGS") || ($key eq "E_OBJ")) 335160814Ssimon { $e_exe.=&var_add($dir,$val, 0); } 336160814Ssimon 337160814Ssimon if ($key eq "LIB") 338160814Ssimon { 339160814Ssimon $lib=$val; 340160814Ssimon $lib =~ s/^.*\/([^\/]+)$/$1/; 341160814Ssimon } 342160814Ssimon 343160814Ssimon if ($key eq "EXHEADER") 344160814Ssimon { $exheader.=&var_add($dir,$val, 1); } 345160814Ssimon 346160814Ssimon if ($key eq "HEADER") 347160814Ssimon { $header.=&var_add($dir,$val, 1); } 348160814Ssimon 349160814Ssimon if ($key eq "LIBOBJ" && ($dir ne "engines" || !$no_static_engine)) 350160814Ssimon { $libobj=&var_add($dir,$val, 0); } 351160814Ssimon if ($key eq "LIBNAMES" && $dir eq "engines" && $no_static_engine) 352160814Ssimon { $engines.=$val } 353160814Ssimon 354194206Ssimon if ($key eq "FIPS_EX_OBJ") 355194206Ssimon { 356194206Ssimon $fips_ex_obj=&var_add("crypto",$val,0); 357194206Ssimon } 358194206Ssimon 359194206Ssimon if ($key eq "FIPSLIBDIR") 360194206Ssimon { 361194206Ssimon $fipslibdir=$val; 362194206Ssimon $fipslibdir =~ s/\/$//; 363194206Ssimon $fipslibdir =~ s/\//$o/g; 364194206Ssimon } 365194206Ssimon 366194206Ssimon if ($key eq "BASEADDR") 367194206Ssimon { $baseaddr=$val;} 368194206Ssimon 369160814Ssimon if (!($_=<IN>)) 370160814Ssimon { $_="RELATIVE_DIRECTORY=FINISHED\n"; } 371160814Ssimon } 372160814Ssimonclose(IN); 373160814Ssimon 374194206Ssimonif ($fips) 375194206Ssimon { 376194206Ssimon 377194206Ssimon foreach (split " ", $fips_ex_obj) 378194206Ssimon { 379194206Ssimon $fips_exclude_obj{$1} = 1 if (/\/([^\/]*)$/); 380194206Ssimon } 381194206Ssimon 382194206Ssimon $fips_exclude_obj{"cpu_win32"} = 1; 383194206Ssimon $fips_exclude_obj{"bn_asm"} = 1; 384194206Ssimon $fips_exclude_obj{"des_enc"} = 1; 385194206Ssimon $fips_exclude_obj{"fcrypt_b"} = 1; 386194206Ssimon $fips_exclude_obj{"aes_core"} = 1; 387194206Ssimon $fips_exclude_obj{"aes_cbc"} = 1; 388194206Ssimon 389194206Ssimon my @ltmp = split " ", $lib_obj{"CRYPTO"}; 390194206Ssimon 391194206Ssimon 392194206Ssimon $lib_obj{"CRYPTO"} = ""; 393194206Ssimon 394194206Ssimon foreach(@ltmp) 395194206Ssimon { 396194206Ssimon if (/\/([^\/]*)$/ && exists $fips_exclude_obj{$1}) 397194206Ssimon { 398194206Ssimon if ($fipscanisterbuild) 399194206Ssimon { 400194206Ssimon $lib_obj{"FIPS"} .= "$_ "; 401194206Ssimon } 402194206Ssimon } 403194206Ssimon else 404194206Ssimon { 405194206Ssimon $lib_obj{"CRYPTO"} .= "$_ "; 406194206Ssimon } 407194206Ssimon } 408194206Ssimon 409194206Ssimon } 410194206Ssimon 411194206Ssimonif ($fipscanisterbuild) 412194206Ssimon { 413194206Ssimon $fips_canister_path = "\$(LIB_D)${o}fipscanister.lib" if $fips_canister_path eq ""; 414194206Ssimon $fips_premain_c_path = "\$(LIB_D)${o}fips_premain.c"; 415194206Ssimon } 416194206Ssimonelse 417194206Ssimon { 418194206Ssimon if ($fips_canister_path eq "") 419194206Ssimon { 420194206Ssimon $fips_canister_path = "\$(FIPSLIB_D)${o}fipscanister.lib"; 421194206Ssimon } 422194206Ssimon 423194206Ssimon if ($fips_premain_c_path eq "") 424194206Ssimon { 425194206Ssimon $fips_premain_c_path = "\$(FIPSLIB_D)${o}fips_premain.c"; 426194206Ssimon } 427194206Ssimon } 428194206Ssimon 429194206Ssimonif ($fips) 430194206Ssimon { 431194206Ssimon if ($fips_sha1_exe_path eq "") 432194206Ssimon { 433194206Ssimon $fips_sha1_exe_path = 434194206Ssimon "\$(BIN_D)${o}fips_standalone_sha1$exep"; 435194206Ssimon } 436194206Ssimon } 437194206Ssimon else 438194206Ssimon { 439194206Ssimon $fips_sha1_exe_path = ""; 440194206Ssimon } 441194206Ssimon 442194206Ssimonif ($fips_premain_dso_exe_path eq "") 443194206Ssimon { 444194206Ssimon $fips_premain_dso_exe_path = "\$(BIN_D)${o}fips_premain_dso$exep"; 445194206Ssimon } 446194206Ssimon 447194206Ssimon# $ex_build_targets .= "\$(BIN_D)${o}\$(E_PREMAIN_DSO)$exep" if ($fips); 448194206Ssimon 449194206Ssimon#$ex_l_libs .= " \$(L_FIPS)" if $fipsdso; 450194206Ssimon 451194206Ssimonif ($fips) 452194206Ssimon { 453194206Ssimon if (!$shlib) 454194206Ssimon { 455194206Ssimon $ex_build_targets .= " \$(LIB_D)$o$crypto_compat \$(PREMAIN_DSO_EXE)"; 456194206Ssimon $ex_l_libs .= " \$(O_FIPSCANISTER)"; 457194206Ssimon $ex_libs_dep .= " \$(O_FIPSCANISTER)" if $fipscanisterbuild; 458194206Ssimon } 459194206Ssimon if ($fipscanisterbuild) 460194206Ssimon { 461194206Ssimon $fipslibdir = "\$(LIB_D)"; 462194206Ssimon } 463194206Ssimon else 464194206Ssimon { 465194206Ssimon if ($fipslibdir eq "") 466194206Ssimon { 467194206Ssimon open (IN, "util/fipslib_path.txt") || fipslib_error(); 468194206Ssimon $fipslibdir = <IN>; 469194206Ssimon chomp $fipslibdir; 470194206Ssimon close IN; 471194206Ssimon } 472194206Ssimon fips_check_files($fipslibdir, 473194206Ssimon "fipscanister.lib", "fipscanister.lib.sha1", 474194206Ssimon "fips_premain.c", "fips_premain.c.sha1"); 475194206Ssimon } 476194206Ssimon } 477194206Ssimon 478160814Ssimonif ($shlib) 479160814Ssimon { 480160814Ssimon $extra_install= <<"EOF"; 481194206Ssimon \$(CP) \"\$(O_SSL)\" \"\$(INSTALLTOP)${o}bin\" 482194206Ssimon \$(CP) \"\$(O_CRYPTO)\" \"\$(INSTALLTOP)${o}bin\" 483194206Ssimon \$(CP) \"\$(L_SSL)\" \"\$(INSTALLTOP)${o}lib\" 484194206Ssimon \$(CP) \"\$(L_CRYPTO)\" \"\$(INSTALLTOP)${o}lib\" 485160814SsimonEOF 486160814Ssimon if ($no_static_engine) 487160814Ssimon { 488160814Ssimon $extra_install .= <<"EOF" 489194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)${o}lib${o}engines\" 490194206Ssimon \$(CP) \"\$(E_SHLIB)\" \"\$(INSTALLTOP)${o}lib${o}engines\" 491160814SsimonEOF 492160814Ssimon } 493160814Ssimon } 494160814Ssimonelse 495160814Ssimon { 496160814Ssimon $extra_install= <<"EOF"; 497194206Ssimon \$(CP) \"\$(O_SSL)\" \"\$(INSTALLTOP)${o}lib\" 498194206Ssimon \$(CP) \"\$(O_CRYPTO)\" \"\$(INSTALLTOP)${o}lib\" 499160814SsimonEOF 500160814Ssimon $ex_libs .= " $zlib_lib" if $zlib_opt == 1; 501160814Ssimon } 502160814Ssimon 50355714Skris$defs= <<"EOF"; 50455714Skris# This makefile has been automatically generated from the OpenSSL distribution. 50555714Skris# This single makefile will build the complete OpenSSL distribution and 50655714Skris# by default leave the 'intertesting' output files in .${o}out and the stuff 50755714Skris# that needs deleting in .${o}tmp. 50855714Skris# The file was generated by running 'make makefile.one', which 50955714Skris# does a 'make files', which writes all the environment variables from all 51055714Skris# the makefiles to the file call MINFO. This file is used by 51155714Skris# util${o}mk1mf.pl to generate makefile.one. 51255714Skris# The 'makefile per directory' system suites me when developing this 51355714Skris# library and also so I can 'distribute' indervidual library sections. 51455714Skris# The one monster makefile better suits building in non-unix 51555714Skris# environments. 51655714Skris 517109998SmarkmEOF 518109998Smarkm 519127128Snectar$defs .= $preamble if defined $preamble; 520127128Snectar 521109998Smarkm$defs.= <<"EOF"; 52255714SkrisINSTALLTOP=$INSTALLTOP 52355714Skris 52455714Skris# Set your compiler options 52555714SkrisPLATFORM=$platform 52655714SkrisCC=$bin_dir${cc} 52755714SkrisCFLAG=$cflags 52855714SkrisAPP_CFLAG=$app_cflag 52955714SkrisLIB_CFLAG=$lib_cflag 53055714SkrisSHLIB_CFLAG=$shl_cflag 53155714SkrisAPP_EX_OBJ=$app_ex_obj 53255714SkrisSHLIB_EX_OBJ=$shlib_ex_obj 53355714Skris# add extra libraries to this define, for solaris -lsocket -lnsl would 53455714Skris# be added 53555714SkrisEX_LIBS=$ex_libs 53655714Skris 53755714Skris# The OpenSSL directory 53855714SkrisSRC_D=$src_dir 53955714Skris 54055714SkrisLINK=$link 54155714SkrisLFLAGS=$lflags 542160814SsimonRSC=$rsc 543194206SsimonFIPSLINK=\$(PERL) util${o}fipslink.pl 54455714Skris 545194206SsimonAES_ASM_OBJ=$aes_asm_obj 546194206SsimonAES_ASM_SRC=$aes_asm_src 54755714SkrisBN_ASM_OBJ=$bn_asm_obj 54855714SkrisBN_ASM_SRC=$bn_asm_src 54968651SkrisBNCO_ASM_OBJ=$bnco_asm_obj 55068651SkrisBNCO_ASM_SRC=$bnco_asm_src 55155714SkrisDES_ENC_OBJ=$des_enc_obj 55255714SkrisDES_ENC_SRC=$des_enc_src 55355714SkrisBF_ENC_OBJ=$bf_enc_obj 55455714SkrisBF_ENC_SRC=$bf_enc_src 55555714SkrisCAST_ENC_OBJ=$cast_enc_obj 55655714SkrisCAST_ENC_SRC=$cast_enc_src 55755714SkrisRC4_ENC_OBJ=$rc4_enc_obj 55855714SkrisRC4_ENC_SRC=$rc4_enc_src 55955714SkrisRC5_ENC_OBJ=$rc5_enc_obj 56055714SkrisRC5_ENC_SRC=$rc5_enc_src 56155714SkrisMD5_ASM_OBJ=$md5_asm_obj 56255714SkrisMD5_ASM_SRC=$md5_asm_src 56355714SkrisSHA1_ASM_OBJ=$sha1_asm_obj 56455714SkrisSHA1_ASM_SRC=$sha1_asm_src 56555714SkrisRMD160_ASM_OBJ=$rmd160_asm_obj 56655714SkrisRMD160_ASM_SRC=$rmd160_asm_src 567162911SsimonCPUID_ASM_OBJ=$cpuid_asm_obj 568162911SsimonCPUID_ASM_SRC=$cpuid_asm_src 56955714Skris 57055714Skris# The output directory for everything intersting 57155714SkrisOUT_D=$out_dir 57255714Skris# The output directory for all the temporary muck 57355714SkrisTMP_D=$tmp_dir 57455714Skris# The output directory for the header files 57555714SkrisINC_D=$inc_dir 57655714SkrisINCO_D=$inc_dir${o}openssl 57755714Skris 578160814SsimonPERL=$perl 57955714SkrisCP=$cp 58055714SkrisRM=$rm 58155714SkrisRANLIB=$ranlib 58255714SkrisMKDIR=$mkdir 58355714SkrisMKLIB=$bin_dir$mklib 58455714SkrisMLFLAGS=$mlflags 58555714SkrisASM=$bin_dir$asm 58655714Skris 587194206Ssimon# FIPS validated module and support file locations 588194206Ssimon 589194206SsimonE_PREMAIN_DSO=fips_premain_dso 590194206Ssimon 591194206SsimonFIPSLIB_D=$fipslibdir 592194206SsimonBASEADDR=$baseaddr 593194206SsimonFIPS_PREMAIN_SRC=$fips_premain_c_path 594194206SsimonO_FIPSCANISTER=$fips_canister_path 595194206SsimonFIPS_SHA1_EXE=$fips_sha1_exe_path 596194206SsimonPREMAIN_DSO_EXE=$fips_premain_dso_exe_path 597194206Ssimon 59855714Skris###################################################### 59955714Skris# You should not need to touch anything below this point 60055714Skris###################################################### 60155714Skris 60255714SkrisE_EXE=openssl 60355714SkrisSSL=$ssl 60455714SkrisCRYPTO=$crypto 605194206SsimonLIBFIPS=libosslfips 60655714Skris 60755714Skris# BIN_D - Binary output directory 60855714Skris# TEST_D - Binary test file output directory 60955714Skris# LIB_D - library output directory 610160814Ssimon# ENG_D - dynamic engine output directory 61155714Skris# Note: if you change these point to different directories then uncomment out 61255714Skris# the lines around the 'NB' comment below. 61355714Skris# 61455714SkrisBIN_D=\$(OUT_D) 61555714SkrisTEST_D=\$(OUT_D) 61655714SkrisLIB_D=\$(OUT_D) 617160814SsimonENG_D=\$(OUT_D) 61855714Skris 61955714Skris# INCL_D - local library directory 62055714Skris# OBJ_D - temp object file directory 62155714SkrisOBJ_D=\$(TMP_D) 62255714SkrisINCL_D=\$(TMP_D) 62355714Skris 62455714SkrisO_SSL= \$(LIB_D)$o$plib\$(SSL)$shlibp 62555714SkrisO_CRYPTO= \$(LIB_D)$o$plib\$(CRYPTO)$shlibp 626194206SsimonO_FIPS= \$(LIB_D)$o$plib\$(LIBFIPS)$shlibp 62755714SkrisSO_SSL= $plib\$(SSL)$so_shlibp 62855714SkrisSO_CRYPTO= $plib\$(CRYPTO)$so_shlibp 62955714SkrisL_SSL= \$(LIB_D)$o$plib\$(SSL)$libp 63055714SkrisL_CRYPTO= \$(LIB_D)$o$plib\$(CRYPTO)$libp 631194206SsimonL_FIPS= \$(LIB_D)$o$plib\$(LIBFIPS)$libp 63255714Skris 633194206SsimonL_LIBS= \$(L_SSL) \$(L_CRYPTO) $ex_l_libs 63455714Skris 63555714Skris###################################################### 63655714Skris# Don't touch anything below this point 63755714Skris###################################################### 63855714Skris 63955714SkrisINC=-I\$(INC_D) -I\$(INCL_D) 64055714SkrisAPP_CFLAGS=\$(INC) \$(CFLAG) \$(APP_CFLAG) 64155714SkrisLIB_CFLAGS=\$(INC) \$(CFLAG) \$(LIB_CFLAG) 64255714SkrisSHLIB_CFLAGS=\$(INC) \$(CFLAG) \$(LIB_CFLAG) \$(SHLIB_CFLAG) 643194206SsimonLIBS_DEP=\$(O_CRYPTO) \$(O_SSL) $ex_libs_dep 64455714Skris 64555714Skris############################################# 64655714SkrisEOF 64755714Skris 64855714Skris$rules=<<"EOF"; 649194206Ssimonall: banner \$(TMP_D) \$(BIN_D) \$(TEST_D) \$(LIB_D) \$(INCO_D) headers \$(FIPS_SHA1_EXE) lib exe $ex_build_targets 65055714Skris 65155714Skrisbanner: 65255714Skris$banner 65355714Skris 65455714Skris\$(TMP_D): 655194206Ssimon \$(MKDIR) \"\$(TMP_D)\" 65655714Skris# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different 65755714Skris#\$(BIN_D): 65855714Skris# \$(MKDIR) \$(BIN_D) 65955714Skris# 66055714Skris#\$(TEST_D): 66155714Skris# \$(MKDIR) \$(TEST_D) 66255714Skris 66355714Skris\$(LIB_D): 664194206Ssimon \$(MKDIR) \"\$(LIB_D)\" 66555714Skris 66655714Skris\$(INCO_D): \$(INC_D) 667194206Ssimon \$(MKDIR) \"\$(INCO_D)\" 66855714Skris 66955714Skris\$(INC_D): 670194206Ssimon \$(MKDIR) \"\$(INC_D)\" 67155714Skris 67255714Skrisheaders: \$(HEADER) \$(EXHEADER) 67368651Skris @ 67455714Skris 675160814Ssimonlib: \$(LIBS_DEP) \$(E_SHLIB) 67655714Skris 67755714Skrisexe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep 67855714Skris 679160814Ssimoninstall: all 680194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)\" 681194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)${o}bin\" 682194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)${o}include\" 683194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)${o}include${o}openssl\" 684194206Ssimon \$(MKDIR) \"\$(INSTALLTOP)${o}lib\" 685194206Ssimon \$(CP) \"\$(INCO_D)${o}*.\[ch\]\" \"\$(INSTALLTOP)${o}include${o}openssl\" 686194206Ssimon \$(CP) \"\$(BIN_D)$o\$(E_EXE)$exep\" \"\$(INSTALLTOP)${o}bin\" 687194206Ssimon \$(CP) \"apps${o}openssl.cnf\" \"\$(INSTALLTOP)\" 688160814Ssimon$extra_install 68955714Skris 690160814Ssimon 691160814Ssimontest: \$(T_EXE) 692160814Ssimon cd \$(BIN_D) 693160814Ssimon ..${o}ms${o}test 694160814Ssimon 69555714Skrisclean: 69655714Skris \$(RM) \$(TMP_D)$o*.* 69755714Skris 69855714Skrisvclean: 69955714Skris \$(RM) \$(TMP_D)$o*.* 70055714Skris \$(RM) \$(OUT_D)$o*.* 70155714Skris 70255714SkrisEOF 70355714Skris 70455714Skrismy $platform_cpp_symbol = "MK1MF_PLATFORM_$platform"; 70555714Skris$platform_cpp_symbol =~ s/-/_/g; 70655714Skrisif (open(IN,"crypto/buildinf.h")) 70755714Skris { 70855714Skris # Remove entry for this platform in existing file buildinf.h. 70955714Skris 71055714Skris my $old_buildinf_h = ""; 71155714Skris while (<IN>) 71255714Skris { 71355714Skris if (/^\#ifdef $platform_cpp_symbol$/) 71455714Skris { 71555714Skris while (<IN>) { last if (/^\#endif/); } 71655714Skris } 71755714Skris else 71855714Skris { 71955714Skris $old_buildinf_h .= $_; 72055714Skris } 72155714Skris } 72255714Skris close(IN); 72355714Skris 72455714Skris open(OUT,">crypto/buildinf.h") || die "Can't open buildinf.h"; 72555714Skris print OUT $old_buildinf_h; 72655714Skris close(OUT); 72755714Skris } 72855714Skris 72955714Skrisopen (OUT,">>crypto/buildinf.h") || die "Can't open buildinf.h"; 73055714Skrisprintf OUT <<EOF; 73155714Skris#ifdef $platform_cpp_symbol 73255714Skris /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */ 73355714Skris #define CFLAGS "$cc $cflags" 73455714Skris #define PLATFORM "$platform" 73555714SkrisEOF 73655714Skrisprintf OUT " #define DATE \"%s\"\n", scalar gmtime(); 73755714Skrisprintf OUT "#endif\n"; 73855714Skrisclose(OUT); 73955714Skris 74055714Skris# Strip of trailing ' ' 74155714Skrisforeach (keys %lib_obj) { $lib_obj{$_}=&clean_up_ws($lib_obj{$_}); } 74255714Skris$test=&clean_up_ws($test); 74355714Skris$e_exe=&clean_up_ws($e_exe); 74455714Skris$exheader=&clean_up_ws($exheader); 74555714Skris$header=&clean_up_ws($header); 74655714Skris 74755714Skris# First we strip the exheaders from the headers list 74855714Skrisforeach (split(/\s+/,$exheader)){ $h{$_}=1; } 74955714Skrisforeach (split(/\s+/,$header)) { $h.=$_." " unless $h{$_}; } 75055714Skrischop($h); $header=$h; 75155714Skris 752160814Ssimon$defs.=&do_defs("HEADER",$header,"\$(INCL_D)",""); 753160814Ssimon$rules.=&do_copy_rule("\$(INCL_D)",$header,""); 75455714Skris 755160814Ssimon$defs.=&do_defs("EXHEADER",$exheader,"\$(INCO_D)",""); 756160814Ssimon$rules.=&do_copy_rule("\$(INCO_D)",$exheader,""); 75755714Skris 75855714Skris$defs.=&do_defs("T_OBJ",$test,"\$(OBJ_D)",$obj); 75955714Skris$rules.=&do_compile_rule("\$(OBJ_D)",$test,"\$(APP_CFLAGS)"); 76055714Skris 76155714Skris$defs.=&do_defs("E_OBJ",$e_exe,"\$(OBJ_D)",$obj); 76255714Skris$rules.=&do_compile_rule("\$(OBJ_D)",$e_exe,'-DMONOLITH $(APP_CFLAGS)'); 76355714Skris 764194206Ssimon# Special case rules for fips_start and fips_end fips_premain_dso 765194206Ssimon 766194206Ssimonif ($fips) 767194206Ssimon { 768194206Ssimon if ($fipscanisterbuild) 769194206Ssimon { 770194206Ssimon $rules.=&cc_compile_target("\$(OBJ_D)${o}fips_start$obj", 771194206Ssimon "fips${o}fips_canister.c", 772194206Ssimon "-DFIPS_START \$(SHLIB_CFLAGS)"); 773194206Ssimon $rules.=&cc_compile_target("\$(OBJ_D)${o}fips_end$obj", 774194206Ssimon "fips${o}fips_canister.c", "\$(SHLIB_CFLAGS)"); 775194206Ssimon } 776194206Ssimon $rules.=&cc_compile_target("\$(OBJ_D)${o}fips_standalone_sha1$obj", 777194206Ssimon "fips${o}sha${o}fips_standalone_sha1.c", 778194206Ssimon "\$(SHLIB_CFLAGS)"); 779194206Ssimon $rules.=&cc_compile_target("\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj", 780194206Ssimon "fips${o}fips_premain.c", 781194206Ssimon "-DFINGERPRINT_PREMAIN_DSO_LOAD \$(SHLIB_CFLAGS)"); 782194206Ssimon } 783194206Ssimon 78455714Skrisforeach (values %lib_nam) 78555714Skris { 78655714Skris $lib_obj=$lib_obj{$_}; 78755714Skris local($slib)=$shlib; 78855714Skris 78955714Skris if (($_ eq "SSL") && $no_ssl2 && $no_ssl3) 79055714Skris { 79155714Skris $rules.="\$(O_SSL):\n\n"; 79255714Skris next; 79355714Skris } 79455714Skris 795194206Ssimon if ((!$fips && ($_ eq "CRYPTO")) || ($fips && ($_ eq "FIPS"))) 79655714Skris { 797194206Ssimon if ($cpuid_asm_obj ne "") 798194206Ssimon { 799194206Ssimon $lib_obj =~ s/(\S*\/cryptlib\S*)/$1 \$(CPUID_ASM_OBJ)/; 800194206Ssimon $rules.=&do_asm_rule($cpuid_asm_obj,$cpuid_asm_src); 801194206Ssimon } 802194206Ssimon if ($aes_asm_obj ne "") 803194206Ssimon { 804194206Ssimon $lib_obj =~ s/\s(\S*\/aes_core\S*)/ \$(AES_ASM_OBJ)/; 805194206Ssimon $lib_obj =~ s/\s\S*\/aes_cbc\S*//; 806194206Ssimon $rules.=&do_asm_rule($aes_asm_obj,$aes_asm_src); 807194206Ssimon } 808194206Ssimon if ($sha1_asm_obj ne "") 809194206Ssimon { 810194206Ssimon $lib_obj =~ s/\s(\S*\/sha1dgst\S*)/ $1 \$(SHA1_ASM_OBJ)/; 811194206Ssimon $rules.=&do_asm_rule($sha1_asm_obj,$sha1_asm_src); 812194206Ssimon } 813194206Ssimon if ($bn_asm_obj ne "") 814194206Ssimon { 815194206Ssimon $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/; 816194206Ssimon $rules.=&do_asm_rule($bn_asm_obj,$bn_asm_src); 817194206Ssimon } 818194206Ssimon if ($bnco_asm_obj ne "") 819194206Ssimon { 820194206Ssimon $lib_obj .= "\$(BNCO_ASM_OBJ)"; 821194206Ssimon $rules.=&do_asm_rule($bnco_asm_obj,$bnco_asm_src); 822194206Ssimon } 823194206Ssimon if ($des_enc_obj ne "") 824194206Ssimon { 825194206Ssimon $lib_obj =~ s/\s\S*des_enc\S*/ \$(DES_ENC_OBJ)/; 826194206Ssimon $lib_obj =~ s/\s\S*\/fcrypt_b\S*\s*/ /; 827194206Ssimon $rules.=&do_asm_rule($des_enc_obj,$des_enc_src); 828194206Ssimon } 82955714Skris } 83055714Skris if (($bf_enc_obj ne "") && ($_ eq "CRYPTO")) 83155714Skris { 83255714Skris $lib_obj =~ s/\s\S*\/bf_enc\S*/ \$(BF_ENC_OBJ)/; 83355714Skris $rules.=&do_asm_rule($bf_enc_obj,$bf_enc_src); 83455714Skris } 83555714Skris if (($cast_enc_obj ne "") && ($_ eq "CRYPTO")) 83655714Skris { 83755714Skris $lib_obj =~ s/(\s\S*\/c_enc\S*)/ \$(CAST_ENC_OBJ)/; 83855714Skris $rules.=&do_asm_rule($cast_enc_obj,$cast_enc_src); 83955714Skris } 84055714Skris if (($rc4_enc_obj ne "") && ($_ eq "CRYPTO")) 84155714Skris { 84255714Skris $lib_obj =~ s/\s\S*\/rc4_enc\S*/ \$(RC4_ENC_OBJ)/; 84355714Skris $rules.=&do_asm_rule($rc4_enc_obj,$rc4_enc_src); 84455714Skris } 84555714Skris if (($rc5_enc_obj ne "") && ($_ eq "CRYPTO")) 84655714Skris { 84755714Skris $lib_obj =~ s/\s\S*\/rc5_enc\S*/ \$(RC5_ENC_OBJ)/; 84855714Skris $rules.=&do_asm_rule($rc5_enc_obj,$rc5_enc_src); 84955714Skris } 85055714Skris if (($md5_asm_obj ne "") && ($_ eq "CRYPTO")) 85155714Skris { 85255714Skris $lib_obj =~ s/\s(\S*\/md5_dgst\S*)/ $1 \$(MD5_ASM_OBJ)/; 85355714Skris $rules.=&do_asm_rule($md5_asm_obj,$md5_asm_src); 85455714Skris } 85555714Skris if (($rmd160_asm_obj ne "") && ($_ eq "CRYPTO")) 85655714Skris { 85755714Skris $lib_obj =~ s/\s(\S*\/rmd_dgst\S*)/ $1 \$(RMD160_ASM_OBJ)/; 85855714Skris $rules.=&do_asm_rule($rmd160_asm_obj,$rmd160_asm_src); 85955714Skris } 86055714Skris $defs.=&do_defs(${_}."OBJ",$lib_obj,"\$(OBJ_D)",$obj); 861109998Smarkm $lib=($slib)?" \$(SHLIB_CFLAGS)".$shlib_ex_cflags{$_}:" \$(LIB_CFLAGS)"; 86255714Skris $rules.=&do_compile_rule("\$(OBJ_D)",$lib_obj{$_},$lib); 86355714Skris } 86455714Skris 865160814Ssimon# hack to add version info on MSVC 866205128Ssimonif (($platform eq "VC-WIN32") || ($platform eq "VC-WIN64A") 867205128Ssimon || ($platform eq "VC-WIN64I") || ($platform eq "VC-NT")) { 868160814Ssimon $rules.= <<"EOF"; 869160814Ssimon\$(OBJ_D)\\\$(CRYPTO).res: ms\\version32.rc 870160814Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(CRYPTO).res" /d CRYPTO ms\\version32.rc 871160814Ssimon 872160814Ssimon\$(OBJ_D)\\\$(SSL).res: ms\\version32.rc 873160814Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(SSL).res" /d SSL ms\\version32.rc 874160814Ssimon 875194206Ssimon\$(OBJ_D)\\\$(LIBFIPS).res: ms\\version32.rc 876194206Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(LIBFIPS).res" /d FIPS ms\\version32.rc 877194206Ssimon 878160814SsimonEOF 879160814Ssimon} 880160814Ssimon 88155714Skris$defs.=&do_defs("T_EXE",$test,"\$(TEST_D)",$exep); 88255714Skrisforeach (split(/\s+/,$test)) 88355714Skris { 884194206Ssimon my $t_libs; 88555714Skris $t=&bname($_); 886194206Ssimon my $ltype; 887194206Ssimon # Check to see if test program is FIPS 888194206Ssimon if ($fips && /fips/) 889194206Ssimon { 890194206Ssimon # If fipsdso link to libosslfips.dll 891194206Ssimon # otherwise perform static link to 892194206Ssimon # $(O_FIPSCANISTER) 893194206Ssimon if ($fipsdso) 894194206Ssimon { 895194206Ssimon $t_libs = "\$(L_FIPS)"; 896194206Ssimon $ltype = 0; 897194206Ssimon } 898194206Ssimon else 899194206Ssimon { 900194206Ssimon $t_libs = "\$(O_FIPSCANISTER)"; 901194206Ssimon $ltype = 2; 902194206Ssimon } 903194206Ssimon } 904194206Ssimon else 905194206Ssimon { 906194206Ssimon $t_libs = "\$(L_LIBS)"; 907194206Ssimon $ltype = 0; 908194206Ssimon } 909194206Ssimon 91055714Skris $tt="\$(OBJ_D)${o}$t${obj}"; 911194206Ssimon $rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","$t_libs \$(EX_LIBS)", $ltype); 91255714Skris } 91355714Skris 914160814Ssimon$defs.=&do_defs("E_SHLIB",$engines,"\$(ENG_D)",$shlibp); 915160814Ssimon 916160814Ssimonforeach (split(/\s+/,$engines)) 917160814Ssimon { 918160814Ssimon $rules.=&do_compile_rule("\$(OBJ_D)","engines${o}e_$_",$lib); 919160814Ssimon $rules.= &do_lib_rule("\$(OBJ_D)${o}e_${_}.obj","\$(ENG_D)$o$_$shlibp","",$shlib,""); 920160814Ssimon } 921160814Ssimon 922160814Ssimon 923160814Ssimon 92455714Skris$rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)"); 92555714Skris 926194206Ssimonif ($fips) 927194206Ssimon { 928194206Ssimon if ($shlib) 929194206Ssimon { 930194206Ssimon if ($fipsdso) 931194206Ssimon { 932194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)", 933194206Ssimon "\$(O_CRYPTO)", "$crypto", 934194206Ssimon $shlib, "", ""); 935194206Ssimon $rules.= &do_lib_rule( 936194206Ssimon "\$(O_FIPSCANISTER)", 937194206Ssimon "\$(O_FIPS)", "\$(LIBFIPS)", 938194206Ssimon $shlib, "\$(SO_CRYPTO)", "\$(BASEADDR)"); 939194206Ssimon $rules.= &do_sdef_rule(); 940194206Ssimon } 941194206Ssimon else 942194206Ssimon { 943194206Ssimon $rules.= &do_lib_rule( 944194206Ssimon "\$(CRYPTOOBJ) \$(O_FIPSCANISTER)", 945194206Ssimon "\$(O_CRYPTO)", "$crypto", 946194206Ssimon $shlib, "\$(SO_CRYPTO)", "\$(BASEADDR)"); 947194206Ssimon } 948194206Ssimon } 949194206Ssimon else 950194206Ssimon { 951194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)", 952194206Ssimon "\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)", ""); 953194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ) \$(FIPSOBJ)", 954194206Ssimon "\$(LIB_D)$o$crypto_compat",$crypto,$shlib,"\$(SO_CRYPTO)", ""); 955194206Ssimon } 956194206Ssimon } 957194206Ssimon else 958194206Ssimon { 959194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib, 960194206Ssimon "\$(SO_CRYPTO)"); 961194206Ssimon } 962160814Ssimon 963194206Ssimonif ($fips) 964194206Ssimon { 965194206Ssimon if ($fipscanisterbuild) 966194206Ssimon { 967194206Ssimon $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", 968194206Ssimon "\$(OBJ_D)${o}fips_start$obj", 969194206Ssimon "\$(FIPSOBJ)", 970194206Ssimon "\$(OBJ_D)${o}fips_end$obj", 971194206Ssimon "\$(FIPS_SHA1_EXE)", ""); 972194206Ssimon $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)", 973194206Ssimon "\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}sha1dgst$obj \$(SHA1_ASM_OBJ)", 974194206Ssimon "","\$(EX_LIBS)", 1); 975194206Ssimon } 976194206Ssimon else 977194206Ssimon { 978194206Ssimon $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)", 979194206Ssimon "\$(OBJ_D)${o}fips_standalone_sha1$obj \$(O_FIPSCANISTER)", 980194206Ssimon "","", 1); 981194206Ssimon 982194206Ssimon } 983194206Ssimon $rules.=&do_link_rule("\$(PREMAIN_DSO_EXE)","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPSCANISTER)","","\$(EX_LIBS)", 1); 984194206Ssimon 985194206Ssimon } 986194206Ssimon 987194206Ssimon$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)", ($fips && !$shlib) ? 2 : 0); 988194206Ssimon 98955714Skrisprint $defs; 99068651Skris 99168651Skrisif ($platform eq "linux-elf") { 99268651Skris print <<"EOF"; 99368651Skris# Generate perlasm output files 99468651Skris%.cpp: 995142425Snectar (cd \$(\@D)/..; PERL=perl make -f Makefile asm/\$(\@F)) 99668651SkrisEOF 99768651Skris} 99855714Skrisprint "###################################################################\n"; 99955714Skrisprint $rules; 100055714Skris 100155714Skris############################################### 100255714Skris# strip off any trailing .[och] and append the relative directory 100355714Skris# also remembering to do nothing if we are in one of the dropped 100455714Skris# directories 100555714Skrissub var_add 100655714Skris { 1007160814Ssimon local($dir,$val,$keepext)=@_; 100855714Skris local(@a,$_,$ret); 100955714Skris 1010111147Snectar return("") if $no_engine && $dir =~ /\/engine/; 1011111147Snectar return("") if $no_hw && $dir =~ /\/hw/; 101255714Skris return("") if $no_idea && $dir =~ /\/idea/; 1013109998Smarkm return("") if $no_aes && $dir =~ /\/aes/; 1014162911Ssimon return("") if $no_camellia && $dir =~ /\/camellia/; 1015194206Ssimon return("") if $no_seed && $dir =~ /\/seed/; 101655714Skris return("") if $no_rc2 && $dir =~ /\/rc2/; 101755714Skris return("") if $no_rc4 && $dir =~ /\/rc4/; 101855714Skris return("") if $no_rc5 && $dir =~ /\/rc5/; 101955714Skris return("") if $no_rsa && $dir =~ /\/rsa/; 102055714Skris return("") if $no_rsa && $dir =~ /^rsaref/; 102155714Skris return("") if $no_dsa && $dir =~ /\/dsa/; 102255714Skris return("") if $no_dh && $dir =~ /\/dh/; 1023120631Snectar return("") if $no_ec && $dir =~ /\/ec/; 1024194206Ssimon return("") if $no_cms && $dir =~ /\/cms/; 1025194206Ssimon return("") if $no_jpake && $dir =~ /\/jpake/; 1026194206Ssimon return("") if !$fips && $dir =~ /^fips/; 102755714Skris if ($no_des && $dir =~ /\/des/) 102855714Skris { 102955714Skris if ($val =~ /read_pwd/) 103055714Skris { return("$dir/read_pwd "); } 103155714Skris else 103255714Skris { return(""); } 103355714Skris } 103455714Skris return("") if $no_mdc2 && $dir =~ /\/mdc2/; 103555714Skris return("") if $no_sock && $dir =~ /\/proxy/; 103655714Skris return("") if $no_bf && $dir =~ /\/bf/; 103755714Skris return("") if $no_cast && $dir =~ /\/cast/; 103855714Skris 103955714Skris $val =~ s/^\s*(.*)\s*$/$1/; 104055714Skris @a=split(/\s+/,$val); 1041160814Ssimon grep(s/\.[och]$//,@a) unless $keepext; 104255714Skris 104355714Skris @a=grep(!/^e_.*_3d$/,@a) if $no_des; 104455714Skris @a=grep(!/^e_.*_d$/,@a) if $no_des; 1045109998Smarkm @a=grep(!/^e_.*_ae$/,@a) if $no_idea; 1046109998Smarkm @a=grep(!/^e_.*_i$/,@a) if $no_aes; 104755714Skris @a=grep(!/^e_.*_r2$/,@a) if $no_rc2; 104855714Skris @a=grep(!/^e_.*_r5$/,@a) if $no_rc5; 104955714Skris @a=grep(!/^e_.*_bf$/,@a) if $no_bf; 105055714Skris @a=grep(!/^e_.*_c$/,@a) if $no_cast; 105155714Skris @a=grep(!/^e_rc4$/,@a) if $no_rc4; 1052162911Ssimon @a=grep(!/^e_camellia$/,@a) if $no_camellia; 1053194206Ssimon @a=grep(!/^e_seed$/,@a) if $no_seed; 105455714Skris 105555714Skris @a=grep(!/(^s2_)|(^s23_)/,@a) if $no_ssl2; 105655714Skris @a=grep(!/(^s3_)|(^s23_)/,@a) if $no_ssl3; 105755714Skris 105855714Skris @a=grep(!/(_sock$)|(_acpt$)|(_conn$)|(^pxy_)/,@a) if $no_sock; 105955714Skris 106055714Skris @a=grep(!/(^md2)|(_md2$)/,@a) if $no_md2; 106168651Skris @a=grep(!/(^md4)|(_md4$)/,@a) if $no_md4; 106255714Skris @a=grep(!/(^md5)|(_md5$)/,@a) if $no_md5; 1063111147Snectar @a=grep(!/(rmd)|(ripemd)/,@a) if $no_ripemd; 106455714Skris 106555714Skris @a=grep(!/(^d2i_r_)|(^i2d_r_)/,@a) if $no_rsa; 106655714Skris @a=grep(!/(^p_open$)|(^p_seal$)/,@a) if $no_rsa; 106755714Skris @a=grep(!/(^pem_seal$)/,@a) if $no_rsa; 106855714Skris 106955714Skris @a=grep(!/(m_dss$)|(m_dss1$)/,@a) if $no_dsa; 107055714Skris @a=grep(!/(^d2i_s_)|(^i2d_s_)|(_dsap$)/,@a) if $no_dsa; 107155714Skris 107255714Skris @a=grep(!/^n_pkey$/,@a) if $no_rsa || $no_rc4; 107355714Skris 107455714Skris @a=grep(!/_dhp$/,@a) if $no_dh; 107555714Skris 107655714Skris @a=grep(!/(^sha[^1])|(_sha$)|(m_dss$)/,@a) if $no_sha; 107755714Skris @a=grep(!/(^sha1)|(_sha1$)|(m_dss1$)/,@a) if $no_sha1; 107855714Skris @a=grep(!/_mdc2$/,@a) if $no_mdc2; 107955714Skris 1080111147Snectar @a=grep(!/^engine$/,@a) if $no_engine; 1081111147Snectar @a=grep(!/^hw$/,@a) if $no_hw; 108255714Skris @a=grep(!/(^rsa$)|(^genrsa$)/,@a) if $no_rsa; 108355714Skris @a=grep(!/(^dsa$)|(^gendsa$)|(^dsaparam$)/,@a) if $no_dsa; 108455714Skris @a=grep(!/^gendsa$/,@a) if $no_sha1; 108555714Skris @a=grep(!/(^dh$)|(^gendh$)/,@a) if $no_dh; 108655714Skris 108755714Skris @a=grep(!/(^dh)|(_sha1$)|(m_dss1$)/,@a) if $no_sha1; 108855714Skris 108955714Skris grep($_="$dir/$_",@a); 109055714Skris @a=grep(!/(^|\/)s_/,@a) if $no_sock; 109155714Skris @a=grep(!/(^|\/)bio_sock/,@a) if $no_sock; 109255714Skris $ret=join(' ',@a)." "; 109355714Skris return($ret); 109455714Skris } 109555714Skris 109655714Skris# change things so that each 'token' is only separated by one space 109755714Skrissub clean_up_ws 109855714Skris { 109955714Skris local($w)=@_; 110055714Skris 110155714Skris $w =~ s/^\s*(.*)\s*$/$1/; 110255714Skris $w =~ s/\s+/ /g; 110355714Skris return($w); 110455714Skris } 110555714Skris 110655714Skrissub do_defs 110755714Skris { 110855714Skris local($var,$files,$location,$postfix)=@_; 110955714Skris local($_,$ret,$pf); 111055714Skris local(*OUT,$tmp,$t); 111155714Skris 111255714Skris $files =~ s/\//$o/g if $o ne '/'; 111355714Skris $ret="$var="; 111455714Skris $n=1; 111555714Skris $Vars{$var}.=""; 111655714Skris foreach (split(/ /,$files)) 111755714Skris { 111855714Skris $orig=$_; 111955714Skris $_=&bname($_) unless /^\$/; 112055714Skris if ($n++ == 2) 112155714Skris { 112255714Skris $n=0; 112355714Skris $ret.="\\\n\t"; 112455714Skris } 112555714Skris if (($_ =~ /bss_file/) && ($postfix eq ".h")) 112655714Skris { $pf=".c"; } 112755714Skris else { $pf=$postfix; } 112855714Skris if ($_ =~ /BN_ASM/) { $t="$_ "; } 112968651Skris elsif ($_ =~ /BNCO_ASM/){ $t="$_ "; } 113055714Skris elsif ($_ =~ /DES_ENC/) { $t="$_ "; } 113155714Skris elsif ($_ =~ /BF_ENC/) { $t="$_ "; } 113255714Skris elsif ($_ =~ /CAST_ENC/){ $t="$_ "; } 113355714Skris elsif ($_ =~ /RC4_ENC/) { $t="$_ "; } 113455714Skris elsif ($_ =~ /RC5_ENC/) { $t="$_ "; } 113555714Skris elsif ($_ =~ /MD5_ASM/) { $t="$_ "; } 113655714Skris elsif ($_ =~ /SHA1_ASM/){ $t="$_ "; } 1137194206Ssimon elsif ($_ =~ /AES_ASM/){ $t="$_ "; } 113855714Skris elsif ($_ =~ /RMD160_ASM/){ $t="$_ "; } 1139162911Ssimon elsif ($_ =~ /CPUID_ASM/){ $t="$_ "; } 114055714Skris else { $t="$location${o}$_$pf "; } 114155714Skris 114255714Skris $Vars{$var}.="$t "; 114355714Skris $ret.=$t; 114455714Skris } 1145160814Ssimon # hack to add version info on MSVC 1146205128Ssimon if ($shlib && (($platform eq "VC-WIN32") || ($platfrom eq "VC-WIN64I") || ($platform eq "VC-WIN64A") || ($platform eq "VC-NT"))) 1147160814Ssimon { 1148160814Ssimon if ($var eq "CRYPTOOBJ") 1149160814Ssimon { $ret.="\$(OBJ_D)\\\$(CRYPTO).res "; } 1150160814Ssimon elsif ($var eq "SSLOBJ") 1151160814Ssimon { $ret.="\$(OBJ_D)\\\$(SSL).res "; } 1152160814Ssimon } 1153160814Ssimon chomp($ret); 115455714Skris $ret.="\n\n"; 115555714Skris return($ret); 115655714Skris } 115755714Skris 115855714Skris# return the name with the leading path removed 115955714Skrissub bname 116055714Skris { 116155714Skris local($ret)=@_; 116255714Skris $ret =~ s/^.*[\\\/]([^\\\/]+)$/$1/; 116355714Skris return($ret); 116455714Skris } 116555714Skris 116655714Skris 116755714Skris############################################################## 116855714Skris# do a rule for each file that says 'compile' to new direcory 116955714Skris# compile the files in '$files' into $to 117055714Skrissub do_compile_rule 117155714Skris { 117255714Skris local($to,$files,$ex)=@_; 117355714Skris local($ret,$_,$n); 117455714Skris 117555714Skris $files =~ s/\//$o/g if $o ne '/'; 117655714Skris foreach (split(/\s+/,$files)) 117755714Skris { 117855714Skris $n=&bname($_); 117955714Skris $ret.=&cc_compile_target("$to${o}$n$obj","${_}.c",$ex) 118055714Skris } 118155714Skris return($ret); 118255714Skris } 118355714Skris 118455714Skris############################################################## 118555714Skris# do a rule for each file that says 'compile' to new direcory 118655714Skrissub cc_compile_target 118755714Skris { 118855714Skris local($target,$source,$ex_flags)=@_; 118955714Skris local($ret); 119055714Skris 119155714Skris $ex_flags.=" -DMK1MF_BUILD -D$platform_cpp_symbol" if ($source =~ /cversion/); 119255714Skris $target =~ s/\//$o/g if $o ne "/"; 119355714Skris $source =~ s/\//$o/g if $o ne "/"; 119455714Skris $ret ="$target: \$(SRC_D)$o$source\n\t"; 119555714Skris $ret.="\$(CC) ${ofile}$target $ex_flags -c \$(SRC_D)$o$source\n\n"; 119655714Skris return($ret); 119755714Skris } 119855714Skris 119955714Skris############################################################## 120055714Skrissub do_asm_rule 120155714Skris { 120255714Skris local($target,$src)=@_; 120355714Skris local($ret,@s,@t,$i); 120455714Skris 120555714Skris $target =~ s/\//$o/g if $o ne "/"; 120655714Skris $src =~ s/\//$o/g if $o ne "/"; 120755714Skris 120855714Skris @s=split(/\s+/,$src); 120955714Skris @t=split(/\s+/,$target); 121055714Skris 121155714Skris for ($i=0; $i<=$#s; $i++) 121255714Skris { 121355714Skris $ret.="$t[$i]: $s[$i]\n"; 121455714Skris $ret.="\t\$(ASM) $afile$t[$i] \$(SRC_D)$o$s[$i]\n\n"; 121555714Skris } 121655714Skris return($ret); 121755714Skris } 121855714Skris 121955714Skrissub do_shlib_rule 122055714Skris { 122155714Skris local($n,$def)=@_; 122255714Skris local($ret,$nn); 122355714Skris local($t); 122455714Skris 122555714Skris ($nn=$n) =~ tr/a-z/A-Z/; 122655714Skris $ret.="$n.dll: \$(${nn}OBJ)\n"; 122755714Skris if ($vc && $w32) 122855714Skris { 122955714Skris $ret.="\t\$(MKSHLIB) $efile$n.dll $def @<<\n \$(${nn}OBJ_F)\n<<\n"; 123055714Skris } 123155714Skris $ret.="\n"; 123255714Skris return($ret); 123355714Skris } 123455714Skris 123555714Skris# do a rule for each file that says 'copy' to new direcory on change 123655714Skrissub do_copy_rule 123755714Skris { 123855714Skris local($to,$files,$p)=@_; 123955714Skris local($ret,$_,$n,$pp); 124055714Skris 124155714Skris $files =~ s/\//$o/g if $o ne '/'; 124255714Skris foreach (split(/\s+/,$files)) 124355714Skris { 124455714Skris $n=&bname($_); 124555714Skris if ($n =~ /bss_file/) 124655714Skris { $pp=".c"; } 124755714Skris else { $pp=$p; } 1248194206Ssimon $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(CP) \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n"; 124955714Skris } 125055714Skris return($ret); 125155714Skris } 125255714Skris 125355714Skrissub read_options 125455714Skris { 1255160814Ssimon # Many options are handled in a similar way. In particular 1256160814Ssimon # no-xxx sets zero or more scalars to 1. 1257160814Ssimon # Process these using a hash containing the option name and 1258160814Ssimon # reference to the scalars to set. 125955714Skris 1260160814Ssimon my %valid_options = ( 1261160814Ssimon "no-rc2" => \$no_rc2, 1262160814Ssimon "no-rc4" => \$no_rc4, 1263160814Ssimon "no-rc5" => \$no_rc5, 1264160814Ssimon "no-idea" => \$no_idea, 1265160814Ssimon "no-aes" => \$no_aes, 1266162911Ssimon "no-camellia" => \$no_camellia, 1267194206Ssimon "no-seed" => \$no_seed, 1268160814Ssimon "no-des" => \$no_des, 1269160814Ssimon "no-bf" => \$no_bf, 1270160814Ssimon "no-cast" => \$no_cast, 1271160814Ssimon "no-md2" => \$no_md2, 1272160814Ssimon "no-md4" => \$no_md4, 1273160814Ssimon "no-md5" => \$no_md5, 1274160814Ssimon "no-sha" => \$no_sha, 1275160814Ssimon "no-sha1" => \$no_sha1, 1276160814Ssimon "no-ripemd" => \$no_ripemd, 1277160814Ssimon "no-mdc2" => \$no_mdc2, 1278160814Ssimon "no-patents" => 1279160814Ssimon [\$no_rc2, \$no_rc4, \$no_rc5, \$no_idea, \$no_rsa], 1280160814Ssimon "no-rsa" => \$no_rsa, 1281160814Ssimon "no-dsa" => \$no_dsa, 1282160814Ssimon "no-dh" => \$no_dh, 1283160814Ssimon "no-hmac" => \$no_hmac, 1284160814Ssimon "no-asm" => \$no_asm, 1285160814Ssimon "nasm" => \$nasm, 1286194206Ssimon "ml64" => \$ml64, 1287160814Ssimon "nw-nasm" => \$nw_nasm, 1288160814Ssimon "nw-mwasm" => \$nw_mwasm, 1289160814Ssimon "gaswin" => \$gaswin, 1290160814Ssimon "no-ssl2" => \$no_ssl2, 1291160814Ssimon "no-ssl3" => \$no_ssl3, 1292194206Ssimon "no-tlsext" => \$no_tlsext, 1293194206Ssimon "no-cms" => \$no_cms, 1294194206Ssimon "no-jpake" => \$no_jpake, 1295194206Ssimon "no-capieng" => \$no_capieng, 1296160814Ssimon "no-err" => \$no_err, 1297160814Ssimon "no-sock" => \$no_sock, 1298160814Ssimon "no-krb5" => \$no_krb5, 1299160814Ssimon "no-ec" => \$no_ec, 1300160814Ssimon "no-ecdsa" => \$no_ecdsa, 1301160814Ssimon "no-ecdh" => \$no_ecdh, 1302160814Ssimon "no-engine" => \$no_engine, 1303160814Ssimon "no-hw" => \$no_hw, 1304160814Ssimon "just-ssl" => 1305160814Ssimon [\$no_rc2, \$no_idea, \$no_des, \$no_bf, \$no_cast, 1306160814Ssimon \$no_md2, \$no_sha, \$no_mdc2, \$no_dsa, \$no_dh, 1307160814Ssimon \$no_ssl2, \$no_err, \$no_ripemd, \$no_rc5, 1308194206Ssimon \$no_aes, \$no_camellia, \$no_seed], 1309160814Ssimon "rsaref" => 0, 1310160814Ssimon "gcc" => \$gcc, 1311160814Ssimon "debug" => \$debug, 1312160814Ssimon "profile" => \$profile, 1313160814Ssimon "shlib" => \$shlib, 1314160814Ssimon "dll" => \$shlib, 1315160814Ssimon "shared" => 0, 1316160814Ssimon "no-gmp" => 0, 1317167612Ssimon "no-rfc3779" => 0, 1318194206Ssimon "no-montasm" => 0, 1319160814Ssimon "no-shared" => 0, 1320160814Ssimon "no-zlib" => 0, 1321160814Ssimon "no-zlib-dynamic" => 0, 1322194206Ssimon "fips" => \$fips, 1323194206Ssimon "fipscanisterbuild" => [\$fips, \$fipscanisterbuild], 1324194206Ssimon "fipsdso" => [\$fips, \$fipscanisterbuild, \$fipsdso], 1325160814Ssimon ); 132655714Skris 1327160814Ssimon if (exists $valid_options{$_}) 1328160814Ssimon { 1329160814Ssimon my $r = $valid_options{$_}; 1330160814Ssimon if ( ref $r eq "SCALAR") 1331160814Ssimon { $$r = 1;} 1332160814Ssimon elsif ( ref $r eq "ARRAY") 1333160814Ssimon { 1334160814Ssimon my $r2; 1335160814Ssimon foreach $r2 (@$r) 1336160814Ssimon { 1337160814Ssimon $$r2 = 1; 1338160814Ssimon } 1339160814Ssimon } 1340160814Ssimon } 1341160814Ssimon elsif (/^no-comp$/) { $xcflags = "-DOPENSSL_NO_COMP $xcflags"; } 1342160814Ssimon elsif (/^enable-zlib$/) { $zlib_opt = 1 if $zlib_opt == 0 } 1343160814Ssimon elsif (/^enable-zlib-dynamic$/) 1344160814Ssimon { 1345160814Ssimon $zlib_opt = 2; 1346160814Ssimon } 1347160814Ssimon elsif (/^no-static-engine/) 1348160814Ssimon { 1349160814Ssimon $no_static_engine = 1; 1350160814Ssimon } 1351160814Ssimon elsif (/^enable-static-engine/) 1352160814Ssimon { 1353160814Ssimon $no_static_engine = 0; 1354160814Ssimon } 1355160814Ssimon # There are also enable-xxx options which correspond to 1356160814Ssimon # the no-xxx. Since the scalars are enabled by default 1357160814Ssimon # these can be ignored. 1358160814Ssimon elsif (/^enable-/) 1359160814Ssimon { 1360160814Ssimon my $t = $_; 1361160814Ssimon $t =~ s/^enable/no/; 1362160814Ssimon if (exists $valid_options{$t}) 1363160814Ssimon {return 1;} 1364160814Ssimon return 0; 1365160814Ssimon } 1366194206Ssimon # experimental-xxx is mostly like enable-xxx, but opensslconf.v 1367194206Ssimon # will still set OPENSSL_NO_xxx unless we set OPENSSL_EXPERIMENTAL_xxx. 1368194206Ssimon # (No need to fail if we don't know the algorithm -- this is for adventurous users only.) 1369194206Ssimon elsif (/^experimental-/) 1370194206Ssimon { 1371194206Ssimon my $algo, $ALGO; 1372194206Ssimon ($algo = $_) =~ s/^experimental-//; 1373194206Ssimon ($ALGO = $algo) =~ tr/[a-z]/[A-Z]/; 1374194206Ssimon 1375194206Ssimon $xcflags="-DOPENSSL_EXPERIMENTAL_$ALGO $xcflags"; 1376194206Ssimon 1377194206Ssimon } 1378160814Ssimon elsif (/^--with-krb5-flavor=(.*)$/) 1379160814Ssimon { 1380160814Ssimon my $krb5_flavor = $1; 1381160814Ssimon if ($krb5_flavor =~ /^force-[Hh]eimdal$/) 1382160814Ssimon { 1383160814Ssimon $xcflags="-DKRB5_HEIMDAL $xcflags"; 1384160814Ssimon } 1385160814Ssimon elsif ($krb5_flavor =~ /^MIT/i) 1386160814Ssimon { 1387160814Ssimon $xcflags="-DKRB5_MIT $xcflags"; 1388160814Ssimon if ($krb5_flavor =~ /^MIT[._-]*1[._-]*[01]/i) 1389160814Ssimon { 1390160814Ssimon $xcflags="-DKRB5_MIT_OLD11 $xcflags" 1391160814Ssimon } 1392160814Ssimon } 1393160814Ssimon } 139455714Skris elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; } 139555714Skris elsif (/^-[lL].*$/) { $l_flags.="$_ "; } 139655714Skris elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/) 139755714Skris { $c_flags.="$_ "; } 139855714Skris else { return(0); } 139955714Skris return(1); 140055714Skris } 1401194206Ssimon 1402194206Ssimonsub fipslib_error 1403194206Ssimon { 1404194206Ssimon print STDERR "***FIPS module directory sanity check failed***\n"; 1405194206Ssimon print STDERR "FIPS module build failed, or was deleted\n"; 1406194206Ssimon print STDERR "Please rebuild FIPS module.\n"; 1407194206Ssimon exit 1; 1408194206Ssimon } 1409194206Ssimon 1410194206Ssimonsub fips_check_files 1411194206Ssimon { 1412194206Ssimon my $dir = shift @_; 1413194206Ssimon my $ret = 1; 1414194206Ssimon if (!-d $dir) 1415194206Ssimon { 1416194206Ssimon print STDERR "FIPS module directory $dir does not exist\n"; 1417194206Ssimon fipslib_error(); 1418194206Ssimon } 1419194206Ssimon foreach (@_) 1420194206Ssimon { 1421194206Ssimon if (!-f "$dir${o}$_") 1422194206Ssimon { 1423194206Ssimon print STDERR "FIPS module file $_ does not exist!\n"; 1424194206Ssimon $ret = 0; 1425194206Ssimon } 1426194206Ssimon } 1427194206Ssimon fipslib_error() if ($ret == 0); 1428194206Ssimon } 1429