# # configure.ad # # Author: Pekka Riikonen # # Copyright (C) 2000 - 2008 Pekka Riikonen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # AD_INIT AC_CANONICAL_SYSTEM AM_INIT_AUTOMAKE AC_PREREQ(2.52) AC_CONFIG_HEADERS(cryptodefs.h) AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_CC AM_PROG_AS AC_C_INLINE AC_C_CONST AC_PROG_RANLIB #ifdef SILC_DIST_INPLACE AC_DISABLE_SHARED #endif SILC_DIST_INPLACE AC_PROG_LIBTOOL SILC_TOP_SRCDIR=`pwd` ## ## Library versioning. ## # Do the releases and library versioning according to following rules: # # - If any code has changed in library, increment CRYPTO_REVISION # - If API were added, removed or changed, set CRYPTO_REVISION to 0 # - If API were added, removed or changed, increment CRYPTO_CURRENT # - If APi were added, increment CRYPTO_AGE # - If API were removed, set CRYPTO_AGE to 0 # # Base version for library. CRYPTO_BASE_VERSION=1.2 # Library versions CRYPTO_CURRENT=1 # prev = 0 CRYPTO_REVISION=0 # prev = 0 CRYPTo_AGE=0 # prev = 0 # Substitute the version numbers AC_SUBST(CRYPTO_BASE_VERSION) AC_SUBST(CRYPTO_CURRENT) AC_SUBST(CRYPTO_REVISION) AC_SUBST(CRYPTO_AGE) ## ## Installation ## # Default installation destination AC_PREFIX_DEFAULT(/usr/local) if test "x$prefix" != xNONE; then silc_prefix="$prefix" else silc_prefix="$ac_default_prefix" prefix="$silc_prefix" fi ## ## Required dependencies ## LIBSUBDIR=lib LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS" SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silccrypt" SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcasn1" SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcacc" SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcskr" SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcmath" #ifdef SILC_DIST_SSH SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcssh" #endif SILC_DIST_SSH #ifdef SILC_DIST_PGP SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcpgp" #endif SILC_DIST_PGP #ifdef SILC_DIST_PKIX SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcpkix" #endif SILC_DIST_PKIX # SILC Runtime Toolkit checking AC_ARG_WITH(srt-includes, [ --with-srt-includes=DIR SILC Runtime Toolkit includes [search in DIR]], [ac_srt_includes="$withval"], [ac_srt_includes="no"]) AC_ARG_WITH(srt-libs, [ --with-srt-libs=DIR SILC Runtime Toolkit libraries [search in DIR]], [ac_srt_libs="$withval"], [ac_srt_libs="no"]) if test -n "$with_srt_includes" || test -n "$with_srt_libs"; then # Manually provided libs if test "$ac_srt_includes" != "no"; then SILC_LIB_INCLUDES="-I$ac_srt_includes" fi if test "$ac_srt_libs" != "no"; then LDFLAGS="-L$ac_srt_libs $LDFLAGS" fi # Check libs to link against f=`$EGREP __SILC_HAVE_PTHREAD $ac_srt_includes/silc.h` if test -n "$f"; then LIBS="$LIBS -lpthread" has_threads=true fi else # pkg-config check PKG_CHECK_MODULES(SRT, [srt >= 1.2]) LIBS="$SRT_LIBS $LIBS" CFLAGS="$CFLAGS $SRT_CFLAGS" fi ## ## Detect CPU ## # Disable all CPU feature optimizations AC_MSG_CHECKING(whether to enable CPU feature optimizations) AC_ARG_ENABLE(cpu-optimizations, [ --disable-cpu-optimizations do not use any CPU feature optimizations], [ AC_MSG_RESULT(no) AC_DEFINE([SILC_NO_CPU_OPTIMIZATIONS], [], [SILC_NO_CPU_OPTIMIZATIONS]) want_cpu_optimizations=false ], [ AC_MSG_RESULT(yes) want_cpu_optimizations=true ]) AM_CONDITIONAL(SILC_NO_CPU_OPTIMIZATIONS, test x$want_cpu_optimizations = xfalse) SILC_SYSTEM_IS_SMP(AC_DEFINE([SILC_SMP], [], [SILC_SMP]), [], AC_DEFINE([SILC_SMP], [], [SILC_SMP])) cpu_i386=false cpu_i486=false cpu_i586=false cpu_i686=false cpu_i786=false cpu_x86_64=false cpu_ppc=false cpu_ia64=false case "$host_cpu" in # All following Intels are considered 32-bit CPUs. i?86) # All CPUs of today are considered i386 and i486 compatible */ cpu_i386=true cpu_i486=true if test "x$host_cpu" = "xi586"; then cpu_i586=true fi if test "x$host_cpu" = "xi686"; then cpu_i586=true cpu_i686=true fi if test "x$host_cpu" = "xi786"; then cpu_i586=true cpu_i686=true cpu_i786=true fi # Check for specific CPU features SILC_CPU_FLAG(mmx, true, AC_DEFINE([SILC_CPU_MMX], [], [SILC_CPU_MMX]), []) SILC_CPU_FLAG(sse2, true, AC_DEFINE([SILC_CPU_SSE2], [], [SILC_CPU_SSE2]), []) SILC_CPU_FLAG(pni, true, AC_DEFINE([SILC_CPU_SSE3], [], [SILC_CPU_SSE3]), []) SILC_CPU_FLAG(ssse3, true, AC_DEFINE([SILC_CPU_SSSE3], [], [SILC_CPU_SSSE3]), []) SILC_CPU_FLAG(sse4a, true, AC_DEFINE([SILC_CPU_SSE4A], [], [SILC_CPU_SSE4A]), []) SILC_CPU_FLAG(sse4_1, true, AC_DEFINE([SILC_CPU_SSE41], [], [SILC_CPU_SSE41]), []) SILC_CPU_FLAG(sse4_2, true, AC_DEFINE([SILC_CPU_SSE42], [], [SILC_CPU_SSE42]), []) SILC_CPU_FLAG(sse5, true, AC_DEFINE([SILC_CPU_SSE5], [], [SILC_CPU_SSE5]), []) ;; # Intel IA-64, 64-bit CPU (not x86_64 compatible) ia64) AC_DEFINE([SILC_IA64], [], [SILC_IA64]) cpu_ia64=true ;; # AMD/Intel x86_64, 64-bit CPU x86_64) cpu_x86_64=true # Check for specific CPU features SILC_CPU_FLAG(mmx, true, AC_DEFINE([SILC_CPU_MMX], [], [SILC_CPU_MMX]), []) SILC_CPU_FLAG(sse2, true, AC_DEFINE([SILC_CPU_SSE2], [], [SILC_CPU_SSE2]), []) SILC_CPU_FLAG(pni, true, AC_DEFINE([SILC_CPU_SSE3], [], [SILC_CPU_SSE3]), []) SILC_CPU_FLAG(ssse3, true, AC_DEFINE([SILC_CPU_SSSE3], [], [SILC_CPU_SSSE3]), []) SILC_CPU_FLAG(sse4a, true, AC_DEFINE([SILC_CPU_SSE4A], [], [SILC_CPU_SSE4A]), []) SILC_CPU_FLAG(sse4_1, true, AC_DEFINE([SILC_CPU_SSE41], [], [SILC_CPU_SSE41]), []) SILC_CPU_FLAG(sse4_2, true, AC_DEFINE([SILC_CPU_SSE42], [], [SILC_CPU_SSE42]), []) SILC_CPU_FLAG(sse5, true, AC_DEFINE([SILC_CPU_SSE5], [], [SILC_CPU_SSE5]), []) ;; # PowerPC, 32-bit and 64-bit CPUs powerpc*) cpu_ppc=true ;; esac AM_CONDITIONAL(SILC_I386, test x$cpu_i386 = xtrue) AM_CONDITIONAL(SILC_I486, test x$cpu_i486 = xtrue) AM_CONDITIONAL(SILC_I586, test x$cpu_i586 = xtrue) AM_CONDITIONAL(SILC_I686, test x$cpu_i686 = xtrue) AM_CONDITIONAL(SILC_7686, test x$cpu_i786 = xtrue) AM_CONDITIONAL(SILC_X86_64, test x$cpu_x86_64 = xtrue) AM_CONDITIONAL(SILC_POWERPC, test x$cpu_ppc = xtrue) AM_CONDITIONAL(SILC_IA64, test x$cpu_ia64 = xtrue) if test x$want_cpu_optimizations = xtrue; then # Set some compiler options based on CPU if test "x$CC" = "xicc"; then # ICC flags if test x$x_have_cpu_sse4_1 = xtrue; then SILC_ADD_CFLAGS(-axS) fi if test x$x_have_cpu_sse4_2 = xtrue; then SILC_ADD_CFLAGS(-axS) fi if test x$x_have_cpu_ssse3 = xtrue; then SILC_ADD_CFLAGS(-axT) elif test x$x_have_cpu_pni = xtrue; then SILC_ADD_CFLAGS(-axP) elif test x$x_have_cpu_sse2 = xtrue; then SILC_ADD_CFLAGS(-axW) fi else # Other compilers if test x$x_have_cpu_sse2 = xtrue; then SILC_ADD_CFLAGS(-msse2) fi if test x$x_have_cpu_pni = xtrue; then SILC_ADD_CFLAGS(-msse3) fi if test x$x_have_cpu_ssse3 = xtrue; then SILC_ADD_CFLAGS(-mssse3) fi if test x$x_have_cpu_sse4_1 = xtrue; then SILC_ADD_CFLAGS(-msse4) fi if test x$x_have_cpu_sse4_2 = xtrue; then SILC_ADD_CFLAGS(-msse4) fi fi fi ## ## Put here any platform specific stuff ## case "$target" in *-*-linux*) CFLAGS=`echo $CFLAGS -D_GNU_SOURCE` ;; *-*-freebsd*) ;; *-*-netbsd*) ;; *-*-*bsd*) ;; *) ;; esac ## ## Header checking ## AC_HEADER_STDC # More header checking # AC_CHECK_HEADERS(unistd.h assert.h time.h fcntl.h) AC_CHECK_HEADERS(sys/types.h sys/times.h sys/time.h sys/resource.h) # Check for big-endian machines AC_C_BIGENDIAN ## ## Compiler and compiler flag checks ## # Disable all compiler optimizations AC_MSG_CHECKING(whether to enable compiler optimizations) AC_ARG_ENABLE(optimizations, [ --disable-optimizations do not use any compiler optimizations], [ AC_MSG_RESULT(no) AC_DEFINE([SILC_NO_CC_OPTIMIZATIONS], [], [SILC_NO_CC_OPTIMIZATIONS]) want_cc_optimizations=false ], [ AC_MSG_RESULT(yes) want_cc_optimizations=true ]) AM_CONDITIONAL(SILC_NO_CC_OPTIMIZATIONS, test x$want_cc_optimizations = xfalse) if test "$GCC"; then # GCC specific options if test "x$summary_debug" = "xyes"; then SILC_ADD_CFLAGS(-g) else SILC_ADD_CFLAGS(-g) fi SILC_ADD_CFLAGS(-Wall -finline-functions) SILC_ADD_CFLAGS(-Wno-pointer-sign) else # Other compilers case "$target" in alpha*-dec-osf*) SILC_ADD_CFLAGS(-g3) ;; mips*-sgi-irix*) SILC_ADD_CFLAGS(-g3) ;; *) SILC_ADD_CFLAGS(-g) ;; esac # Intel C++ Compiler flags if test "x$CC" = "xicc"; then SILC_ADD_CFLAGS(-restrict) SILC_ADD_CFLAGS(-finline-functions) # Don't define __GNUC__ except for system includes SILC_ADD_CFLAGS(-gcc-sys) fi fi if test x$want_cc_optimizations = xtrue; then if test "$GCC"; then # GCC specific options if test "x$summary_debug" = "xyes"; then SILC_ADD_CFLAGS(-O) else SILC_ADD_CFLAGS(-O2) fi else # Other compilers case "$target" in alpha*-dec-osf*) SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O)) ;; mips*-sgi-irix*) SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O)) ;; *) SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O)) ;; esac fi fi # Workaround a bug in GCC 2.x which causes memory exhaustion # when compiling sha1 with optimizations on UltraSPARC. FIX_SHA1='#' if test "$GCC" -a "$host_cpu" = "sparc64"; then AC_MSG_CHECKING(whether to enable GCC 2.x workaround for SHA1) AC_TRY_COMPILE( [ #if defined(__sparc64__) && (__GNUC__ == 2) #else choke me #endif ], [], [ FIX_SHA1='' AC_MSG_RESULT(yes) ], AC_MSG_RESULT(no) ) fi AC_SUBST(FIX_SHA1) ## ## Function and libary checking ## AC_CHECK_FUNCS(times clock time) AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid getrusage setsid) cryptover=`echo $VERSION | sed 's/\./ /g'` maj=0 min=0 bld=0 for v in $cryptover do if test $maj -eq 0; then maj=$v continue fi if test $min -eq 0; then min=$v continue fi if test $bld -eq 0; then bld=$v continue fi done __CRYPTO_PACKAGE_VERSION="#define __SILC_CRYPTO_VERSION SILC_VERSION($maj,$min,$bld)" ## ## Enable/disable checking ## #ifdef SILC_DIST_INPLACE # # Profiling options (never delivered to distributions) # AC_MSG_CHECKING(whether to enable gprof) AC_ARG_ENABLE(gprof, [ --enable-gprof enable gprof profiling], [ case "${enableval}" in yes) AC_MSG_RESULT(yes) SILC_ADD_CFLAGS(-pg) LIBS="$LIBS -pg" ;; *) AC_MSG_RESULT(no) ;; esac ], [ AC_MSG_RESULT(no) ]) AC_MSG_CHECKING(whether to enable gcov) AC_ARG_ENABLE(gcov, [ --enable-gcov enable gcov], [ case "${enableval}" in yes) AC_MSG_RESULT(yes) SILC_ADD_CFLAGS(-fprofile-arcs) LIBS="$LIBS -lgcov" ;; *) AC_MSG_RESULT(no) ;; esac ], [ AC_MSG_RESULT(no) ]) #endif SILC_DIST_INPLACE # Debug checking AC_MSG_CHECKING(whether to enable debugging) summary_debug="no" AC_ARG_ENABLE(debug, [ --enable-debug enable debugging], [ case "${enableval}" in yes) AC_MSG_RESULT(yes) summary_debug="yes" ;; *) AC_MSG_RESULT(no) ;; esac ], [ AC_MSG_RESULT(no) ]) # Disable all assembler optimizations AC_MSG_CHECKING(whether to enable assembler optimizations) AC_ARG_ENABLE(asm, [ --disable-asm do not use assembler optimizations], [ AC_MSG_RESULT(no) AC_DEFINE([SILC_NO_ASM], [], [SILC_NO_ASM]) want_asm=false ], [ AC_MSG_RESULT(yes) want_asm=true ]) AM_CONDITIONAL(SILC_NO_ASM, test x$want_asm = xfalse) # Check for assembler SILC_ASSEMBLER="" have_assembler=false if test x$want_asm = xtrue; then ASM_FLAGS= if test x$x_have_cpu_sse2 = xtrue; then ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE2" fi if test x$x_have_cpu_pni = xtrue; then ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE3" fi if test x$x_have_cpu_ssse3 = xtrue; then ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSSE3" fi if test x$x_have_cpu_sse4_1 = xtrue; then ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE41" fi if test x$x_have_cpu_sse4_2 = xtrue; then ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE42" fi AC_PATH_PROG([NASM], [nasm], [no]) if test "x$NASM" != "xno"; then if test x$cpu_x86_64 = xtrue; then SILC_ASSEMBLER="$NASM -O2 -felf64 $ASM_FLAGS" else SILC_ASSEMBLER="$NASM -O2 -felf $ASM_FLAGS" fi have_assembler=true fi AC_PATH_PROG([YASM], [yasm], [no]) if test "x$YASM" != "xno"; then if test x$cpu_x86_64 = xtrue; then SILC_ASSEMBLER="$YASM -Xgnu -felf64 $ASM_FLAGS" else SILC_ASSEMBLER="$YASM -Xgnu -felf $ASM_FLAGS" fi have_assembler=true fi fi AC_SUBST(SILC_ASSEMBLER) ## ## With/without checkings ## # MP library checking. First check whether user wants to use GMP and use # it if found. If not or not defined then compile the default library in the # source tree. # mp_gmp=false SAVE_LIBS="$LIBS" SAVE_CFLAGS="$CFLAGS" SAVE_LDFLAGS="$LDFLAGS" AC_MSG_CHECKING(whether to search for GMP) AC_ARG_WITH(gmp, [[ --with-gmp[=DIR] use GMP instead of SILC Math [search in DIR/lib and DIR/include]]], [ case "$withval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) if test -d "$withval/include"; then CFLAGS="$CFLAGS -I$withval/include" fi if test -d "$withval/lib"; then LDFLAGS="$LDFLAGS -L$withval/lib" fi LIBS="-lgmp $LIBS" ;; esac AC_CHECK_LIB(gmp, __gmpz_init, [ mp_gmp=true AC_DEFINE([SILC_MP_GMP], [], [GMP]) AC_MSG_RESULT(Using GMP as a MP library.) ], [ LIBS="$SAVE_LIBS" CFLAGS="$SAVE_CFLAGS" LDFLAGS="$SAVE_LDFLAGS" ]) ], AC_MSG_RESULT(no) ) AM_CONDITIONAL(SILC_MP_GMP, test x$mp_gmp = xtrue) AM_CONDITIONAL(SILC_MP_SILCMATH, test x$mp_gmp = xfalse) if test x$mp_gmp = xfalse; then AC_DEFINE([SILC_MP_SILCMATH], [], [SILCMATH]) AC_MSG_RESULT(Using SILC Math as a MP library.) fi ## ## Native WIN32 compilation under cygwin ## AC_MSG_CHECKING(whether to compile native WIN32 code) AC_ARG_WITH(win32, [ --with-win32 compile native WIN32 (MinGW) code (-mno-cygwin)], [ AC_MSG_RESULT(yes) AC_DEFINE([SILC_WIN32], [], [SILC_WIN32]) win32_support=true CFLAGS="-mno-cygwin $CFLAGS" LIBS="$LIBS -lwsock32" ], [ AC_MSG_RESULT(no) win32_support=false ]) AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue) ## ## Include configure fragments ## AD_INCLUDE_CONFIGURE ## ## Outputs and substitutions ## AC_SUBST(LIBSUBDIR) AC_SUBST(SILC_TOP_SRCDIR) AC_SUBST(LDFLAGS) AC_SUBST(LIBS) AC_SUBST(SILC_LIB_INCLUDES) AC_SUBST(__CRYPTO_PACKAGE_VERSION) # Native Symbian OS support (disabled by default) AM_CONDITIONAL(SILC_SYMBIAN, test xfalse = xtrue) # Make enable-shared aware AM_CONDITIONAL(SILC_ENABLE_SHARED, test "$enable_shared" = yes) ETCDIR=`eval echo $sysconfdir`;ETCDIR=`eval echo $ETCDIR` AC_SUBST(ETCDIR) AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR]) DOCDIR=`eval echo $docdir`;DOCDIR=`eval echo $DOCDIR` AC_SUBST(DOCDIR) AC_DEFINE_UNQUOTED([SILC_DOCDIR], "$DOCDIR", [SILC_DOCDIR]) INCLUDE_DEFINES_INT="include \$(top_srcdir)/Makefile.defines_int" AC_SUBST(INCLUDE_DEFINES_INT) DATE=`date` AC_SUBST(DATE) # # Makefile outputs # AC_CONFIG_FILES( Makefile doc/Makefile doc/crypto.in/index.html doc/crypto.in/manual.html Makefile.defines Makefile.defines_int includes/Makefile apps/Makefile win32/Makefile ) AC_CONFIG_FILES( lib/Makefile lib/silccrypt/Makefile lib/silccrypt/silccrypto.h lib/silccrypt/tests/Makefile lib/silcasn1/Makefile lib/silcasn1/tests/Makefile lib/silcacc/Makefile lib/silcacc/tests/Makefile #ifdef SILC_DIST_SSH lib/silcssh/Makefile lib/silcssh/tests/Makefile #endif SILC_DIST_SSH #ifdef SILC_DIST_PGP lib/silcpgp/Makefile lib/silcpgp/tests/Makefile #endif SILC_DIST_PGP #ifdef SILC_DIST_PKIX lib/silcpkix/Makefile lib/silcpkix/tests/Makefile #endif SILC_DIST_PKIX lib/silcskr/Makefile lib/silcskr/tests/Makefile lib/silcmath/Makefile lib/silcmath/tests/Makefile lib/sct.pc ) AC_OUTPUT ## ## Summary output ## s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir` s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir` s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir` s_includedir=`eval echo $includedir`;s_includedir=`eval echo $s_includedir` echo "" echo "SILC Crypto Toolkit configuration summary:" echo "-----------------------------------------" echo " Target host ...................: $target" echo " Compiler ......................: $CC" echo " CFLAGS ........................: $CFLAGS" echo " LDFLAGS .......................: $LDFLAGS" echo " LIBS ..........................: $LIBS" echo "" echo " Installation prefix ...........: $prefix" echo " bin directory .................: $s_bindir" echo " sbin directory ................: $s_sbindir" echo " etc directory .................: $ETCDIR" echo " man directory .................: $s_mandir" echo " doc directory .................: $DOCDIR" echo " include directory .............: $s_includedir" echo "" if test x$mp_gmp = xtrue; then echo " Arithmetic library ............: GMP" fi if test x$want_asm = xfalse; then summary_asm="no" else summary_asm="yes" fi echo " Assembler optimizations .......: $summary_asm" if test x$want_cc_optimizations = xfalse; then summary_cc_opt="no" else summary_cc_opt="yes" fi echo " Compiler optimizations ........: $summary_cc_opt" if test x$want_cpu_optimizations = xfalse; then summary_cpu_opt="no" else summary_cpu_opt="yes" fi echo " CPU feature optimizations .....: $summary_cpu_opt" threads="no" if test x$has_threads = xtrue; then threads="yes" fi echo " Multi-threads support .........: $threads" echo " Debugging enabled .............: $summary_debug" echo "" echo "Compile the sources with 'make' or 'gmake' command."