In fipsld use FIPSLIBCRYPTO environment variable to specify an alternative
authorDr. Stephen Henson <steve@openssl.org>
Thu, 26 May 2011 21:15:45 +0000 (21:15 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Thu, 26 May 2011 21:15:45 +0000 (21:15 +0000)
location for libcrypto.a, support shared library builds in different
source tree.

fips/fipsld

index 34b6e01bc0ca8e97a471ff299cc7f89ae502c49c..442eba45c3ce6e7a778f98ff8d84b6a3c1915094 100755 (executable)
@@ -88,7 +88,14 @@ case `basename "${TARGET}"` in
 lib*|*.dll)    # must be linking a shared lib...
        # Shared lib creation can be taking place in the source
        # directory only, but fipscanister.o can reside elsewhere...
-       FINGERTYPE="${THERE}/fips/fips_standalone_sha1"
+
+       if [ -x "${THERE}/fips/fips_standalone_sha1" ]; then
+               FINGERTYPE="${THERE}/fips/fips_standalone_sha1"
+               PREMAIN_DSO="${THERE}/fips/fips_premain_dso"
+       elif [ -x "${THERE}/bin/fips_standalone_sha1" ]; then
+               FINGERTYPE="${THERE}/bin/fips_standalone_sha1"
+               PREMAIN_DSO="fips_premain_dso"
+       fi
 
        # verify fipspremain.c against its detached signature...
        ${FINGERTYPE} "${PREMAIN_C}" | sed "s/(.*\//(/" | \
@@ -99,13 +106,17 @@ lib*|*.dll)        # must be linking a shared lib...
                diff -w "${CANISTER_O}.sha1" - || \
        { echo "${CANISTER_O} fingerprint mismatch"; exit 1; }
 
+       [ -z "${FIPSLIBCRYPTO}" -a -f "${THERE}/libcrypto.a" ] && \
+               FIPSLIBCRYPTO = -f "${THERE}/libcrypto.a"
+               
+
        # Temporarily remove fipscanister.o from libcrypto.a!
        # We are required to use the standalone copy...
-       if [ -f "${THERE}/libcrypto.a" ]; then
-           if ar d "${THERE}/libcrypto.a" fipscanister.o; then
-               (ranlib "${THERE}/libcrypto.a") 2>/dev/null || :
-               trap    'ar r "${THERE}/libcrypto.a" "${CANISTER_O}";
-                        (ranlib "${THERE}/libcrypto.a") 2>/dev/null || :;
+       if [ -n  "${FIPSLIBCRYPTO}" ]; then
+           if ar d "${FIPSLIBCRYPTO}" fipscanister.o; then
+               (ranlib "${FIPSLIBCRYPTO}") 2>/dev/null || :
+               trap    'ar r "${FIPSLIBCRYPTO}" "${CANISTER_O}";
+                        (ranlib "${FIPSLIBCRYPTO}") 2>/dev/null || :;
                         sleep 1;
                         touch -c "${TARGET}"' 0
            fi
@@ -118,7 +129,7 @@ lib*|*.dll) # must be linking a shared lib...
 
        # generate signature...
        if [ -z "${FIPS_SIG}" ]; then
-               SIG=`"${THERE}/fips/fips_premain_dso" "${TARGET}"`
+               SIG=`"${PREMAIN_DSO}" "${TARGET}"`
        else
                SIG=`"${FIPS_SIG}" -dso "${TARGET}"`
        fi