4 # Author: Pekka Riikonen <priikone@silcnet.org>
6 # Copyright (C) 2000 - 2008 Pekka Riikonen
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; version 2 of the License.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
22 AC_CONFIG_HEADERS(cryptodefs.h)
33 #ifdef SILC_DIST_INPLACE
35 #endif SILC_DIST_INPLACE
41 ## Library versioning.
44 # Do the releases and library versioning according to following rules:
46 # - If any code has changed in library, increment CRYPTO_REVISION
47 # - If API were added, removed or changed, set CRYPTO_REVISION to 0
48 # - If API were added, removed or changed, increment CRYPTO_CURRENT
49 # - If APi were added, increment CRYPTO_AGE
50 # - If API were removed, set CRYPTO_AGE to 0
53 # Base version for library.
54 CRYPTO_BASE_VERSION=1.2
57 CRYPTO_CURRENT=1 # prev = 0
58 CRYPTO_REVISION=0 # prev = 0
59 CRYPTo_AGE=0 # prev = 0
61 # Substitute the version numbers
62 AC_SUBST(CRYPTO_BASE_VERSION)
63 AC_SUBST(CRYPTO_CURRENT)
64 AC_SUBST(CRYPTO_REVISION)
72 # Default installation destination
73 AC_PREFIX_DEFAULT(/usr/local)
74 if test "x$prefix" != xNONE; then
77 silc_prefix="$ac_default_prefix"
86 # Disable all CPU feature optimizations
87 AC_MSG_CHECKING(whether to enable CPU feature optimizations)
88 AC_ARG_ENABLE(cpu-optimizations,
89 [ --disable-cpu-optimizations do not use any CPU feature optimizations],
92 AC_DEFINE([SILC_NO_CPU_OPTIMIZATIONS], [], [SILC_NO_CPU_OPTIMIZATIONS])
93 want_cpu_optimizations=false
97 want_cpu_optimizations=true
99 AM_CONDITIONAL(SILC_NO_CPU_OPTIMIZATIONS,
100 test x$want_cpu_optimizations = xfalse)
102 SILC_SYSTEM_IS_SMP(AC_DEFINE([SILC_SMP], [], [SILC_SMP]), [],
103 AC_DEFINE([SILC_SMP], [], [SILC_SMP]))
113 # All following Intels are considered 32-bit CPUs.
115 # All CPUs of today are considered i386 and i486 compatible */
119 if test "x$host_cpu" = "xi586"; then
123 if test "x$host_cpu" = "xi686"; then
128 if test "x$host_cpu" = "xi786"; then
134 # Check for specific CPU features
135 SILC_CPU_FLAG(mmx, true, AC_DEFINE([SILC_CPU_MMX], [], [SILC_CPU_MMX]), [])
136 SILC_CPU_FLAG(sse2, true, AC_DEFINE([SILC_CPU_SSE2], [], [SILC_CPU_SSE2]), [])
137 SILC_CPU_FLAG(pni, true, AC_DEFINE([SILC_CPU_SSE3], [], [SILC_CPU_SSE3]), [])
138 SILC_CPU_FLAG(ssse3, true, AC_DEFINE([SILC_CPU_SSSE3], [], [SILC_CPU_SSSE3]), [])
139 SILC_CPU_FLAG(sse4a, true, AC_DEFINE([SILC_CPU_SSE4A], [], [SILC_CPU_SSE4A]), [])
140 SILC_CPU_FLAG(sse4_1, true, AC_DEFINE([SILC_CPU_SSE41], [], [SILC_CPU_SSE41]), [])
141 SILC_CPU_FLAG(sse4_2, true, AC_DEFINE([SILC_CPU_SSE42], [], [SILC_CPU_SSE42]), [])
142 SILC_CPU_FLAG(sse5, true, AC_DEFINE([SILC_CPU_SSE5], [], [SILC_CPU_SSE5]), [])
145 # Intel IA-64, 64-bit CPU (not x86_64 compatible)
147 AC_DEFINE([SILC_IA64], [], [SILC_IA64])
151 # AMD/Intel x86_64, 64-bit CPU
155 # Check for specific CPU features
156 SILC_CPU_FLAG(mmx, true, AC_DEFINE([SILC_CPU_MMX], [], [SILC_CPU_MMX]), [])
157 SILC_CPU_FLAG(sse2, true, AC_DEFINE([SILC_CPU_SSE2], [], [SILC_CPU_SSE2]), [])
158 SILC_CPU_FLAG(pni, true, AC_DEFINE([SILC_CPU_SSE3], [], [SILC_CPU_SSE3]), [])
159 SILC_CPU_FLAG(ssse3, true, AC_DEFINE([SILC_CPU_SSSE3], [], [SILC_CPU_SSSE3]), [])
160 SILC_CPU_FLAG(sse4a, true, AC_DEFINE([SILC_CPU_SSE4A], [], [SILC_CPU_SSE4A]), [])
161 SILC_CPU_FLAG(sse4_1, true, AC_DEFINE([SILC_CPU_SSE41], [], [SILC_CPU_SSE41]), [])
162 SILC_CPU_FLAG(sse4_2, true, AC_DEFINE([SILC_CPU_SSE42], [], [SILC_CPU_SSE42]), [])
163 SILC_CPU_FLAG(sse5, true, AC_DEFINE([SILC_CPU_SSE5], [], [SILC_CPU_SSE5]), [])
166 # PowerPC, 32-bit and 64-bit CPUs
171 AM_CONDITIONAL(SILC_I386, test x$cpu_i386 = xtrue)
172 AM_CONDITIONAL(SILC_I486, test x$cpu_i486 = xtrue)
173 AM_CONDITIONAL(SILC_I586, test x$cpu_i586 = xtrue)
174 AM_CONDITIONAL(SILC_I686, test x$cpu_i686 = xtrue)
175 AM_CONDITIONAL(SILC_7686, test x$cpu_i786 = xtrue)
176 AM_CONDITIONAL(SILC_X86_64, test x$cpu_x86_64 = xtrue)
177 AM_CONDITIONAL(SILC_POWERPC, test x$cpu_ppc = xtrue)
178 AM_CONDITIONAL(SILC_IA64, test x$cpu_ia64 = xtrue)
180 if test x$want_cpu_optimizations = xtrue; then
181 # Set some compiler options based on CPU
182 if test "x$CC" = "xicc"; then
184 if test x$x_have_cpu_sse4_1 = xtrue; then
185 SILC_ADD_CFLAGS(-axS)
187 if test x$x_have_cpu_sse4_2 = xtrue; then
188 SILC_ADD_CFLAGS(-axS)
190 if test x$x_have_cpu_ssse3 = xtrue; then
191 SILC_ADD_CFLAGS(-axT)
192 elif test x$x_have_cpu_pni = xtrue; then
193 SILC_ADD_CFLAGS(-axP)
194 elif test x$x_have_cpu_sse2 = xtrue; then
195 SILC_ADD_CFLAGS(-axW)
199 if test x$x_have_cpu_sse2 = xtrue; then
200 SILC_ADD_CFLAGS(-msse2)
202 if test x$x_have_cpu_pni = xtrue; then
203 SILC_ADD_CFLAGS(-msse3)
205 if test x$x_have_cpu_ssse3 = xtrue; then
206 SILC_ADD_CFLAGS(-mssse3)
208 if test x$x_have_cpu_sse4_1 = xtrue; then
209 SILC_ADD_CFLAGS(-msse4)
211 if test x$x_have_cpu_sse4_2 = xtrue; then
212 SILC_ADD_CFLAGS(-msse4)
219 ## Put here any platform specific stuff
224 CFLAGS=`echo $CFLAGS -D_GNU_SOURCE`
242 # More header checking
244 AC_CHECK_HEADERS(unistd.h assert.h time.h fcntl.h)
245 AC_CHECK_HEADERS(sys/types.h sys/times.h sys/time.h sys/resource.h)
247 # Check for big-endian machines
252 ## Compiler and compiler flag checks
255 # Disable all compiler optimizations
256 AC_MSG_CHECKING(whether to enable compiler optimizations)
257 AC_ARG_ENABLE(optimizations,
258 [ --disable-optimizations do not use any compiler optimizations],
261 AC_DEFINE([SILC_NO_CC_OPTIMIZATIONS], [], [SILC_NO_CC_OPTIMIZATIONS])
262 want_cc_optimizations=false
266 want_cc_optimizations=true
268 AM_CONDITIONAL(SILC_NO_CC_OPTIMIZATIONS, test x$want_cc_optimizations = xfalse)
271 # GCC specific options
272 if test "x$summary_debug" = "xyes"; then
277 SILC_ADD_CFLAGS(-Wall -finline-functions)
278 SILC_ADD_CFLAGS(-Wno-pointer-sign)
293 # Intel C++ Compiler flags
294 if test "x$CC" = "xicc"; then
295 SILC_ADD_CFLAGS(-restrict)
296 SILC_ADD_CFLAGS(-finline-functions)
298 # Don't define __GNUC__ except for system includes
299 SILC_ADD_CFLAGS(-gcc-sys)
303 if test x$want_cc_optimizations = xtrue; then
305 # GCC specific options
306 if test "x$summary_debug" = "xyes"; then
315 SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O))
318 SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O))
321 SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O))
327 # Workaround a bug in GCC 2.x which causes memory exhaustion
328 # when compiling sha1 with optimizations on UltraSPARC.
330 if test "$GCC" -a "$host_cpu" = "sparc64"; then
331 AC_MSG_CHECKING(whether to enable GCC 2.x workaround for SHA1)
334 #if defined(__sparc64__) && (__GNUC__ == 2)
350 ## Function and libary checking
352 AC_CHECK_FUNCS(times clock time)
353 AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid getrusage setsid)
355 cryptover=`echo $VERSION | sed 's/\./ /g'`
361 if test $maj -eq 0; then
365 if test $min -eq 0; then
369 if test $bld -eq 0; then
374 __CRYPTO_PACKAGE_VERSION="#define __SILC_CRYPTO_VERSION SILC_VERSION($maj,$min,$bld)"
378 ## Enable/disable checking
381 #ifdef SILC_DIST_INPLACE
383 # Profiling options (never delivered to distributions)
385 AC_MSG_CHECKING(whether to enable gprof)
387 [ --enable-gprof enable gprof profiling],
389 case "${enableval}" in
404 AC_MSG_CHECKING(whether to enable gcov)
406 [ --enable-gcov enable gcov],
408 case "${enableval}" in
411 SILC_ADD_CFLAGS(-fprofile-arcs)
422 #endif SILC_DIST_INPLACE
425 AC_MSG_CHECKING(whether to enable debugging)
428 [ --enable-debug enable debugging],
430 case "${enableval}" in
444 # Disable all assembler optimizations
445 AC_MSG_CHECKING(whether to enable assembler optimizations)
447 [ --disable-asm do not use assembler optimizations],
450 AC_DEFINE([SILC_NO_ASM], [], [SILC_NO_ASM])
457 AM_CONDITIONAL(SILC_NO_ASM, test x$want_asm = xfalse)
459 # Check for assembler
462 if test x$want_asm = xtrue; then
464 if test x$x_have_cpu_sse2 = xtrue; then
465 ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE2"
467 if test x$x_have_cpu_pni = xtrue; then
468 ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE3"
470 if test x$x_have_cpu_ssse3 = xtrue; then
471 ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSSE3"
473 if test x$x_have_cpu_sse4_1 = xtrue; then
474 ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE41"
476 if test x$x_have_cpu_sse4_2 = xtrue; then
477 ASM_FLAGS="$ASM_FLAGS -D SILC_CPU_SSE42"
480 AC_PATH_PROG([NASM], [nasm], [no])
481 if test "x$NASM" != "xno"; then
482 if test x$cpu_x86_64 = xtrue; then
483 SILC_ASSEMBLER="$NASM -O2 -felf64 $ASM_FLAGS"
485 SILC_ASSEMBLER="$NASM -O2 -felf $ASM_FLAGS"
490 AC_PATH_PROG([YASM], [yasm], [no])
491 if test "x$YASM" != "xno"; then
492 if test x$cpu_x86_64 = xtrue; then
493 SILC_ASSEMBLER="$YASM -Xgnu -felf64 $ASM_FLAGS"
495 SILC_ASSEMBLER="$YASM -Xgnu -felf $ASM_FLAGS"
500 AC_SUBST(SILC_ASSEMBLER)
503 ## With/without checkings
507 LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS"
509 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silccrypt"
510 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcasn1"
511 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcacc"
512 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcskr"
513 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcmath"
515 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcssh"
518 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcpgp"
520 #ifdef SILC_DIST_PKIX
521 SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcpkix"
522 #endif SILC_DIST_PKIX
524 # SILC Runtime Toolkit checking
525 AC_ARG_WITH(srt-includes,
526 [ --with-srt-includes=DIR SILC Runtime Toolkit includes [search in DIR]],
527 [ac_srt_includes="$withval"], [ac_srt_includes="no"])
528 AC_ARG_WITH(srt-libs,
529 [ --with-srt-libs=DIR SILC Runtime Toolkit libraries [search in DIR]],
530 [ac_srt_libs="$withval"], [ac_srt_libs="no"])
532 if test -n "$with_srt_includes" || test -n "$with_srt_libs"; then
533 # Manually provided libs
534 if test "$ac_srt_includes" != "no"; then
535 SILC_LIB_INCLUDES="-I$ac_srt_includes"
537 if test "$ac_srt_libs" != "no"; then
538 LDFLAGS="-L$ac_srt_libs $LDFLAGS"
541 # Check libs to link against
542 f=`$EGREP __SILC_HAVE_PTHREAD $ac_srt_includes/silc.h`
543 if test -n "$f"; then
544 LIBS="$LIBS -lpthread"
549 PKG_CHECK_MODULES(SRT, [srt >= 1.2])
550 LIBS="$SRT_LIBS $LIBS"
551 CFLAGS="$CFLAGS $SRT_CFLAGS"
554 # MP library checking. First check whether user wants to use GMP and use
555 # it if found. If not or not defined then compile the default library in the
560 SAVE_CFLAGS="$CFLAGS"
561 SAVE_LDFLAGS="$LDFLAGS"
562 AC_MSG_CHECKING(whether to search for GMP)
564 [[ --with-gmp[=DIR] use GMP instead of SILC Math [search in DIR/lib and DIR/include]]],
573 if test -d "$withval/include"; then
574 CFLAGS="$CFLAGS -I$withval/include"
576 if test -d "$withval/lib"; then
577 LDFLAGS="$LDFLAGS -L$withval/lib"
584 AC_CHECK_LIB(gmp, __gmpz_init,
587 AC_DEFINE([SILC_MP_GMP], [], [GMP])
588 AC_MSG_RESULT(Using GMP as a MP library.)
592 CFLAGS="$SAVE_CFLAGS"
593 LDFLAGS="$SAVE_LDFLAGS"
599 AM_CONDITIONAL(SILC_MP_GMP, test x$mp_gmp = xtrue)
600 AM_CONDITIONAL(SILC_MP_SILCMATH, test x$mp_gmp = xfalse)
601 if test x$mp_gmp = xfalse; then
602 AC_DEFINE([SILC_MP_SILCMATH], [], [SILCMATH])
603 AC_MSG_RESULT(Using SILC Math as a MP library.)
608 ## Native WIN32 compilation under cygwin
610 AC_MSG_CHECKING(whether to compile native WIN32 code)
612 [ --with-win32 compile native WIN32 (MinGW) code (-mno-cygwin)],
615 AC_DEFINE([SILC_WIN32], [], [SILC_WIN32])
617 CFLAGS="-mno-cygwin $CFLAGS"
618 LIBS="$LIBS -lwsock32"
624 AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue)
628 ## Include configure fragments
634 ## Outputs and substitutions
638 AC_SUBST(SILC_TOP_SRCDIR)
641 AC_SUBST(SILC_LIB_INCLUDES)
642 AC_SUBST(__CRYPTO_PACKAGE_VERSION)
644 # Native Symbian OS support (disabled by default)
645 AM_CONDITIONAL(SILC_SYMBIAN, test xfalse = xtrue)
647 # Make enable-shared aware
648 AM_CONDITIONAL(SILC_ENABLE_SHARED, test "$enable_shared" = yes)
650 ETCDIR=`eval echo $sysconfdir`;ETCDIR=`eval echo $ETCDIR`
652 AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR])
654 DOCDIR=`eval echo $docdir`;DOCDIR=`eval echo $DOCDIR`
656 AC_DEFINE_UNQUOTED([SILC_DOCDIR], "$DOCDIR", [SILC_DOCDIR])
658 INCLUDE_DEFINES_INT="include \$(top_srcdir)/Makefile.defines_int"
659 AC_SUBST(INCLUDE_DEFINES_INT)
671 doc/crypto.in/index.html
672 doc/crypto.in/manual.html
682 lib/silccrypt/Makefile
683 lib/silccrypt/silccrypto.h
684 lib/silccrypt/tests/Makefile
685 lib/silcasn1/Makefile
686 lib/silcasn1/tests/Makefile
688 lib/silcacc/tests/Makefile
691 lib/silcssh/tests/Makefile
695 lib/silcpgp/tests/Makefile
697 #ifdef SILC_DIST_PKIX
698 lib/silcpkix/Makefile
699 lib/silcpkix/tests/Makefile
700 #endif SILC_DIST_PKIX
702 lib/silcskr/tests/Makefile
703 lib/silcmath/Makefile
704 lib/silcmath/tests/Makefile
714 s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir`
715 s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir`
716 s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir`
717 s_includedir=`eval echo $includedir`;s_includedir=`eval echo $s_includedir`
720 echo "SILC Crypto Toolkit configuration summary:"
721 echo "-----------------------------------------"
722 echo " Target host ...................: $target"
723 echo " Compiler ......................: $CC"
724 echo " CFLAGS ........................: $CFLAGS"
725 echo " LDFLAGS .......................: $LDFLAGS"
726 echo " LIBS ..........................: $LIBS"
728 echo " Installation prefix ...........: $prefix"
729 echo " bin directory .................: $s_bindir"
730 echo " sbin directory ................: $s_sbindir"
731 echo " etc directory .................: $ETCDIR"
732 echo " man directory .................: $s_mandir"
733 echo " doc directory .................: $DOCDIR"
734 echo " include directory .............: $s_includedir"
737 if test x$mp_gmp = xtrue; then
738 echo " Arithmetic library ............: GMP"
741 if test x$want_asm = xfalse; then
746 echo " Assembler optimizations .......: $summary_asm"
748 if test x$want_cc_optimizations = xfalse; then
753 echo " Compiler optimizations ........: $summary_cc_opt"
755 if test x$want_cpu_optimizations = xfalse; then
758 summary_cpu_opt="yes"
760 echo " CPU feature optimizations .....: $summary_cpu_opt"
763 if test x$has_threads = xtrue; then
766 echo " Multi-threads support .........: $threads"
767 echo " Debugging enabled .............: $summary_debug"
769 echo "Compile the sources with 'make' or 'gmake' command."