Merge changes to build system from fips branch.
authorDr. Stephen Henson <steve@openssl.org>
Tue, 16 Sep 2008 21:44:57 +0000 (21:44 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 16 Sep 2008 21:44:57 +0000 (21:44 +0000)
54 files changed:
Configure
Makefile.org
crypto/Makefile
crypto/aes/Makefile
crypto/asn1/Makefile
crypto/bf/Makefile
crypto/bio/Makefile
crypto/bn/Makefile
crypto/buffer/Makefile
crypto/camellia/Makefile
crypto/cast/Makefile
crypto/cms/Makefile
crypto/comp/Makefile
crypto/conf/Makefile
crypto/des/Makefile
crypto/dh/Makefile
crypto/dsa/Makefile
crypto/dso/Makefile
crypto/ec/Makefile
crypto/ecdh/Makefile
crypto/ecdsa/Makefile
crypto/engine/Makefile
crypto/err/Makefile
crypto/evp/Makefile
crypto/hmac/Makefile
crypto/idea/Makefile
crypto/krb5/Makefile
crypto/lhash/Makefile
crypto/md2/Makefile
crypto/md4/Makefile
crypto/md5/Makefile
crypto/mdc2/Makefile
crypto/objects/Makefile
crypto/ocsp/Makefile
crypto/pem/Makefile
crypto/pkcs12/Makefile
crypto/pkcs7/Makefile
crypto/pqueue/Makefile
crypto/rand/Makefile
crypto/rc2/Makefile
crypto/rc4/Makefile
crypto/rc5/Makefile
crypto/ripemd/Makefile
crypto/rsa/Makefile
crypto/seed/Makefile
crypto/sha/Makefile
crypto/stack/Makefile
crypto/store/Makefile
crypto/txt_db/Makefile
crypto/ui/Makefile
crypto/x509/Makefile
crypto/x509v3/Makefile
fips/sha/Makefile
util/arx.pl [new file with mode: 0644]

index f24d738febc353ca8ce3147153bb2a869aad35ff..b91cd237b2243df93e89ebddea3c456201067015 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -6,7 +6,9 @@ eval 'exec perl -S $0 ${1+"$@"}'
 ##
 
 require 5.000;
-use strict;
+eval 'use strict;';
+
+print STDERR "Warning: perl module strict not found.\n" if ($@);
 
 # see INSTALL for instructions.
 
@@ -577,6 +579,11 @@ my $prefix="";
 my $openssldir="";
 my $exe_ext="";
 my $install_prefix="";
+my $fipslibdir="/usr/local/ssl/fips-1.0/lib/";
+my $nofipscanistercheck=0;
+my $fipsdso=0;
+my $fipscanisterinternal="n";
+my $baseaddr="0xFB00000";
 my $no_threads=0;
 my $threads=0;
 my $no_shared=0; # but "no-shared" is default
@@ -600,6 +607,7 @@ my $rc2     ="crypto/rc2/rc2.h";
 my $bf ="crypto/bf/bf_locl.h";
 my $bn_asm     ="bn_asm.o";
 my $des_enc="des_enc.o fcrypt_b.o";
+my $fips_des_enc="fips_des_enc.o";
 my $aes_enc="aes_core.o aes_cbc.o";
 my $bf_enc     ="bf_enc.o";
 my $cast_enc="c_enc.o";
@@ -611,6 +619,7 @@ my $rmd160_obj="";
 my $processor="";
 my $default_ranlib;
 my $perl;
+my $fips=0;
 
 
 # All of the following is disabled by default (RC5 was enabled before 0.9.8):
@@ -739,12 +748,36 @@ PROCESS_ARGS:
                        }
                elsif (/^386$/)
                        { $processor=386; }
+               elsif (/^fips$/)
+                       {
+                       $fips=1;
+                       }
                elsif (/^rsaref$/)
                        {
                        # No RSAref support any more since it's not needed.
                        # The check for the option is there so scripts aren't
                        # broken
                        }
+               elsif (/^nofipscanistercheck$/)
+                       {
+                       $fips = 1;
+                       $nofipscanistercheck = 1;
+                       }
+               elsif (/^fipscanisterbuild$/)
+                       {
+                       $fips = 1;
+                       $nofipscanistercheck = 1;
+                       $fipslibdir="";
+                       $fipscanisterinternal="y";
+                       }
+               elsif (/^fipsdso$/)
+                       {
+                       $fips = 1;
+                       $nofipscanistercheck = 1;
+                       $fipslibdir="";
+                       $fipscanisterinternal="y";
+                       $fipsdso = 1;
+                       }
                elsif (/^[-+]/)
                        {
                        if (/^-[lL](.*)$/)
@@ -779,6 +812,14 @@ PROCESS_ARGS:
                                {
                                $withargs{"zlib-include"}="-I$1";
                                }
+                       elsif (/^--with-fipslibdir=(.*)$/)
+                               {
+                               $fipslibdir="$1/";
+                               }
+                       elsif (/^--with-baseaddr=(.*)$/)
+                               {
+                               $baseaddr="$1";
+                               }
                        else
                                {
                                print STDERR $usage;
@@ -886,6 +927,41 @@ print "Configuring for $target\n";
 
 &usage if (!defined($table{$target}));
 
+my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
+my $cc = $fields[$idx_cc];
+my $cflags = $fields[$idx_cflags];
+my $unistd = $fields[$idx_unistd];
+my $thread_cflag = $fields[$idx_thread_cflag];
+my $sys_id = $fields[$idx_sys_id];
+my $lflags = $fields[$idx_lflags];
+my $bn_ops = $fields[$idx_bn_ops];
+my $cpuid_obj = $fields[$idx_cpuid_obj];
+my $bn_obj = $fields[$idx_bn_obj];
+my $des_obj = $fields[$idx_des_obj];
+my $aes_obj = $fields[$idx_aes_obj];
+my $bf_obj = $fields[$idx_bf_obj];
+my $md5_obj = $fields[$idx_md5_obj];
+my $sha1_obj = $fields[$idx_sha1_obj];
+my $cast_obj = $fields[$idx_cast_obj];
+my $rc4_obj = $fields[$idx_rc4_obj];
+my $rmd160_obj = $fields[$idx_rmd160_obj];
+my $rc5_obj = $fields[$idx_rc5_obj];
+my $dso_scheme = $fields[$idx_dso_scheme];
+my $shared_target = $fields[$idx_shared_target];
+my $shared_cflag = $fields[$idx_shared_cflag];
+my $shared_ldflag = $fields[$idx_shared_ldflag];
+my $shared_extension = $fields[$idx_shared_extension];
+my $ranlib = $fields[$idx_ranlib];
+my $arflags = $fields[$idx_arflags];
+
+if ($fips)
+       {
+       delete $disabled{"shared"} if ($disabled{"shared"} eq "default");
+       $disabled{"asm"}="forced"
+               if ($target !~ "VC\-.*" &&
+                   "$cpuid_obj:$bn_obj:$aes_obj:$des_obj:$sha1_obj" eq "::::");
+       }
+
 
 foreach (sort (keys %disabled))
        {
@@ -949,10 +1025,22 @@ my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
 
 $IsMK1MF=1 if ($target eq "mingw" && $^O ne "cygwin" && !is_msys());
 
+$no_shared = 0 if ($fipsdso && !$IsMK1MF);
+
 $exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target eq "mingw");
 $exe_ext=".nlm" if ($target =~ /netware/);
 $exe_ext=".pm"  if ($target =~ /vos/);
-$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
+if ($openssldir eq "" and $prefix eq "")
+       {
+       if ($fips)
+               {
+               $openssldir="/usr/local/ssl/fips";
+               }
+       else
+               {
+               $openssldir="/usr/local/ssl";
+               }
+       }
 $prefix=$openssldir if $prefix eq "";
 
 $default_ranlib= &which("ranlib") or $default_ranlib="true";
@@ -968,33 +1056,6 @@ $openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/]
 
 print "IsMK1MF=$IsMK1MF\n";
 
-my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
-my $cc = $fields[$idx_cc];
-my $cflags = $fields[$idx_cflags];
-my $unistd = $fields[$idx_unistd];
-my $thread_cflag = $fields[$idx_thread_cflag];
-my $sys_id = $fields[$idx_sys_id];
-my $lflags = $fields[$idx_lflags];
-my $bn_ops = $fields[$idx_bn_ops];
-my $cpuid_obj = $fields[$idx_cpuid_obj];
-my $bn_obj = $fields[$idx_bn_obj];
-my $des_obj = $fields[$idx_des_obj];
-my $aes_obj = $fields[$idx_aes_obj];
-my $bf_obj = $fields[$idx_bf_obj];
-my $md5_obj = $fields[$idx_md5_obj];
-my $sha1_obj = $fields[$idx_sha1_obj];
-my $cast_obj = $fields[$idx_cast_obj];
-my $rc4_obj = $fields[$idx_rc4_obj];
-my $rmd160_obj = $fields[$idx_rmd160_obj];
-my $rc5_obj = $fields[$idx_rc5_obj];
-my $dso_scheme = $fields[$idx_dso_scheme];
-my $shared_target = $fields[$idx_shared_target];
-my $shared_cflag = $fields[$idx_shared_cflag];
-my $shared_ldflag = $fields[$idx_shared_ldflag];
-my $shared_extension = $fields[$idx_shared_extension];
-my $ranlib = $fields[$idx_ranlib];
-my $arflags = $fields[$idx_arflags];
-
 # '%' in $lflags is used to split flags to "pre-" and post-flags
 my ($prelflags,$postlflags)=split('%',$lflags);
 if (defined($postlflags))      { $lflags=$postlflags;  }
@@ -1128,6 +1189,8 @@ if ($no_asm)
        {
        $cpuid_obj=$bn_obj=$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
        $sha1_obj=$md5_obj=$rmd160_obj="";
+       $cflags=~s/\-D[BL]_ENDIAN//             if ($fips);
+       $thread_cflags=~s/\-D[BL]_ENDIAN//      if ($fips);
        }
 if ($montasm)
        {
@@ -1166,7 +1229,7 @@ if ($zlib)
 my $shared_mark = "";
 if ($shared_target eq "")
        {
-       $no_shared_warn = 1 if !$no_shared;
+       $no_shared_warn = 1 if !$no_shared && !$fips;
        $no_shared = 1;
        }
 if (!$no_shared)
@@ -1255,8 +1318,14 @@ $bn_obj = $bn_asm unless $bn_obj ne "";
 # bn86* is the only one implementing bn_*_part_words
 $cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn86/);
 $cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /bn86/);
+
 $cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /\-mont|mo86\-/);
 
+if ($fips)
+       {
+       $openssl_other_defines.="#define OPENSSL_FIPS\n";
+       }
+
 $des_obj=$des_enc      unless ($des_obj =~ /\.o$/);
 $bf_obj=$bf_enc                unless ($bf_obj =~ /\.o$/);
 $cast_obj=$cast_enc    unless ($cast_obj =~ /\.o$/);
@@ -1385,9 +1454,24 @@ while (<IN>)
        s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
        s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
        s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
+       s/^FIPSLIBDIR=.*/FIPSLIBDIR=$fipslibdir/;
+       if ($fipsdso)
+               {
+               s/^FIPSCANLIB=.*/FIPSCANLIB=libfips/;
+               s/^SHARED_FIPS=.*/SHARED_FIPS=libfips\$(SHLIB_EXT)/;
+               s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl fips/;
+               }
+       else
+               {
+               s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
+               s/^SHARED_FIPS=.*/SHARED_FIPS=/;
+               s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl/;
+               }
+       s/^FIPSCANISTERINTERNAL=.*/FIPSCANISTERINTERNAL=$fipscanisterinternal/;
+       s/^BASEADDR=.*/BASEADDR=$baseaddr/;
        s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
        s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
-       s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
+       s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_FIPS) \$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
        if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
                {
                my $sotmp = $1;
@@ -1682,9 +1766,16 @@ BEGIN
     BEGIN
        BLOCK "040904b0"
        BEGIN
+#if defined(FIPS)
+           VALUE "Comments", "WARNING: TEST VERSION ONLY ***NOT*** FIPS 140-2 VALIDATED.\\0"
+#endif
            // Required:            
            VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
+#if defined(FIPS)
+           VALUE "FileDescription", "TEST UNVALIDATED FIPS140-2 DLL\\0"
+#else
            VALUE "FileDescription", "OpenSSL Shared Library\\0"
+#endif
            VALUE "FileVersion", "$version\\0"
 #if defined(CRYPTO)
            VALUE "InternalName", "libeay32\\0"
@@ -1692,12 +1783,15 @@ BEGIN
 #elif defined(SSL)
            VALUE "InternalName", "ssleay32\\0"
            VALUE "OriginalFilename", "ssleay32.dll\\0"
+#elif defined(FIPS)
+           VALUE "InternalName", "libosslfips\\0"
+           VALUE "OriginalFilename", "libosslfips.dll\\0"
 #endif
            VALUE "ProductName", "The OpenSSL Toolkit\\0"
            VALUE "ProductVersion", "$version\\0"
            // Optional:
            //VALUE "Comments", "\\0"
-           VALUE "LegalCopyright", "Copyright Â© 1998-2005 The OpenSSL Project. Copyright Â© 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
+           VALUE "LegalCopyright", "Copyright Â© 1998-2007 The OpenSSL Project. Copyright Â© 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
            //VALUE "LegalTrademarks", "\\0"
            //VALUE "PrivateBuild", "\\0"
            //VALUE "SpecialBuild", "\\0"
@@ -1734,6 +1828,21 @@ libraries on this platform, they will at least look at it and try their best
 (but please first make sure you have tried with a current version of OpenSSL).
 EOF
 
+print <<\EOF if ($fipscanisterinternal eq "y");
+
+WARNING: OpenSSL has been configured using unsupported option(s) to internally
+generate a fipscanister.o object module for TESTING PURPOSES ONLY; that
+compiled module is NOT FIPS 140-2 validated and CANNOT be used to replace the
+OpenSSL FIPS Object Module as identified by the CMVP
+(http://csrc.nist.gov/cryptval/) in any application requiring the use of FIPS
+140-2 validated software. 
+
+This is an OpenSSL 0.9.8-fips test version.
+
+See the file README.FIPS for details of how to build a test library.
+
+EOF
+
 exit(0);
 
 sub usage
index 22b169925742c4e71d4be8018aa2beebf84e746d..f7bbb61fdd0f4ce9968f0759ccfe66acba95f4e3 100644 (file)
@@ -65,6 +65,7 @@ EX_LIBS=
 EXE_EXT= 
 ARFLAGS=
 AR=ar $(ARFLAGS) r
+ARD=ar $(ARFLAGS) d
 RANLIB= ranlib
 PERL= perl
 TAR= tar
@@ -104,8 +105,34 @@ LIBKRB5=
 ZLIB_INCLUDE=
 LIBZLIB=
 
-DIRS=   crypto ssl engines apps test tools
-SHLIBDIRS= crypto ssl
+# This is the location of fipscanister.o and friends.
+# The FIPS module build will place it $(INSTALLTOP)/lib
+# but since $(INSTALLTOP) can only take the default value
+# when the module is built it will be in /usr/local/ssl/lib
+# $(INSTALLTOP) for this build make be different so hard
+# code the path.
+
+FIPSLIBDIR=/usr/local/ssl/lib/
+
+# This is set to "y" if fipscanister.o is compiled internally as
+# opposed to coming from an external validated location.
+
+FIPSCANISTERINTERNAL=n
+
+# The location of the library which contains fipscanister.o
+# normally it will be libcrypto unless fipsdso is set in which
+# case it will be libfips. If not compiling in FIPS mode at all
+# this is empty making it a useful test for a FIPS compile.
+
+FIPSCANLIB=
+
+# Shared library base address. Currently only used on Windows.
+#
+
+BASEADDR=
+
+DIRS=   crypto fips ssl engines apps test tools
+SHLIBDIRS= crypto ssl fips
 
 # dirs in crypto to build
 SDIRS=  \
@@ -138,6 +165,7 @@ WDIRS=  windows
 LIBS=   libcrypto.a libssl.a
 SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 SHARED_SSL=libssl$(SHLIB_EXT)
+SHARED_FIPS=
 SHARED_LIBS=
 SHARED_LIBS_LINK_EXTS=
 SHARED_LDFLAGS=
@@ -191,6 +219,9 @@ BUILDENV=   PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
                SHA1_ASM_OBJ='${SHA1_ASM_OBJ}'                  \
                MD5_ASM_OBJ='${MD5_ASM_OBJ}'                    \
                RMD160_ASM_OBJ='${RMD160_ASM_OBJ}'              \
+               FIPSLIBDIR='${FIPSLIBDIR}' FIPSCANLIB='${FIPSCANLIB}' \
+               FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'  \
+               FIPS_EX_OBJ='${FIPS_EX_OBJ}'    \
                THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 # MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 # which in turn eliminates ambiguities in variable treatment with -e.
@@ -222,13 +253,84 @@ BUILD_ONE_CMD=\
 reflect:
        @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 
+FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
+       ../crypto/aes/aes_ecb.o \
+       ../crypto/aes/aes_ofb.o \
+       ../crypto/bn/bn_add.o \
+       ../crypto/bn/bn_blind.o \
+       ../crypto/bn/bn_ctx.o \
+       ../crypto/bn/bn_div.o \
+       ../crypto/bn/bn_exp2.o \
+       ../crypto/bn/bn_exp.o \
+       ../crypto/bn/bn_gcd.o \
+       ../crypto/bn/bn_lib.o \
+       ../crypto/bn/bn_mod.o \
+       ../crypto/bn/bn_mont.o \
+       ../crypto/bn/bn_mul.o \
+       ../crypto/bn/bn_prime.o \
+       ../crypto/bn/bn_rand.o \
+       ../crypto/bn/bn_recp.o \
+       ../crypto/bn/bn_shift.o \
+       ../crypto/bn/bn_sqr.o \
+       ../crypto/bn/bn_word.o \
+       ../crypto/bn/bn_x931p.o \
+       ../crypto/buffer/buf_str.o \
+       ../crypto/cryptlib.o \
+       ../crypto/des/cfb64ede.o \
+       ../crypto/des/cfb64enc.o \
+       ../crypto/des/cfb_enc.o \
+       ../crypto/des/ecb3_enc.o \
+       ../crypto/des/ecb_enc.o \
+       ../crypto/des/ofb64ede.o \
+       ../crypto/des/ofb64enc.o \
+       ../crypto/des/fcrypt.o \
+       ../crypto/des/set_key.o \
+       ../crypto/dsa/dsa_utl.o \
+       ../crypto/dsa/dsa_sign.o \
+       ../crypto/dsa/dsa_vrf.o \
+       ../crypto/err/err.o \
+       ../crypto/evp/digest.o \
+       ../crypto/evp/enc_min.o \
+       ../crypto/evp/e_aes.o \
+       ../crypto/evp/e_des3.o \
+       ../crypto/evp/p_sign.o \
+       ../crypto/evp/p_verify.o \
+       ../crypto/mem_clr.o \
+       ../crypto/mem.o \
+       ../crypto/rand/md_rand.o \
+       ../crypto/rand/rand_egd.o \
+       ../crypto/rand/randfile.o \
+       ../crypto/rand/rand_lib.o \
+       ../crypto/rand/rand_os2.o \
+       ../crypto/rand/rand_unix.o \
+       ../crypto/rand/rand_win.o \
+       ../crypto/rsa/rsa_lib.o \
+       ../crypto/rsa/rsa_none.o \
+       ../crypto/rsa/rsa_oaep.o \
+       ../crypto/rsa/rsa_pk1.o \
+       ../crypto/rsa/rsa_pss.o \
+       ../crypto/rsa/rsa_ssl.o \
+       ../crypto/rsa/rsa_x931.o \
+       ../crypto/sha/sha1dgst.o \
+       ../crypto/sha/sha256.o \
+       ../crypto/sha/sha512.o \
+       ../crypto/uid.o
+
 sub_all: build_all
 build_all: build_libs build_apps build_tests build_tools
 
-build_libs: build_crypto build_ssl build_engines
+build_libs: build_crypto build_fips build_ssl build_shared build_engines
 
 build_crypto:
-       @dir=crypto; target=all; $(BUILD_ONE_CMD)
+       if [ -n "$(FIPSCANLIB)" ]; then \
+               EXCL_OBJ='$(AES_ASM_OBJ) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
+               ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
+       else \
+               ARX='${AR}' ; \
+       fi ; export ARX ; \
+               dir=crypto; target=all; $(BUILD_ONE_CMD)
+build_fips:
+       @dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 build_ssl:
        @dir=ssl; target=all; $(BUILD_ONE_CMD)
 build_engines:
@@ -244,9 +346,20 @@ all_testapps: build_libs build_testapps
 build_testapps:
        @dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 
-libcrypto$(SHLIB_EXT): libcrypto.a
+build_shared:  $(SHARED_LIBS)
+libcrypto$(SHLIB_EXT): libcrypto.a $(SHARED_FIPS)
        @if [ "$(SHLIB_TARGET)" != "" ]; then \
-               $(MAKE) SHLIBDIRS=crypto build-shared; \
+               if [ "$(FIPSCANLIB)" = "libfips" ]; then \
+                       $(ARD) libcrypto.a fipscanister.o ; \
+                       $(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
+                       $(AR) libcrypto.a fips/fipscanister.o ; \
+               else \
+                       if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
+                               FIPSLD_CC=$(CC); CC=fips/fipsld; \
+                               export CC FIPSLD_CC; \
+                       fi; \
+                       $(MAKE) -e SHLIBDIRS='crypto' build-shared; \
+               fi \
        else \
                echo "There's no support for shared libraries on this platform" >&2; \
                exit 1; \
@@ -254,12 +367,32 @@ libcrypto$(SHLIB_EXT): libcrypto.a
 
 libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
        @if [ "$(SHLIB_TARGET)" != "" ]; then \
-               $(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
+               shlibdeps=-lcrypto; \
+               [ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
+               $(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
+       else \
+               echo "There's no support for shared libraries on this platform" >&2 ; \
+               exit 1; \
+       fi
+
+fips/fipscanister.o:   build_fips
+libfips$(SHLIB_EXT):           fips/fipscanister.o
+       @if [ "$(SHLIB_TARGET)" != "" ]; then \
+               FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \
+               $(MAKE) -f Makefile.shared -e $(BUILDENV) \
+                       CC=$${CC} LIBNAME=fips THIS=$@ \
+                       LIBEXTRAS=fips/fipscanister.o \
+                       LIBDEPS="$(EX_LIBS)" \
+                       LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
+                       link_o.$(SHLIB_TARGET) || { rm -f $@; exit 1; } \
        else \
                echo "There's no support for shared libraries on this platform" >&2; \
                exit 1; \
        fi
 
+libfips.a:
+       dir=fips; target=all; $(BUILD_ONE_CMD)
+
 clean-shared:
        @set -e; for i in $(SHLIBDIRS); do \
                if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
index 29e2b04b273a5e3dad3fdc68c66975d0a93067c4..0107227d3a8ffc4331e508da385f10cd0b6ba4ee 100644 (file)
@@ -33,8 +33,8 @@ GENERAL=Makefile README crypto-lib.com install.com
 
 LIB= $(TOP)/libcrypto.a
 SHARED_LIB= libcrypto$(SHLIB_EXT)
-LIBSRC=        cryptlib.c dyn_lck.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.c
-LIBOBJ= cryptlib.o dyn_lck.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o $(CPUID_OBJ)
+LIBSRC=        cryptlib.c dyn_lck.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.c o_init.c fips_err.c
+LIBOBJ= cryptlib.o dyn_lck.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o o_init.o fips_err.o $(CPUID_OBJ)
 
 SRC= $(LIBSRC)
 
@@ -98,7 +98,7 @@ links:
 lib:   $(LIB)
        @touch lib
 $(LIB):        $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
 
 shared: buildinf.h lib subdirs
index 22c7203dbb2e241c2b355bf3696886b0dbcd5800..5864350089b290ec323501a3c04de8296136f63d 100644 (file)
@@ -41,7 +41,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 63066899d0bdd6e0927c5d50a0ae9278f0610378..f206750d06da8a54b4318b16eccb1b05819ced4c 100644 (file)
@@ -63,7 +63,7 @@ pk:   pk.c
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 8441954a8d9549fa960996600c747980903b1e41..d898fe54036bf51ec26f992ca65afc247cf43f2c 100644 (file)
@@ -40,7 +40,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 1ef6c2fb9fdb47ae9559dbb03c78e8903700259d..1cd76ce7a2fb80bda1109a614569c3d066bb760b 100644 (file)
@@ -45,7 +45,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index fcfc78f6af7453979943d8ab897489e676e591a0..911f1e8b5e18f5c7079c7e25c0c228ae66e2d1c4 100644 (file)
@@ -58,7 +58,7 @@ bnbug: bnbug.c ../../libcrypto.a top
        cc -g -I../../include bnbug.c -o bnbug ../../libcrypto.a
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index d0e0d5f8967a281cf96c09bddb7c6c3f0303eb1e..5847d27340da3736c6c52795d456258bbec3e747 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 1579de5ce51f8363ed9b855cd6a190bee54a0b7e..dfb12951fd4a28aea01851792e32211341b63d26 100644 (file)
@@ -41,7 +41,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 149956ee90f51bdb41270cf03afdbe0755501b91..6e9c4903f7bcaa90b25de88007edd6133c24d123 100644 (file)
@@ -38,7 +38,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index e39c310b6c6c401b8857bfee2ab52dc5edc31b45..1c137e0cff6a4b0d0f54871a0dbc6179d2ca1634 100644 (file)
@@ -37,7 +37,7 @@ test:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index efda832dce47f3b22eaa8938e323dc34112d45dc..5d364b85133b5dd884b8300e1ba2feca32a96240 100644 (file)
@@ -36,7 +36,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 78bb3241065d869bd706e44991c92a129a76a298..c00e818853cd853483d906c75a068568d2055952 100644 (file)
@@ -36,7 +36,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index a13ecef96c1285ea41952dcf12f599962c595a7d..1af2dde9f5ce297837e4da4cc5b9905065623045 100644 (file)
@@ -54,7 +54,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 950cad9c5bac122a4a992d4038dcb18ad15c9357..4fae54fb391ae1e4a381752a3456e89cef9d4462 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index e78fb65d23d690cae7b4ecb085dcfc995767d48a..3679a0e74b486f6305165cb71af7c07f666afb8b 100644 (file)
@@ -35,7 +35,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 07f5d8d159e62d3aeebfceed5ba5f4ba3565aae2..52f152888c4b26f61bf798d94849573d8aa2c62f 100644 (file)
@@ -35,7 +35,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 42f7bb7fc8d4b4c52a9515ef71573193370357fa..b5bbc9faa1a21a728d23a2579228c3a26a573d92 100644 (file)
@@ -38,7 +38,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 65d8904ee8a61e0f159f688fc2cdff103ce38bb7..cc3daf7a4297fd7421c45f7a9b1c8fc8982a0988 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 9b48d5641f09926323a237545654cd8441af85ae..dba1667dc7d93974f33b5ee9cc833d92f00e21b5 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 47cc619b8ab870e96a7fbb73cf85f5cd827db4ae..97debc87c14413d70760c843d3191fdb73cdb85c 100644 (file)
@@ -41,7 +41,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index fc680e2f6a055689b5c77cea771e19e55532094b..16ab4c5fbb07cdeb06d89aa25cd2f3ea6faf6723 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 6c7e24582b8b251e06ac1af36ac0950ded475492..4e3231d01844206eb8dc3b7453fda891bd33c4db 100644 (file)
@@ -55,7 +55,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 01f10c396ff52d5f157bcbeb93c5087315456943..60e5c3328d8960c3e5d61dfd49bfde4ebbb313ef 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index b2e7add666affef555a9247ae9fda0f295fbee23..f35d38b19468295577733ecb0cbf33e3135981a1 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 14077390d6923dfac00f407ae60ca2186d9fb4bb..8efb9e8910aad0086b622e3d8c8d952b86a00ad8 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 82bddac474503034f5572a93d03b851e929cd15b..35f0932971583339ed43a8d6cdf58781dab8b4c0 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 17f878aeb7d464780d91cb7ff240d4987d4b7fed..7098ca607e50b6f9c77713086c850057d7b74c2d 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index ef97bb0cbef082a3a31b84845e4c07ebdcbd1656..fed2d806a449aca853ec4d3f9f20f6305b63a2f6 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:    lib
 
 lib:    $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index ceb00e8956ad7f1de55cfb38462e505ec271035b..c25ec4ecb96216864ec6afb3989544bb92aaf818 100644 (file)
@@ -38,7 +38,7 @@ top:
 all:    lib
 
 lib:    $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 1d064f17a6279f8f719ac08e3ed629a9b75118fb..ea25688d888d592b9bbfec38dceef6db8c2acd35 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 9c5615099c301651938039498957db10cbb99549..25e8b23b5d0585ce56b45f97c2b8b42bf3f0b18d 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:   obj_dat.h lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 0fe028960e258cdf657a9806a6aa6d9f33c18ad8..4c3eb35059c7834127e8e5ecd86707bd5b322e31 100644 (file)
@@ -36,7 +36,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 742194fd24cca7206518c652f0095515e34d481b..6df96924c04aa45596710c6d1764428486fcc3e1 100644 (file)
@@ -36,7 +36,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 3a7498fe7ad99a11da2eaf3be46a137c26c30f53..5ace911690bfc6a8aa08661f6f2c7f52e20850b0 100644 (file)
@@ -39,7 +39,7 @@ test:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 3f7e88b40faaba39d850c0cae2cc23df67b2e3ec..1ae9fa492a79c28a43915ac71d8235df20440a48 100644 (file)
@@ -54,7 +54,7 @@ verify: verify.o example.o lib
        $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS)
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index d0c39d25cef8d849f6740f5de8720c4609a8537d..36bfc349aabcd8f8fdc924d88389222f289e8704 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 665020da4c9835fcd43cd4f4d2f0ef2bf3930746..e35ada57f438a2a863834b681f45d29fba673c38 100644 (file)
@@ -35,7 +35,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 73eac347e7fdf96324a0c4cc0bd0a88750fb77c6..b888c4c9bcafedad9a25c35b680c5ce78e9764b4 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index a9d5e02af02b8ee00e0f08979e310ec0d46d8641..3258735d58ec24d65ec147d0fd8a86eb10947028 100644 (file)
@@ -37,7 +37,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index efb0f36b598094bbecaa5bc96cab04baa34076a7..b4e21c9bb23cba5c2af1b27071334ae83449a148 100644 (file)
@@ -40,7 +40,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index d55875c20c119adadce6e4dbb460671de895c61f..7e104025af2ee959da2e2a654cdb0e3c4d083db2 100644 (file)
@@ -38,7 +38,7 @@ top:
 all:    lib
 
 lib:    $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 908d8066a4e802c5578618b7ffe7617c8e2b0928..73377852b62e315b2c72d1f5f9e0eb8851362824 100644 (file)
@@ -37,7 +37,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index f9de27b288994a1b0ff113c9209610bdccf2861a..ffaeb84218dbe5862a812297386991a2ca4359cf 100644 (file)
@@ -34,7 +34,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index ac64fb61d366b9a222509c0ff1e9ce431e60880e..480f5c8bb04ae7d8f7653a5d747cad4a933d1bb9 100644 (file)
@@ -38,7 +38,7 @@ top:
 all:    lib
 
 lib:    $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 5327692ac895cef5a4ae6abb620cd43c01326b07..489a77b93c43907c5d7ff2a935465297cc86f396 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 0dcfd7857a37713f2959dcbd366246deb2943698..2d42517d162e7584ae93384682212111ecf70e9f 100644 (file)
@@ -35,7 +35,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index e6f30331d8dd2f72395e7a50a64c97f07bbd479e..87e57b49f646e60e75502d80132ebbcf4ce494cb 100644 (file)
@@ -33,7 +33,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index a685659fb4c88466d0e1e384ca81edfe43bbe976..4755e206f667d420ac09ef3ad8e48580a0b21508 100644 (file)
@@ -37,7 +37,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index ddcc3124a7b9fe2e35090406087fe40bb806269e..f0a6ca90f76619f3987aca4e84d5f85627bc4969 100644 (file)
@@ -43,7 +43,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index 556ef351bf888cac13c72af59043e7065943e636..07e2df4368bd9b437b1c1ad818cd9671527fa927 100644 (file)
@@ -43,7 +43,7 @@ top:
 all:   lib
 
 lib:   $(LIBOBJ)
-       $(AR) $(LIB) $(LIBOBJ)
+       $(ARX) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB) || echo Never mind.
        @touch lib
 
index ba8eb02bafa66cf1e9317639eeb40b50d67fd74e..00b4cfa49d72eec2944fe11bece1d07fda4b57a1 100644 (file)
@@ -23,7 +23,6 @@ CFLAGS= $(INCLUDES) $(CFLAG)
 
 GENERAL=Makefile
 TEST= fips_shatest.c
-TESTDATA= SHAmix.req SHAmix.fax
 APPS=
 EXE= fips_standalone_sha1$(EXE_EXT)
 
@@ -56,7 +55,6 @@ files:
 links:
        @$(PERL) $(TOP)/util/mklink.pl $(TOP)/include/openssl $(EXHEADER)
        @$(PERL) $(TOP)/util/mklink.pl $(TOP)/test $(TEST)
-       cp $(TESTDATA) $(TOP)/test
        @$(PERL) $(TOP)/util/mklink.pl $(TOP)/apps $(APPS)
 
 install:
diff --git a/util/arx.pl b/util/arx.pl
new file mode 100644 (file)
index 0000000..ce62625
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/perl
+
+# Simple perl script to wrap round "ar" program and exclude any
+# object files in the environment variable EXCL_OBJ
+
+map { s/^.*\/([^\/]*)$/$1/ ; $EXCL{$_} = 1} split(' ', $ENV{EXCL_OBJ});
+
+#my @ks = keys %EXCL;
+#print STDERR "Excluding: @ks \n";
+
+my @ARGS = grep { !exists $EXCL{$_} } @ARGV;   
+
+system @ARGS;
+
+exit $? >> 8;