# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) AC_INIT([libde265], [1.0.5], [farin@struktur.de]) AC_CONFIG_SRCDIR([libde265/de265.cc]) AC_CONFIG_HEADERS([config.h]) NUMERIC_VERSION=0x01000500 # Numeric representation of the version (A.B.C[.D] = 0xAABBCCDD) AC_SUBST(NUMERIC_VERSION) # From https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html: # If the library source code has changed at all since the last update, then increment revision (‘c:r:a’ becomes ‘c:r+1:a’). # If any interfaces have been added, removed, or changed since the last update, increment current, and set revision to 0. # If any interfaces have been added since the last public release, then increment age. # If any interfaces have been removed or changed since the last public release, then set age to 0. LIBDE265_CURRENT=0 LIBDE265_REVISION=12 LIBDE265_AGE=0 # --------------------------------------------------------------------------- AC_CANONICAL_SYSTEM AC_SUBST(LIBDE265_CURRENT) AC_SUBST(LIBDE265_REVISION) AC_SUBST(LIBDE265_AGE) dnl Initialize libtool LT_INIT AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. AM_PROG_AS AC_PROG_CXX AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_GREP # Initialize automake stuff AM_INIT_AUTOMAKE CFLAGS="$CFLAGS -std=c99" CXXFLAGS="$CXXFLAGS -Werror=return-type -Werror=unused-result -Werror=reorder" AX_CXX_COMPILE_STDCXX_11() dnl Use -Wall if we have gcc. changequote(,)dnl if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi changequote([,])dnl dnl gl_VISIBILITY dnl : In encoder branch, we still export all library symbols : HAVE_VISIBILITY=0 AM_CONDITIONAL([HAVE_VISIBILITY], [test "x$HAVE_VISIBILITY" != "x0"]) # Checks for header files. AC_CHECK_HEADERS([stdint.h stdlib.h string.h malloc.h signal.h setjmp.h stddef.h sys/time.h]) AC_LANG_PUSH(C++) OLD_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CXXFLAGS" AC_CHECK_HEADERS([cstdint]) CPPFLAGS="$OLD_CPPFLAGS" AC_LANG_POP(C++) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T AC_TYPE_INT8_T AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_CHECK_TYPES([ptrdiff_t]) AC_C_INLINE # Checks for library functions. AC_CHECK_FUNCS([malloc memmove memset __malloc_hook memalign posix_memalign __mingw_aligned_malloc __mingw_aligned_free]) AC_SEARCH_LIBS([pow], [m]) AC_SEARCH_LIBS([sqrt], [m]) AC_SEARCH_LIBS([pthread_create], [pthread]) AC_CHECK_FUNCS([gettimeofday]) AC_CHECK_FUNCS([pow sqrt]) AC_CHECK_FUNCS([strchr strrchr]) AC_FUNC_ALLOCA AC_FUNC_ERROR_AT_LINE # Checking for malloc breaks building on ARM for us. A similar issue is described # here: http://nerdland.net/unstumping-the-internet/malloc-has-not-been-declared/ # AC_FUNC_MALLOC # AC_FUNC_REALLOC AC_FUNC_MKTIME AM_CONDITIONAL(MINGW, expr $host : '.*-mingw' >/dev/null 2>&1) # Check if "__STRICT_ANSI__" is required. AC_MSG_CHECKING([if __STRICT_ANSI__ is required]) AC_LANG_PUSH(C++) AC_TRY_COMPILE([ #include ],[],[need_strict_ansi=no],[need_strict_ansi=yes]); AC_LANG_POP(C++) if eval "test x$need_strict_ansi = xyes"; then CFLAGS="$CFLAGS -D__STRICT_ANSI__" CXXFLAGS="$CXXFLAGS -D__STRICT_ANSI__" fi AC_MSG_RESULT([$need_strict_ansi]) # Check if "std::shared_ptr" is "std::tr1::shared_ptr" AC_MSG_CHECKING([for std::shared_ptr]) AC_LANG_PUSH(C++) AC_TRY_COMPILE([ #include ],[ class A {}; std::shared_ptr a; ],[has_std_shared_ptr=yes],[has_std_shared_ptr=no]); AC_MSG_RESULT([$has_std_shared_ptr]) if eval "test x$has_std_shared_ptr = xno"; then AC_MSG_CHECKING([for std::tr1::shared_ptr]) AC_TRY_COMPILE([ #include ],[ class A {}; std::tr1::shared_ptr a; ],[has_std_tr1_shared_ptr=yes],[has_std_tr1_shared_ptr=no]); AC_MSG_RESULT([$has_std_tr1_shared_ptr]) if eval "test x$has_std_tr1_shared_ptr = xyes"; then AC_DEFINE(USE_STD_TR1_NAMESPACE,1,[Define to 1 if the std::tr1 namespace should be included in the std namespace.]) fi fi AC_LANG_POP(C++) # Check if "std::move" is available (assume always available with clang) AC_MSG_CHECKING([for std::move]) AC_LANG_PUSH(C++) AC_TRY_COMPILE([ #include ],[ #if !defined(__clang__) class A {}; A* a = new A(); A* b = std::move(a); #endif ],[has_std_move=yes],[has_std_move=no]); AC_LANG_POP(C++) if eval "test x$has_std_move = xno"; then AC_DEFINE(NEED_STD_MOVE_FALLBACK,1,[Define to 1 if a fallback for "std::move" is required.]) fi AC_MSG_RESULT([$has_std_move]) # Check if "nullptr" is available AC_MSG_CHECKING([for nullptr]) AC_LANG_PUSH(C++) AC_TRY_COMPILE([ ],[ class A {}; A* a = nullptr; ],[has_nullptr=yes],[has_nullptr=no]); AC_LANG_POP(C++) if eval "test x$has_nullptr = xno"; then AC_DEFINE(NEED_NULLPTR_FALLBACK,1,[Define to 1 if a fallback for "nullptr" is required.]) fi AC_MSG_RESULT([$has_nullptr]) AC_ARG_ENABLE([encoder], AS_HELP_STRING([--disable-encoder], [Do not build encoder.])) if eval "test x$enable_encoder = x" ; then enable_encoder=yes ; fi AM_CONDITIONAL([ENABLE_ENCODER], [test x"$enable_encoder" = x"yes"]) # --- machine dependent optimizations --- #AX_EXT AC_ARG_ENABLE(sse, [AS_HELP_STRING([--disable-sse], [disable SSE optimizations (default=no)])], [disable_sse=yes], [disable_sse=no]) if eval "test x$disable_sse != xyes"; then case $target_cpu in powerpc*) ;; i[[3456]]86*|x86_64*|amd64*) AX_CHECK_COMPILE_FLAG(-msse4.1, ax_cv_support_sse41_ext=yes, []) if test x"$ax_cv_support_sse41_ext" = x"yes"; then # SIMD_FLAGS="$SIMD_FLAGS -msse4.1" AC_DEFINE(HAVE_SSE4_1,1,[Support SSSE4.1 (Streaming SIMD Extensions 4.1) instructions]) else AC_MSG_WARN([Your compiler does not support SSE4.1 instructions, can you try another compiler?]) fi ;; esac fi AM_CONDITIONAL([ENABLE_SSE_OPT], [test x"$ax_cv_support_sse41_ext" = x"yes"]) # CFLAGS+=$SIMD_FLAGS # CFLAGS+=" -march=x86-64" case $target_cpu in arm*) AC_ARG_ENABLE(arm, [AS_HELP_STRING([--disable-arm], [disable ARM optimizations (default=no)])], [disable_arm=yes], [disable_arm=no]) if test x"$disable_arm" != x"yes"; then AC_DEFINE(HAVE_ARM, 1, [Support ARM instructions]) AX_CHECK_COMPILE_FLAG(-mfpu=neon, [ AC_DEFINE(HAVE_NEON, 1, [Support ARM NEON instructions]) ax_cv_support_neon_ext=yes], []) AC_ARG_ENABLE(thumb, [AS_HELP_STRING([--enable-thumb], [disable ARM THUMB instructions (default=no)])], [enable_thumb=yes], [enable_thumb=no]) fi ;; *) disable_arm=yes ;; esac AM_CONDITIONAL([ENABLE_ARM_OPT], [test x"$disable_arm" != x"yes"]) AM_CONDITIONAL([ENABLE_NEON_OPT], [test x"$ax_cv_support_neon_ext" = x"yes"]) AM_CONDITIONAL([ENABLE_ARM_THUMB], [test x"$enable_thumb" != x"no"]) # --- additional logging --- AC_ARG_ENABLE(log-error, [AS_HELP_STRING([--enable-log-error], [turn on logging at error level (default=yes)])], [enable_log_error=$enableval], [enable_log_error=yes]) if eval "test $enable_log_error = yes"; then CXXFLAGS="$CXXFLAGS -DDE265_LOG_ERROR" fi AC_ARG_ENABLE(log-info, [AS_HELP_STRING([--enable-log-info], [turn on logging at info level (default=no)])], [enable_log_info=$enableval], [enable_log_info=no]) if eval "test $enable_log_info = yes"; then CXXFLAGS="$CXXFLAGS -DDE265_LOG_INFO" fi AC_ARG_ENABLE(log-debug, [AS_HELP_STRING([--enable-log-debug], [turn on logging at debug level (default=no)])], [enable_log_debug=$enableval], [enable_log_debug=no]) if eval "test $enable_log_debug = yes"; then CXXFLAGS="$CXXFLAGS -DDE265_LOG_DEBUG" fi AC_ARG_ENABLE(log-trace, [AS_HELP_STRING([--enable-log-trace], [turn on logging at trace level (default=no)])], [enable_log_trace=$enableval], [enable_log_trace=no]) if eval "test $enable_log_trace = yes"; then CXXFLAGS="$CXXFLAGS -DDE265_LOG_TRACE" fi # --- enable example programs --- AC_ARG_ENABLE([dec265], AS_HELP_STRING([--disable-dec265], [Do not build dec265 decoder program.])) AC_ARG_ENABLE([sherlock265], AS_HELP_STRING([--disable-sherlock265], [Do not build sherlock265 visual inspection program.])) if eval "test x$enable_dec265 = x" ; then enable_dec265=yes ; fi if eval "test x$enable_sherlock265 = x" ; then enable_sherlock265=yes ; fi if eval "test x$enable_dec265 = xyes" || eval "test x$enable_sherlock265 = xyes" ; then PKG_CHECK_MODULES([VIDEOGFX], [libvideogfx], [AC_DEFINE([HAVE_VIDEOGFX], [1], [Whether libvideogfx was found.]) AC_SUBST(VIDEOGFX_CFLAGS) AC_SUBST(VIDEOGFX_LIBS) have_videogfx="yes"], [have_videogfx="no"] ) fi if eval "test x$enable_dec265 = xyes" ; then PKG_CHECK_MODULES([SDL], [sdl], [AC_DEFINE([HAVE_SDL], [1], [Whether libsdl was found.]) AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) have_sdl="yes"], [have_sdl="no"] ) fi if eval "test x$enable_sherlock265 = xyes" && eval "test x$have_videogfx != xyes" ; then PKG_CHECK_MODULES([SWSCALE], [libswscale], [AC_DEFINE([HAVE_SWSCALE], [1], [Whether libswscale was found.]) AC_SUBST(SWSCALE_CFLAGS) AC_SUBST(SWSCALE_LIBS) have_swscale="yes"], [have_swscale="no"] ) fi AM_CONDITIONAL([HAVE_VIDEOGFX], [test "x$have_videogfx" = "xyes"]) AM_CONDITIONAL([HAVE_SWSCALE], [test "x$have_swscale" = "xyes"]) AM_CONDITIONAL([HAVE_SDL], [test "x$have_sdl" = "xyes"]) if eval "test $enable_dec265 = yes" && eval "test $have_videogfx != yes" && eval "test $have_sdl != yes" ; then AC_MSG_WARN([Did not find libvideogfx or libsdl, video output of dec265 will be disabled.]) fi if eval "test $enable_sherlock265 = yes" && eval "test $have_videogfx != yes" && eval "test $have_swscale != yes" ; then AC_MSG_WARN([Did not find libvideogfx or libswscale, compilation of sherlock265 will be disabled.]) enable_sherlock265="no" fi if eval "test $enable_sherlock265 = yes" ; then PKG_CHECK_MODULES([QT], [Qt5Core Qt5Gui Qt5Widgets], [found_qt=5], [found_qt=no]) if eval "test $found_qt = no" ; then PKG_CHECK_MODULES([QT], [QtCore QtGui], [found_qt=4]) fi AC_PATH_PROGS([QTCHOOSER],[qtchooser]) if eval "test x$QTCHOOSER = x" ; then AC_PATH_PROGS([QTMOC],[moc-qt$found_qt moc]) if eval "test x$QTMOC = x" ; then AC_MSG_ERROR([Need the "moc" commandline tool which is required to generate the Qt files required for sherlock265.]) fi else QTMOC="$QTCHOOSER -run-tool=moc -qt=$found_qt" fi AC_MSG_CHECKING([for version of $QTMOC]) QTMOC_VERSION=`$QTMOC -v 2>&1 | $GREP -o '[[0-9]]\+.[[0-9]]\+.[[0-9]]\+'` AC_MSG_RESULT([$QTMOC_VERSION]) AX_COMPARE_VERSION([$QTMOC_VERSION], [lt], [$found_qt], [AC_MSG_ERROR([Please install "moc" for Qt$found_qt (found $QTMOC_VERSION).])]) AC_SUBST(QTMOC) fi AM_CONDITIONAL([ENABLE_DEC265], [test "x$enable_dec265" != "xno"]) AM_CONDITIONAL([ENABLE_SHERLOCK265], [test "x$enable_sherlock265" != "xno"]) # --- output configuration results --- AC_MSG_NOTICE([---------------------------------------]) AC_MSG_NOTICE([Building dec265 example: $enable_dec265]) AC_MSG_NOTICE([Building sherlock265 example: $enable_sherlock265]) AC_MSG_NOTICE([Building encoder: $enable_encoder]) AC_MSG_NOTICE([---------------------------------------]) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([libde265/Makefile]) AC_CONFIG_FILES([libde265/arm/Makefile]) AC_CONFIG_FILES([libde265/x86/Makefile]) AC_CONFIG_FILES([libde265/encoder/Makefile]) AC_CONFIG_FILES([libde265/encoder/algo/Makefile]) AC_CONFIG_FILES([libde265/de265-version.h]) AC_CONFIG_FILES([dec265/Makefile]) AC_CONFIG_FILES([enc265/Makefile]) AC_CONFIG_FILES([sherlock265/Makefile]) AC_CONFIG_FILES([tools/Makefile]) AC_CONFIG_FILES([acceleration-speed/Makefile]) AC_CONFIG_FILES([libde265.pc]) AC_OUTPUT