Peter Lambrechtsen wrote:

Hello

As part of a project I am compiling OpenSSL on multiple different Unix
flavours and have had many different problems when trying to get OpenSSL
to compile.


Yes, we build on Solaris  (6), 7, 8, 9, HP 10.20, 11.0, 11i IA64 11.23
SGI 6.5, and linux have built on AIX and Solaris 6 in the past.

We use gcc 3.3.2 with the vendor's ld.

Shared libs and rpath have always been a problem, since we build in AFS
but copy to a local system for use, so rpath needs to be set seperatly.

We have a mods to Configure to add a -rpath, then specifiy this
seperatly when calling COnfigure.

attached is a patch to 0.9.7e to Configure, Makefile.in and config
to add the -rpath and fix some HP link options. and a script
used to call Configure.



So, I was wondering if anyone has done any work on minimum compiler requirements on a per flavour basis:

IE:

Solaris 2.6, 2.7, 8, 9: GNU - (GCC 3.2 + Binutuils 2.15 + GNU Make 3.80) or higher
Sun - Forte C++ 6 Update 2 or higher


AIX 4.3.3:
GNU - (GCC 3.3.1 + Binutuils 2.15 + GNU Make 3.80) or higher but using
the IBM ld for linking (I never got the GNU complier to build working
shared libs) IBM - Visual Age C & C++ 5.0.2.0 or higher


HP-UX 11.00:
GNU - (GCC 3.4.3 + Binutuils 2.15 + GNU Make 3.80) or higher but using
the HP-UX ld for linking

Etc...

Has anyone done any work like this since every flavour of Unix seems to
have different quirks (especially when it comes to shared libraries,
which I can't get around since OpenLDAP needs OpenSSL to make shared
lib's) and there doesn't seem to be a single functional repository of
pre-built binaries for OpenSSL.

The same applies to the random number generator (prngd or egd) on a
per-flavour basis.  There doesn't seem to be a place where you are told
if the platform you are wanting to compile against has a random number
generator or not (or when support was added via a patch etc). Yes you
can check for /dev/random or /dev/urandom but if you don't know you need
it then how can you look for it?

Thanks

Peter

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           [EMAIL PROTECTED]




--

 Douglas E. Engert  <[EMAIL PROTECTED]>
 Argonne National Laboratory
 9700 South Cass Avenue
 Argonne, Illinois  60439
 (630) 252-5444
--- ./apps/,Makefile    Tue Aug 10 04:09:07 2004
+++ ./apps/Makefile     Tue Oct 26 12:39:38 2004
@@ -22,6 +22,7 @@
 PEX_LIBS=
 EX_LIBS= 
 EXE_EXT= 
+RPATH=
 
 SHLIB_TARGET=
 
@@ -144,10 +145,11 @@
 $(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
        $(RM) $(EXE)
        if [ "$(SHLIB_TARGET)" = "hpux-shared" -o "$(SHLIB_TARGET)" = 
"darwin-shared" ] ; then \
-         $(CC) -o $(EXE) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) 
$(DLIBSSL) $(LIBKRB5) $(DLIBCRYPTO) $(EX_LIBS) ; \
+         RPATH2=`echo "$(RPATH)" | sed -e 's/ /,/'`  ; \
+         $(CC) -o $(EXE) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) 
$(DLIBSSL) $(LIBKRB5) $(DLIBCRYPTO) $(EX_LIBS) -Wl,$${RPATH2} ; \
        else \
          LD_LIBRARY_PATH=..:$$LD_LIBRARY_PATH \
-         $(CC) -o $(EXE) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) $(LIBSSL) 
$(LIBKRB5) $(LIBCRYPTO) $(EX_LIBS) ; \
+         $(CC) -o $(EXE) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) $(LIBSSL) 
$(LIBKRB5) $(LIBCRYPTO) $(EX_LIBS) $(RPATH) ; \
        fi
        if egrep 'define OPENSSL_FIPS' $(TOP)/include/openssl/opensslconf.h > 
/dev/null; then \
                TOP=$(TOP) $(TOP)/fips/openssl_fips_fingerprint 
$(TOP)/libcrypto.a $(EXE); \
--- ./,Configure        Fri Oct  1 06:34:28 2004
+++ ./Configure Tue Oct 26 09:11:35 2004
@@ -10,7 +10,7 @@
 
 # see INSTALL for instructions.
 
-my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] 
[-Kxxx] [no-engine] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] 
[[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [[no-]fips] [debug] 
[--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] 
os/compiler[:flags]\n";
+my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] 
[-Kxxx] [no-engine] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] 
[[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [[no-]fips] [debug] 
[--prefix=DIR] [--rpath=parms [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] 
[--test-sanity] os/compiler[:flags]\n";
 
 # Options:
 #
@@ -18,6 +18,7 @@
 #               --prefix option is given; /usr/local/ssl otherwise)
 # --prefix      prefix for the OpenSSL include, lib and bin directories
 #               (Default: the OPENSSLDIR directory)
+# --rpath              loader parameter for rpath with the path
 #
 # --install_prefix  Additional prefix for package builders (empty by
 #               default).  This needn't be set in advance, you can
@@ -270,6 +271,10 @@
 "hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN 
-DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX 
RC4_CHAR DES_UNROLL DES_RISC1 
DES_INT:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 # IA-64 targets
+# DEE using gcc-3.3.2  _ILP32 needed for asm
+"hpux-ia64-gcc","gcc:-DB_ENDIAN::-D_ILP32 -D_REENTRANT::-ldl:SIXTY_FOUR_BIT 
MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 
DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-ia64-gcc","gcc:-mlp64 -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT 
MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 
DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+
 "hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z 
-DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR 
DES_UNROLL DES_RISC1 
DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # Frank Geurts <[EMAIL PROTECTED]> has patiently assisted with
 # with debugging of the following config.
@@ -605,6 +610,7 @@
 my $idx_arflags = $idx++;
 
 my $prefix="";
+my $rpath="";
 my $openssldir="";
 my $exe_ext="";
 my $install_prefix="";
@@ -840,6 +846,10 @@
                                {
                                $prefix=$1;
                                }
+                       elsif (/^--rpath=(.*)$/)
+                               {
+                               $rpath=$1;
+                               }
                        elsif (/^--openssldir=(.*)$/)
                                {
                                $openssldir=$1;
@@ -1254,6 +1264,7 @@
        s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
        s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
        s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
+       s/^RPATH=.*$/RPATH=$rpath/;
        s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
        s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
        s/^PLATFORM=.*$/PLATFORM=$target/;
--- ./,Makefile.org     Tue Sep 28 15:52:14 2004
+++ ./Makefile.org      Tue Oct 26 10:32:43 2004
@@ -25,6 +25,7 @@
 # Normally it is left empty.
 INSTALL_PREFIX=
 INSTALLTOP=/usr/local/ssl
+RPATH=
 
 # Do not edit this manually. Use Configure --openssldir=DIR do change this!
 OPENSSLDIR=/usr/local/ssl
@@ -237,7 +238,7 @@
        do \
        if [ -d "$$i" ]; then \
                (cd $$i && echo "making all in $$i..." && \
-               $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' FDIRS='$(FDIRS)' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' 
BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' 
RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' 
PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' 
LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' 
SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
+               $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' FDIRS='$(FDIRS)' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' 
BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' 
RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' 
PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' 
LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' 
SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' RPATH='${RPATH}' all ) 
|| exit 1; \
        else \
                $(MAKE) $$i; \
        fi; \
@@ -308,6 +309,7 @@
                -shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
                -Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
                -Wl,-Bsymbolic \
+               ${RPATH} \
                -Wl,--whole-archive lib$$i.a \
                -Wl,--no-whole-archive $$libs ${EX_LIBS} -lc ) || exit 1; \
        libs="-l$$i $$libs"; \
@@ -410,11 +412,14 @@
                fi; \
                ( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
                  MINUSZ='-z '; \
-                 (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
+                 SYMBOLIC='-B symbolic' ; \
+                 (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,' \
+                 && SYMBOLIC='-symbolic' ; \
                  set -x; ${CC} ${SHARED_LDFLAGS} -G -dy -z text \
                        -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
                        -h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
-                       -Wl,-Bsymbolic \
+                       $${SYMBOLIC} \
+                       ${RPATH} \
                        $${MINUSZ}allextract lib$$i.a $${MINUSZ}defaultextract \
                        $$libs ${EX_LIBS} -lc ) || exit 1; \
                libs="-l$$i $$libs"; \
@@ -484,6 +489,7 @@
                  set -x; ${CC} ${SHARED_LDFLAGS} \
                        -shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
                        -Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
+                       ${RPATH} \
                        $${WHOLELIB} $$libs ${EX_LIBS} -lc) || exit 1; \
                libs="-l$$i $$libs"; \
                done; \
@@ -508,10 +514,11 @@
        ( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
                +vnocompatwarnings \
                -b -z +s \
-               -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
-               +h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
+               -o lib$$i${SHLIB_EXT} \
+               +h lib$$i${SHLIB_EXT} \
+               ${RPATH} \
                -Fl lib$$i.a -ldld -lc ) || exit 1; \
-       chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
+       chmod a=rx lib$$i${SHLIB_EXT}; \
        done
 
 # This assumes that GNU utilities are *not* used
@@ -530,10 +537,11 @@
        fi; \
        ( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
                -b -z \
-               -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
-               +h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
+               -o lib$$i${SHLIB_EXT} \
+               +h lib$$i${SHLIB_EXT} \
+               ${RPATH} \
                +forceload lib$$i.a -ldl -lc ) || exit 1; \
-       chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
+       chmod a=rx lib$$i${SHLIB_EXT}; \
        done
 
 # The following method is said to work on all platforms.  Tests will
@@ -578,6 +586,7 @@
          ( nm -Pg lib$$i.o | grep ' [BD] ' | cut -f1 -d' ' > lib$$i.exp; \
            $(SHAREDCMD) $(SHAREDFLAGS) \
                -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} lib$$i.o \
+               ${RPATH} \
                $$libs ${EX_LIBS} ) ) \
        || exit 1; \
        libs="-l$$i $$libs"; \
--- ./,config   Mon Jun 28 17:01:05 2004
+++ ./config    Mon Oct 25 11:31:05 2004
@@ -494,7 +494,9 @@
        CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 
's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
        CPU=${CPU:-0}
        if [ $CPU -ge 5000 ]; then
-               options="$options -mips4"
+#              options="$options -mips4"
+# We want compatability, so use mips3
+               options="$options -mips3"
        else
                options="$options -mips3"
        fi
#!/bin/sh
# run the configure command
# change the correct directory then run this
# force the config install-sh to be found
#
umask 022
PROD=OpenSSL-0.9.7e
PERL=/usr/afsws/local/bin/perl5
TARGET=""
M64=""
SHARED=shared
CC=gcc
DEBUG=""

SYS=`/usr/afsws/bin/fs sysname | cut -d"'" -f2`


while test $# -gt 0
do
        arg="$1"
        shift
        case $arg in
                -t)
                        USETARGET=$1
                        shift
                        ;;
                -s)
                        SHARED=""
                        ;;
                -64)
                        M64=64
                        ;;
                -d)
                        DEBUG="debug-"
                        ;;
                *)
                        echo Unknow option $1
                        exit
                        ;;
        esac
done

case $SYS in
        sun4x_5*)
                RPATH="-Wl,-R,/krb5/lib:/usr/lib"
                if test -n "$M64" ; then
                        TARGET=solaris64-sparcv9-gcc
                else
                        TARGET=solaris-sparcv8-gcc
                fi
                ;;
        hp_ux102)
                RPATH="+b /krb5/lib:/usr/lib"
                TARGET=hpux10-gcc
                ;;
        hp_ux*)
                RPATH="+b /krb5/lib:/usr/lib"
                TARGET=hpux-parisc-gcc
                ;;
        ia64_hpux112*) 
                RPATH="+b /krb5/lib:/usr/lib"
                if test -n "$M64" ; then
                        TARGET=hpux64-ia64-gcc
                else
                        TARGET=hpux-ia64-gcc
                fi
                ;;
        sgi_65)
                RPATH="-Wl,-rpath,/krb5/lib:/usr/lib"
                PERL=/usr/bin/perl5
                TARGET=irix-mips3-gcc
                SHARED="no-shared"
                ;;
        i386_linux*)
                RPATH="-Wl,-rpath,/krb5/lib:/usr/lib"
                PERL=/usr/bin/perl
                TARGET=linux-pentium
                ;;
        rs_aix43)
                RPATH="-Wl,-blibpath:/krb5/lib:/usr/lib:/lib"
                TARGET=aix43-gcc
                ;;
        *)
                echo sysname $SYS not configured
                exit
                ;;
esac
if test -n "$USETARGET" ; then
        TARGET=$USETARGET
fi

export CC 

# log some info to stdout

pth=/krb5/libate                    
uname -a               
echo PWD=$PWD         
echo CC=$CC             
echo CFLAGS=$CFLAGS     
echo CPPFLAGS=$CPPFLAGS 
echo LDFLAGS=$LDFLAGS   
echo SYS=$SYS           


$PERL ./Configure \
    --prefix=/afs/anl.gov/appl/$PROD/$SYS \
        --rpath="${RPATH}" \
        ${DEBUG}${TARGET} ${SHARED} 
        

Reply via email to