Revert "Merge branch 'upstream' into tizen"
[platform/upstream/nettle.git] / configure.ac
1 dnl -*- mode: shell-script; sh-indentation: 2; -*-
2
3 dnl Process this file with autoconf to produce a configure script.
4
5 AC_INIT([nettle], [2.7.1], [nettle-bugs@lists.lysator.liu.se])
6 AC_PREREQ(2.61)
7 AC_CONFIG_SRCDIR([arcfour.c])
8 # Needed to stop autoconf from looking for files in parent directories.
9 AC_CONFIG_AUX_DIR([.])
10
11 AC_CONFIG_HEADER([config.h])
12
13 LIBNETTLE_MAJOR=4
14 LIBNETTLE_MINOR=7
15
16 LIBHOGWEED_MAJOR=2
17 LIBHOGWEED_MINOR=5
18
19 AC_CANONICAL_HOST
20
21 # Command line options
22 AC_ARG_WITH(include-path,
23   AC_HELP_STRING([--with-include-path], [A colon-separated list of directories to search for include files]),,
24   [with_include_path=''])
25
26 if test x$with_include_path != x ; then
27   CPPFLAGS="$CPPFLAGS -I`echo $with_include_path | sed 's/:/ -I/g'`"
28 fi
29
30 AC_ARG_WITH(lib-path,
31   AC_HELP_STRING([--with-lib-path], [A colon-separated list of directories to search for libraries]),,
32   [with_lib_path=''])
33
34 if test x$with_lib_path != x ; then
35   LDFLAGS="$LDFLAGS -L`echo $with_lib_path | sed 's/:/ -L/g'`"
36 fi
37
38 AC_ARG_ENABLE(public-key,
39   AC_HELP_STRING([--disable-public-key], [Disable public key algorithms]),,
40   [enable_public_key=yes])
41
42 AC_ARG_ENABLE(assembler,
43   AC_HELP_STRING([--disable-assembler],[Disable assembler code]),,
44   [enable_assembler=yes])
45
46 AC_ARG_ENABLE(static,
47   AC_HELP_STRING([--disable-static], [Do not build any static library]),,
48   [enable_static=yes])
49
50 AC_ARG_ENABLE(shared,
51   AC_HELP_STRING([--disable-shared], [Do not build any shared library]),,
52   [enable_shared=yes])
53
54 AC_ARG_ENABLE(pic,
55   AC_HELP_STRING([--disable-pic],
56   [Do not try to compile library files as position independent code]),,
57   [enable_pic=yes])
58
59 AC_ARG_ENABLE(openssl,
60   AC_HELP_STRING([--disable-openssl], [Do not include openssl glue in the benchmark program]),,
61   [enable_openssl=yes])
62
63 AC_ARG_ENABLE(gcov,
64   AC_HELP_STRING([--enable-gcov], [Instrument for gcov (requires a modern gcc)]),,
65   [enable_gcov=no])
66
67 AC_ARG_ENABLE(documentation,
68   AC_HELP_STRING([--disable-documentation], [Omit building and installing the documentation. (default=auto)]),,
69   [enable_documentation=auto])
70
71 AC_ARG_ENABLE(arm-neon,
72   AC_HELP_STRING([--enable-arm-neon], [Enable ARM Neon assembly. (default=auto)]),,
73   [enable_arm_neon=auto])
74
75 LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \
76     `echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \
77     /usr/local/lib /sw/local/lib /sw/lib \
78     /usr/gnu/lib /opt/gnu/lib /sw/gnu/lib /usr/freeware/lib /usr/pkg/lib])
79
80 # Checks for programs.
81 AC_PROG_CC
82
83 # When $CC foo.c -o foo creates both foo and foo.exe, autoconf picks
84 # up the foo.exe and sets exeext to .exe. That is correct for cygwin,
85 # which has some kind of magic link from foo to foo.exe, but not for
86 # rntcl. A better check for the cygwin case would check if the
87 # contents of foo and foo.exe are equal; in the rntcl case, foo is a
88 # sh script, and foo.exe is a windows executable.
89
90 if test "x$CC" = xrntcl ; then
91     AC_MSG_NOTICE([Compiling with rntcl; clearing EXEEXT and disabling assembler])
92     ac_exeext=''
93     ac_cv_exeext=''
94     EXEEXT=''
95     enable_assembler=no
96 fi
97
98 # Used by the testsuite only
99 AC_PROG_CXX
100
101 AC_LANG_PUSH(C++)
102 AC_TRY_COMPILE([],[return 0;],[IF_CXX=''], [IF_CXX='#'])
103 AC_SUBST([IF_CXX])
104 AC_LANG_POP
105
106 AC_PROG_MAKE_SET
107 AC_PROG_RANLIB
108 AC_CHECK_TOOL(NM, nm, strings)
109 # Used only for the GNU-stack configure test.
110 AC_CHECK_TOOL(OBJDUMP, objdump, false)
111 AC_CHECK_TOOL(AR, ar, false)
112
113 if test "x$ac_cv_prog_cc_stdc" = xno ; then
114   AC_ERROR([the C compiler doesn't handle ANSI-C]) #'
115 fi
116
117 AC_PROG_INSTALL
118
119 # According to the autoconf manual, needs install-sh from
120 # autoconf-2.60 or automake-1.10 to avoid races.
121 AC_PROG_MKDIR_P
122
123 AC_PROG_LN_S
124
125 # Compiler tests for the build system
126 GMP_PROG_CC_FOR_BUILD
127 GMP_PROG_EXEEXT_FOR_BUILD
128
129 LSH_DEPENDENCY_TRACKING
130
131 if test x$enable_dependency_tracking = xyes ; then
132   # Since the makefiles use include to get the dependency files, we must
133   # make sure that the files exist. We generate some more files than are
134   # actually needed.
135
136   AC_CONFIG_COMMANDS([dummy-dep-files],
137   [(cd "$srcdir" && find . '(' -name '*.c' -o -name '*.cxx' ')' -print) \
138  | sed 's/\.c\(xx\)\{0,1\}$//' | (while read f; do echo > "$f.o.d"; echo > "$f.po.d"; done)
139 ])
140 fi
141
142 # Figure out ABI. Currently, configurable only by setting CFLAGS.
143 ABI=standard
144
145 case "$host_cpu" in
146   [x86_64 | amd64])
147     AC_TRY_COMPILE([
148 #if defined(__x86_64__) || defined(__arch64__)
149 #error 64-bit x86
150 #endif
151     ], [], [
152       ABI=32
153     ], [
154       ABI=64
155     ])
156     ;;
157   *sparc*)
158     AC_TRY_COMPILE([
159 #if defined(__sparcv9) || defined(__arch64__)
160 #error 64-bit sparc
161 #endif
162     ], [], [
163       ABI=32
164     ], [
165       ABI=64
166     ])
167     ;;
168 esac
169
170 if test "x$ABI" != xstandard ; then
171   AC_MSG_NOTICE([Compiler uses $ABI-bit ABI. To change, set CC.])
172   if test "$libdir" = '${exec_prefix}/lib' ; then
173     # Try setting a better default
174     case "$host_cpu:$host_os:$ABI" in
175       *:solaris*:32|*:sunos*:32)
176         libdir='${exec_prefix}/lib'
177         ;;
178       *:solaris*:64|*:sunos*:64)
179         libdir='${exec_prefix}/lib/64'
180         ;;
181       # Linux conventions are a mess... According to the Linux File
182       # Hierarchy Standard, all architectures except IA64 puts 32-bit
183       # libraries in lib, and 64-bit in lib64. Some distributions,
184       # e.g., Fedora and Gentoo, adhere to this standard, while at
185       # least Debian has decided to put 64-bit libraries in lib and
186       # 32-bit libraries in lib32.
187       
188       # We try to figure out the convention, except if we're cross
189       # compiling. We use lib${ABI} if /usr/lib${ABI} exists and
190       # appears to not be a symlink to a different name.
191       *:linux*:32|*:linux*:64)
192         if test "$cross_compiling" = yes ; then
193           AC_MSG_WARN([Cross compiling for linux. Can't guess if libraries go in lib${ABI} or lib.]); dnl '
194         else
195           # The dash builtin pwd tries to be "helpful" and remember
196           # symlink names. Use -P option, and hope it's portable enough.
197           test -d /usr/lib${ABI} \
198             && (cd /usr/lib${ABI} && pwd -P | grep >/dev/null "/lib${ABI}"'$') \
199             && libdir='${exec_prefix}/'"lib${ABI}"
200         fi
201         ;;
202       # On freebsd, it seems 32-bit libraries are in lib32,
203       # and 64-bit in lib. Don't know about "kfreebsd", does
204       # it follow the Linux fhs conventions?
205       *:freebsd*:32)
206         libdir='${exec_prefix}/lib32'
207         ;;
208       *:freebsd*:64)
209         libdir='${exec_prefix}/lib'
210         ;;
211       *)
212         AC_MSG_WARN([Don't know where to install $ABI-bit libraries on this system.]); dnl '
213
214     esac
215     AC_MSG_NOTICE([Libraries to be installed in $libdir.])
216   fi
217 fi
218
219 # Select assembler code
220 asm_path=
221 if test "x$enable_assembler" = xyes ; then
222   case "$host_cpu" in
223     [i?86* | k[5-8]* | pentium* | athlon])
224       asm_path=x86
225       ;;
226     [x86_64 | amd64])
227       if test "$ABI" = 64 ; then
228         asm_path=x86_64
229       else
230         asm_path=x86
231       fi
232       ;;
233     *sparc*)
234       if test "$ABI" = 64 ; then
235         asm_path=sparc64
236       else
237         asm_path=sparc32
238       fi
239       ;;
240     armv6* | armv7*)
241       NETTLE_CHECK_ARM_NEON
242
243       asm_path="arm/v6 arm"
244       
245       if test "x$enable_arm_neon" = xyes ; then
246         asm_path="arm/neon $asm_path"
247       fi
248       ;;
249     arm*)
250       asm_path=arm
251       ;;
252     *)
253       enable_assembler=no
254       ;;
255   esac
256 fi
257
258 # Files which replace a C source file (or otherwise don't correspond
259 # to a new object file).
260 asm_replace_list="aes-encrypt-internal.asm aes-decrypt-internal.asm \
261                 arcfour-crypt.asm camellia-crypt-internal.asm \
262                 md5-compress.asm memxor.asm \
263                 salsa20-crypt.asm salsa20-core-internal.asm \
264                 serpent-encrypt.asm serpent-decrypt.asm \
265                 sha1-compress.asm sha256-compress.asm sha512-compress.asm \
266                 sha3-permute.asm umac-nh.asm umac-nh-n.asm machine.m4"
267
268 # Assembler files which generate additional object files if they are used.
269 asm_optional_list=""
270
271 if test "x$enable_public_key" = "xyes" ; then
272   asm_optional_list="ecc-192-modp.asm ecc-224-modp.asm ecc-256-redc.asm \
273       ecc-384-modp.asm ecc-521-modp.asm"
274 fi
275
276 OPT_ASM_SOURCES=""
277
278 asm_file_list=""
279
280 if test "x$enable_assembler" = xyes ; then
281   if test -n "$asm_path"; then
282     AC_MSG_NOTICE([Looking for assembler files in $asm_path.])
283     for tmp_f in $asm_replace_list ; do
284       for asm_dir in $asm_path ; do
285         if test -f "$srcdir/$asm_dir/$tmp_f"; then
286           asm_file_list="$asm_file_list $tmp_f"
287           AC_CONFIG_LINKS($tmp_f:$asm_dir/$tmp_f)
288           break
289         fi
290       done
291     done
292     dnl Workaround for AC_CONFIG_LINKS, which complains if we use the
293     dnl same destination argument $tmp_f multiple times.
294     for tmp_o in $asm_optional_list ; do
295       for asm_dir in $asm_path ; do
296         if test -f "$srcdir/$asm_dir/$tmp_o"; then
297           asm_file_list="$asm_file_list $tmp_o"
298           AC_CONFIG_LINKS($tmp_o:$asm_dir/$tmp_o)
299           while read tmp_func ; do
300             AC_DEFINE_UNQUOTED(HAVE_NATIVE_$tmp_func)
301             eval HAVE_NATIVE_$tmp_func=yes
302           done <<EOF
303 [`sed -n 's/[^  ]*PROLOGUE(_*\(nettle_\)*\([^)]*\)).*$/\2/p' < "$srcdir/$asm_dir/$tmp_o"`]
304 EOF
305           OPT_ASM_SOURCES="$OPT_ASM_SOURCES $tmp_o"
306           break
307         fi
308       done
309     done        
310     if test -z "$asm_file_list"; then
311       enable_assembler=no
312       AC_MSG_WARN([No assembler files found.])
313     fi
314   fi
315 fi
316
317 AC_SUBST([OPT_ASM_SOURCES])
318
319 AH_VERBATIM([HAVE_NATIVE],
320 [/* Define to 1 each of the following for which a native (ie. CPU specific)
321     implementation of the corresponding routine exists.  */
322 #undef HAVE_NATIVE_ecc_192_modp
323 #undef HAVE_NATIVE_ecc_192_redc
324 #undef HAVE_NATIVE_ecc_224_modp
325 #undef HAVE_NATIVE_ecc_224_redc
326 #undef HAVE_NATIVE_ecc_256_modp
327 #undef HAVE_NATIVE_ecc_256_redc
328 #undef HAVE_NATIVE_ecc_384_modp
329 #undef HAVE_NATIVE_ecc_384_redc
330 #undef HAVE_NATIVE_ecc_521_modp
331 #undef HAVE_NATIVE_ecc_521_redc])
332
333 # Besides getting correct dependencies, the explicit rules also tell
334 # make that the .s files "ought to exist", so they are preferred over
335 # .c files.
336 AC_CONFIG_COMMANDS([asm.d],
337     [ for f in $asm_file_list
338       do
339         case $f in
340           *.asm)
341             echo "`basename $f .asm`.s : $f "'$(srcdir)/asm.m4 machine.m4 config.m4'
342             ;;
343         esac
344       done > asm.d
345     ],
346     [ asm_file_list="$asm_file_list" ]
347 )
348
349 LSH_CCPIC
350
351 SHLIBCFLAGS="$CCPIC"
352
353 IF_DLL='#'
354 LIBNETTLE_FILE_SRC='$(LIBNETTLE_FORLINK)'
355 LIBHOGWEED_FILE_SRC='$(LIBHOGWEED_FORLINK)'
356 EMULATOR=''
357 W64_ABI=no
358
359 case "$host_os" in
360   mingw32*|cygwin*)
361     # The actual DLLs, e.g. libnettle-$major-$minor.dll, are normally
362     # installed into the bin dir (or more exactly $libdir/../bin, for
363     # automake), while libnettle.dll.a, which is a stub file for
364     # linking to the DLL, is installed into the lib dir.
365     case "$host_os" in
366       mingw32*)
367         LIBNETTLE_FORLINK='libnettle-$(LIBNETTLE_MAJOR)-$(LIBNETTLE_MINOR).dll'
368         LIBHOGWEED_FORLINK='libhogweed-$(LIBHOGWEED_MAJOR)-$(LIBHOGWEED_MINOR).dll'
369         ;;
370       cygwin*)
371         LIBNETTLE_FORLINK='cygnettle-$(LIBNETTLE_MAJOR)-$(LIBNETTLE_MINOR).dll'
372         LIBHOGWEED_FORLINK='cyghogweed-$(LIBHOGWEED_MAJOR)-$(LIBHOGWEED_MINOR).dll'
373         ;;
374     esac
375     if test "x$cross_compiling" = xyes ; then
376         case "$ABI" in
377             64)
378                 EMULATOR=wine64
379                 ;;
380             *)
381                 EMULATOR=wine
382                 ;;
383         esac
384     fi
385     if test "x$ABI" = x64 ; then
386         W64_ABI=yes
387     fi
388     LIBNETTLE_SONAME=''
389     LIBNETTLE_FILE='libnettle.dll.a'
390     LIBNETTLE_FILE_SRC='$(LIBNETTLE_FILE)'
391     LIBNETTLE_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,--out-implib=$(LIBNETTLE_FILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
392     LIBNETTLE_LIBS='-Wl,--no-whole-archive $(LIBS)'
393
394     LIBHOGWEED_SONAME=''
395     LIBHOGWEED_FILE='libhogweed.dll.a'
396     LIBHOGWEED_FILE_SRC='$(LIBHOGWEED_FILE)'
397     LIBHOGWEED_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,--out-implib=$(LIBHOGWEED_FILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
398     LIBHOGWEED_LIBS='-Wl,--no-whole-archive $(LIBS) libnettle.dll.a'
399     IF_DLL=''
400     ;;
401   darwin*)
402     LIBNETTLE_FORLINK=libnettle.dylib
403     LIBNETTLE_SONAME='libnettle.$(LIBNETTLE_MAJOR).dylib'
404     LIBNETTLE_FILE='libnettle.$(LIBNETTLE_MAJOR).$(LIBNETTLE_MINOR).dylib'
405     LIBNETTLE_LINK='$(CC) $(CFLAGS) -dynamiclib $(LDFLAGS) -install_name ${libdir}/$(LIBNETTLE_SONAME) -compatibility_version $(LIBNETTLE_MAJOR) -current_version $(LIBNETTLE_MAJOR).$(LIBNETTLE_MINOR)'
406     LIBNETTLE_LIBS=''
407
408     LIBHOGWEED_FORLINK=libhogweed.dylib
409     LIBHOGWEED_SONAME='libhogweed.$(LIBHOGWEED_MAJOR).dylib'
410     LIBHOGWEED_FILE='libhogweed.$(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR).dylib'
411     LIBHOGWEED_LINK='$(CC) $(CFLAGS) -dynamiclib -L. $(LDFLAGS) -install_name ${libdir}/$(LIBHOGWEED_SONAME) -compatibility_version $(LIBHOGWEED_MAJOR) -current_version $(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR)'
412     LIBHOGWEED_LIBS='-lnettle -lgmp'
413     ;;
414   solaris*)
415     # Sun's ld uses -h to set the soname, and this option is passed
416     # through by both Sun's compiler and gcc. Might not work with GNU
417     # ld, but it's unusual to use GNU ld on Solaris.
418     LIBNETTLE_FORLINK=libnettle.so
419     LIBNETTLE_SONAME='$(LIBNETTLE_FORLINK).$(LIBNETTLE_MAJOR)'
420     LIBNETTLE_FILE='$(LIBNETTLE_SONAME).$(LIBNETTLE_MINOR)'
421     LIBNETTLE_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -G -h $(LIBNETTLE_SONAME)'
422     LIBNETTLE_LIBS=''
423
424     LIBHOGWEED_FORLINK=libhogweed.so
425     LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)'
426     LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)'
427     LIBHOGWEED_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -L. -G -h $(LIBHOGWEED_SONAME)'
428     LIBHOGWEED_LIBS='-lnettle -lgmp'
429     ;;
430   *)
431     LIBNETTLE_FORLINK=libnettle.so
432     LIBNETTLE_SONAME='$(LIBNETTLE_FORLINK).$(LIBNETTLE_MAJOR)'
433     LIBNETTLE_FILE='$(LIBNETTLE_SONAME).$(LIBNETTLE_MINOR)'
434     LIBNETTLE_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname=$(LIBNETTLE_SONAME)'
435     LIBNETTLE_LIBS=''
436
437     LIBHOGWEED_FORLINK=libhogweed.so
438     LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)'
439     LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)'
440     LIBHOGWEED_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -L. -shared -Wl,-soname=$(LIBHOGWEED_SONAME)'
441     # Requested by debian, to make linking with only -lhogweed work
442     # (does not work in general, e.g., with static linking all of
443     # -lhogweed -lgmp -lnettle are still required). Also makes dlopen
444     # of libhogweed.so work, without having to use RTLD_GLOBAL.
445     # Depends on -L. above, to locate nettle.so.
446     LIBHOGWEED_LIBS='-lnettle -lgmp'
447     ;;
448 esac
449
450 if test "x$enable_pic" = xyes; then
451   CCPIC_MAYBE="$CCPIC"
452 else
453   CCPIC_MAYBE=''
454 fi
455 AC_SUBST([CCPIC_MAYBE])
456
457 ASM_SYMBOL_PREFIX=''
458 ASM_ELF_STYLE='no'
459 # GNU as default is to use @
460 ASM_TYPE_FUNCTION='@function'
461 ASM_TYPE_PROGBITS='@progbits'
462 ASM_MARK_NOEXEC_STACK=''
463 ASM_ALIGN_LOG=''
464
465 if test x$enable_assembler = xyes ; then
466   AC_CACHE_CHECK([if globals are prefixed by underscore],
467   nettle_cv_asm_underscore,
468   [ # Default is no underscore
469     nettle_cv_asm_underscore=no
470     AC_COMPILE_IFELSE(
471       [AC_LANG_SOURCE([int a_global_symbol;])],
472       [ $NM conftest.$OBJEXT >conftest.out
473         if grep _a_global_symbol conftest.out >/dev/null ; then
474           nettle_cv_asm_underscore=yes
475         elif grep a_global_symbol conftest.out >/dev/null ; then
476           nettle_cv_asm_underscore=no
477         else
478           AC_MSG_WARN([nm doesn't list a_global_symbol at all])
479         fi],
480       [AC_MSG_WARN([test program with a single global could not be compiled!?])])])
481   if test x$nettle_cv_asm_underscore = xyes ; then
482     ASM_SYMBOL_PREFIX='_'
483   fi
484
485   AC_CACHE_CHECK([for ELF-style .type,%function pseudo-ops],
486     [nettle_cv_asm_type_percent_function],
487     [GMP_TRY_ASSEMBLE([
488 .text
489 .globl foo
490 .type foo,%function
491 foo:
492 .Lend:
493
494 .size foo, .Lend - foo
495 ],
496        [nettle_cv_asm_type_percent_function=yes],
497        [nettle_cv_asm_type_percent_function=no])])
498
499 dnl Needs double quote for the # character
500   AC_CACHE_CHECK([[for ELF-style .type,#function pseudo-ops]],
501     [nettle_cv_asm_type_hash_function],
502     [GMP_TRY_ASSEMBLE([
503 .text
504 .globl foo
505 .type foo,#function
506 foo:
507 .Lend:
508
509 .size foo, .Lend - foo
510 ],
511        [nettle_cv_asm_type_hash_function=yes],
512        [nettle_cv_asm_type_hash_function=no])])
513
514   if test x$nettle_cv_asm_type_percent_function = xyes ; then
515     ASM_ELF_STYLE='yes'
516     ASM_TYPE_FUNCTION='%function'
517     ASM_TYPE_PROGBITS='%progbits'
518   else
519     if test x$nettle_cv_asm_type_hash_function = xyes ; then
520       ASM_ELF_STYLE='yes'
521       ASM_TYPE_FUNCTION='#function'
522       ASM_TYPE_PROGBITS='#progbits'
523     fi
524   fi
525
526   AC_CACHE_CHECK([if we should use a .note.GNU-stack section],
527   nettle_cv_asm_gnu_stack,
528   [ # Default
529     nettle_cv_asm_gnu_stack=no
530
531     cat >conftest.c <<EOF
532 int foo() { return 0; }
533 EOF
534     nettle_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >conftest.out 2>&1"
535     if AC_TRY_EVAL(nettle_compile); then
536       cat conftest.out >&AC_FD_CC
537       $OBJDUMP -x conftest.o | grep '\.note\.GNU-stack' > /dev/null \
538       && nettle_cv_asm_gnu_stack=yes
539     else
540       cat conftest.out >&AC_FD_CC
541       echo "configure: failed program was:" >&AC_FD_CC
542       cat conftest.s >&AC_FD_CC
543     fi
544     rm -f conftest.*])
545   if test x$nettle_cv_asm_gnu_stack = xyes ; then
546     ASM_MARK_NOEXEC_STACK='.section .note.GNU-stack,"",TYPE_PROGBITS'
547   fi
548
549   AC_CACHE_CHECK([if .align assembly directive is logarithmic],
550     [nettle_cv_asm_align_log],
551     [GMP_TRY_ASSEMBLE([
552 .align 3
553 ],
554        [nettle_cv_asm_align_log=yes],
555        [nettle_cv_asm_align_log=no])])
556   ASM_ALIGN_LOG="$nettle_cv_asm_align_log"
557 fi
558
559 AC_SUBST(ASM_SYMBOL_PREFIX)
560 AC_SUBST(ASM_ELF_STYLE)
561 AC_SUBST(ASM_TYPE_FUNCTION)
562 AC_SUBST(ASM_TYPE_PROGBITS)
563 AC_SUBST(ASM_MARK_NOEXEC_STACK)
564 AC_SUBST(ASM_ALIGN_LOG)
565 AC_SUBST(W64_ABI)
566 AC_SUBST(EMULATOR)
567
568 AC_SUBST(SHLIBCFLAGS)
569
570 AC_SUBST(LIBNETTLE_MAJOR)
571 AC_SUBST(LIBNETTLE_MINOR)
572 AC_SUBST(LIBNETTLE_FORLINK)
573 AC_SUBST(LIBNETTLE_SONAME)
574 AC_SUBST(LIBNETTLE_FILE)
575 AC_SUBST(LIBNETTLE_FILE_SRC)
576 AC_SUBST(LIBNETTLE_LINK)
577 AC_SUBST(LIBNETTLE_LIBS)
578
579 AC_SUBST(LIBHOGWEED_MAJOR)
580 AC_SUBST(LIBHOGWEED_MINOR)
581 AC_SUBST(LIBHOGWEED_FORLINK)
582 AC_SUBST(LIBHOGWEED_SONAME)
583 AC_SUBST(LIBHOGWEED_FILE)
584 AC_SUBST(LIBHOGWEED_FILE_SRC)
585 AC_SUBST(LIBHOGWEED_LINK)
586 AC_SUBST(LIBHOGWEED_LIBS)
587
588 AC_PATH_PROG(M4, m4, m4)
589
590 if test "x$enable_gcov" = "xyes"; then
591   CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
592 fi
593
594 # Checks for typedefs, structures, and compiler characteristics.
595 AC_C_CONST
596 AC_C_INLINE
597 AC_TYPE_UID_T
598 AC_TYPE_SIZE_T
599 AC_HEADER_TIME
600 AC_CHECK_SIZEOF(long)
601 AC_CHECK_ALIGNOF(uint64_t)
602
603 ALIGNOF_UINT64_T="$ac_cv_alignof_uint64_t"
604 AC_SUBST(ALIGNOF_UINT64_T)
605
606 AC_CHECK_HEADERS([openssl/blowfish.h openssl/des.h openssl/cast.h openssl/aes.h],,
607 [enable_openssl=no
608  break])
609
610 LSH_FUNC_ALLOCA
611 LSH_FUNC_STRERROR
612
613 # Needed by the supplied memcmp.c
614 AC_C_BIGENDIAN
615 AC_REPLACE_FUNCS(memxor)
616
617 LSH_GCC_ATTRIBUTES
618
619 # According to Simon Josefsson, looking for uint32_t and friends in
620 # sys/types.h is needed on some systems, in particular cygwin.
621 AX_CREATE_STDINT_H([nettle-stdint.h], [sys/types.h])
622
623 # Check for file locking. We (AC_PROG_CC?) have already checked for
624 # sys/types.h and unistd.h.
625 AC_CACHE_CHECK([for fcntl file locking],
626                 nettle_cv_fcntl_locking,
627 [AC_TRY_COMPILE([
628 #if HAVE_SYS_TYPES_H
629 # include <sys/types.h>
630 #endif
631 #if HAVE_UNISTD_H
632 # include <unistd.h>
633 #endif
634 #include <fcntl.h>
635 ],[
636 int op = F_SETLKW;
637 struct flock fl;
638 ],
639 nettle_cv_fcntl_locking=yes,
640 nettle_cv_fcntl_locking=no)])
641
642 AH_TEMPLATE([HAVE_FCNTL_LOCKING], [Define if fcntl file locking is available])
643 if test "x$nettle_cv_fcntl_locking" = "xyes" ; then
644   AC_DEFINE(HAVE_FCNTL_LOCKING)
645 fi
646
647 # Checks for libraries
648 AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
649     [AC_MSG_WARN(
650 [GNU MP not found, or not 3.1 or up, see http://gmplib.org/.
651 Support for public key algorithms will be unavailable.])]
652     enable_public_key=no)
653
654 # Add -R flags needed to run programs linked with gmp
655 LSH_RPATH_FIX
656
657 # Check for gmp limb size
658 nettle_cv_gmp_numb_bits=0
659 if test "$enable_public_key" = yes; then
660   AC_MSG_CHECKING([for GMP limb size])
661   AC_COMPUTE_INT(nettle_cv_gmp_numb_bits, [GMP_NUMB_BITS],
662       [#include <gmp.h>],
663       [AC_MSG_FAILURE([cannot find value of GMP_NUMB_BITS])])
664
665   AC_MSG_RESULT([$nettle_cv_gmp_numb_bits bits])
666 fi
667
668 GMP_NUMB_BITS="$nettle_cv_gmp_numb_bits"
669 AC_SUBST([GMP_NUMB_BITS])
670
671 AH_TEMPLATE([HAVE_MPZ_POWM_SEC], [Define if mpz_powm_sec is available (appeared in GMP-5)])
672 AC_CHECK_FUNC(__gmpz_powm_sec, [AC_DEFINE(HAVE_MPZ_POWM_SEC)])
673
674 AH_TEMPLATE([WITH_HOGWEED], [Defined if public key features are enabled])
675
676 if test "x$enable_public_key" = xyes ; then
677   AC_DEFINE(WITH_HOGWEED)
678   IF_HOGWEED=''
679 else
680   IF_HOGWEED='#'
681 fi
682
683 if test "x$enable_static" = xyes ; then
684   IF_STATIC=''
685 else
686   IF_STATIC='#'
687 fi
688
689 if test "x$enable_shared" = xyes ; then
690   IF_SHARED=''
691 else
692   IF_SHARED='#'
693 fi
694
695 # Documentation tools
696 if test "x$enable_documentation" != "xno"; then
697   AC_PATH_PROG(MAKEINFO, makeinfo, not-found)
698
699   if test "x$MAKEINFO" != "xnot-found"; then
700     enable_documentation=yes
701     AC_SUBST(MAKEINFO)
702   else
703     if test "x$enable_documentation" == "xauto" ; then
704       enable_documentation=no
705     else
706       AC_MSG_ERROR([Cannot find 'makeinfo', required for documentation.])
707     fi
708   fi
709 fi
710
711 if test "x$enable_documentation" = "xyes" ; then
712   IF_DOCUMENTATION=''
713 else
714   IF_DOCUMENTATION='#'
715 fi
716
717 AC_SUBST(IF_HOGWEED)
718 AC_SUBST(IF_STATIC)
719 AC_SUBST(IF_SHARED)
720 AC_SUBST(IF_DOCUMENTATION)
721 AC_SUBST(IF_DLL)
722
723 OPENSSL_LIBFLAGS=''
724
725 # Check for openssl's libcrypto (used only for benchmarking)
726 if test x$enable_openssl = xyes ; then
727   AC_CHECK_LIB(crypto, BF_ecb_encrypt,
728     [OPENSSL_LIBFLAGS='-lcrypto'],
729     [enable_openssl=no])
730 fi
731
732 AH_TEMPLATE([WITH_OPENSSL],
733             [Define if you have openssl's libcrypto (used for benchmarking)]) dnl'
734
735 if test x$enable_openssl = xyes ; then
736   AC_DEFINE(WITH_OPENSSL)
737 fi
738
739 AC_SUBST(OPENSSL_LIBFLAGS)
740
741 AH_BOTTOM(
742 [#if defined(__x86_64__) || defined(__arch64__)
743 # define HAVE_NATIVE_64_BIT 1
744 #else
745 /* Needs include of <limits.h> before use. */
746 # define HAVE_NATIVE_64_BIT (SIZEOF_LONG * CHAR_BIT >= 64)
747 #endif
748 ])
749
750 # clock_gettime is in librt on *-*-osf5.1 and on glibc, so add -lrt to
751 # BENCH_LIBS if needed. On linux (tested on x86_32, 2.6.26),
752 # clock_getres reports ns accuracy, while in a quick test on osf
753 # clock_getres said only 1 millisecond.
754
755 old_LIBS="$LIBS"
756 AC_SEARCH_LIBS(clock_gettime, rt, [
757   AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define if clock_gettime is available])])
758 BENCH_LIBS="$LIBS"
759 LIBS="$old_LIBS"
760
761 AC_SUBST(BENCH_LIBS)
762
763 # Set these flags *last*, or else the test programs won't compile
764 if test x$GCC = xyes ; then
765   # Using -ggdb3 makes (some versions of) Redhat's gcc-2.96 dump core
766   if $CC --version | grep '^2\.96$' 1>/dev/null 2>&1; then
767     true
768   else
769     CFLAGS="$CFLAGS -ggdb3"
770   fi
771   # FIXME: It would be better to actually test if this option works and/or is needed.
772   # Or perhaps use -funsigned-char.
773   if $CC --version | grep 'gcc.* 4\.' 1>/dev/null 2>&1; then
774     CFLAGS="$CFLAGS -Wno-pointer-sign"
775   fi
776   CFLAGS="$CFLAGS -Wall -W \
777   -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes \
778   -Wpointer-arith -Wbad-function-cast -Wnested-externs"
779
780 # Don't enable -Wcast-align as it results in tons of warnings in the
781 # DES code. And when using stdio.
782 # Don't enable -Waggregate-return, as that causes warnings for glibc
783 # inttypes.h.
784 fi
785
786 AC_CONFIG_FILES([config.make config.m4 Makefile])
787 AC_CONFIG_FILES([tools/Makefile testsuite/Makefile examples/Makefile])
788 AC_CONFIG_FILES([nettle.pc hogweed.pc])
789
790 AC_OUTPUT
791
792 AC_MSG_NOTICE([summary of build options:
793
794   Version:           ${PACKAGE_STRING}
795   Host type:         ${host}
796   ABI:               ${ABI}
797   Assembly files:    ${asm_path:-none}
798   Install prefix:    ${prefix}
799   Library directory: ${libdir}
800   Compiler:          ${CC}
801   Static libraries:  ${enable_static}
802   Shared libraries:  ${enable_shared}
803   Public key crypto: ${enable_public_key}
804   Documentation:     ${enable_documentation}
805 ])