Tom G. Christensen bd03d96c0d Completely redid the shared library approach.
I've ditched the Redhat way since the original makefiles are good to
go with only small tweaks.

The major difference will be that the shared libraries will have an soname
which explicitly spells out the OpenSSL version
ie. instead of libssl.so.3 we'll use libssl.so.0.9.7.3

No problems with having to identify if a newer version is binary compatible
and should be given the same soname.

*All* packages which use a shared libssl should have a depend on the
SBossl<ver>lib package.

Different SBossl<ver>lib packages can be installed at the same time since
it will *only* contain the shared libraries.
2004-01-07 09:26:15 +00:00

195 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
#
# This is a generic build.sh script
# It can be used nearly unmodified with many packages
#
# The concept of "method" registering and the logic that implements it was shamelessly
# stolen from jhlj's Compile.sh script :)
#
# Check the following 4 variables before running the script
topdir=openssl
version=0.9.7c
pkgver=4
source[0]=$topdir-$version.tar.gz
# If there are no patches, simply comment this
patch[0]=openssl-0.9.7c-shlib.patch
patch[1]=openssl-0.9.7c-Configure.patch
patch[2]=openssl-0.9.7c-doc.patch
# Source function library
. ${BUILDPKG_BASE}/scripts/buildpkg.functions
# shared library binary compatibility is not guaranteed
# Play it safe and up the soversion with each release
sover=3 # c = 3
abbrev_ver=$(echo $version|$SED -e 's/\.//g')
baseversion=$(echo $version|$SED -e 's/[a-zA-Z]//g')
# Fill in pkginfo values if necessary
# using pkgname,name,pkgcat,pkgvendor & pkgdesc
pkgname="$pkgprefix""ossl""$abbrev_ver"
name="OpenSSL - Secure Socket Layer"
pkgcat="application"
pkgvendor="http://www.openssl.org"
pkgdesc="Toolkit implementing SSL v2/v3 and TLS v1"
pkgname_lib="$pkgprefix""ossl""$abbrev_ver""lib"
name_lib="OpenSSL - Secure Socket Layer"
pkgcat_lib="library"
pkgvendor_lib="http://www.openssl.org"
pkgdesc_lib="Toolkit implementing SSL v2/v3 and TLS v1"
lib_stage=$BUILDPKG_BASE/$topdir/stage.lib
# Define script functions and register them
METHODS=""
reg() {
METHODS="$METHODS $1"
}
reg prep
prep()
{
generic_prep
}
reg build
build()
{
setdir source
$SED -e "s;@LIBDIR@;${prefix}/lib;g" Makefile.org > Makefile.new
$MV -f Makefile.new Makefile.org
./config --prefix=$prefix --openssldir=$prefix/ssl shared
major=$(grep ^SHLIB_MAJOR Makefile)
minor=$(grep ^SHLIB_MINOR Makefile)
$SED -e "s;${major};SHLIB_MAJOR=${baseversion};g" \
-e "s;${minor};SHLIB_MINOR=${sover};g" Makefile > Makefile.new
$MV Makefile.new Makefile
$SED -e "s;${major};SHLIB_MAJOR=${baseversion};g" \
-e "s;${minor};SHLIB_MINOR=${sover};g" Makefile.ssl > Makefile.new
$MV Makefile.new Makefile.ssl
$MAKE_PROG LIBSSL="-Wl,-R,$prefix/lib -L.. -lssl" LIBCRYPTO="-Wl,-R,$prefix/lib -L.. -lcrypto" all build-shared
$MAKE_PROG LIBSSL="-Wl,-R,$prefix/lib -L.. -lssl" LIBCRYPTO="-Wl,-R,$prefix/lib -L.. -lcrypto" all link-shared do_solaris-shared
}
reg install
install()
{
setdir source
clean stage
$MAKE_PROG INSTALL_PREFIX=$stagedir LIBSSL="-Wl,-R,$prefix/lib -L.. -lssl" LIBCRYPTO="-Wl,-R,$prefix/lib -L.. -lcrypto" install
setdir $stagedir$prefix/lib
chmod a+x pkgconfig
rmdir $stagedir$prefix/ssl/lib
$MV $stagedir$prefix/ssl/man $stagedir$prefix
setdir $stagedir$prefix/man
for j in $(ls -1d man?)
do
cd $j
for manpage in *
do
if [ -L "${manpage}" ]; then
TARGET=`ls -l "${manpage}" | awk '{ print $NF }'`
ln -snf "${TARGET}"ssl "${manpage}"ssl
rm -f "${manpage}"
else
$MV "$manpage" "$manpage""ssl"
fi
done
cd ..
done
# A few stupid manpages left that pkgproto can't deal with
setdir $stagedir$prefix/man/man3
mv "EVP_MD_CTX_copy_ex EVP_MD_CTX_copy.3ssl" "EVP_MD_CTX_copy_ex_EVP_MD_CTX_copy.3ssl"
mv "UI_construct_prompt UI_add_user_data.3ssl" "UI_construct_prompt_UI_add_user_data.3ssl"
setdir $stagedir$prefix/man/man7
mv "Modes of DES.7ssl" "Modes_of_DES.7ssl"
}
reg pack
pack()
{
# Split up the stagedir
# The bare .so and .a used for development should only be available
# if the matching headers etc. is installed so they're not put in the lib package
mkdir -p $lib_stage$prefix/lib
$MV $stagedir$prefix/lib/*.so.* $lib_stage$prefix/lib
# Create runtime package
echo "P $pkgname_lib $name_lib" > $metadir/depend
generic_pack
usedepend=0
$MV $stagedir $stagedir.1
$MV $lib_stage $stagedir
pkgname=$pkgname_lib
name=$name_lib
pkgcat=$pkgcat_lib
pkgvendor=$pkgvendor_lib
pkgdesc=$pkgdesc_lib
distfile=$topdir-lib-$version-$pkgver.sb-$os-$cpu-$pkgdirdesig
generic_pack
$MV $stagedir.1 $stagedir
setdir source
clean stage
}
reg distclean
distclean()
{
# depend is created by build.sh so make sure
# it's removed by distclean
META_CLEAN="$META_CLEAN depend"
clean distclean
pkgname=$pkgname_lib
clean meta
}
###################################################
# No need to look below here
###################################################
reg all
all()
{
for METHOD in $METHODS
do
case $METHOD in
all*|*clean) ;;
*) $METHOD
;;
esac
done
}
reg
usage() {
echo Usage $0 "{"$(echo $METHODS | tr " " "|")"}"
exit 1
}
OK=0
for METHOD in $*
do
METHOD=" $METHOD *"
if [ "${METHODS%$METHOD}" == "$METHODS" ] ; then
usage
fi
OK=1
done
if [ $OK = 0 ] ; then
usage;
fi
for METHOD in $*
do
( $METHOD )
done