Some opensource build fixes
authorTudor Bosman <tudorb@fb.com>
Tue, 20 May 2014 15:49:16 +0000 (08:49 -0700)
committerDave Watson <davejwatson@fb.com>
Tue, 20 May 2014 19:59:39 +0000 (12:59 -0700)
Summary:
- switch to new versions of ax_boost_*.m4
- versioning in libtool
- better checks in configure.ac

Test Plan: built in an Ubuntu VM

Reviewed By: davejwatson@fb.com

Subscribers: folly@lists

FB internal diff: D1338957

.gitignore
README
folly/Makefile.am
folly/configure.ac
folly/m4/ax_boost_base.m4
folly/m4/ax_boost_regex.m4
folly/m4/ax_boost_thread.m4

index 089c09e..88fa158 100644 (file)
@@ -1,6 +1,7 @@
 *.o
 *.lo
 *.la
+.dirstamp
 Makefile
 Makefile.in
 .libs
diff --git a/README b/README
index b8fb0ab..6c4f673 100644 (file)
--- a/README
+++ b/README
@@ -46,7 +46,10 @@ Dependencies
     - libgoogle-glog-dev
     - libgflags-dev
     - scons (for double-conversion)
-
+    - binutils-dev      (optional)
+    - libiberty-dev     (optional)
+    - libjemalloc-dev   (optional)
   Fedora 17 64-bit
     - gcc
     - gcc-c++
index e0e4d25..07fcb0d 100644 (file)
@@ -238,6 +238,8 @@ if !HAVE_BITS_FUNCTEXCEPT
 libfolly_la_SOURCES += detail/FunctionalExcept.cpp
 endif
 
+libfolly_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LT_VERSION)
+
 FingerprintTables.cpp: generate_fingerprint_tables
        ./generate_fingerprint_tables
 CLEANFILES += FingerprintTables.cpp
@@ -245,9 +247,13 @@ CLEANFILES += FingerprintTables.cpp
 libfollyfingerprint_la_SOURCES = \
        FingerprintTables.cpp
 libfollyfingerprint_la_LIBADD = libfolly.la
+libfollyfingerprint_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LT_VERSION)
 
 libfollybenchmark_la_SOURCES = Benchmark.cpp
 libfollybenchmark_la_LIBADD = libfolly.la
+libfollybenchmark_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LT_VERSION)
 
 libfollytimeout_queue_la_SOURCES = TimeoutQueue.cpp
 libfollytimeout_queue_la_LIBADD = libfolly.la
+libfollytimeout_queue_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LT_VERSION)
+
index 820ea03..b87ac67 100644 (file)
@@ -4,12 +4,19 @@
 
 AC_PREREQ(2.59)
 AC_INIT(folly, 0.1, folly@fb.com)
+
+m4_define([folly_libtool_current], [1])
+
+# We assume all revisions are backwards incompatible.
+LT_VERSION=folly_libtool_current:0:0
+AC_SUBST(LT_VERSION)
+
 AC_CONFIG_SRCDIR([Likely.h])
 AC_CONFIG_HEADERS([config.h])
 AX_PREFIX_CONFIG_H([folly-config.h], [folly], [config.h])
 AC_CONFIG_AUX_DIR([build-aux])
 
-AM_INIT_AUTOMAKE([foreign dist-bzip2 nostdinc])
+AM_INIT_AUTOMAKE([foreign dist-bzip2 nostdinc subdir-objects])
 
 AC_CONFIG_MACRO_DIR([m4])
 
@@ -63,6 +70,8 @@ AC_CHECK_LIB([double-conversion],[ceil],[],[AC_MSG_ERROR(
 
 AC_CHECK_LIB([event], [event_set], [], [AC_MSG_ERROR([Unable to find libevent])])
 
+AC_CHECK_LIB([jemalloc], [rallocm])
+
 # Checks for typedefs, structures, and compiler characteristics.
 AC_HEADER_STDBOOL
 AC_C_CONST
index 3507788..8e6ee9a 100644 (file)
@@ -33,7 +33,7 @@
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 20
+#serial 23
 
 AC_DEFUN([AX_BOOST_BASE],
 [
@@ -91,9 +91,23 @@ if test "x$want_boost" = "xyes"; then
     dnl are found, e.g. when only header-only libraries are installed!
     libsubdirs="lib"
     ax_arch=`uname -m`
-    if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then
+    case $ax_arch in
+      x86_64|ppc64|s390x|sparc64|aarch64)
         libsubdirs="lib64 lib lib64"
-    fi
+        ;;
+    esac
+
+    dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give
+    dnl them priority over the other paths since, if libs are found there, they
+    dnl are almost assuredly the ones desired.
+    AC_REQUIRE([AC_CANONICAL_HOST])
+    libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs"
+
+    case ${host_cpu} in
+      i?86)
+        libsubdirs="lib/i386-${host_os} $libsubdirs"
+        ;;
+    esac
 
     dnl first we check the system location for boost libraries
     dnl this location ist chosen if boost libraries are installed with the --layout=system option
@@ -255,4 +269,4 @@ if test "x$want_boost" = "xyes"; then
     LDFLAGS="$LDFLAGS_SAVED"
 fi
 
-])
\ No newline at end of file
+])
index f3e5cc1..918f16a 100644 (file)
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 20
+#serial 22
 
 AC_DEFUN([AX_BOOST_REGEX],
 [
-        AC_ARG_WITH([boost-regex],
-        AS_HELP_STRING([--with-boost-regex@<:@=special-lib@:>@],
+       AC_ARG_WITH([boost-regex],
+       AS_HELP_STRING([--with-boost-regex@<:@=special-lib@:>@],
                    [use the Regex library from boost - it is possible to specify a certain library for the linker
                         e.g. --with-boost-regex=boost_regex-gcc-mt-d-1_33_1 ]),
         [
         if test "$withval" = "no"; then
-                want_boost="no"
+                       want_boost="no"
         elif test "$withval" = "yes"; then
             want_boost="yes"
             ax_boost_user_regex_lib=""
         else
-                    want_boost="yes"
-                        ax_boost_user_regex_lib="$withval"
-                                fi
+                   want_boost="yes"
+               ax_boost_user_regex_lib="$withval"
+               fi
         ],
         [want_boost="yes"]
-        )
+       )
 
-        if test "x$want_boost" = "xyes"; then
+       if test "x$want_boost" = "xyes"; then
         AC_REQUIRE([AC_PROG_CC])
-                CPPFLAGS_SAVED="$CPPFLAGS"
-                        CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
-                                            export CPPFLAGS
+               CPPFLAGS_SAVED="$CPPFLAGS"
+               CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+               export CPPFLAGS
 
-                                                   LDFLAGS_SAVED="$LDFLAGS"
-                                                        LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
-                                                                          export LDFLAGS
+               LDFLAGS_SAVED="$LDFLAGS"
+               LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+               export LDFLAGS
 
         AC_CACHE_CHECK(whether the Boost::Regex library is available,
-                                                           ax_cv_boost_regex,
+                                          ax_cv_boost_regex,
         [AC_LANG_PUSH([C++])
-                         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/regex.hpp>
-                                                                                                                            ]],
+                        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/regex.hpp>
+                                                                                               ]],
                                    [[boost::regex r(); return 0;]])],
                    ax_cv_boost_regex=yes, ax_cv_boost_regex=no)
          AC_LANG_POP([C++])
-                ])
-                        if test "x$ax_cv_boost_regex" = "xyes"; then
-                                AC_DEFINE(HAVE_BOOST_REGEX,,[define if the Boost::Regex library is available])
+               ])
+               if test "x$ax_cv_boost_regex" = "xyes"; then
+                       AC_DEFINE(HAVE_BOOST_REGEX,,[define if the Boost::Regex library is available])
             BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
             if test "x$ax_boost_user_regex_lib" = "x"; then
-                for libextension in `ls $BOOSTLIBDIR/libboost_regex*.so* $BOOSTLIBDIR/libboost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.a*$;\1;'` ; do
+                for libextension in `ls $BOOSTLIBDIR/libboost_regex*.so* $BOOSTLIBDIR/libboost_regex*.dylib* $BOOSTLIBDIR/libboost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.dylib.*;\1;' -e 's;^lib\(boost_regex.*\)\.a.*$;\1;'` ; do
                      ax_lib=${libextension}
-                                            AC_CHECK_LIB($ax_lib, exit,
+                                   AC_CHECK_LIB($ax_lib, exit,
                                  [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break],
                                  [link_regex="no"])
-                                                        done
+                               done
                 if test "x$link_regex" != "xyes"; then
-                for libextension in `ls $BOOSTLIBDIR/boost_regex*.{dll,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a*$;\1;'` ; do
+                for libextension in `ls $BOOSTLIBDIR/boost_regex*.dll* $BOOSTLIBDIR/boost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a.*$;\1;'` ; do
                      ax_lib=${libextension}
-                                            AC_CHECK_LIB($ax_lib, exit,
+                                   AC_CHECK_LIB($ax_lib, exit,
                                  [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break],
                                  [link_regex="no"])
-                                                        done
+                               done
                 fi
 
             else
                for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do
-                                   AC_CHECK_LIB($ax_lib, main,
+                                     AC_CHECK_LIB($ax_lib, main,
                                    [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break],
                                    [link_regex="no"])
                done
@@ -100,12 +100,12 @@ AC_DEFUN([AX_BOOST_REGEX],
             if test "x$ax_lib" = "x"; then
                 AC_MSG_ERROR(Could not find a version of the Boost::Regex library!)
             fi
-                        if test "x$link_regex" != "xyes"; then
-                                               AC_MSG_ERROR(Could not link against $ax_lib !)
-                                                                      fi
-                                                                        fi
+                       if test "x$link_regex" != "xyes"; then
+                               AC_MSG_ERROR(Could not link against $ax_lib !)
+                       fi
+               fi
 
-                                                                                CPPFLAGS="$CPPFLAGS_SAVED"
-                                                                                LDFLAGS="$LDFLAGS_SAVED"
-                                                                                fi
-])
\ No newline at end of file
+               CPPFLAGS="$CPPFLAGS_SAVED"
+       LDFLAGS="$LDFLAGS_SAVED"
+       fi
+])
index 971f7ab..79e12cd 100644 (file)
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 23
+#serial 27
 
 AC_DEFUN([AX_BOOST_THREAD],
 [
-        AC_ARG_WITH([boost-thread],
-        AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@],
+       AC_ARG_WITH([boost-thread],
+       AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@],
                    [use the Thread library from boost - it is possible to specify a certain library for the linker
                         e.g. --with-boost-thread=boost_thread-gcc-mt ]),
         [
         if test "$withval" = "no"; then
-                want_boost="no"
+                       want_boost="no"
         elif test "$withval" = "yes"; then
             want_boost="yes"
             ax_boost_user_thread_lib=""
         else
-                    want_boost="yes"
-                        ax_boost_user_thread_lib="$withval"
-                                fi
+                   want_boost="yes"
+               ax_boost_user_thread_lib="$withval"
+               fi
         ],
         [want_boost="yes"]
-        )
+       )
 
-        if test "x$want_boost" = "xyes"; then
+       if test "x$want_boost" = "xyes"; then
         AC_REQUIRE([AC_PROG_CC])
         AC_REQUIRE([AC_CANONICAL_BUILD])
-                CPPFLAGS_SAVED="$CPPFLAGS"
-                        CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
-                                            export CPPFLAGS
+               CPPFLAGS_SAVED="$CPPFLAGS"
+               CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+               export CPPFLAGS
 
-                                                   LDFLAGS_SAVED="$LDFLAGS"
-                                                        LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
-                                                                          export LDFLAGS
+               LDFLAGS_SAVED="$LDFLAGS"
+               LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+               export LDFLAGS
 
         AC_CACHE_CHECK(whether the Boost::Thread library is available,
-                                                            ax_cv_boost_thread,
+                                          ax_cv_boost_thread,
         [AC_LANG_PUSH([C++])
-                         CXXFLAGS_SAVE=$CXXFLAGS
+                        CXXFLAGS_SAVE=$CXXFLAGS
 
-                                         if test "x$host_os" = "xsolaris" ; then
-                                                              CXXFLAGS="-pthreads $CXXFLAGS"
-                                                                                         elif test "x$host_os" = "xmingw32" ; then
-                                                                                                                CXXFLAGS="-mthreads $CXXFLAGS"
-                                                                                                                                      else
-                                                                                                                                         CXXFLAGS="-pthread $CXXFLAGS"
-                                                                                                                                                              fi
-                                                                                                                                                                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/thread/thread.hpp>]],
+                        if test "x$host_os" = "xsolaris" ; then
+                                CXXFLAGS="-pthreads $CXXFLAGS"
+                        elif test "x$host_os" = "xmingw32" ; then
+                                CXXFLAGS="-mthreads $CXXFLAGS"
+                        else
+                               CXXFLAGS="-pthread $CXXFLAGS"
+                        fi
+                        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/thread/thread.hpp>]],
                                    [[boost::thread_group thrds;
                                    return 0;]])],
                    ax_cv_boost_thread=yes, ax_cv_boost_thread=no)
-                                                 CXXFLAGS=$CXXFLAGS_SAVE
+                        CXXFLAGS=$CXXFLAGS_SAVE
              AC_LANG_POP([C++])
-                ])
-                        if test "x$ax_cv_boost_thread" = "xyes"; then
+               ])
+               if test "x$ax_cv_boost_thread" = "xyes"; then
            if test "x$host_os" = "xsolaris" ; then
-                     BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS"
-                                                  elif test "x$host_os" = "xmingw32" ; then
-                                                              BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS"
-                                                                                           else
-                                                                                                          BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS"
-                                                                                                                                      fi
+                         BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS"
+                  elif test "x$host_os" = "xmingw32" ; then
+                         BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS"
+                  else
+                         BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS"
+                  fi
 
-                                                                                                                                        AC_SUBST(BOOST_CPPFLAGS)
+                       AC_SUBST(BOOST_CPPFLAGS)
 
-                                                                                                                                          AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available])
+                       AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available])
             BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
 
-                                             LDFLAGS_SAVE=$LDFLAGS
+                       LDFLAGS_SAVE=$LDFLAGS
                         case "x$host_os" in
                           *bsd* )
                                LDFLAGS="-pthread $LDFLAGS"
@@ -104,24 +104,24 @@ AC_DEFUN([AX_BOOST_THREAD],
                           ;;
                         esac
             if test "x$ax_boost_user_thread_lib" = "x"; then
-                for libextension in `ls $BOOSTLIBDIR/libboost_thread*.so* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_thread.*\)\.so.*$;\1;'` `ls $BOOSTLIBDIR/libboost_thread*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_thread.*\)\.a*$;\1;'`; do
+                for libextension in `ls -r $BOOSTLIBDIR/libboost_thread* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'`; do
                      ax_lib=${libextension}
-                                            AC_CHECK_LIB($ax_lib, exit,
+                                   AC_CHECK_LIB($ax_lib, exit,
                                  [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break],
                                  [link_thread="no"])
-                                                        done
+                               done
                 if test "x$link_thread" != "xyes"; then
-                for libextension in `ls $BOOSTLIBDIR/boost_thread*.dll* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_thread.*\)\.dll.*$;\1;'` `ls $BOOSTLIBDIR/boost_thread*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_thread.*\)\.a*$;\1;'` ; do
+                for libextension in `ls -r $BOOSTLIBDIR/boost_thread* 2>/dev/null | sed 's,.*/,,' | sed 's,\..*,,'`; do
                      ax_lib=${libextension}
-                                            AC_CHECK_LIB($ax_lib, exit,
+                                   AC_CHECK_LIB($ax_lib, exit,
                                  [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break],
                                  [link_thread="no"])
-                                                        done
+                               done
                 fi
 
             else
                for ax_lib in $ax_boost_user_thread_lib boost_thread-$ax_boost_user_thread_lib; do
-                                   AC_CHECK_LIB($ax_lib, exit,
+                                     AC_CHECK_LIB($ax_lib, exit,
                                    [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break],
                                    [link_thread="no"])
                   done
@@ -130,20 +130,20 @@ AC_DEFUN([AX_BOOST_THREAD],
             if test "x$ax_lib" = "x"; then
                 AC_MSG_ERROR(Could not find a version of the library!)
             fi
-                        if test "x$link_thread" = "xno"; then
-                                                AC_MSG_ERROR(Could not link against $ax_lib !)
+                       if test "x$link_thread" = "xno"; then
+                               AC_MSG_ERROR(Could not link against $ax_lib !)
                         else
                            case "x$host_os" in
                               *bsd* )
-                                                BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS"
+                               BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS"
                               break;
                               ;;
                            esac
 
-                                        fi
-                                                fi
+                       fi
+               fi
 
-                                                        CPPFLAGS="$CPPFLAGS_SAVED"
-                                                        LDFLAGS="$LDFLAGS_SAVED"
-                                                        fi
-])
\ No newline at end of file
+               CPPFLAGS="$CPPFLAGS_SAVED"
+       LDFLAGS="$LDFLAGS_SAVED"
+       fi
+])