X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fconfigure.ac;h=988fc22835f37d2692bc961b073a5117d4c5fbb2;hb=46e3ed2921bd4e5de81fbc36fcb6a82d30d1499f;hp=b2bbe3c0412cc343accfb74ac7a25e75c1a0ae04;hpb=6dff66ff2150a102f1594ac8a92f99e5bb1186e4;p=folly.git diff --git a/folly/configure.ac b/folly/configure.ac index b2bbe3c0..988fc228 100644 --- a/folly/configure.ac +++ b/folly/configure.ac @@ -3,13 +3,14 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(folly, 0.1, folly@fb.com) -m4_define([folly_libtool_current], [1]) +m4_define([folly_version_str], m4_esyscmd_s([cat VERSION])) + +AC_INIT([folly], m4_translit(folly_version_str, [:], [.]), [folly@fb.com]) # We assume all revisions are backwards incompatible. -LT_VERSION=folly_libtool_current:0:0 -AC_SUBST(LT_VERSION) +LT_VERSION=folly_version_str:0 +AC_SUBST([LT_VERSION]) AC_CONFIG_SRCDIR([Likely.h]) AC_CONFIG_HEADERS([config.h]) @@ -90,75 +91,160 @@ AC_CHECK_TYPE([__int128], [AC_DEFINE([HAVE_INT128_T], [1], [Define if __int128 exists])], [AC_DEFINE([HAVE_INT128_T], [0], [Define if __int128 does not exist])]) AC_CHECK_TYPES([ptrdiff_t]) -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[ - #pragma GCC diagnostic error "-Wattributes" - extern "C" void (*test_ifunc(void))() { return 0; } - void func() __attribute__((ifunc("test_ifunc")));] - ], - [AC_DEFINE([HAVE_IFUNC], [1], [Define to 1 if the compiler supports ifunc])], - [AC_DEFINE([HAVE_IFUNC], [0], [Define to 0 if the compiler doesn't support ifunc])] -) -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[class C { virtual void f() final {} virtual void g() {} }; - class D : public C { virtual void g() override {} };]], - [AC_DEFINE([FINAL], [final], - [Define to "final" if the compiler supports C++11 "final"]) - AC_DEFINE([OVERRIDE], [override], - [Define to "override" if the compiler supports C++11 "override"])], - [AC_DEFINE([FINAL], [], - [Define to "final" if the compiler supports C++11 "final"]) - AC_DEFINE([OVERRIDE], [], - [Define to "override" if the compiler supports C++11 "override"])] -) - -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[ - #include - #include - void func() { std::this_thread::sleep_for(std::chrono::seconds(1)); }]], - [AC_DEFINE([HAVE_STD__THIS_THREAD__SLEEP_FOR], [1], - [Define to 1 if std::this_thread::sleep_for() is defined.])]) - -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[ - #include - static constexpr int val = strlen("foo");]], - [AC_DEFINE([HAVE_CONSTEXPR_STRLEN], [1], - [Define to 1 if strlen(3) is constexpr.])]) - -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[ - #include - #if !_LIBCPP_VERSION - #error No libc++ - #endif - void func() {}] - ], - [AC_DEFINE([USE_LIBCPP], [1], [Define to 1 if we're using libc++.])]) - -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE[ - #include - const bool val = std::is_trivially_copyable::value;] - ], - [AC_DEFINE([HAVE_STD__IS_TRIVIALLY_COPYABLE], [1], - [Define to 1 if we have a usable std::is_trivially_copyable - implementation.])]) + +AC_CACHE_CHECK( + [for ifunc support], + [folly_cv_prog_cc_ifunc], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #pragma GCC diagnostic error "-Wattributes" + extern "C" void (*test_ifunc(void))() { return 0; } + void func() __attribute__((ifunc("test_ifunc")));] + ], + [folly_cv_prog_cc_ifunc=yes], + [folly_cv_prog_cc_ifunc=no])]) + +if test "$folly_cv_prog_cc_ifunc" = "yes"; then + AC_DEFINE([HAVE_IFUNC], [1], [Define to 1 if the compiler supports ifunc]) +fi + +AC_CACHE_CHECK( + [for final and override support], + [folly_cv_c_final_override], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[class C { virtual void f() final {} virtual void g() {} }; + class D : public C { virtual void g() override {} };]], + [folly_cv_c_final_override=yes], + [folly_cv_c_final_override=no])]) + +if test "$folly_cv_c_final_override" = "yes"; then + final_val=final + override_val=override +else + final_val= + override_val= +fi + +AC_DEFINE_UNQUOTED( + [FINAL], [$final_val], + [Define to "final" if the compiler supports C++11 "final"]) +AC_DEFINE_UNQUOTED( + [OVERRIDE], [$override_val], + [Define to "override" if the compiler supports C++11 "override"]) + +AC_CACHE_CHECK( + [for std::this_thread::sleep_for], + [folly_cv_func_this_thread_sleep_for], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + #include + void func() { std::this_thread::sleep_for(std::chrono::seconds(1)); }]], + [folly_cv_func_this_thread_sleep_for=yes], + [folly_cv_func_this_thread_sleep_for=no])]) + +if test "$folly_cv_func_this_thread_sleep_for" = yes; then + AC_DEFINE([HAVE_STD__THIS_THREAD__SLEEP_FOR], [1], + [Define to 1 if std::this_thread::sleep_for() is defined.]) +fi + +AC_CACHE_CHECK( + [for constexpr strlen], + [folly_cv_func_constexpr_strlen], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + static constexpr int val = strlen("foo");]], + [folly_cv_func_constexpr_strlen=yes], + [folly_cv_func_constexpr_strlen=no])]) + +if test "$folly_cv_func_constexpr_strlen" = yes; then + AC_DEFINE([HAVE_CONSTEXPR_STRLEN], [1], + [Define to 1 if strlen(3) is constexpr.]) +fi + +AC_CACHE_CHECK( + [for libc++], + [folly_cv_lib_libcpp], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + #if !_LIBCPP_VERSION + #error No libc++ + #endif + void func() {}] + ], + [folly_cv_lib_libcpp=yes], + [folly_cv_lib_libcpp=no])]) + +if test "$folly_cv_lib_libcpp" = yes; then + AC_DEFINE([USE_LIBCPP], [1], [Define to 1 if we're using libc++.]) +fi + +AC_CACHE_CHECK( + [for usable std::is_trivially_copyable], + [folly_cv_decl_std_is_trivially_copyable], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + const bool val = std::is_trivially_copyable::value;] + ], + [folly_cv_decl_std_is_trivially_copyable=yes], + [folly_cv_decl_std_is_trivially_copyable=no])]) + +if test "$folly_cv_decl_std_is_trivially_copyable" = yes; then + AC_DEFINE([HAVE_STD__IS_TRIVIALLY_COPYABLE], [1], + [Define to 1 if we have a usable std::is_trivially_copyable + implementation.]) +fi + +AC_CACHE_CHECK( + [gflags namespace], + [folly_cv_decl_gflags_namespace], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + void foo() { gflags::GetArgv(); }] + ], + [folly_cv_decl_gflags_namespace=gflags], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE[ + #include + void foo() { google::GetArgv(); }] + ], + [folly_cv_decl_gflags_namespace=google], + [folly_cv_decl_gflags_namespace=error])])]) + +if test "$folly_cv_decl_gflags_namespace" = error; then + AC_MSG_ERROR([Cannot determine gflags namespace]) +else + AC_DEFINE_UNQUOTED( + [GFLAGS_NAMESPACE], [$folly_cv_decl_gflags_namespace], + [Define to gflags namespace (usually "google" or "gflags")]) + if test "$folly_cv_decl_gflags_namespace" != gflags; then + AC_DEFINE([UNUSUAL_GFLAGS_NAMESPACE], [1], + [Define to 1 if the gflags namespace is not "gflags"]) + fi +fi # Figure out if we support weak symbols. If not, we will link in some null # stubs for functions that would otherwise be weak. -AC_LINK_IFELSE( - [AC_LANG_SOURCE[ - extern "C" void configure_link_extern_weak_test() __attribute__((weak)); - int main(int argc, char** argv) { - return configure_link_extern_weak_test == nullptr; - }] - ], - [ - ac_have_weak_symbols="yes" - AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], - [Define to 1 if the linker supports weak symbols.])]) +AC_CACHE_CHECK( + [for weak symbol support], + [folly_cv_prog_cc_weak_symbols], + [AC_LINK_IFELSE( + [AC_LANG_SOURCE[ + extern "C" void configure_link_extern_weak_test() __attribute__((weak)); + int main(int argc, char** argv) { + return configure_link_extern_weak_test == nullptr; + }]], + [folly_cv_prog_cc_weak_symbols="yes"], + [folly_cv_prog_cc_weak_symbols="no"])]) + +if test "$folly_cv_prog_cc_weak_symbols" = yes; then + AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], + [Define to 1 if the linker supports weak symbols.]) +fi AC_SEARCH_LIBS([cplus_demangle_v3_callback], [iberty_pic iberty]) if test "$ac_cv_search_cplus_demangle_v3_callback" != "no" ; then @@ -186,25 +272,33 @@ AC_CHECK_FUNCS([getdelim \ rallocm \ malloc_size \ malloc_usable_size \ - memrchr]) + memrchr \ + pipe2]) if test "$ac_cv_func_pthread_yield" = "no"; then AC_CHECK_HEADERS([sched.h]) AC_CHECK_FUNCS([sched_yield]) fi -AC_CHECK_HEADER([lz4.h], AC_CHECK_LIB([lz4], [main])) +AC_CHECK_HEADER([lz4.h], AC_CHECK_LIB([lz4], [LZ4_decompress_safe])) AC_CHECK_HEADER([snappy.h], AC_CHECK_LIB([snappy], [main])) AC_CHECK_HEADER([zlib.h], AC_CHECK_LIB([z], [main])) AC_CHECK_HEADER([lzma.h], AC_CHECK_LIB([lzma], [main])) -AC_SUBST(AM_CPPFLAGS, '-I../$(top_srcdir)'" "'-I$(top_srcdir)/io'" "'-I$(top_srcdir)/test'" $BOOST_CPPFLAGS") -AC_SUBST(AM_LDFLAGS, "$BOOST_LDFLAGS $BOOST_THREAD_LIB $BOOST_FILESYSTEM_LIB $BOOST_SYSTEM_LIB $BOOST_REGEX_LIB -lpthread") +# Include directory that contains "folly" so #include works +AM_CPPFLAGS='-I$(top_srcdir)/..' +AM_CPPFLAGS="$AM_CPPFLAGS $BOOST_CPPFLAGS" +AM_LDFLAGS="$AM_LDFLAGS $BOOST_THREAD_LIB $BOOST_FILESYSTEM_LIB" +AM_LDFLAGS="$AM_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_REGEX_LIB -lpthread" + +AC_SUBST([AM_CPPFLAGS]) +AC_SUBST([AM_LDFLAGS]) AM_CONDITIONAL([HAVE_STD_THREAD], [test "$ac_cv_header_features" = "yes"]) AM_CONDITIONAL([HAVE_X86_64], [test "$build_cpu" = "x86_64"]) AM_CONDITIONAL([HAVE_LINUX], [test "$build_os" == "linux-gnu"]) -AM_CONDITIONAL([HAVE_WEAK_SYMBOLS], [test "$ac_have_weak_symbols" = "yes"]) +AM_CONDITIONAL([HAVE_WEAK_SYMBOLS], + [test "$folly_cv_prog_cc_weak_symbols" = "yes"]) AM_CONDITIONAL([HAVE_BITS_FUNCTEXCEPT], [test "$ac_cv_header_bits_functexcept" = "yes"]) # Output