mirror of
https://github.com/cryb-to/cryb-to.git
synced 2024-11-15 02:05:40 +00:00
d4ae7a43cb
Travis forces _FORTIFY_SOURCE, which enables warn_unused_result annotations in glibc. Some of those annotations are of dubious value; in the case of asprintf(3) and vasprintf(3), they flag code that doesn't check the return value as unsafe even if it checks the pointer instead (which is guaranteed to be NULL in case of failure, and arguably more useful than the return value). Unfortunately, gcc intentionally ignores (void) casts, so we have no choice but to quench the warning with -Wno-unused-result. However, some of the compilers we wish to support don't recognize it, so we move it from the developer flags to the Travis environment. While there, switch Travis from Precious to Trusty.
360 lines
9.5 KiB
Text
360 lines
9.5 KiB
Text
AC_PREREQ([2.63])
|
|
AC_INIT([cryb.to], [0.20170406], [des@des.no], [cryb-to], [http://cryb.to/])
|
|
AC_CONFIG_SRCDIR([include/cryb/core.h])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-xz])
|
|
AM_CONFIG_HEADER([include/config.h])
|
|
|
|
############################################################################
|
|
#
|
|
# Toolchain
|
|
#
|
|
|
|
# C compiler and features
|
|
AC_LANG(C)
|
|
AC_PROG_CC([clang gcc cc])
|
|
AC_PROG_CC_STDC
|
|
AC_PROG_CPP
|
|
AC_PROG_CXX([clang++ g++ c++])
|
|
AC_GNU_SOURCE
|
|
AC_C_CONST
|
|
AC_C_RESTRICT
|
|
AC_C_VOLATILE
|
|
AC_C_BIGENDIAN
|
|
|
|
# libtool
|
|
LT_PREREQ([2.2.6])
|
|
LT_INIT()
|
|
|
|
# pkg-config
|
|
PKG_PROG_PKG_CONFIG
|
|
PKG_INSTALLDIR
|
|
|
|
# other programs
|
|
AC_PROG_INSTALL
|
|
|
|
############################################################################
|
|
#
|
|
# Types
|
|
#
|
|
AC_TYPE_INT16_T
|
|
AC_TYPE_INT32_T
|
|
AC_TYPE_INT8_T
|
|
AC_TYPE_INTMAX_T
|
|
AC_TYPE_INTPTR_T
|
|
AC_TYPE_OFF_T
|
|
AC_TYPE_SIZE_T
|
|
AC_TYPE_SSIZE_T
|
|
AC_TYPE_UINT16_T
|
|
AC_TYPE_UINT32_T
|
|
AC_TYPE_UINT8_T
|
|
AC_TYPE_UINTMAX_T
|
|
AC_TYPE_UINTPTR_T
|
|
|
|
############################################################################
|
|
#
|
|
# Headers and functions
|
|
#
|
|
|
|
AC_CHECK_HEADERS([endian.h sys/endian.h strings.h])
|
|
AX_GCC_BUILTIN([__builtin_bswap16])
|
|
AX_GCC_BUILTIN([__builtin_bswap32])
|
|
AX_GCC_BUILTIN([__builtin_bswap64])
|
|
AX_GCC_BUILTIN([__builtin_clz])
|
|
AX_GCC_BUILTIN([__builtin_clzl])
|
|
AX_GCC_BUILTIN([__builtin_clzll])
|
|
AX_GCC_BUILTIN([__builtin_ctz])
|
|
AX_GCC_BUILTIN([__builtin_ctzl])
|
|
AX_GCC_BUILTIN([__builtin_ctzll])
|
|
AX_GCC_BUILTIN([__builtin_ffs])
|
|
AX_GCC_BUILTIN([__builtin_ffsl])
|
|
AX_GCC_BUILTIN([__builtin_ffsll])
|
|
# No compiler we know of has these
|
|
#AX_GCC_BUILTIN([__builtin_fls])
|
|
#AX_GCC_BUILTIN([__builtin_flsl])
|
|
#AX_GCC_BUILTIN([__builtin_flsll])
|
|
AC_CHECK_DECLS([
|
|
bswap16, bswap32, bswap64,
|
|
bswap16v, bswap32v, bswap64v,
|
|
be16enc, be16dec, le16enc, le16dec,
|
|
be16encv, be16decv, le16encv, le16decv,
|
|
be32enc, be32dec, le32enc, le32dec,
|
|
be32encv, be32decv, le32encv, le32decv,
|
|
be64enc, be64dec, le64enc, le64dec,
|
|
be64encv, be64decv, le64encv, le64decv,
|
|
htobe16, be16toh, htole16, le16toh,
|
|
htobe32, be32toh, htole32, le32toh,
|
|
htobe64, be64toh, htole64, le64toh,
|
|
nothing
|
|
], [], [], [[
|
|
#if HAVE_SYS_ENDIAN_H
|
|
#include <sys/endian.h>
|
|
#endif
|
|
#if HAVE_ENDIAN_H
|
|
#include <endian.h>
|
|
#endif
|
|
]])
|
|
AC_CHECK_FUNCS([ffs ffsl ffsll fls flsl flsll], [], [], [[
|
|
#if HAVE_STRINGS_H
|
|
#include <strings.h>
|
|
#endif
|
|
]])
|
|
AC_CHECK_FUNCS([strlcat strlcmp strlcpy])
|
|
AC_CHECK_FUNCS([wcslcat wcslcmp wcslcpy])
|
|
|
|
# For tracing allocations in unit tests
|
|
AC_CHECK_HEADERS([sys/uio.h sys/ktrace.h], [], [], [[
|
|
#include <sys/param.h>
|
|
#if HAVE_SYS_UIO_H
|
|
#include <sys/uio.h>
|
|
#endif
|
|
]])
|
|
AC_CHECK_FUNCS([utrace])
|
|
|
|
# Used in some unit tests
|
|
AC_CHECK_HEADERS([sys/resource.h])
|
|
AC_CHECK_FUNCS([setrlimit])
|
|
|
|
# C11 features
|
|
# XXX our version has an incorrect prototype due to the lack of a test
|
|
# for the existence of rsize_t and RSIZE_MAX.
|
|
AC_CHECK_FUNCS([memset_s])
|
|
|
|
############################################################################
|
|
#
|
|
# Extra libraries
|
|
#
|
|
|
|
save_LIBS="${LIBS}"
|
|
LIBS=""
|
|
AC_SEARCH_LIBS([clock_gettime], [rt])
|
|
RT_LIBS="${LIBS}"
|
|
LIBS="${save_LIBS}"
|
|
AC_SUBST(RT_LIBS)
|
|
|
|
############################################################################
|
|
#
|
|
# Build options
|
|
#
|
|
|
|
# Documentation
|
|
AC_ARG_ENABLE([doc],
|
|
AC_HELP_STRING([--disable-doc],
|
|
[do not build the documentation]),
|
|
[with_doc=$enableval])
|
|
AM_CONDITIONAL([WITH_DOC], [test x"$with_doc" != x"no"])
|
|
|
|
############################################################################
|
|
#
|
|
# Debugging
|
|
#
|
|
|
|
# OpenSSL versions of the unit tests for comparison
|
|
AC_ARG_ENABLE([openssl-tests],
|
|
AC_HELP_STRING([--enable-openssl-tests],
|
|
[build unit tests with OpenSSL support]))
|
|
AM_CONDITIONAL([OPENSSL_TESTS], [test x"$enable_openssl_tests" = x"yes"])
|
|
|
|
# RSAREF versions of the unit tests for comparison
|
|
AC_ARG_ENABLE([rsaref-tests],
|
|
AC_HELP_STRING([--enable-rsaref-tests],
|
|
[build unit tests enable RSAREF support]))
|
|
AM_CONDITIONAL([RSAREF_TESTS], [test x"enable_rsaref_tests" = x"yes"])
|
|
|
|
# Developer-friendly compiler flags
|
|
AC_ARG_ENABLE([developer-warnings],
|
|
AS_HELP_STRING([--enable-developer-warnings],
|
|
[enable strict warnings (default is NO)]),
|
|
[CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -Wshadow"])
|
|
AC_ARG_ENABLE([debugging-symbols],
|
|
AS_HELP_STRING([--enable-debugging-symbols],
|
|
[enable debugging symbols (default is NO)]),
|
|
[CFLAGS="${CFLAGS} -O0 -g -fno-inline"])
|
|
AC_ARG_ENABLE([werror],
|
|
AS_HELP_STRING([--enable-werror],
|
|
[use -Werror (default is NO)]),
|
|
[CFLAGS="${CFLAGS} -Werror"])
|
|
|
|
############################################################################
|
|
#
|
|
# Components
|
|
#
|
|
|
|
# Everything
|
|
AC_ARG_ENABLE([all],
|
|
AC_HELP_STRING([--disable-all],
|
|
[disable all libraries and tools]),
|
|
[enable_all=$enableval],
|
|
[enable_all=yes])
|
|
|
|
# Ciphers
|
|
elements="$elements cipher"
|
|
requires="$requires cipher:core"
|
|
AC_ARG_ENABLE([cryb-cipher],
|
|
AC_HELP_STRING([--enable-cryb-cipher],
|
|
[build the cipher library]),
|
|
[enable_cryb_cipher=$enableval],
|
|
[enable_cryb_cipher=$enable_all])
|
|
AM_CONDITIONAL([CRYB_CIPHER], [test x"$enable_cryb_cipher" = x"yes"])
|
|
|
|
# Core
|
|
elements="$elements core"
|
|
AC_ARG_ENABLE([cryb-core],
|
|
AC_HELP_STRING([--enable-cryb-core],
|
|
[build the core library]),
|
|
[enable_cryb_core=$enableval],
|
|
[enable_cryb_core=$enable_all])
|
|
AM_CONDITIONAL([CRYB_CORE], [test x"$enable_cryb_core" = x"yes"])
|
|
|
|
# CPE
|
|
elements="$elements cpe"
|
|
requires="$requires cpe:core"
|
|
AC_ARG_ENABLE([cryb-cpe],
|
|
AC_HELP_STRING([--enable-cryb-cpe],
|
|
[build the CPE library]),
|
|
[enable_cryb_cpe=$enableval],
|
|
[enable_cryb_cpe=$enable_all])
|
|
AM_CONDITIONAL([CRYB_CPE], [test x"$enable_cryb_cpe" = x"yes"])
|
|
|
|
# Message digests
|
|
elements="$elements digest"
|
|
requires="$requires digests:core"
|
|
AC_ARG_ENABLE([cryb-digest],
|
|
AC_HELP_STRING([--enable-cryb-digest],
|
|
[build the message digest library]),
|
|
[enable_cryb_digest=$enableval],
|
|
[enable_cryb_digest=$enable_all])
|
|
AM_CONDITIONAL([CRYB_DIGEST], [test x"$enable_cryb_digest" = x"yes"])
|
|
|
|
# Encodings
|
|
elements="$elements enc"
|
|
requires="$requires enc:core"
|
|
AC_ARG_ENABLE([cryb-enc],
|
|
AC_HELP_STRING([--enable-cryb-enc],
|
|
[build the encoding library]),
|
|
[enable_cryb_enc=$enableval],
|
|
[enable_cryb_enc=$enable_all])
|
|
AM_CONDITIONAL([CRYB_ENC], [test x"$enable_cryb_enc" = x"yes"])
|
|
|
|
# Non-cryptographic hashes
|
|
elements="$elements hash"
|
|
requires="$requires hash:core"
|
|
AC_ARG_ENABLE([cryb-hash],
|
|
AC_HELP_STRING([--enable-cryb-hash],
|
|
[build the non-cryptographic hash library]),
|
|
[enable_cryb_hash=$enableval],
|
|
[enable_cryb_hash=$enable_all])
|
|
AM_CONDITIONAL([CRYB_HASH], [test x"$enable_cryb_hash" = x"yes"])
|
|
|
|
# Message authentication codes
|
|
elements="$elements mac"
|
|
requires="$requires mac:core mac:digest"
|
|
AC_ARG_ENABLE([cryb-mac],
|
|
AC_HELP_STRING([--enable-cryb-mac],
|
|
[build the message authentication code library]),
|
|
[enable_cryb_mac=$enableval],
|
|
[enable_cryb_mac=$enable_all])
|
|
AM_CONDITIONAL([CRYB_MAC], [test x"$enable_cryb_digest" = x"yes"])
|
|
|
|
# Multiple-precision integers
|
|
elements="$elements mpi"
|
|
requires="$requires mpi:core"
|
|
AC_ARG_ENABLE([cryb-mpi],
|
|
AC_HELP_STRING([--enable-cryb-mpi],
|
|
[build the multiple-precision math library]),
|
|
[enable_cryb_mpi=$enableval],
|
|
[enable_cryb_mpi=$enable_all])
|
|
AM_CONDITIONAL([CRYB_MPI], [test x"$enable_cryb_mpi" = x"yes"])
|
|
|
|
# OATH
|
|
elements="$elements oath"
|
|
requires="$requires oath:core oath:digest oath:enc oath:mac oath:rand"
|
|
AC_ARG_ENABLE([cryb-oath],
|
|
AC_HELP_STRING([--enable-cryb-oath],
|
|
[build the OATH library]),
|
|
[enable_cryb_oath=$enableval],
|
|
[enable_cryb_oath=$enable_all])
|
|
AM_CONDITIONAL([CRYB_OATH], [test x"$enable_cryb_oath" = x"yes"])
|
|
|
|
# Pseudo-randomness
|
|
elements="$elements rand"
|
|
requires="$requires rand:core"
|
|
AC_ARG_ENABLE([cryb-rand],
|
|
AC_HELP_STRING([--enable-cryb-rand],
|
|
[build the pseudo-randomness library]),
|
|
[enable_cryb_rand=$enableval],
|
|
[enable_cryb_rand=$enable_all])
|
|
AM_CONDITIONAL([CRYB_RAND], [test x"$enable_cryb_rand" = x"yes"])
|
|
|
|
# Test framework
|
|
elements="$elements test"
|
|
requires="$requires test:core"
|
|
AC_ARG_ENABLE([cryb-test],
|
|
AC_HELP_STRING([--enable-cryb-test],
|
|
[build the test framework]),
|
|
[enable_cryb_test=$enableval],
|
|
[enable_cryb_test=$enable_all])
|
|
AM_CONDITIONAL([CRYB_TEST], [test x"$enable_cryb_test" = x"yes"])
|
|
|
|
# Check dependencies
|
|
AC_MSG_CHECKING([dependencies])
|
|
for req in $requires ; do
|
|
lhs=${req%:*}
|
|
lhs_ena=`eval echo \\\$enable_cryb_$lhs`
|
|
if test x"$lhs_ena" = x"yes" ; then
|
|
rhs=${req#*:}
|
|
rhs_ena=`eval echo \\\$enable_cryb_$rhs`
|
|
if test x"$rhs_ena" != x"yes" ; then
|
|
AC_MSG_ERROR([cryb-$lhs requires cryb-$rhs])
|
|
fi
|
|
fi
|
|
done
|
|
AC_MSG_RESULT([ok])
|
|
|
|
############################################################################
|
|
#
|
|
# Output
|
|
#
|
|
|
|
AC_CONFIG_FILES([
|
|
Makefile
|
|
include/Makefile
|
|
include/cryb/Makefile
|
|
lib/Makefile
|
|
lib/cipher/Makefile
|
|
lib/cipher/cryb-cipher.pc
|
|
lib/core/Makefile
|
|
lib/core/cryb-core.pc
|
|
lib/cpe/Makefile
|
|
lib/cpe/cryb-cpe.pc
|
|
lib/digest/Makefile
|
|
lib/digest/cryb-digest.pc
|
|
lib/enc/Makefile
|
|
lib/enc/cryb-enc.pc
|
|
lib/hash/Makefile
|
|
lib/hash/cryb-hash.pc
|
|
lib/mac/Makefile
|
|
lib/mac/cryb-mac.pc
|
|
lib/mpi/Makefile
|
|
lib/mpi/cryb-mpi.pc
|
|
lib/oath/Makefile
|
|
lib/oath/cryb-oath.pc
|
|
lib/rand/Makefile
|
|
lib/rand/cryb-rand.pc
|
|
lib/rsaref/Makefile
|
|
lib/test/Makefile
|
|
lib/test/cryb-test.pc
|
|
t/Makefile
|
|
freebsd/Makefile
|
|
])
|
|
AC_CONFIG_FILES([tools/coverage.sh], [chmod +x tools/coverage.sh])
|
|
AC_OUTPUT
|
|
|
|
echo
|
|
echo The following Cryb components will be built:
|
|
echo
|
|
for elem in $elements ; do
|
|
enable=`eval echo \\\$enable_cryb_$elem`
|
|
printf "%16s: %s\n" $elem ${enable:-no}
|
|
done
|
|
echo
|