sogo/configure

547 lines
14 KiB
Bash
Executable File

#!/bin/sh
#
# Note: When adding make options to this script, ensure that the source still
# compiles without those options! (and just with GNUstep.sh being
# sourced)
# We do not want to force people to run configure.
#
# ******************** variables ****************
TOPDIR="$(cd `dirname $0`; pwd)"
# we ensure that the configure script is run from TOPDIR
cd "${TOPDIR}"
CFG_ARGS="$0 $1 $2 $3 $4 $5 $6 $7 $8 $9"
ARG_BEQUIET=0
ARG_NOCREATE=0
ARG_PREFIX=""
ARG_GSMAKE=`gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null`
ARG_CFGMAKE="$PWD/config.make"
ARG_CFGSSL="auto"
ARG_WITH_DEBUG=1
ARG_WITH_STRIP=0
ARG_ENABLE_SAML2=0
ARG_ENABLE_MFA=0
ARG_ENABLE_SODIUM=1
ARG_WITH_LDAP_CONFIG=0
GNUSTEP_INSTALLATION_DOMAIN="LOCAL"
DARG_GNUSTEP_SH="$ARG_GSMAKE/GNUstep.sh"
# detect GNU make, needed at least on *BSD
make -v 2>/dev/null | grep GNU >/dev/null 2>/dev/null
if [ $? -eq 0 ];then
MAKE=make
else
MAKE=gmake
fi
# hostname(1) on some systems may not know the -f parameter
hostname -f 2>/dev/null >/dev/null
if [ $? -eq 0 ];then
HOSTNAME=`hostname -f`
else
HOSTNAME=`hostname`
fi
NGSTREAMS_DIR="./sope-core/NGStreams"
LINK_SYSLIBDIRS="-L/usr/local/pgsql/lib -L/usr/local/lib -L/usr/lib"
# ******************** usage ********************
usage() {
cat <<_ACEOF
\`configure' configures a GNUstep-make based sourcetree for installation.
Usage: $0 [OPTION]...
Note: You do not need to configure this source tree, as another option
just ensure that the GNUstep.sh of your GNUstep make installation
is properly sourced prior running make.
Configuration:
-h, --help display this help and exit
-q, --quiet, --silent do not print \`checking...' messages
-n, --no-create do not create output files
Installation directories:
--prefix=PREFIX install files in PREFIX [/usr/local]
--gsmake=PATH path to gnustep-make tree
--configmake=PATH path to the config file being created
--enable-debug turn on debugging and compile time warnings
--enable-strip turn on stripping of debug symbols
--with-ssl=SSL specify ssl library (none, ssl, gnutls, auto) [auto]
--enable-saml2 enable support for SAML2 authentication (requires liblasso)
--enable-mfa enable multi-factor authentication (requires liboath)
--disable-sodium disable building with libsodium (will disable argon2 password schemes)
--enable-ldap-config enable LDAP based configuration of SOGo
_ACEOF
exit 0;
}
# ******************** running ********************
printParas() {
echo "Configuration:"
if test $ARG_BEQUIET = 1; then echo " will be quite."; fi
if test $ARG_NOCREATE = 1; then echo " won't create files"; fi
if test $ARG_WITH_DEBUG = 1; then
echo " debug: yes";
else
echo " debug: no";
fi
if test $ARG_WITH_STRIP = 1; then
echo " strip: yes";
else
echo " strip: no";
fi
if test $ARG_ENABLE_SAML2 = 1; then
echo " saml2 support: yes";
else
echo " saml2 support: no";
fi
if test $ARG_ENABLE_MFA = 1; then
echo " mfa support: yes";
else
echo " mfa support: no";
fi
if test $ARG_ENABLE_SODIUM = 1; then
echo " argon2 support: yes";
else
echo " argon2 support: no";
fi
if test $ARG_WITH_LDAP_CONFIG = 1; then
echo " ldap-based configuration: yes";
else
echo " ldap-based configuration: no";
fi
echo " prefix: $ARG_PREFIX"
echo " gstep: $ARG_GSMAKE"
echo " config: $ARG_CFGMAKE"
echo " script: $DARG_GNUSTEP_SH"
echo ""
}
validateGNUstepArgs() {
# GNUstep make
if test "x$ARG_GSMAKE" = "x"; then
if test -f $HOME/OGoRoot/Library/Makefiles/GNUstep.sh; then
ARG_GSMAKE="$HOME/OGoRoot/Library/Makefiles/"
elif test -f $HOME/GNUstep/Library/Makefiles/GNUstep.sh; then
ARG_GSMAKE="$HOME/GNUstep/Library/Makefiles/"
elif test -f /usr/GNUstep/System/Library/Makefiles/GNUstep.sh; then
ARG_GSMAKE="/usr/GNUstep/System/Library/Makefiles/"
elif test -f /usr/share/GNUstep/Makefiles/GNUstep.sh; then
ARG_GSMAKE="/usr/share/GNUstep/Makefiles/"
elif test -f $GNUSTEP_MAKEFILES/GNUstep.sh; then
ARG_GSMAKE="$GNUSTEP_MAKEFILES/"
else
echo "error: please specify a GNUstep make tree!"
exit 1
fi
DARG_GNUSTEP_SH="$ARG_GSMAKE/GNUstep.sh"
elif test -d $ARG_GSMAKE; then
if test -f $ARG_GSMAKE/GNUstep.sh; then
DARG_GNUSTEP_SH="$ARG_GSMAKE/GNUstep.sh"
elif test -f $ARG_GSMAKE/Library/Makefiles/GNUstep.sh; then
ARG_GSMAKE="$ARG_GSMAKE/Library/Makefiles"
DARG_GNUSTEP_SH="$ARG_GSMAKE/GNUstep.sh"
else
echo "error: specified directory contains no GNUstep.sh: $ARG_GSMAKE"
exit 1
fi
else
echo "error: specified GNUstep make tree does not exist: $ARG_GSMAKE"
exit 1
fi
}
validateArgs() {
# validate prefix (could be better?)
case "x$ARG_PREFIX" in
"x")
ARG_PREFIX="$GNUSTEP_LOCAL_ROOT"
GNUSTEP_INSTALLATION_DOMAIN="LOCAL"
if test $ARG_BEQUIET != 1; then
echo "Note: will install in GNUSTEP_LOCAL_ROOT: $ARG_PREFIX"
echo ""
fi
;;
"x$GNUSTEP_USER_ROOT")
GNUSTEP_INSTALLATION_DOMAIN="USER"
if test $ARG_BEQUIET != 1; then
echo "Note: will install in GNUSTEP_USER_ROOT: $ARG_PREFIX"
echo ""
fi
;;
"x$GNUSTEP_LOCAL_ROOT")
GNUSTEP_INSTALLATION_DOMAIN="LOCAL"
if test $ARG_BEQUIET != 1; then
echo "Note: will install in GNUSTEP_LOCAL_ROOT: $ARG_PREFIX"
echo ""
fi
;;
"x$GNUSTEP_NETWORK_ROOT")
GNUSTEP_INSTALLATION_DOMAIN="NETWORK"
if test $ARG_BEQUIET != 1; then
echo "Note: will install in GNUSTEP_NETWORK_ROOT: $ARG_PREFIX"
echo ""
fi
;;
"x$GNUSTEP_SYSTEM_ROOT")
GNUSTEP_INSTALLATION_DOMAIN="SYSTEM"
if test $ARG_BEQUIET != 1; then
echo "Note: will install in GNUSTEP_SYSTEM_ROOT: $ARG_PREFIX"
echo ""
fi
;;
*)
echo "error: specified prefix is not a GNUstep root: '$ARG_PREFIX'"
exit 1
;;
esac
}
printGNUstepSetup() {
echo "GNUstep environment:"
echo " system: ${GNUSTEP_SYSTEM_ROOT}"
echo " local: ${GNUSTEP_LOCAL_ROOT}"
echo " user: ${GNUSTEP_USER_ROOT}"
echo " path: ${GNUSTEP_PATHLIST}"
echo " flat: ${GNUSTEP_FLATTENED}"
echo " arch: ${GNUSTEP_HOST}"
echo " combo: ${LIBRARY_COMBO}"
echo ""
}
cfgwrite() {
echo "$1" >> "${ARG_CFGMAKE}"
}
genConfigMake() {
# we ignore the following vars also patches by gstep-make:
# PATH
# DYLD_LIBRARY_PATH
# GUILE_LOAD_PATH
# CLASSPATH
if test $ARG_BEQUIET != 1; then
echo "creating: $ARG_CFGMAKE"
fi
echo "# GNUstep environment configuration" > "${ARG_CFGMAKE}"
cfgwrite "# created by: '$CFG_ARGS'"
cfgwrite ""
cfgwrite "# Note: you can override any option as a 'make' parameter, eg:"
cfgwrite "# $MAKE debug=yes"
cfgwrite ""
TOPDIR_CFGWRITE=`echo ${TOPDIR} | sed 's/ /\\\ /g'`
cfgwrite "TOPDIR:=${TOPDIR_CFGWRITE}"
cfgwrite ""
cfgwrite "NEEDS_GUI=no"
# SOPE version
cfgwrite "SOPE_MAJOR_VERSION=4"
cfgwrite "SOPE_MINOR_VERSION=9"
# Languages
cfgwrite "SOGO_LANGUAGES=Arabic Basque BrazilianPortuguese Bulgarian Catalan ChineseChina ChineseTaiwan Croatian Czech Danish Dutch English Finnish French German Hebrew Hungarian Icelandic Indonesian Italian Japanese Latvian Lithuanian Macedonian Montenegrin NorwegianBokmal NorwegianNynorsk Polish Portuguese Romanian Russian Serbian SerbianLatin Slovak Slovenian SpanishArgentina SpanishSpain Swedish TurkishTurkey Ukrainian Welsh"
#cfgwrite "# print on the cmdline that this file is being used"
#cfgwrite "all :: "
#cfgwrite " @echo Local GNUstep config.make is active"
#cfgwrite ""
if test $ARG_WITH_DEBUG = 1; then
cfgwrite "# configured to produce debugging code";
cfgwrite "debug:=yes"
else
cfgwrite "# configured to produce non-debugging code";
cfgwrite "debug:=no"
fi
cfgwrite ""
UNAME=`uname`
if [ "X${UNAME}" = "XLinux" ];then
UNAME=`uname -m`
if [ ${UNAME} = x86_64 -o ${UNAME} = sparc64 -o ${UNAME} = ppc64 ];then
cfgwrite "CGS_LIBDIR_NAME:=lib64"
else
cfgwrite "CGS_LIBDIR_NAME:=lib"
fi
else
cfgwrite "CGS_LIBDIR_NAME:=lib"
fi
cfgwrite "HOSTNAME=${HOSTNAME}"
cfgwrite "SOGO_SYSLIBDIR=\${GNUSTEP_SYSTEM_LIBRARIES}"
cfgwrite "SOGO_LIBDIR=\${GNUSTEP_LIBRARY}/SOGo"
cfgwrite "SOGO_TEMPLATESDIR=\${SOGO_LIBDIR}/Templates"
cfgwrite "SOGO_WEBSERVERRESOURCESDIR=\${SOGO_LIBDIR}/WebServerResources"
cfgwrite "SOGO_TOOLS=\${GNUSTEP_TOOLS}"
cfgwrite "SOGO_ADMIN_TOOLS=\${GNUSTEP_ADMIN_TOOLS}"
cfgwrite "SOPE_SAXMAPPINGS=\${GNUSTEP_LIBRARY}/SaxMappings"
cfgwrite "SOPE_SAXDRIVERS=\${GNUSTEP_LIBRARY}/SaxDrivers-\${SOPE_MAJOR_VERSION}.\${SOPE_MINOR_VERSION}"
cfgwrite "SOPE_WOXBUILDERS=\${GNUSTEP_LIBRARY}/WOxElemBuilders-\${SOPE_MAJOR_VERSION}.\${SOPE_MINOR_VERSION}"
cfgwrite "SOGO_TYPEMODELS=\${GNUSTEP_LIBRARY}/OCSTypeModels"
if test $ARG_WITH_STRIP = 1; then
cfgwrite "# configured to produce stripped code";
cfgwrite "strip:=yes"
else
cfgwrite "# configured not to strip code";
cfgwrite "strip:=no"
fi
cfgwrite ""
cfgwrite "# enforce shared libraries";
cfgwrite "shared:=yes"
cfgwrite ""
cfgwrite "# GNUstep environment variables:";
cfgwrite "GNUSTEP_INSTALLATION_DOMAIN=$GNUSTEP_INSTALLATION_DOMAIN"
for i in `env | grep GNUSTEP_ | sort`; do
MAKE_ASSI="`echo $i | sed s/=/:=/`"
cfgwrite "${MAKE_ASSI}";
done
cfgwrite "LIBRARY_COMBO=$LIBRARY_COMBO"
cfgwrite ""
if test $ARG_ENABLE_SAML2 = 1; then
cfgwrite "ADDITIONAL_CPPFLAGS += -DSAML2_CONFIG=1"
cfgwrite "saml2_config:=yes"
fi
if test $ARG_ENABLE_MFA = 1; then
cfgwrite "ADDITIONAL_CPPFLAGS += -DMFA_CONFIG=1"
cfgwrite "mfa_config:=yes"
fi
if test $ARG_WITH_LDAP_CONFIG = 1; then
cfgwrite "ADDITIONAL_CPPFLAGS += -DLDAP_CONFIG=1"
cfgwrite "ldap_config:=yes"
fi
cfgwrite "include \$(TOPDIR)/general.make"
}
checkLinking() {
# library-name => $1, type => $2
local oldpwd="${PWD}"
local tmpdir=".configure-test-$$"
mkdir $tmpdir
cd $tmpdir
cat > dummytool.c <<EOF
#include <stdio.h>
int main(int argc, char **argv) {
return 0;
}
EOF
OLDLIBS=$LIBS
for LIB in $1;do
LIBS="$LIBS -l${LIB}"
done
tmpmake="GNUmakefile"
echo >$tmpmake "-include ../config.make"
echo >>$tmpmake "include \$(GNUSTEP_MAKEFILES)/common.make"
echo >>$tmpmake "CTOOL_NAME := linktest"
echo >>$tmpmake "linktest_C_FILES := dummytool.c"
echo >>$tmpmake "ifeq (\$(findstring openbsd, \$(GNUSTEP_HOST_OS)), openbsd)"
echo >>$tmpmake "linktest_TOOL_LIBS += $LIBS -liconv"
echo >>$tmpmake "else"
echo >>$tmpmake "linktest_TOOL_LIBS += $LIBS"
echo >>$tmpmake "endif"
echo >>$tmpmake "SYSTEM_LIB_DIR += \$(CONFIGURE_SYSTEM_LIB_DIR)"
echo >>$tmpmake "SYSTEM_LIB_DIR += ${LINK_SYSLIBDIRS}"
echo >>$tmpmake "include \$(GNUSTEP_MAKEFILES)/ctool.make"
$MAKE -s messages=yes -f $tmpmake linktest >out.log 2>err.log
LINK_RESULT=$?
if test $LINK_RESULT = 0; then
echo "$2 library found: $1"
cfgwrite "HAS_LIBRARY_$1=yes"
else
if test "x$2" = "xrequired"; then
echo "failed to link $2 library: $1"
rm ../config.make
exit 1
else
echo "failed to link $2 library: $1"
cfgwrite "HAS_LIBRARY_$1=no"
LIBS=$OLDLIBS
fi
fi
cd "${oldpwd}"
rm -rf $tmpdir
return $LINK_RESULT
}
checkDependencies() {
cfgwrite "BASE_LIBS := `gnustep-config --base-libs` -lzip -lytnef"
if test "x$ARG_ENABLE_SAML2" = "x1"; then
checkLinking "lasso" required;
if test $? = 0; then
lasso_cflags="`pkg-config lasso --cflags`"
cfgwrite "LASSO_CFLAGS := $lasso_cflags"
lasso_libs="`pkg-config lasso --libs` `pkg-config gobject-2.0 --libs`"
cfgwrite "LASSO_LIBS := $lasso_libs"
fi;
fi
if test "x$ARG_ENABLE_MFA" = "x1"; then
checkLinking "oath" required;
if test $? = 0; then
cfgwrite "MFA_LIBS := -loath"
fi;
fi
if test "x$ARG_ENABLE_SODIUM" = "x1"; then
checkLinking "sodium" required;
fi
if test "x$ARG_CFGSSL" = "xauto"; then
checkLinking "ssl" optional;
if test $? != 0; then
checkLinking "gnutls" optional;
fi;
elif test "x$ARG_CFGSSL" = "xssl"; then
checkLinking "ssl" required;
elif test "x$ARG_CFGSSL" = "xgnutls"; then
checkLinking "gnutls" required;
fi
}
runIt() {
DISABLED_STRIPPING=0
if test $ARG_WITH_DEBUG = 1 && test $ARG_WITH_STRIP = 1; then
DISABLED_STRIPPING=1;
ARG_WITH_STRIP=0;
fi
if test $ARG_BEQUIET != 1; then
if test $DISABLED_STRIPPING = 1; then
echo "Note: Disabling stripping of symbols since debug is enabled";
fi
printParas;
fi
if test $ARG_NOCREATE = 1; then
if test $ARG_BEQUIET != 1; then
echo "not creating the config file ...";
fi
else
genConfigMake;
checkDependencies;
if test -x $NGSTREAMS_DIR/configure; then
if test $ARG_BEQUIET != 1; then
echo -n "configuring NGStreams library .."
old="$PWD"
cd $NGSTREAMS_DIR
./configure >$old/config-NGStreams.log
cd $old
echo ".. done (log in config-NGStreams.log)."
fi
fi
fi
}
# ******************** options ********************
extractFuncValue() {
VALUE="`echo "$1" | sed "s/[^=]*=//g"`"
}
processOption() {
case "x$1" in
"x--help"|"x-h")
usage;
;;
"x--quiet"|"x--silent"|"x-q") ARG_BEQUIET=1; ;;
"x--no-create"|"x-n") ARG_NOCREATE=1; ;;
x--prefix=*)
extractFuncValue $1;
ARG_PREFIX="$VALUE";
;;
x--gsmake=*)
extractFuncValue $1;
ARG_GSMAKE="$VALUE";
;;
x--configmake=*)
extractFuncValue $1;
ARG_CFGMAKE="$VALUE";
;;
"x--enable-debug")
ARG_WITH_DEBUG=1
;;
"x--disable-debug")
ARG_WITH_DEBUG=0
;;
"x--enable-strip")
ARG_WITH_STRIP=1
;;
"x--disable-strip")
ARG_WITH_STRIP=0
;;
x--with-ssl=*)
extractFuncValue $1;
ARG_CFGSSL="$VALUE"
;;
"x--enable-saml2")
ARG_ENABLE_SAML2=1
;;
"x--enable-mfa")
ARG_ENABLE_MFA=1
;;
"x--enable-sodium")
ARG_ENABLE_SODIUM=1
;;
"x--disable-sodium")
ARG_ENABLE_SODIUM=0
;;
"x--enable-ldap-config")
ARG_WITH_LDAP_CONFIG=1
;;
"x--disable-ldap-config")
ARG_WITH_LDAP_CONFIG=0
;;
*) echo "error: cannot process argument: $1"; exit 1; ;;
esac
}
for i in $@; do
processOption $i;
done
# load GNUstep environment
validateGNUstepArgs
# first we load the GNUstep.sh environment
. $DARG_GNUSTEP_SH
if test $ARG_BEQUIET != 1; then
printGNUstepSetup;
fi
# ensure the parameters make sense
validateArgs
# start it
runIt