AC_INIT([tp], [0.1], [the_jk@yahoo.com]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AM_SILENT_RULES([yes]) AC_PROG_CXX AC_PROG_RANLIB AM_PROG_CC_C_O AC_LANG([C++]) DEFINES= # Test c++11 OLDCXXFLAGS="$CXXFLAGS" # Check if it just works with -std=c++11 # The code below was choosen because if you mix a compiler that is C++11 # compatible with a libc++ that isn't fully (like clang 3.3 with gcc 4.6 # libstdcxx) you get errors because of a missing copy constructor for # std::shared_ptr. Add more tests as we find them. CXXFLAGS="-std=c++11 $CXXFLAGS" AC_MSG_CHECKING([for C++11 using (-std=c++11)]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]],[[ std::shared_ptr i(new int(5)); std::shared_ptr j(i); ]])], [AC_MSG_RESULT([yes]) DEFINES="$DEFINES -std=c++11"], [AC_MSG_RESULT([no]) CXXFLAGS="-std=c++11 -stdlib=libc++ $CXXFLAGS" AC_MSG_CHECKING([for C++11 using (-std=c++11 -stdlib=libc++)]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]],[[ std::shared_ptr i(new int(5)); std::shared_ptr j(i); ]])], [AC_MSG_RESULT([yes]) DEFINES="$DEFINES -std=c++11 -stdlib=libc++"], [AC_MSG_RESULT([no]) AC_MSG_ERROR([No working C++11 support])])]) CXXFLAGS="$OLDCXXFLAGS" AX_CXXFLAGS_WARN_ALL([DEFINES]) AX_APPEND_COMPILE_FLAGS([-fno-rtti -fno-exceptions -fvisibility=hidden],DEFINES) extra_flags= AX_CHECK_COMPILE_FLAG([-Werror], [extra_flags=-Werror]) AX_APPEND_COMPILE_FLAGS([-Wextra -Wno-missing-field-initializers -Wno-maybe-uninitialized],DEFINES,[$extra_flags]) AC_ARG_ENABLE([debug], AC_HELP_STRING([compile with debug options]), if test "x$enableval" = "xyes"; then DEFINES="$DEFINES -g -O0 -DDEBUG" else DEFINES="$DEFINES -DNDEBUG" fi) AC_SUBST([DEFINES]) AX_GCC_FUNC_ATTRIBUTE([format]) AC_CHECK_HEADERS([sys/ioctl.h]) # accept AC_CHECK_FUNCS([accept4]) # Thread THREAD_CFLAGS=-pthread THREAD_LIBS= AC_SUBST([THREAD_CFLAGS]) AC_SUBST([THREAD_LIBS]) # SSL have_ssl=0 ssl_name="no SSL library found" ssl_mbedtls=0 ssl_openssl=0 SSL_CFLAGS= SSL_LIBS= # Check for mbedtls AC_ARG_ENABLE([mbedtls], [AC_HELP_STRING([--disable-mbedtls], [do not use mbedtls even if found])], [mbedtls_check=$enableval], [mbedtls_check=yes]) AS_IF([test x$mbedtls_check = xyes], [AC_CHECK_HEADERS([mbedtls/ssl.h], [AC_CHECK_LIB([mbedcrypto], [mbedtls_ctr_drbg_random], [AC_CHECK_LIB([mbedx509], [mbedtls_x509_crt_init], [AC_CHECK_LIB([mbedtls], [mbedtls_ssl_init], [have_ssl=1 ssl_mbedtls=1 ssl_name=mbedtls SSL_LIBS="-lmbedtls -lmbedx509 -lmbedcrypto"],, [-lmbedx509 -lmbedcrypto])],, [-lmbedcrypto])])])]) # Check for openssl PKG_PROG_PKG_CONFIG AS_IF([test x$have_ssl != x1], [AC_ARG_ENABLE([openssl], [AC_HELP_STRING([--disable-openssl], [do not use openssl even if found])], [openssl_check=$enableval], [openssl_check=yes]) AS_IF([test x$openssl_check = xyes], [openssl_need="openssl >= 1.0.2" PKG_CHECK_EXISTS([$openssl_need], [PKG_CHECK_MODULES([SSL], [$openssl_need]) have_ssl=1 ssl_openssl=1 ssl_name=openssl])])]) AC_SUBST([SSL_CFLAGS]) AC_SUBST([SSL_LIBS]) AC_DEFINE_UNQUOTED([HAVE_SSL],[$have_ssl],[define to 1 if any SSL support is compiled in]) AM_CONDITIONAL([HAVE_SSL],[test "x$have_ssl" = "x1"]) AM_CONDITIONAL([HAVE_MBEDTLS],[test "x$ssl_mbedtls" = "x1"]) AM_CONDITIONAL([HAVE_OPENSSL],[test "x$ssl_openssl" = "x1"]) # pcap have_pcap=0 AC_ARG_ENABLE([pcap], [AC_HELP_STRING([--disable-pcap], [do not use libpcap even if found])], [pcap_check=$enableval], [pcap_check=yes]) AS_IF([test x$pcap_check = xyes], [AC_PATH_TOOL([pcap_config], [pcap-config]) AS_IF([test -n "$pcap_config"], [PCAP_CFLAGS=`$pcap_config --cflags` PCAP_LIBS=`$pcap_config --libs` have_pcap=1]) ]) AC_SUBST([PCAP_CFLAGS]) AC_SUBST([PCAP_LIBS]) AC_DEFINE_UNQUOTED([HAVE_PCAP],[$have_pcap],[define to 1 if libpcap is linked]) AM_CONDITIONAL([HAVE_PCAP],[test "x$have_pcap" = "x1"]) gui_name="None" AC_ARG_ENABLE([all-gui], [AC_HELP_STRING([--enable-all-gui], [build all GUI toolkit binaries])], [all_gui=$enableval], [all_gui=no]) # QT have_qt=0 AC_ARG_ENABLE([qt], [AC_HELP_STRING([--disable-qt], [do not use QT even if found])], [qt_check=$enableval], [qt_check=yes]) AS_IF([test x$qt_check = xyes], [qt_need="Qt5Widgets >= 5.5.0" PKG_CHECK_EXISTS([$qt_need], [PKG_CHECK_MODULES([QT], [$qt_need]) PKG_CHECK_VAR([QT_CONFIG], [Qt5Core], [qt_config]) AS_IF([echo $QT_CONFIG | grep -q reduce_relocations], [QT_CFLAGS="$QT_CFLAGS -fPIC"]) have_qt=1 gui_name="Qt 5"]) ]) AM_CONDITIONAL([HAVE_QT],[test "x$have_qt" = "x1"]) # GTK have_gtk=0 AC_ARG_ENABLE([gtk], [AC_HELP_STRING([--disable-gtk], [do not use GTK even if found])], [gtk_check=$enableval], [gtk_check=yes]) AS_IF([test x$gtk_check = xyes -a \( x$have_qt != x1 -o x$all_gui = xyes \)], [gtk_need="gtk+-3.0 >= 3.18" PKG_CHECK_EXISTS([$gtk_need], [PKG_CHECK_MODULES([GTK], [$gtk_need]) have_gtk=1 AS_IF([test x$have_qt = x1], [gui_name="$gui_name GTK+-3.0"], [gui_name="GTK+-3.0"]) ]) AS_IF([test x$have_gtk == x1], [GLIB_GSETTINGS]) ]) AM_CONDITIONAL([HAVE_GTK],[test "x$have_gtk" = "x1"]) AM_CONDITIONAL([HAVE_GUI],[test "x$have_gtk" = "x1" -o "x$have_qt" = "x1"]) comp_names='' # zlib AX_CHECK_ZLIB([ comp_names="${comp_names}zlib " AC_DEFINE([HAVE_ZLIB], [1], [define to 1 if you have zlib]) ZLIB_CFLAGS="-I${ZLIB_HOME}/include" ZLIB_LIBS="-L${ZLIB_HOME}/lib -lz" ]) AC_SUBST([ZLIB_CFLAGS]) AC_SUBST([ZLIB_LIBS]) # bzip2 AX_CHECK_BZLIB([ comp_names="${comp_names}bzip2 " AC_DEFINE([HAVE_BZIP2], [1], [define to 1 if you have bzip2]) BZIP2_CFLAGS="-I${BZLIB_HOME}/include" BZIP2_LIBS="-L${BZLIB_HOME}/lib -lbz2" ]) AC_SUBST([BZIP2_CFLAGS]) AC_SUBST([BZIP2_LIBS]) AC_ARG_ENABLE([update-mimedb], [AC_HELP_STRING([--disable-update-mimedb], [disable the update-mime-database after install])], [enable_update_mimedb=$enableval], [enable_update_mimedb=yes]) AM_CONDITIONAL([ENABLE_UPDATE_MIMEDB], [test "x$enable_update_mimedb" = "xyes"]) AS_IF([test "x$have_gtk" = "x1" -o "x$have_qt" = "x1"], [AC_PATH_PROG([UPDATE_MIME_DATABASE], [update-mime-database], [no]) AC_PATH_PROG([UPDATE_DESKTOP_DATABASE], [update-desktop-database], [no])]) AS_IF([test "x$have_gtk" = "x1"], [AC_PATH_PROG([GTK_UPDATE_ICON_CACHE], [gtk-update-icon-cache], [no])]) # Finish up AC_CONFIG_HEADERS([src/config.h]) AC_OUTPUT([Makefile src/Makefile data/Makefile test/Makefile]) AC_MSG_NOTICE([SSL library used: $ssl_name]) AC_MSG_NOTICE([Compression libs: $comp_names]) AC_MSG_NOTICE([GUI toolkit: $gui_name])