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 789194206Ssimon if ((!$fips && ($_ eq "CRYPTO")) || ($fips && ($_ eq "FIPS"))) 79055714Skris { 791194206Ssimon if ($cpuid_asm_obj ne "") 792194206Ssimon { 793194206Ssimon $lib_obj =~ s/(\S*\/cryptlib\S*)/$1 \$(CPUID_ASM_OBJ)/; 794194206Ssimon $rules.=&do_asm_rule($cpuid_asm_obj,$cpuid_asm_src); 795194206Ssimon } 796194206Ssimon if ($aes_asm_obj ne "") 797194206Ssimon { 798194206Ssimon $lib_obj =~ s/\s(\S*\/aes_core\S*)/ \$(AES_ASM_OBJ)/; 799194206Ssimon $lib_obj =~ s/\s\S*\/aes_cbc\S*//; 800194206Ssimon $rules.=&do_asm_rule($aes_asm_obj,$aes_asm_src); 801194206Ssimon } 802194206Ssimon if ($sha1_asm_obj ne "") 803194206Ssimon { 804194206Ssimon $lib_obj =~ s/\s(\S*\/sha1dgst\S*)/ $1 \$(SHA1_ASM_OBJ)/; 805194206Ssimon $rules.=&do_asm_rule($sha1_asm_obj,$sha1_asm_src); 806194206Ssimon } 807194206Ssimon if ($bn_asm_obj ne "") 808194206Ssimon { 809194206Ssimon $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/; 810194206Ssimon $rules.=&do_asm_rule($bn_asm_obj,$bn_asm_src); 811194206Ssimon } 812194206Ssimon if ($bnco_asm_obj ne "") 813194206Ssimon { 814194206Ssimon $lib_obj .= "\$(BNCO_ASM_OBJ)"; 815194206Ssimon $rules.=&do_asm_rule($bnco_asm_obj,$bnco_asm_src); 816194206Ssimon } 817194206Ssimon if ($des_enc_obj ne "") 818194206Ssimon { 819194206Ssimon $lib_obj =~ s/\s\S*des_enc\S*/ \$(DES_ENC_OBJ)/; 820194206Ssimon $lib_obj =~ s/\s\S*\/fcrypt_b\S*\s*/ /; 821194206Ssimon $rules.=&do_asm_rule($des_enc_obj,$des_enc_src); 822194206Ssimon } 82355714Skris } 82455714Skris if (($bf_enc_obj ne "") && ($_ eq "CRYPTO")) 82555714Skris { 82655714Skris $lib_obj =~ s/\s\S*\/bf_enc\S*/ \$(BF_ENC_OBJ)/; 82755714Skris $rules.=&do_asm_rule($bf_enc_obj,$bf_enc_src); 82855714Skris } 82955714Skris if (($cast_enc_obj ne "") && ($_ eq "CRYPTO")) 83055714Skris { 83155714Skris $lib_obj =~ s/(\s\S*\/c_enc\S*)/ \$(CAST_ENC_OBJ)/; 83255714Skris $rules.=&do_asm_rule($cast_enc_obj,$cast_enc_src); 83355714Skris } 83455714Skris if (($rc4_enc_obj ne "") && ($_ eq "CRYPTO")) 83555714Skris { 83655714Skris $lib_obj =~ s/\s\S*\/rc4_enc\S*/ \$(RC4_ENC_OBJ)/; 83755714Skris $rules.=&do_asm_rule($rc4_enc_obj,$rc4_enc_src); 83855714Skris } 83955714Skris if (($rc5_enc_obj ne "") && ($_ eq "CRYPTO")) 84055714Skris { 84155714Skris $lib_obj =~ s/\s\S*\/rc5_enc\S*/ \$(RC5_ENC_OBJ)/; 84255714Skris $rules.=&do_asm_rule($rc5_enc_obj,$rc5_enc_src); 84355714Skris } 84455714Skris if (($md5_asm_obj ne "") && ($_ eq "CRYPTO")) 84555714Skris { 84655714Skris $lib_obj =~ s/\s(\S*\/md5_dgst\S*)/ $1 \$(MD5_ASM_OBJ)/; 84755714Skris $rules.=&do_asm_rule($md5_asm_obj,$md5_asm_src); 84855714Skris } 84955714Skris if (($rmd160_asm_obj ne "") && ($_ eq "CRYPTO")) 85055714Skris { 85155714Skris $lib_obj =~ s/\s(\S*\/rmd_dgst\S*)/ $1 \$(RMD160_ASM_OBJ)/; 85255714Skris $rules.=&do_asm_rule($rmd160_asm_obj,$rmd160_asm_src); 85355714Skris } 85455714Skris $defs.=&do_defs(${_}."OBJ",$lib_obj,"\$(OBJ_D)",$obj); 855109998Smarkm $lib=($slib)?" \$(SHLIB_CFLAGS)".$shlib_ex_cflags{$_}:" \$(LIB_CFLAGS)"; 85655714Skris $rules.=&do_compile_rule("\$(OBJ_D)",$lib_obj{$_},$lib); 85755714Skris } 85855714Skris 859160814Ssimon# hack to add version info on MSVC 860205128Ssimonif (($platform eq "VC-WIN32") || ($platform eq "VC-WIN64A") 861205128Ssimon || ($platform eq "VC-WIN64I") || ($platform eq "VC-NT")) { 862160814Ssimon $rules.= <<"EOF"; 863160814Ssimon\$(OBJ_D)\\\$(CRYPTO).res: ms\\version32.rc 864160814Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(CRYPTO).res" /d CRYPTO ms\\version32.rc 865160814Ssimon 866160814Ssimon\$(OBJ_D)\\\$(SSL).res: ms\\version32.rc 867160814Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(SSL).res" /d SSL ms\\version32.rc 868160814Ssimon 869194206Ssimon\$(OBJ_D)\\\$(LIBFIPS).res: ms\\version32.rc 870194206Ssimon \$(RSC) /fo"\$(OBJ_D)\\\$(LIBFIPS).res" /d FIPS ms\\version32.rc 871194206Ssimon 872160814SsimonEOF 873160814Ssimon} 874160814Ssimon 87555714Skris$defs.=&do_defs("T_EXE",$test,"\$(TEST_D)",$exep); 87655714Skrisforeach (split(/\s+/,$test)) 87755714Skris { 878194206Ssimon my $t_libs; 87955714Skris $t=&bname($_); 880194206Ssimon my $ltype; 881194206Ssimon # Check to see if test program is FIPS 882194206Ssimon if ($fips && /fips/) 883194206Ssimon { 884194206Ssimon # If fipsdso link to libosslfips.dll 885194206Ssimon # otherwise perform static link to 886194206Ssimon # $(O_FIPSCANISTER) 887194206Ssimon if ($fipsdso) 888194206Ssimon { 889194206Ssimon $t_libs = "\$(L_FIPS)"; 890194206Ssimon $ltype = 0; 891194206Ssimon } 892194206Ssimon else 893194206Ssimon { 894194206Ssimon $t_libs = "\$(O_FIPSCANISTER)"; 895194206Ssimon $ltype = 2; 896194206Ssimon } 897194206Ssimon } 898194206Ssimon else 899194206Ssimon { 900194206Ssimon $t_libs = "\$(L_LIBS)"; 901194206Ssimon $ltype = 0; 902194206Ssimon } 903194206Ssimon 90455714Skris $tt="\$(OBJ_D)${o}$t${obj}"; 905194206Ssimon $rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","$t_libs \$(EX_LIBS)", $ltype); 90655714Skris } 90755714Skris 908160814Ssimon$defs.=&do_defs("E_SHLIB",$engines,"\$(ENG_D)",$shlibp); 909160814Ssimon 910160814Ssimonforeach (split(/\s+/,$engines)) 911160814Ssimon { 912160814Ssimon $rules.=&do_compile_rule("\$(OBJ_D)","engines${o}e_$_",$lib); 913160814Ssimon $rules.= &do_lib_rule("\$(OBJ_D)${o}e_${_}.obj","\$(ENG_D)$o$_$shlibp","",$shlib,""); 914160814Ssimon } 915160814Ssimon 916160814Ssimon 917160814Ssimon 91855714Skris$rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)"); 91955714Skris 920194206Ssimonif ($fips) 921194206Ssimon { 922194206Ssimon if ($shlib) 923194206Ssimon { 924194206Ssimon if ($fipsdso) 925194206Ssimon { 926194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)", 927194206Ssimon "\$(O_CRYPTO)", "$crypto", 928194206Ssimon $shlib, "", ""); 929194206Ssimon $rules.= &do_lib_rule( 930194206Ssimon "\$(O_FIPSCANISTER)", 931194206Ssimon "\$(O_FIPS)", "\$(LIBFIPS)", 932194206Ssimon $shlib, "\$(SO_CRYPTO)", "\$(BASEADDR)"); 933194206Ssimon $rules.= &do_sdef_rule(); 934194206Ssimon } 935194206Ssimon else 936194206Ssimon { 937194206Ssimon $rules.= &do_lib_rule( 938194206Ssimon "\$(CRYPTOOBJ) \$(O_FIPSCANISTER)", 939194206Ssimon "\$(O_CRYPTO)", "$crypto", 940194206Ssimon $shlib, "\$(SO_CRYPTO)", "\$(BASEADDR)"); 941194206Ssimon } 942194206Ssimon } 943194206Ssimon else 944194206Ssimon { 945194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)", 946194206Ssimon "\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)", ""); 947194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ) \$(FIPSOBJ)", 948194206Ssimon "\$(LIB_D)$o$crypto_compat",$crypto,$shlib,"\$(SO_CRYPTO)", ""); 949194206Ssimon } 950194206Ssimon } 951194206Ssimon else 952194206Ssimon { 953194206Ssimon $rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib, 954194206Ssimon "\$(SO_CRYPTO)"); 955194206Ssimon } 956160814Ssimon 957194206Ssimonif ($fips) 958194206Ssimon { 959194206Ssimon if ($fipscanisterbuild) 960194206Ssimon { 961194206Ssimon $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", 962194206Ssimon "\$(OBJ_D)${o}fips_start$obj", 963194206Ssimon "\$(FIPSOBJ)", 964194206Ssimon "\$(OBJ_D)${o}fips_end$obj", 965194206Ssimon "\$(FIPS_SHA1_EXE)", ""); 966194206Ssimon $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)", 967194206Ssimon "\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}sha1dgst$obj \$(SHA1_ASM_OBJ)", 968194206Ssimon "","\$(EX_LIBS)", 1); 969194206Ssimon } 970194206Ssimon else 971194206Ssimon { 972194206Ssimon $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)", 973194206Ssimon "\$(OBJ_D)${o}fips_standalone_sha1$obj \$(O_FIPSCANISTER)", 974194206Ssimon "","", 1); 975194206Ssimon 976194206Ssimon } 977194206Ssimon $rules.=&do_link_rule("\$(PREMAIN_DSO_EXE)","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPSCANISTER)","","\$(EX_LIBS)", 1); 978194206Ssimon 979194206Ssimon } 980194206Ssimon 981194206Ssimon$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)", ($fips && !$shlib) ? 2 : 0); 982194206Ssimon 98355714Skrisprint $defs; 98468651Skris 98568651Skrisif ($platform eq "linux-elf") { 98668651Skris print <<"EOF"; 98768651Skris# Generate perlasm output files 98868651Skris%.cpp: 989142425Snectar (cd \$(\@D)/..; PERL=perl make -f Makefile asm/\$(\@F)) 99068651SkrisEOF 99168651Skris} 99255714Skrisprint "###################################################################\n"; 99355714Skrisprint $rules; 99455714Skris 99555714Skris############################################### 99655714Skris# strip off any trailing .[och] and append the relative directory 99755714Skris# also remembering to do nothing if we are in one of the dropped 99855714Skris# directories 99955714Skrissub var_add 100055714Skris { 1001160814Ssimon local($dir,$val,$keepext)=@_; 100255714Skris local(@a,$_,$ret); 100355714Skris 1004111147Snectar return("") if $no_engine && $dir =~ /\/engine/; 1005111147Snectar return("") if $no_hw && $dir =~ /\/hw/; 100655714Skris return("") if $no_idea && $dir =~ /\/idea/; 1007109998Smarkm return("") if $no_aes && $dir =~ /\/aes/; 1008162911Ssimon return("") if $no_camellia && $dir =~ /\/camellia/; 1009194206Ssimon return("") if $no_seed && $dir =~ /\/seed/; 101055714Skris return("") if $no_rc2 && $dir =~ /\/rc2/; 101155714Skris return("") if $no_rc4 && $dir =~ /\/rc4/; 101255714Skris return("") if $no_rc5 && $dir =~ /\/rc5/; 101355714Skris return("") if $no_rsa && $dir =~ /\/rsa/; 101455714Skris return("") if $no_rsa && $dir =~ /^rsaref/; 101555714Skris return("") if $no_dsa && $dir =~ /\/dsa/; 101655714Skris return("") if $no_dh && $dir =~ /\/dh/; 1017120631Snectar return("") if $no_ec && $dir =~ /\/ec/; 1018194206Ssimon return("") if $no_cms && $dir =~ /\/cms/; 1019194206Ssimon return("") if $no_jpake && $dir =~ /\/jpake/; 1020194206Ssimon return("") if !$fips && $dir =~ /^fips/; 102155714Skris if ($no_des && $dir =~ /\/des/) 102255714Skris { 102355714Skris if ($val =~ /read_pwd/) 102455714Skris { return("$dir/read_pwd "); } 102555714Skris else 102655714Skris { return(""); } 102755714Skris } 102855714Skris return("") if $no_mdc2 && $dir =~ /\/mdc2/; 102955714Skris return("") if $no_sock && $dir =~ /\/proxy/; 103055714Skris return("") if $no_bf && $dir =~ /\/bf/; 103155714Skris return("") if $no_cast && $dir =~ /\/cast/; 103255714Skris 103355714Skris $val =~ s/^\s*(.*)\s*$/$1/; 103455714Skris @a=split(/\s+/,$val); 1035160814Ssimon grep(s/\.[och]$//,@a) unless $keepext; 103655714Skris 103755714Skris @a=grep(!/^e_.*_3d$/,@a) if $no_des; 103855714Skris @a=grep(!/^e_.*_d$/,@a) if $no_des; 1039109998Smarkm @a=grep(!/^e_.*_ae$/,@a) if $no_idea; 1040109998Smarkm @a=grep(!/^e_.*_i$/,@a) if $no_aes; 104155714Skris @a=grep(!/^e_.*_r2$/,@a) if $no_rc2; 104255714Skris @a=grep(!/^e_.*_r5$/,@a) if $no_rc5; 104355714Skris @a=grep(!/^e_.*_bf$/,@a) if $no_bf; 104455714Skris @a=grep(!/^e_.*_c$/,@a) if $no_cast; 104555714Skris @a=grep(!/^e_rc4$/,@a) if $no_rc4; 1046162911Ssimon @a=grep(!/^e_camellia$/,@a) if $no_camellia; 1047194206Ssimon @a=grep(!/^e_seed$/,@a) if $no_seed; 104855714Skris 104955714Skris @a=grep(!/(^s2_)|(^s23_)/,@a) if $no_ssl2; 105055714Skris @a=grep(!/(^s3_)|(^s23_)/,@a) if $no_ssl3; 105155714Skris 105255714Skris @a=grep(!/(_sock$)|(_acpt$)|(_conn$)|(^pxy_)/,@a) if $no_sock; 105355714Skris 105455714Skris @a=grep(!/(^md2)|(_md2$)/,@a) if $no_md2; 105568651Skris @a=grep(!/(^md4)|(_md4$)/,@a) if $no_md4; 105655714Skris @a=grep(!/(^md5)|(_md5$)/,@a) if $no_md5; 1057111147Snectar @a=grep(!/(rmd)|(ripemd)/,@a) if $no_ripemd; 105855714Skris 105955714Skris @a=grep(!/(^d2i_r_)|(^i2d_r_)/,@a) if $no_rsa; 106055714Skris @a=grep(!/(^p_open$)|(^p_seal$)/,@a) if $no_rsa; 106155714Skris @a=grep(!/(^pem_seal$)/,@a) if $no_rsa; 106255714Skris 106355714Skris @a=grep(!/(m_dss$)|(m_dss1$)/,@a) if $no_dsa; 106455714Skris @a=grep(!/(^d2i_s_)|(^i2d_s_)|(_dsap$)/,@a) if $no_dsa; 106555714Skris 106655714Skris @a=grep(!/^n_pkey$/,@a) if $no_rsa || $no_rc4; 106755714Skris 106855714Skris @a=grep(!/_dhp$/,@a) if $no_dh; 106955714Skris 107055714Skris @a=grep(!/(^sha[^1])|(_sha$)|(m_dss$)/,@a) if $no_sha; 107155714Skris @a=grep(!/(^sha1)|(_sha1$)|(m_dss1$)/,@a) if $no_sha1; 107255714Skris @a=grep(!/_mdc2$/,@a) if $no_mdc2; 107355714Skris 1074111147Snectar @a=grep(!/^engine$/,@a) if $no_engine; 1075111147Snectar @a=grep(!/^hw$/,@a) if $no_hw; 107655714Skris @a=grep(!/(^rsa$)|(^genrsa$)/,@a) if $no_rsa; 107755714Skris @a=grep(!/(^dsa$)|(^gendsa$)|(^dsaparam$)/,@a) if $no_dsa; 107855714Skris @a=grep(!/^gendsa$/,@a) if $no_sha1; 107955714Skris @a=grep(!/(^dh$)|(^gendh$)/,@a) if $no_dh; 108055714Skris 108155714Skris @a=grep(!/(^dh)|(_sha1$)|(m_dss1$)/,@a) if $no_sha1; 108255714Skris 108355714Skris grep($_="$dir/$_",@a); 108455714Skris @a=grep(!/(^|\/)s_/,@a) if $no_sock; 108555714Skris @a=grep(!/(^|\/)bio_sock/,@a) if $no_sock; 108655714Skris $ret=join(' ',@a)." "; 108755714Skris return($ret); 108855714Skris } 108955714Skris 109055714Skris# change things so that each 'token' is only separated by one space 109155714Skrissub clean_up_ws 109255714Skris { 109355714Skris local($w)=@_; 109455714Skris 109555714Skris $w =~ s/^\s*(.*)\s*$/$1/; 109655714Skris $w =~ s/\s+/ /g; 109755714Skris return($w); 109855714Skris } 109955714Skris 110055714Skrissub do_defs 110155714Skris { 110255714Skris local($var,$files,$location,$postfix)=@_; 110355714Skris local($_,$ret,$pf); 110455714Skris local(*OUT,$tmp,$t); 110555714Skris 110655714Skris $files =~ s/\//$o/g if $o ne '/'; 110755714Skris $ret="$var="; 110855714Skris $n=1; 110955714Skris $Vars{$var}.=""; 111055714Skris foreach (split(/ /,$files)) 111155714Skris { 111255714Skris $orig=$_; 111355714Skris $_=&bname($_) unless /^\$/; 111455714Skris if ($n++ == 2) 111555714Skris { 111655714Skris $n=0; 111755714Skris $ret.="\\\n\t"; 111855714Skris } 111955714Skris if (($_ =~ /bss_file/) && ($postfix eq ".h")) 112055714Skris { $pf=".c"; } 112155714Skris else { $pf=$postfix; } 112255714Skris if ($_ =~ /BN_ASM/) { $t="$_ "; } 112368651Skris elsif ($_ =~ /BNCO_ASM/){ $t="$_ "; } 112455714Skris elsif ($_ =~ /DES_ENC/) { $t="$_ "; } 112555714Skris elsif ($_ =~ /BF_ENC/) { $t="$_ "; } 112655714Skris elsif ($_ =~ /CAST_ENC/){ $t="$_ "; } 112755714Skris elsif ($_ =~ /RC4_ENC/) { $t="$_ "; } 112855714Skris elsif ($_ =~ /RC5_ENC/) { $t="$_ "; } 112955714Skris elsif ($_ =~ /MD5_ASM/) { $t="$_ "; } 113055714Skris elsif ($_ =~ /SHA1_ASM/){ $t="$_ "; } 1131194206Ssimon elsif ($_ =~ /AES_ASM/){ $t="$_ "; } 113255714Skris elsif ($_ =~ /RMD160_ASM/){ $t="$_ "; } 1133162911Ssimon elsif ($_ =~ /CPUID_ASM/){ $t="$_ "; } 113455714Skris else { $t="$location${o}$_$pf "; } 113555714Skris 113655714Skris $Vars{$var}.="$t "; 113755714Skris $ret.=$t; 113855714Skris } 1139160814Ssimon # hack to add version info on MSVC 1140205128Ssimon if ($shlib && (($platform eq "VC-WIN32") || ($platfrom eq "VC-WIN64I") || ($platform eq "VC-WIN64A") || ($platform eq "VC-NT"))) 1141160814Ssimon { 1142160814Ssimon if ($var eq "CRYPTOOBJ") 1143160814Ssimon { $ret.="\$(OBJ_D)\\\$(CRYPTO).res "; } 1144160814Ssimon elsif ($var eq "SSLOBJ") 1145160814Ssimon { $ret.="\$(OBJ_D)\\\$(SSL).res "; } 1146160814Ssimon } 1147160814Ssimon chomp($ret); 114855714Skris $ret.="\n\n"; 114955714Skris return($ret); 115055714Skris } 115155714Skris 115255714Skris# return the name with the leading path removed 115355714Skrissub bname 115455714Skris { 115555714Skris local($ret)=@_; 115655714Skris $ret =~ s/^.*[\\\/]([^\\\/]+)$/$1/; 115755714Skris return($ret); 115855714Skris } 115955714Skris 116055714Skris 116155714Skris############################################################## 116255714Skris# do a rule for each file that says 'compile' to new direcory 116355714Skris# compile the files in '$files' into $to 116455714Skrissub do_compile_rule 116555714Skris { 116655714Skris local($to,$files,$ex)=@_; 116755714Skris local($ret,$_,$n); 116855714Skris 116955714Skris $files =~ s/\//$o/g if $o ne '/'; 117055714Skris foreach (split(/\s+/,$files)) 117155714Skris { 117255714Skris $n=&bname($_); 117355714Skris $ret.=&cc_compile_target("$to${o}$n$obj","${_}.c",$ex) 117455714Skris } 117555714Skris return($ret); 117655714Skris } 117755714Skris 117855714Skris############################################################## 117955714Skris# do a rule for each file that says 'compile' to new direcory 118055714Skrissub cc_compile_target 118155714Skris { 118255714Skris local($target,$source,$ex_flags)=@_; 118355714Skris local($ret); 118455714Skris 118555714Skris $ex_flags.=" -DMK1MF_BUILD -D$platform_cpp_symbol" if ($source =~ /cversion/); 118655714Skris $target =~ s/\//$o/g if $o ne "/"; 118755714Skris $source =~ s/\//$o/g if $o ne "/"; 118855714Skris $ret ="$target: \$(SRC_D)$o$source\n\t"; 118955714Skris $ret.="\$(CC) ${ofile}$target $ex_flags -c \$(SRC_D)$o$source\n\n"; 119055714Skris return($ret); 119155714Skris } 119255714Skris 119355714Skris############################################################## 119455714Skrissub do_asm_rule 119555714Skris { 119655714Skris local($target,$src)=@_; 119755714Skris local($ret,@s,@t,$i); 119855714Skris 119955714Skris $target =~ s/\//$o/g if $o ne "/"; 120055714Skris $src =~ s/\//$o/g if $o ne "/"; 120155714Skris 120255714Skris @s=split(/\s+/,$src); 120355714Skris @t=split(/\s+/,$target); 120455714Skris 120555714Skris for ($i=0; $i<=$#s; $i++) 120655714Skris { 120755714Skris $ret.="$t[$i]: $s[$i]\n"; 120855714Skris $ret.="\t\$(ASM) $afile$t[$i] \$(SRC_D)$o$s[$i]\n\n"; 120955714Skris } 121055714Skris return($ret); 121155714Skris } 121255714Skris 121355714Skrissub do_shlib_rule 121455714Skris { 121555714Skris local($n,$def)=@_; 121655714Skris local($ret,$nn); 121755714Skris local($t); 121855714Skris 121955714Skris ($nn=$n) =~ tr/a-z/A-Z/; 122055714Skris $ret.="$n.dll: \$(${nn}OBJ)\n"; 122155714Skris if ($vc && $w32) 122255714Skris { 122355714Skris $ret.="\t\$(MKSHLIB) $efile$n.dll $def @<<\n \$(${nn}OBJ_F)\n<<\n"; 122455714Skris } 122555714Skris $ret.="\n"; 122655714Skris return($ret); 122755714Skris } 122855714Skris 122955714Skris# do a rule for each file that says 'copy' to new direcory on change 123055714Skrissub do_copy_rule 123155714Skris { 123255714Skris local($to,$files,$p)=@_; 123355714Skris local($ret,$_,$n,$pp); 123455714Skris 123555714Skris $files =~ s/\//$o/g if $o ne '/'; 123655714Skris foreach (split(/\s+/,$files)) 123755714Skris { 123855714Skris $n=&bname($_); 123955714Skris if ($n =~ /bss_file/) 124055714Skris { $pp=".c"; } 124155714Skris else { $pp=$p; } 1242194206Ssimon $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(CP) \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n"; 124355714Skris } 124455714Skris return($ret); 124555714Skris } 124655714Skris 124755714Skrissub read_options 124855714Skris { 1249160814Ssimon # Many options are handled in a similar way. In particular 1250160814Ssimon # no-xxx sets zero or more scalars to 1. 1251160814Ssimon # Process these using a hash containing the option name and 1252160814Ssimon # reference to the scalars to set. 125355714Skris 1254160814Ssimon my %valid_options = ( 1255160814Ssimon "no-rc2" => \$no_rc2, 1256160814Ssimon "no-rc4" => \$no_rc4, 1257160814Ssimon "no-rc5" => \$no_rc5, 1258160814Ssimon "no-idea" => \$no_idea, 1259160814Ssimon "no-aes" => \$no_aes, 1260162911Ssimon "no-camellia" => \$no_camellia, 1261194206Ssimon "no-seed" => \$no_seed, 1262160814Ssimon "no-des" => \$no_des, 1263160814Ssimon "no-bf" => \$no_bf, 1264160814Ssimon "no-cast" => \$no_cast, 1265160814Ssimon "no-md2" => \$no_md2, 1266160814Ssimon "no-md4" => \$no_md4, 1267160814Ssimon "no-md5" => \$no_md5, 1268160814Ssimon "no-sha" => \$no_sha, 1269160814Ssimon "no-sha1" => \$no_sha1, 1270160814Ssimon "no-ripemd" => \$no_ripemd, 1271160814Ssimon "no-mdc2" => \$no_mdc2, 1272160814Ssimon "no-patents" => 1273160814Ssimon [\$no_rc2, \$no_rc4, \$no_rc5, \$no_idea, \$no_rsa], 1274160814Ssimon "no-rsa" => \$no_rsa, 1275160814Ssimon "no-dsa" => \$no_dsa, 1276160814Ssimon "no-dh" => \$no_dh, 1277160814Ssimon "no-hmac" => \$no_hmac, 1278160814Ssimon "no-asm" => \$no_asm, 1279160814Ssimon "nasm" => \$nasm, 1280194206Ssimon "ml64" => \$ml64, 1281160814Ssimon "nw-nasm" => \$nw_nasm, 1282160814Ssimon "nw-mwasm" => \$nw_mwasm, 1283160814Ssimon "gaswin" => \$gaswin, 1284160814Ssimon "no-ssl2" => \$no_ssl2, 1285160814Ssimon "no-ssl3" => \$no_ssl3, 1286194206Ssimon "no-tlsext" => \$no_tlsext, 1287194206Ssimon "no-cms" => \$no_cms, 1288194206Ssimon "no-jpake" => \$no_jpake, 1289194206Ssimon "no-capieng" => \$no_capieng, 1290160814Ssimon "no-err" => \$no_err, 1291160814Ssimon "no-sock" => \$no_sock, 1292160814Ssimon "no-krb5" => \$no_krb5, 1293160814Ssimon "no-ec" => \$no_ec, 1294160814Ssimon "no-ecdsa" => \$no_ecdsa, 1295160814Ssimon "no-ecdh" => \$no_ecdh, 1296160814Ssimon "no-engine" => \$no_engine, 1297160814Ssimon "no-hw" => \$no_hw, 1298160814Ssimon "just-ssl" => 1299160814Ssimon [\$no_rc2, \$no_idea, \$no_des, \$no_bf, \$no_cast, 1300160814Ssimon \$no_md2, \$no_sha, \$no_mdc2, \$no_dsa, \$no_dh, 1301160814Ssimon \$no_ssl2, \$no_err, \$no_ripemd, \$no_rc5, 1302194206Ssimon \$no_aes, \$no_camellia, \$no_seed], 1303160814Ssimon "rsaref" => 0, 1304160814Ssimon "gcc" => \$gcc, 1305160814Ssimon "debug" => \$debug, 1306160814Ssimon "profile" => \$profile, 1307160814Ssimon "shlib" => \$shlib, 1308160814Ssimon "dll" => \$shlib, 1309160814Ssimon "shared" => 0, 1310160814Ssimon "no-gmp" => 0, 1311167612Ssimon "no-rfc3779" => 0, 1312194206Ssimon "no-montasm" => 0, 1313160814Ssimon "no-shared" => 0, 1314160814Ssimon "no-zlib" => 0, 1315160814Ssimon "no-zlib-dynamic" => 0, 1316194206Ssimon "fips" => \$fips, 1317194206Ssimon "fipscanisterbuild" => [\$fips, \$fipscanisterbuild], 1318194206Ssimon "fipsdso" => [\$fips, \$fipscanisterbuild, \$fipsdso], 1319160814Ssimon ); 132055714Skris 1321160814Ssimon if (exists $valid_options{$_}) 1322160814Ssimon { 1323160814Ssimon my $r = $valid_options{$_}; 1324160814Ssimon if ( ref $r eq "SCALAR") 1325160814Ssimon { $$r = 1;} 1326160814Ssimon elsif ( ref $r eq "ARRAY") 1327160814Ssimon { 1328160814Ssimon my $r2; 1329160814Ssimon foreach $r2 (@$r) 1330160814Ssimon { 1331160814Ssimon $$r2 = 1; 1332160814Ssimon } 1333160814Ssimon } 1334160814Ssimon } 1335160814Ssimon elsif (/^no-comp$/) { $xcflags = "-DOPENSSL_NO_COMP $xcflags"; } 1336160814Ssimon elsif (/^enable-zlib$/) { $zlib_opt = 1 if $zlib_opt == 0 } 1337160814Ssimon elsif (/^enable-zlib-dynamic$/) 1338160814Ssimon { 1339160814Ssimon $zlib_opt = 2; 1340160814Ssimon } 1341160814Ssimon elsif (/^no-static-engine/) 1342160814Ssimon { 1343160814Ssimon $no_static_engine = 1; 1344160814Ssimon } 1345160814Ssimon elsif (/^enable-static-engine/) 1346160814Ssimon { 1347160814Ssimon $no_static_engine = 0; 1348160814Ssimon } 1349160814Ssimon # There are also enable-xxx options which correspond to 1350160814Ssimon # the no-xxx. Since the scalars are enabled by default 1351160814Ssimon # these can be ignored. 1352160814Ssimon elsif (/^enable-/) 1353160814Ssimon { 1354160814Ssimon my $t = $_; 1355160814Ssimon $t =~ s/^enable/no/; 1356160814Ssimon if (exists $valid_options{$t}) 1357160814Ssimon {return 1;} 1358160814Ssimon return 0; 1359160814Ssimon } 1360194206Ssimon # experimental-xxx is mostly like enable-xxx, but opensslconf.v 1361194206Ssimon # will still set OPENSSL_NO_xxx unless we set OPENSSL_EXPERIMENTAL_xxx. 1362194206Ssimon # (No need to fail if we don't know the algorithm -- this is for adventurous users only.) 1363194206Ssimon elsif (/^experimental-/) 1364194206Ssimon { 1365194206Ssimon my $algo, $ALGO; 1366194206Ssimon ($algo = $_) =~ s/^experimental-//; 1367194206Ssimon ($ALGO = $algo) =~ tr/[a-z]/[A-Z]/; 1368194206Ssimon 1369194206Ssimon $xcflags="-DOPENSSL_EXPERIMENTAL_$ALGO $xcflags"; 1370194206Ssimon 1371194206Ssimon } 1372160814Ssimon elsif (/^--with-krb5-flavor=(.*)$/) 1373160814Ssimon { 1374160814Ssimon my $krb5_flavor = $1; 1375160814Ssimon if ($krb5_flavor =~ /^force-[Hh]eimdal$/) 1376160814Ssimon { 1377160814Ssimon $xcflags="-DKRB5_HEIMDAL $xcflags"; 1378160814Ssimon } 1379160814Ssimon elsif ($krb5_flavor =~ /^MIT/i) 1380160814Ssimon { 1381160814Ssimon $xcflags="-DKRB5_MIT $xcflags"; 1382160814Ssimon if ($krb5_flavor =~ /^MIT[._-]*1[._-]*[01]/i) 1383160814Ssimon { 1384160814Ssimon $xcflags="-DKRB5_MIT_OLD11 $xcflags" 1385160814Ssimon } 1386160814Ssimon } 1387160814Ssimon } 138855714Skris elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; } 138955714Skris elsif (/^-[lL].*$/) { $l_flags.="$_ "; } 139055714Skris elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/) 139155714Skris { $c_flags.="$_ "; } 139255714Skris else { return(0); } 139355714Skris return(1); 139455714Skris } 1395194206Ssimon 1396194206Ssimonsub fipslib_error 1397194206Ssimon { 1398194206Ssimon print STDERR "***FIPS module directory sanity check failed***\n"; 1399194206Ssimon print STDERR "FIPS module build failed, or was deleted\n"; 1400194206Ssimon print STDERR "Please rebuild FIPS module.\n"; 1401194206Ssimon exit 1; 1402194206Ssimon } 1403194206Ssimon 1404194206Ssimonsub fips_check_files 1405194206Ssimon { 1406194206Ssimon my $dir = shift @_; 1407194206Ssimon my $ret = 1; 1408194206Ssimon if (!-d $dir) 1409194206Ssimon { 1410194206Ssimon print STDERR "FIPS module directory $dir does not exist\n"; 1411194206Ssimon fipslib_error(); 1412194206Ssimon } 1413194206Ssimon foreach (@_) 1414194206Ssimon { 1415194206Ssimon if (!-f "$dir${o}$_") 1416194206Ssimon { 1417194206Ssimon print STDERR "FIPS module file $_ does not exist!\n"; 1418194206Ssimon $ret = 0; 1419194206Ssimon } 1420194206Ssimon } 1421194206Ssimon fipslib_error() if ($ret == 0); 1422194206Ssimon } 1423