X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/1c8e76bd932668c8e26f9984ad008c0027dc1167..1da1ed6a5815deef6c33d74f1eb3c856793df3e5:/configure.ac diff --git a/configure.ac b/configure.ac index c3e55ca4..715a5c28 100644 --- a/configure.ac +++ b/configure.ac @@ -32,6 +32,7 @@ AC_INIT([catacomb], AUTO_VERSION, [mdw@distorted.org.uk]) AC_CONFIG_SRCDIR([catacomb.pc.in]) AC_CONFIG_AUX_DIR([config]) AM_INIT_AUTOMAKE([foreign parallel-tests color-tests subdir-objects]) +AC_CANONICAL_HOST mdw_SILENT_RULES AC_PROG_CC @@ -39,11 +40,102 @@ AX_CFLAGS_WARN_ALL AM_PROG_LIBTOOL mdw_LIBTOOL_VERSION_INFO +AM_PROG_AS + AC_PROG_YACC AC_SUBST(AM_CFLAGS) dnl-------------------------------------------------------------------------- +dnl Host-specific configuration. + +AC_MSG_CHECKING([CPU family and ABI]) + +dnl The table of CPU families and ABIs which we might support. Support is +dnl not uniform: each dispatched function might or might not have an +dnl implementation for any particular CPU/ABI combination. +AC_DEFUN([catacomb_CPU_FAMILIES], + [$1([i[[3-6]]86,cygwin], [x86], [win]) + $1([i[[3-6]]86,*], [x86], [sysv]) + $1([x86_64,cygwin], [amd64], [win]) + $1([x86_64,*], [amd64], [sysv]) + $1([armv*,*-gnueabi | armv*,*-gnueabihf], [armel], [gnueabi])]) + +dnl A utility to clear the `seen' flags, used so as to process each CPU or +dnl ABI once. +m4_define([catacomb_CLEAR_FLAGS], +[m4_ifdef([catacomb_seen_cpu/$2], + [m4_undefine([catacomb_seen_cpu/$2])])dnl +m4_ifdef([catacomb_seen_abi/$3], + [m4_undefine([catacomb_seen_abi/$3])])]) + +dnl Identify the current host. +case $host_cpu,$host_os in + m4_define([catacomb_CPU_CASE], + [$1) CPUFAM=$2 ABI=$3 ;; +]) + catacomb_CPU_FAMILIES([catacomb_CPU_CASE]) + *) CPUFAM=nil ABI=nil ;; +esac + +dnl Figure out the current CPU. +catacomb_CPU_FAMILIES([catacomb_CLEAR_FLAGS]) +case $CPUFAM in + m4_define([catacomb_DEFINE_CPU], + [m4_ifdef([catacomb_seen_cpu/$2], [], + [$2) + AC_DEFINE([CPUFAM_]m4_translit([$2], [a-z], [A-Z]), [1], + [Define if host CPU family is \`$2\'.]) + ;;m4_define([catacomb_seen_cpu/$2], [t])])]) + catacomb_CPU_FAMILIES([catacomb_DEFINE_CPU]) + nil) ;; + *) AC_MSG_ERROR([BUG: unexpected cpufam \`$CPUFAM']) ;; +esac +AC_SUBST([CPUFAM]) + +dnl Figure out the current ABI. +catacomb_CPU_FAMILIES([catacomb_CLEAR_FLAGS]) +case $ABI in + m4_define([catacomb_DEFINE_ABI], + [m4_ifdef([catacomb_seen_abi/$3], [], + [$3) + AC_DEFINE([ABI_]m4_translit([$3], [a-z], [A-Z]), [1], + [Define if host ABI variant is \`$3\'.]) + ;;m4_define([catacomb_seen_abi/$3], [t])])]) + catacomb_CPU_FAMILIES([catacomb_DEFINE_ABI]) + nil) ;; + *) AC_MSG_ERROR([BUG: unexpected ABI \`$ABI']) ;; +esac +AC_SUBST([ABI]) + +dnl Establish Automake conditions for things. +catacomb_CPU_FAMILIES([catacomb_CLEAR_FLAGS]) +m4_define([catacomb_COND_CPU], +[m4_define([_CPU], m4_translit([$2], [a-z], [A-Z])) +m4_define([_ABI], m4_translit([$3], [a-z], [A-Z])) +AM_CONDITIONAL([CPUABI_]_CPU[_]_ABI, [test x$CPUFAM/$ABI = x$2/$3]) +m4_ifdef([catacomb_seen_cpu/$2], [], +[AM_CONDITIONAL([CPUFAM_]_CPU, [test x$CPUFAM = x$2])dnl +m4_define([catacomb_seen_cpu/$2], [t])]) +m4_ifdef([catacomb_seen_abi/$3], [], +[AM_CONDITIONAL([ABI_]_ABI, [test x$ABI = x$3])dnl +m4_define([catacomb_seen_abi/$3], [t])])]) +catacomb_CPU_FAMILIES([catacomb_COND_CPU]) +AM_CONDITIONAL([KNOWN_CPUFAM], [test x$CPUFAM != xnil]) + +dnl Report on what we found. +case $CPUFAM in + nil) AC_MSG_RESULT([not supported]) ;; + *) AC_MSG_RESULT([$CPUFAM/$ABI]) ;; +esac + +dnl Some equipment wanted for checking CPU features at runtime. +AC_CHECK_HEADERS([asm/hwcap.h]) +AC_CHECK_HEADERS([sys/auxv.h]) +AC_CHECK_HEADERS([linux/auxvec.h]) +AC_CHECK_FUNCS([getauxval]) + +dnl-------------------------------------------------------------------------- dnl C programming environment. dnl Find out if we're cross-compiling.