AC_INIT([kvazaar], m4_esyscmd([printf $(awk '/#define KVZ_VERSION/ { print $3 }' src/global.h)])) AC_CONFIG_SRCDIR([src/encmain.c]) # Library version number, modify: # - When modifying kvazaar.h. # - Modify either major or minor. # - When making a new release. # - If major or minor did not change since last release. # - Check git history to see if someone forgot to increment major or minor. # - Increment release. # # major: # - Increment when ABI changes, meaning lib users need to be recompiled. # - ABI changes when anything existing gets modified, including sizes of structs. # minor: # - Increment when only API changes in a backwards compatible way without breaking ABI. # - We count adding parameters to bottom of kvz_config as ABI compatible, because user # shouldn't copy that struct or care about it's size. # - If not sure, increment major instead. # release: # - Increment when making new releases and major or minor was not changed since last release. # # Here is a somewhat sane guide to lib versioning: http://apr.apache.org/versioning.html ver_major=6 ver_minor=5 ver_release=0 # Prevents configure from adding a lot of defines to the CFLAGS AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([-Wall dist-bzip2 dist-xz foreign subdir-objects]) AM_SILENT_RULES([yes]) AC_PROG_CC AC_PROG_CC_C99 AM_PROG_AR AC_PROG_CXX # Get fread that can read more than 2GB on 32 bit systems. AC_SYS_LARGEFILE LT_INIT([win32-dll]) AC_CANONICAL_HOST flag_gcc_on_mingw="false" case x"${host_os}" in x"cygwin"*|x"mingw"*) if test x"${CC}" = x"gcc" ; then flag_gcc_on_mingw="true" fi esac AX_CHECK_COMPILE_FLAG([-maltivec],[flag_altivec="true"]) AX_CHECK_COMPILE_FLAG([-mavx2], [flag_avx2="true"]) AX_CHECK_COMPILE_FLAG([-msse4.1], [flag_sse4_1="true"]) AX_CHECK_COMPILE_FLAG([-msse2], [flag_sse2="true"]) AX_CHECK_COMPILE_FLAG([-mbmi], [flag_bmi="true"]) AX_CHECK_COMPILE_FLAG([-mabm], [flag_abm="true"]) AX_CHECK_COMPILE_FLAG([-mpopcnt], [flag_popcnt="true"]) AX_CHECK_COMPILE_FLAG([-mlzcnt], [flag_lzcnt="true"]) AX_CHECK_COMPILE_FLAG([-mbmi2], [flag_bmi2="true"]) # Do we need -mpopcnt and -mlzcnt, or -mabm to use POPCNT and LZCNT # instructions? Ask GCC and Clang, and they have different answers. AM_CONDITIONAL([HAVE_ALTIVEC], [test x"$flag_altivec" = x"true"]) AM_CONDITIONAL([HAVE_AVX2_GCC], [test x"$flag_avx2" = x"true" -a x"$flag_bmi" = x"true" -a x"$flag_abm" = x"true" -a x"$flag_bmi2" = x"true" -a x"$flag_gcc_on_mingw" = x"false"]) AM_CONDITIONAL([HAVE_AVX2_CLANG], [test x"$flag_avx2" = x"true" -a x"$flag_bmi" = x"true" -a x"$flag_popcnt" = x"true" -a x"$flag_lzcnt" = x"true" -a x"$flag_bmi2" = x"true" -a x"$flag_gcc_on_mingw" = x"false"]) AM_CONDITIONAL([HAVE_SSE4_1], [test x"$flag_sse4_1" = x"true"]) AM_CONDITIONAL([HAVE_SSE2], [test x"$flag_sse2" = x"true"]) KVZ_CFLAGS="-Wall -Wextra -Wvla -Wno-sign-compare -Wno-unused-parameter -I$srcdir/src -I$srcdir/src/extras -ftree-vectorize -fvisibility=hidden" CFLAGS="$KVZ_CFLAGS $CFLAGS" AC_SEARCH_LIBS([log], [m c], [], [exit 1]) AC_SEARCH_LIBS([pow], [m c], [], [exit 1]) AC_SEARCH_LIBS([sqrt], [m c], [], [exit 1]) CPPFLAGS="-DKVZ_DLL_EXPORTS $CPPFLAGS" # We need to force AX_PTHREAD to check -pthread -lpthread since otherwise # it only outputs -pthread for GCC. Without -lpthread GCC does not link the # shared library against the pthread library (even though it does link the # executable). PTHREAD_CFLAGS=-pthread PTHREAD_LIBS=-lpthread # This does workarounds for pthreads on various compilers. AX_PTHREAD([],[AC_MSG_ERROR([POSIX threads not found])]) CFLAGS="$PTHREAD_CFLAGS $CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # --enable-werror AC_ARG_ENABLE([werror], [AS_HELP_STRING([--enable-werror], [treat warnings as errors [no]])], [CFLAGS="-Werror $CFLAGS"], [] ) # host and cpu specific settings AS_CASE([$host_cpu], [i?86], [BITS="32" ASFLAGS="$ASFLAGS -DARCH_X86_64=0" X86="true"], [x86_64], [BITS="64" ASFLAGS="$ASFLAGS -DARCH_X86_64=1 -m amd64" X86="true"], [powerpc*], [PPC="true"] ) AS_CASE([$host_os], [darwin*], [ ASFLAGS="$ASFLAGS -f macho$BITS -DPREFIX" ], [cygwin*|msys*|mingw*], [ CFLAGS="$CFLAGS -D__USE_MINGW_ANSI_STDIO=1" AS_IF( [test "x$BITS" = "x32"], [ ASFLAGS="$ASFLAGS -fwin32 -DPREFIX -DHAVE_ALIGNED_STACK=0" ], [ ASFLAGS="$ASFLAGS -fwin64 -DHAVE_ALIGNED_STACK=1" ] ) ], [midipix*], [ AS_IF( [test "x$BITS" = "x32"], [ ASFLAGS="$ASFLAGS -fwin32 -DPREFIX -DHAVE_ALIGNED_STACK=0" ], [ ASFLAGS="$ASFLAGS -fwin64 -DHAVE_ALIGNED_STACK=1" ] ) ], [linux*|*kfreebsd*], [ ASFLAGS="$ASFLAGS -f elf$BITS" LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" LIBS="$LIBS -lrt" ], [ ASFLAGS="$ASFLAGS -f elf$BITS" LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" ] ) # YASM checks AS_IF([test "x$X86" = "xtrue"], [ AC_CHECK_TOOL([YASM], [yasm], [no]) ]) AS_IF([test "x$YASM" != "xno"], [have_yasm="yes"]) AC_ARG_ENABLE([asm], [AS_HELP_STRING([--disable-asm], [disable assembly [no]])], [], [enable_asm="yes"] ) AS_IF([test "x$enable_asm" != "xno" -a $have_yasm != "yes"], [enable_asm="no"] ) AM_CONDITIONAL([HAVE_X86], [test "x$X86" = "xtrue"]) AM_CONDITIONAL([HAVE_PPC], [test "x$PPC" = "xtrue"]) AM_CONDITIONAL([HAVE_ARM], [test "x$ARM" = "xtrue"]) AM_CONDITIONAL([ENABLE_ASM], [test "x$enable_asm" = "xyes" -a "x$have_yasm" = "xyes" ]) AC_ARG_VAR([ASFLAGS], [ASFLAGS to use for assembler]) AC_SUBST([ASFLAGS]) KVZ_API_VERSION="$ver_major:$ver_minor:$ver_release" AC_SUBST([KVZ_API_VERSION]) AC_CONFIG_FILES([Makefile src/Makefile src/kvazaar.pc tests/Makefile]) AC_OUTPUT