configure.ac 9.72 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
2
dnl -*- mode: shell-script; sh-indentation: 2; -*-

3
4
dnl Process this file with autoconf to produce a configure script.

5
AC_INIT([nettle], [1.14], [nettle-bugs@lists.lysator.liu.se])
6
AC_PREREQ(2.50)
7
8
9
10
AC_CONFIG_SRCDIR([arcfour.c])
# Needed to stop autoconf from looking for files in parent directories.
AC_CONFIG_AUX_DIR([.])

11
AC_CONFIG_HEADER([config.h])
12

Niels Möller's avatar
Niels Möller committed
13
SHLIBMAJOR=2
14
SHLIBMINOR=4
15

16
17
AC_CANONICAL_HOST

18
19
20
21
22
23
# Command line options
AC_ARG_WITH(include-path,
  AC_HELP_STRING([--with-include-path], [A colon-separated list of directories to search for include files]),,
  [with_include_path=''])

if test x$with_include_path != x ; then
24
  CPPFLAGS="$CPPFLAGS -I`echo $with_include_path | sed 's/:/ -I/g'`"
25
26
27
28
29
30
31
fi

AC_ARG_WITH(lib-path,
  AC_HELP_STRING([--with-lib-path], [A colon-separated list of directories to search for libraries]),,
  [with_lib_path=''])

if test x$with_lib_path != x ; then
32
  LDFLAGS="$LDFLAGS -L`echo $with_lib_path | sed 's/:/ -L/g'`"
33
34
fi

35
36
37
38
AC_ARG_ENABLE(public-key,
  AC_HELP_STRING([--disable-public-key], [Disable public key algorithms]),,
  [enable_public_key=yes])

39
AC_ARG_ENABLE(assembler,
40
41
  AC_HELP_STRING([--disable-assembler],[Disable assembler code]),,
  [enable_assembler=yes])
42

43
AC_ARG_ENABLE(shared,
44
  AC_HELP_STRING([--enable-shared], [Build a shared library]),,
45
46
  [enable_shared=no])

47
48
49
50
51
AC_ARG_ENABLE(pic,
  AC_HELP_STRING([--disable-pic],
  [Do not try to compile library files as position independent code]),,
  [enable_pic=yes])

52
53
54
55
AC_ARG_ENABLE(openssl,
  AC_HELP_STRING([--disable-openssl], [Do not include openssl glue in the benchmark program]),,
  [enable_openssl=yes])
  
56
57
58
59
60
LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \
    `echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \
    /usr/local/lib /sw/local/lib /sw/lib \
    /usr/gnu/lib /opt/gnu/lib /sw/gnu/lib /usr/freeware/lib /usr/pkg/lib])

61
# Checks for programs.
Niels Möller's avatar
Niels Möller committed
62
AC_PROG_CC
63
64
65
66
67
68
69
70

# When $CC foo.c -o foo creates both foo and foo.exe, autoconf picks
# up the foo.exe and sets exeext to .exe. That is correct for cygwin,
# which has some kind of magic link from foo to foo.exe, but not for
# rntcl. A better check for the cygwin case would check if the
# contents of foo and foo.exe are equal; in the rntcl case, foo is a
# sh script, and foo.exe is a windows executable.

Niels Möller's avatar
Niels Möller committed
71
if test "x$CC" = xrntcl ; then
Niels Möller's avatar
Niels Möller committed
72
    AC_MSG_NOTICE([Compiling with rntcl; clearing EXEEXT])
73
74
    ac_exeext=''
    ac_cv_exeext=''
Niels Möller's avatar
Niels Möller committed
75
    EXEEXT=''
76
77
fi

Niels Möller's avatar
Niels Möller committed
78
AC_PROG_MAKE_SET
Niels Möller's avatar
Niels Möller committed
79
AC_PROG_RANLIB
80
AC_CHECK_TOOL(NM, nm, strings)
81
AC_CHECK_TOOL(OBJDUMP, objdump, strings)
Niels Möller's avatar
Niels Möller committed
82

83
if test "x$ac_cv_prog_cc_stdc" = xno ; then
Niels Möller's avatar
Niels Möller committed
84
85
  AC_ERROR([the C compiler doesn't handle ANSI-C])
fi
86

87
88
89
90
AC_PROG_INSTALL

LSH_DEPENDENCY_TRACKING

91
if test x$enable_dependency_tracking = xyes ; then
92
93
94
  # Since the makefiles use include to get the dependency files, we must
  # make sure that the files exist. We generate some more files than are
  # actually needed.
95

96
97
  AC_CONFIG_COMMANDS([dummy-dep-files],
  [(cd "$srcdir" && find . -name '*.c' -print) \
98
 | sed 's/\.c$//' | (while read f; do echo > "$f.o.d"; echo > "$f.po.d"; done)
99
])
100
fi
101

102
# Select assembler code
103
asm_path=
104
105
case "$host" in
  [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
106
    asm_path=x86
107
108
    ;;
  *sparc*-*-*)
109
110
111
112
113
114
115
116
117
    AC_TRY_COMPILE([
#if defined(__sparcv9) || defined(__arch64__)
#error 64-bit sparc
#endif
    ], [], [
      asm_path=sparc
    ], [
      asm_path=sparc64
    ])
118
    ;;
119
120
121
  *)
    enable_assembler=no
    ;;
122
123
esac

124
# echo "enable_assembler: $enable_assembler, asm_path: $asm_path"
125

126
if test "x$enable_assembler" = xyes ; then
127
  if test -n "$asm_path"; then
Niels Möller's avatar
Niels Möller committed
128
    AC_MSG_NOTICE([Looking for assembler files in $asm_path/.])
129
    found=no
130
    for tmp_f in aes-encrypt-internal.asm aes-decrypt-internal.asm \
131
		 arcfour-crypt.asm md5-compress.asm sha1-compress.asm machine.m4; do
132
133
#       echo "Looking for $srcdir/$asm_path/$tmp_f"
      if test -f "$srcdir/$asm_path/$tmp_f"; then
134
#        echo found
135
        found=yes
136
        AC_CONFIG_LINKS($tmp_f:$asm_path/$tmp_f)
137
138
139
140
141
142
143
144
145
      fi
    done
    if test "$found" = no; then
      enable_assembler=no
      AC_MSG_WARN([No assembler files found.])
    fi
  fi
fi

146
147
148
LSH_CCPIC

SHLIBCFLAGS="$CCPIC"
149
150
151
152
153
154

case `uname -sr` in
  CYGWIN*)
    SHLIBFORLINK='cygnettle-$(SHLIBMAJOR)-$(SHLIBMINOR).dll'
    SHLIBSONAME=''
    SHLIBFILE='libnettle.dll.a'
155
156
    SHLIBLINK='$(CC) $(LDFLAGS) -shared -Wl,--out-implib=$(SHLIBFILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
    SHLIBLIBS='-Wl,--no-whole-archive $(LIBS)'
157
158
159
160
161
162
    ;;
  *)
    SHLIBFORLINK=libnettle.so
    SHLIBSONAME='$(SHLIBFORLINK).$(SHLIBMAJOR)'
    SHLIBFILE='$(SHLIBSONAME).$(SHLIBMINOR)'
    SHLIBLINK='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME)'
Niels Möller's avatar
Niels Möller committed
163
164
    # FIXME: It might make some sense to link with -lgmp
    SHLIBLIBS=''
165
166
    ;;
esac
167
168
169
170

if test "x$enable_shared" = xyes ; then
  SHLIBTARGET='$(SHLIBFORLINK)'
  SHLIBINSTALL=install-shared
171
172
173
else
  SHLIBTARGET=''
  SHLIBINSTALL=''
174
175
fi

176
177
178
179
if test "x$enable_pic" = xyes; then
  CCPIC_MAYBE="$CCPIC"
else
  CCPIC_MAYBE=''
180
fi
181
AC_SUBST([CCPIC_MAYBE])
182

183
ASM_SYMBOL_PREFIX=''
184
ASM_ELF_STYLE='no'
185
ASM_MARK_NOEXEC_STACK=''
186
187
188
189
190
191
192
193

if test x$enable_assembler = xyes ; then
  AC_CACHE_CHECK([if globals are prefixed by underscore],
  nettle_cv_asm_underscore,
  [ # Default is no underscore
    nettle_cv_asm_underscore=no
    AC_COMPILE_IFELSE(
      [int a_global_symbol;],
194
      [ $NM conftest.$OBJEXT >conftest.out
195
196
197
198
199
200
201
202
        if grep _a_global_symbol conftest.out >/dev/null ; then
          nettle_cv_asm_underscore=yes
        elif grep a_global_symbol conftest.out >/dev/null ; then
          nettle_cv_asm_underscore=no
        else
          AC_MSG_WARN([nm doesn't list a_global_symbol at all])
	fi],
      [AC_MSG_WARN([test program with a single global could not be compiled!?])])])
203
  if test x$nettle_cv_asm_underscore = xyes ; then
204
    ASM_SYMBOL_PREFIX='_'
205
  fi
206
207
208
209
210
211
212
213
214
215
216
217

  AC_CACHE_CHECK([if we should use a .note.GNU-stack section],
  nettle_cv_asm_gnu_stack,
  [ # Default
    nettle_cv_asm_gnu_stack=no

    cat >conftest.c <<EOF
int foo() { return 0; }
EOF
    nettle_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >conftest.out 2>&1"
    if AC_TRY_EVAL(nettle_compile); then
      cat conftest.out >&AC_FD_CC
218
      $OBJDUMP -x conftest.o | grep '\.note\.GNU-stack' > /dev/null \
219
220
221
222
223
224
225
226
227
228
229
      && nettle_cv_asm_gnu_stack=yes
    else
      cat conftest.out >&AC_FD_CC
      echo "configure: failed program was:" >&AC_FD_CC
      cat conftest.s >&AC_FD_CC
    fi
    rm -f conftest.*])
  if test x$nettle_cv_asm_gnu_stack = xyes ; then
    ASM_MARK_NOEXEC_STACK='.section .note.GNU-stack,"",@progbits'
  fi

230
231
232
233
234
235
  # With inspiration from GMP_TRY_ASSEMBLE
  AC_CACHE_CHECK([for ELF-style pseudo-ops],
    nettle_cv_asm_elf_style_pseudo_ops,
    [cat >conftest.s <<EOF
.text
.globl foo
236
.type foo,@function
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
foo:
.Lend:

.size foo, .Lend - foo
EOF
    nettle_assemble="$CC $CFLAGS $CPPFLAGS -c conftest.s >conftest.out 2>&1"
    if AC_TRY_EVAL(nettle_assemble); then
      cat conftest.out >&AC_FD_CC
      nettle_cv_asm_elf_style_pseudo_ops=yes
    else
      cat conftest.out >&AC_FD_CC
      echo "configure: failed program was:" >&AC_FD_CC
      cat conftest.s >&AC_FD_CC
      nettle_cv_asm_elf_style_pseudo_ops=no
    fi
    rm -f conftest.*])
  if test x$nettle_cv_asm_elf_style_pseudo_ops = xyes ; then
    ASM_ELF_STYLE='yes'
  fi
256
257
258
fi

AC_SUBST(ASM_SYMBOL_PREFIX)
259
AC_SUBST(ASM_ELF_STYLE)
260
AC_SUBST(ASM_MARK_NOEXEC_STACK)
261

262
AC_SUBST(SHLIBCFLAGS)
263
264
AC_SUBST(SHLIBMAJOR)
AC_SUBST(SHLIBMINOR)
265
266
267
268
AC_SUBST(SHLIBFORLINK)
AC_SUBST(SHLIBSONAME)
AC_SUBST(SHLIBFILE)
AC_SUBST(SHLIBLINK)
269
270
AC_SUBST(SHLIBTARGET)
AC_SUBST(SHLIBINSTALL)
Niels Möller's avatar
Niels Möller committed
271
272
AC_SUBST(SHLIBLIBS)

Niels Möller's avatar
Niels Möller committed
273
AC_PATH_PROG(M4, m4, m4)
274

275
# Checks for typedefs, structures, and compiler characteristics.
Niels Möller's avatar
Niels Möller committed
276
AC_C_CONST
Niels Möller's avatar
Niels Möller committed
277
278
279
280
281
AC_C_INLINE
AC_TYPE_UID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME

Niels Möller's avatar
Niels Möller committed
282
AC_CHECK_HEADERS([openssl/blowfish.h openssl/des.h openssl/cast.h openssl/aes.h],,
283
284
285
[enable_openssl=no
 break])

Niels Möller's avatar
Niels Möller committed
286
LSH_FUNC_ALLOCA
Niels Möller's avatar
Niels Möller committed
287

Niels Möller's avatar
Niels Möller committed
288
# Needed by the supplied memcmp.c
Niels Möller's avatar
Niels Möller committed
289
AC_C_BIGENDIAN
Niels Möller's avatar
Niels Möller committed
290
291
AC_REPLACE_FUNCS(memxor)

Niels Möller's avatar
Niels Möller committed
292
LSH_GCC_ATTRIBUTES
Niels Möller's avatar
Niels Möller committed
293

294
295
# According to Simon Josefsson, looking for uint32_t and friends in
# sys/types.h is needed on some systems, in particular cygwin.
296
AX_CREATE_STDINT_H([nettle-stdint.h], [sys/types.h])
297

298
299
300
301
# Checks for libraries
AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
    [AC_MSG_WARN(
[GNU MP not found, or not 3.1 or up, see http://www.swox.com/gmp.
302
303
304
305
306
Support for public key algorithms will be unavailable.])]
    enable_public_key=no)

if test "x$enable_public_key" = xyes ; then
  AC_DEFINE(WITH_PUBLIC_KEY)
307
  RSA_EXAMPLES='rsa-keygen$(EXEEXT) rsa-sign$(EXEEXT) rsa-verify$(EXEEXT) rsa-encrypt$(EXEEXT) rsa-decrypt$(EXEEXT)'
308
309
else
  RSA_EXAMPLES=""
310
311
312
fi

AH_TEMPLATE([WITH_PUBLIC_KEY], [Define to enable public key features])
313
AC_SUBST(RSA_EXAMPLES)
314

315
316
# Add -R flags needed to run programs linked with gmp
LSH_RPATH_FIX
317

318
319
OPENSSL_LIBFLAGS=''

320
# Check for openssl's libcrypto (used only for benchmarking)
321
322
323
324
325
326
327
328
329
330
331
332
if test x$enable_openssl = xyes ; then
  AC_CHECK_LIB(crypto, BF_ecb_encrypt,
    [OPENSSL_LIBFLAGS='-lcrypto'],
    [enable_openssl=no])
fi

AH_TEMPLATE([WITH_OPENSSL],
	    [Define if you have openssl's libcrypto (used for benchmarking)])

if test x$enable_openssl = xyes ; then
  AC_DEFINE(WITH_OPENSSL)
fi
333
334

AC_SUBST(OPENSSL_LIBFLAGS)
335

Niels Möller's avatar
Niels Möller committed
336
337
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
338
339
340
341
342
343
344
345
346
  # Using -ggdb3 makes (some versions of) Redhat's gcc-2.96 dump core
  if "$CC" --version | grep '^2\.96$' 1>/dev/null 2>&1; then
    true
  else
    CFLAGS="$CFLAGS -ggdb3"
  fi
  CFLAGS="$CFLAGS -Wall -W \
  -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes \
  -Wpointer-arith -Wbad-function-cast -Wnested-externs"
Niels Möller's avatar
Niels Möller committed
347
348
349

# Don't enable -Wcast-align as it results in tons of warnings in the
# DES code. And when using stdio.
350
351
# Don't enable -Waggregate-return, as that causes warnings for glibc
# inttypes.h.
Niels Möller's avatar
Niels Möller committed
352
fi
Niels Möller's avatar
Niels Möller committed
353

354
355
356
357
AC_CONFIG_FILES([config.make config.m4 Makefile])
AC_CONFIG_FILES([tools/Makefile testsuite/Makefile examples/Makefile])

AC_OUTPUT
358