configure.ac 12.2 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.

Niels Möller's avatar
Niels Möller committed
5
AC_INIT([nettle], [1.16], [nettle-bugs@lists.lysator.liu.se])
6
AC_PREREQ(2.61)
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

13 14 15 16 17
LIBNETTLE_MAJOR=3
LIBNETTLE_MINOR=0

LIBHOGWEED_MAJOR=1
LIBHOGWEED_MINOR=0
18

19 20
AC_CANONICAL_HOST

21 22 23 24 25 26
# 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
27
  CPPFLAGS="$CPPFLAGS -I`echo $with_include_path | sed 's/:/ -I/g'`"
28 29 30 31 32 33 34
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
35
  LDFLAGS="$LDFLAGS -L`echo $with_lib_path | sed 's/:/ -L/g'`"
36 37
fi

38 39 40 41
AC_ARG_ENABLE(public-key,
  AC_HELP_STRING([--disable-public-key], [Disable public key algorithms]),,
  [enable_public_key=yes])

42
AC_ARG_ENABLE(assembler,
43 44
  AC_HELP_STRING([--disable-assembler],[Disable assembler code]),,
  [enable_assembler=yes])
45

46
AC_ARG_ENABLE(shared,
47
  AC_HELP_STRING([--enable-shared], [Build a shared library]),,
48 49
  [enable_shared=no])

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

55 56 57 58
AC_ARG_ENABLE(openssl,
  AC_HELP_STRING([--disable-openssl], [Do not include openssl glue in the benchmark program]),,
  [enable_openssl=yes])
  
59 60 61 62 63
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])

64
# Checks for programs.
Niels Möller's avatar
Niels Möller committed
65
AC_PROG_CC
66 67 68 69 70 71 72 73

# 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
74
if test "x$CC" = xrntcl ; then
75
    AC_MSG_NOTICE([Compiling with rntcl; clearing EXEEXT and disabling assembler])
76 77
    ac_exeext=''
    ac_cv_exeext=''
Niels Möller's avatar
Niels Möller committed
78
    EXEEXT=''
79
    enable_assembler=no
80 81
fi

82 83 84 85 86 87 88 89
# Used by the testsuite only
AC_PROG_CXX

AC_LANG_PUSH(C++)
AC_TRY_COMPILE([],[return 0;],[CXX_TESTS='cxx-test$(EXEEXT)'], [CXX_TESTS=''])
AC_SUBST([CXX_TESTS])
AC_LANG_POP

Niels Möller's avatar
Niels Möller committed
90
AC_PROG_MAKE_SET
Niels Möller's avatar
Niels Möller committed
91
AC_PROG_RANLIB
92
AC_CHECK_TOOL(NM, nm, strings)
93 94
# Used only for the GNU-stack configure test.
AC_CHECK_TOOL(OBJDUMP, objdump, false)
Niels Möller's avatar
Niels Möller committed
95

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

100 101
AC_PROG_INSTALL

102 103 104 105
# According to the autoconf manual, needs install-sh from
# autoconf-2.60 or automake-1.10 to avoid races.
AC_PROG_MKDIR_P

106 107
LSH_DEPENDENCY_TRACKING

108
if test x$enable_dependency_tracking = xyes ; then
109 110 111
  # 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.
112

113 114
  AC_CONFIG_COMMANDS([dummy-dep-files],
  [(cd "$srcdir" && find . -name '*.c' -print) \
115
 | sed 's/\.c$//' | (while read f; do echo > "$f.o.d"; echo > "$f.po.d"; done)
116
])
117
fi
118

119
# Select assembler code
120
asm_path=
121 122
case "$host_cpu" in
  [i?86* | k[5-8]* | pentium* | athlon])
123
    asm_path=x86
124
    ;;
125
  *sparc*)
126 127 128 129 130
    AC_TRY_COMPILE([
#if defined(__sparcv9) || defined(__arch64__)
#error 64-bit sparc
#endif
    ], [], [
131
      asm_path=sparc32
132 133 134
    ], [
      asm_path=sparc64
    ])
135
    ;;
136 137 138
  *)
    enable_assembler=no
    ;;
139 140
esac

141
# echo "enable_assembler: $enable_assembler, asm_path: $asm_path"
142

143
if test "x$enable_assembler" = xyes ; then
144
  if test -n "$asm_path"; then
Niels Möller's avatar
Niels Möller committed
145
    AC_MSG_NOTICE([Looking for assembler files in $asm_path/.])
146
    found=no
147
    for tmp_f in aes-encrypt-internal.asm aes-decrypt-internal.asm \
148
		 arcfour-crypt.asm md5-compress.asm sha1-compress.asm machine.m4; do
149 150
#       echo "Looking for $srcdir/$asm_path/$tmp_f"
      if test -f "$srcdir/$asm_path/$tmp_f"; then
151
#        echo found
152
        found=yes
153
        AC_CONFIG_LINKS($tmp_f:$asm_path/$tmp_f)
154 155 156 157 158 159 160 161 162
      fi
    done
    if test "$found" = no; then
      enable_assembler=no
      AC_MSG_WARN([No assembler files found.])
    fi
  fi
fi

163 164 165
LSH_CCPIC

SHLIBCFLAGS="$CCPIC"
166

167 168
case "$host_os" in
  cygwin*)
169 170 171 172 173 174 175 176 177 178 179
    LIBNETTLE_FORLINK='cygnettle-$(SHLIBMAJOR)-$(SHLIBMINOR).dll'
    LIBNETTLE_SONAME=''
    LIBNETTLE_FILE='libnettle.dll.a'
    LIBNETTLE_LINK='$(CC) $(LDFLAGS) -shared -Wl,--out-implib=$(LIBNETTLE_LIBFILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
    LIBNETTLE_LIBS='-Wl,--no-whole-archive $(LIBS)'

    LIBHOGWEED_FORLINK='cygnettle-$(SHLIBMAJOR)-$(SHLIBMINOR).dll'
    LIBHOGWEED_SONAME=''
    LIBHOGWEED_FILE='libnettle.dll.a'
    LIBHOGWEED_LINK='$(CC) $(LDFLAGS) -shared -Wl,--out-implib=$(LIBHOGWEED_LIBFILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
    LIBHOGWEED_LIBS='-Wl,--no-whole-archive $(LIBS)'
180
    ;;
Grant Robinson's avatar
Grant Robinson committed
181
  darwin*)
182 183 184 185 186 187 188 189 190 191 192
    LIBNETTLE_FORLINK=libnettle.dylib
    LIBNETTLE_SONAME='$(LIBNETTLE_FORLINK).$(LIBNETTLE_MAJOR)'
    LIBNETTLE_FILE='$(LIBNETTLE_SONAME).$(LIBNETTLE_MINOR)'
    LIBNETTLE_LINK='$(CC) -dynamiclib $(LDFLAGS)'
    LIBNETTLE_LIBS=''

    LIBHOGWEED_FORLINK=libnettle.dylib
    LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)'
    LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)'
    LIBHOGWEED_LINK='$(CC) -dynamiclib $(LDFLAGS)'
    LIBHOGWEED_LIBS=''
Grant Robinson's avatar
Grant Robinson committed
193
    ;;
194
  *)
195 196 197 198 199 200 201 202 203 204 205
    LIBNETTLE_FORLINK=libnettle.so
    LIBNETTLE_SONAME='$(LIBNETTLE_FORLINK).$(LIBNETTLE_MAJOR)'
    LIBNETTLE_FILE='$(LIBNETTLE_SONAME).$(LIBNETTLE_MINOR)'
    LIBNETTLE_LINK='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(LIBNETTLE_SONAME)'
    # FIXME: It might make some sense to link with -lgmp
    LIBNETTLE_LIBS=''

    LIBHOGWEED_FORLINK=libnettle.so
    LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)'
    LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)'
    LIBHOGWEED_LINK='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(LIBHOGWEED_SONAME)'
Niels Möller's avatar
Niels Möller committed
206
    # FIXME: It might make some sense to link with -lgmp
207
    LIBHOGWEED_LIBS=''
208 209
    ;;
esac
210

211 212 213 214
if test "x$enable_pic" = xyes; then
  CCPIC_MAYBE="$CCPIC"
else
  CCPIC_MAYBE=''
215
fi
216
AC_SUBST([CCPIC_MAYBE])
217

218
ASM_SYMBOL_PREFIX=''
219
ASM_ELF_STYLE='no'
220
ASM_TYPE_FUNCTION=''
221
ASM_MARK_NOEXEC_STACK=''
222
ASM_ALIGN_LOG=''
223 224 225 226 227 228 229 230

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;],
231
      [ $NM conftest.$OBJEXT >conftest.out
232 233 234 235 236 237 238 239
        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!?])])])
240
  if test x$nettle_cv_asm_underscore = xyes ; then
241
    ASM_SYMBOL_PREFIX='_'
242
  fi
243 244 245 246 247 248 249 250 251 252 253 254

  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
255
      $OBJDUMP -x conftest.o | grep '\.note\.GNU-stack' > /dev/null \
256 257 258 259 260 261 262 263 264 265 266
      && 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

267 268 269
  AC_CACHE_CHECK([for ELF-style .type,%function pseudo-ops],
    [nettle_cv_asm_type_percent_function],
    [GMP_TRY_ASSEMBLE([
270 271
.text
.globl foo
272
.type foo,%function
273 274 275 276
foo:
.Lend:

.size foo, .Lend - foo
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
],
       [nettle_cv_asm_type_percent_function=yes],
       [nettle_cv_asm_type_percent_function=no])])

dnl Needs double quote for the # character
  AC_CACHE_CHECK([[for ELF-style .type,#function pseudo-ops]],
    [nettle_cv_asm_type_hash_function],
    [GMP_TRY_ASSEMBLE([
.text
.globl foo
.type foo,#function
foo:
.Lend:

.size foo, .Lend - foo
],
       [nettle_cv_asm_type_hash_function=yes],
       [nettle_cv_asm_type_hash_function=no])])

  if test x$nettle_cv_asm_type_percent_function = xyes ; then
297
    ASM_ELF_STYLE='yes'
298 299 300 301 302 303
    ASM_TYPE_FUNCTION='%function'
  else
    if test x$nettle_cv_asm_type_hash_function = xyes ; then
      ASM_ELF_STYLE='yes'
      ASM_TYPE_FUNCTION='#function'
    fi
304
  fi
305 306 307 308 309 310 311 312 313 314
  AC_CACHE_CHECK([if .align assembly directive is logarithmic],
    [nettle_cv_asm_align_log],
    [GMP_TRY_ASSEMBLE([
.align 3
],
       [nettle_cv_asm_align_log=yes],
       [nettle_cv_asm_align_log=no])])
  if test x$nettle_cv_asm_align_log = xyes ; then
    ASM_ALIGN_LOG='yes'
  fi
315 316 317
fi

AC_SUBST(ASM_SYMBOL_PREFIX)
318
AC_SUBST(ASM_ELF_STYLE)
319
AC_SUBST(ASM_TYPE_FUNCTION)
320
AC_SUBST(ASM_MARK_NOEXEC_STACK)
321
AC_SUBST(ASM_ALIGN_LOG)
322

323
AC_SUBST(SHLIBCFLAGS)
324 325 326 327 328 329 330 331 332

AC_SUBST(LIBNETTLE_MAJOR)
AC_SUBST(LIBNETTLE_MINOR)
AC_SUBST(LIBNETTLE_FORLINK)
AC_SUBST(LIBNETTLE_SONAME)
AC_SUBST(LIBNETTLE_FILE)
AC_SUBST(LIBNETTLE_LINK)
AC_SUBST(LIBNETTLE_LIBS)

Niels Möller's avatar
Niels Möller committed
333 334 335 336 337 338 339
AC_SUBST(LIBHOGWEED_MAJOR)
AC_SUBST(LIBHOGWEED_MINOR)
AC_SUBST(LIBHOGWEED_FORLINK)
AC_SUBST(LIBHOGWEED_SONAME)
AC_SUBST(LIBHOGWEED_FILE)
AC_SUBST(LIBHOGWEED_LINK)
AC_SUBST(LIBHOGWEED_LIBS)
Niels Möller's avatar
Niels Möller committed
340

Niels Möller's avatar
Niels Möller committed
341
AC_PATH_PROG(M4, m4, m4)
342

343
# Checks for typedefs, structures, and compiler characteristics.
Niels Möller's avatar
Niels Möller committed
344
AC_C_CONST
Niels Möller's avatar
Niels Möller committed
345 346 347 348 349
AC_C_INLINE
AC_TYPE_UID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME

Niels Möller's avatar
Niels Möller committed
350
AC_CHECK_HEADERS([openssl/blowfish.h openssl/des.h openssl/cast.h openssl/aes.h],,
351 352 353
[enable_openssl=no
 break])

Niels Möller's avatar
Niels Möller committed
354
LSH_FUNC_ALLOCA
Niels Möller's avatar
Niels Möller committed
355

Niels Möller's avatar
Niels Möller committed
356
# Needed by the supplied memcmp.c
Niels Möller's avatar
Niels Möller committed
357
AC_C_BIGENDIAN
Niels Möller's avatar
Niels Möller committed
358 359
AC_REPLACE_FUNCS(memxor)

Niels Möller's avatar
Niels Möller committed
360
LSH_GCC_ATTRIBUTES
Niels Möller's avatar
Niels Möller committed
361

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

366 367 368 369
# 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.
370 371 372
Support for public key algorithms will be unavailable.])]
    enable_public_key=no)

373 374
AH_TEMPLATE([WITH_HOGWEED], [Defined if public key features are enabled])

375
if test "x$enable_public_key" = xyes ; then
376 377 378 379 380 381 382 383
  AC_DEFINE(WITH_HOGWEED)
  IF_HOGWEED=''
else
  IF_HOGWEED='#'
fi

if test "x$enable_shared" = xyes ; then
  IF_SHARED=''
384
else
385
  IF_SHARED='#'
386 387
fi

388 389
AC_SUBST(IF_HOGWEED)
AC_SUBST(IF_SHARED)
390

391 392
# Add -R flags needed to run programs linked with gmp
LSH_RPATH_FIX
393

394 395
OPENSSL_LIBFLAGS=''

396
# Check for openssl's libcrypto (used only for benchmarking)
397 398 399 400 401 402 403 404 405 406 407 408
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
409 410

AC_SUBST(OPENSSL_LIBFLAGS)
411

Niels Möller's avatar
Niels Möller committed
412 413
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
414 415 416 417 418 419
  # 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
420
  # FIXME: It would be better to actually test if this option works and/or is needed.
Niels Möller's avatar
Niels Möller committed
421
  # Or perhaps use -funsigned-char.
422 423 424
  if "$CC" --version | grep 'gcc.* 4\.' 1>/dev/null 2>&1; then
    CFLAGS="$CFLAGS -Wno-pointer-sign"
  fi
425 426 427
  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
428 429 430

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

435 436 437 438
AC_CONFIG_FILES([config.make config.m4 Makefile])
AC_CONFIG_FILES([tools/Makefile testsuite/Makefile examples/Makefile])

AC_OUTPUT
439