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}