[tor-commits] [stegotorus/master] Have configure activate extended C library features and large file support. Detect whether 'ranlib' is unnecessary.
zwol at torproject.org
zwol at torproject.org
Fri Jul 20 23:17:08 UTC 2012
commit 491d09efb9e90c8762954f68e37efb7f42f38a16
Author: Zack Weinberg <zackw at cmu.edu>
Date: Sat Jun 2 14:15:10 2012 -0700
Have configure activate extended C library features and large file support. Detect whether 'ranlib' is unnecessary.
---
configure.ac | 22 +++++++++----
m4/ranlib.m4 | 69 ++++++++++++++++++++++++++++++++++++++++
m4/system_extensions.m4 | 81 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 165 insertions(+), 7 deletions(-)
diff --git a/configure.ac b/configure.ac
index 647879a..6dc4fe3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,10 +9,22 @@ AC_LANG([C++])
AM_INIT_AUTOMAKE([foreign nostdinc silent-rules subdir-objects])
AM_MAINTAINER_MODE([enable])
-### Programs ###
+### Compiler and language features ###
+AC_PROG_CC
AC_PROG_CXX
-AC_PROG_RANLIB
+AC_PROG_CXXCPP
+
+AX_SYS_EXTENSIONS
+AC_SYS_LARGEFILE
+
+AX_CXXFLAGS_STDCXX_11([ext])
+AX_CXX_DELETE_METHOD
+AX_CXX_STATIC_ASSERT
+
+### Programs ###
+
+AX_PROG_RANLIB
PKG_PROG_PKG_CONFIG
# We need python 2.7 for TestLoader.discover().
@@ -60,14 +72,10 @@ AC_SUBST(lib_CPPFLAGS)
AX_LIB_WINSOCK2
LIBS="$LIBS $ws32_LIBS"
-### Language features ###
+### System features ###
AC_CHECK_HEADERS([execinfo.h],,,[/**/])
-AX_CXXFLAGS_STDCXX_11([ext])
-AX_CXX_DELETE_METHOD
-AX_CXX_STATIC_ASSERT
-
### Output ###
AC_CONFIG_FILES([Makefile])
diff --git a/m4/ranlib.m4 b/m4/ranlib.m4
new file mode 100644
index 0000000..ce4fe33
--- /dev/null
+++ b/m4/ranlib.m4
@@ -0,0 +1,69 @@
+# SYNOPSIS
+#
+# AX_PROG_RANLIB
+#
+# DESCRIPTION
+#
+# In addition to everything AC_PROG_RANLIB does, determine whether it is
+# _necessary_ to run 'ranlib' after 'ar'. If it is unnecessary (which is
+# the case on most modern systems), reset the RANLIB variable to ':'.
+#
+# LICENSE
+#
+# Same as Autoconf proper.
+
+# serial 1
+
+# 'ranlib' may be needed to make it possible for objects that occur
+# later in an archive library to refer to symbols defined by objects
+# earlier in the archive. Therefore, the testing strategy is to
+# compile three small files where A refers to B refers to C, put C and
+# B in an archive *in that order*, and then see if we can link A
+# against the archive.
+
+AC_DEFUN([AX_PROG_RANLIB],
+[AC_CHECK_TOOL([AR], [ar])
+AC_CHECK_TOOL([RANLIB], [ranlib], [:])
+if test x$RANLIB != x:; then
+ AC_CACHE_CHECK([whether ranlib is necessary], [ac_cv_prog_RANLIB_necessary],
+ [AC_LANG_PUSH([C])
+
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ extern int B(void);
+ int main(void) { return B(); }
+ ]])],
+ [cp conftest.$ac_objext conftA.$ac_objext],
+ [AC_MSG_ERROR([failed to compile test file A])])
+
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ extern int C(void);
+ int B(void) { return C(); }
+ ]])],
+ [cp conftest.$ac_objext conftB.$ac_objext],
+ [AC_MSG_ERROR([failed to compile test file B])])
+
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ int C(void) { return 0; }
+ ]])],
+ [cp conftest.$ac_objext conftC.$ac_objext],
+ [AC_MSG_ERROR([failed to compile test file C])])
+
+ dnl There is no standard macro for creating an archive.
+ _AC_DO([$AR cru conftest.a conftC.$ac_objext conftB.$ac_objext]) ||
+ AC_MSG_ERROR([failed to create test archive])
+
+ dnl There's no good way to make AC_LINK_IFELSE do what we need.
+ AS_IF([_AC_DO([$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftA.$ac_objext conftest.a >&AS_MESSAGE_LOG_FD])],
+ [ac_cv_prog_RANLIB_necessary=no],
+ [AS_IF([_AC_DO([$RANLIB conftest.a && $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftA.$ac_objext conftest.a >&AS_MESSAGE_LOG_FD])],
+ [ac_cv_prog_RANLIB_necessary=yes],
+ [AC_MSG_ERROR([test link failed with and without ranlib])])])
+
+ rm -f conftest$ac_exeext conft[ABC].$ac_objext conftest.a
+ AC_LANG_POP([C])
+ ])
+ if test $ac_cv_prog_RANLIB_necessary = no; then
+ RANLIB=:
+ fi
+fi
+])
diff --git a/m4/system_extensions.m4 b/m4/system_extensions.m4
new file mode 100644
index 0000000..46b2f9e
--- /dev/null
+++ b/m4/system_extensions.m4
@@ -0,0 +1,81 @@
+# SYNOPSIS
+#
+# AX_SYS_EXTENSIONS
+#
+# DESCRIPTION
+#
+# Functionally equivalent to the stock AC_USE_SYSTEM_EXTENSIONS, but:
+# does not trigger AC_CHECK_HEADER's backward compatibility mode;
+# does not make use of AC_INCLUDES_DEFAULT;
+# does not define _MINIX.
+#
+# LICENSE
+#
+# Same as Autoconf proper.
+
+# serial 1
+
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+#
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE. The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AX_SYS_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+AC_PROVIDE([AC_USE_SYSTEM_EXTENSIONS])dnl Suppress the stock macro if used.
+
+ AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=], [/**/])
+ if test "$MINIX" = yes; then
+ AC_DEFINE([_POSIX_SOURCE], [1],
+ [Define to 1 if you need to in order for `stat' and other
+ things to work.])
+ AC_DEFINE([_POSIX_1_SOURCE], [2],
+ [Define to 2 if the system does not provide POSIX.1 features
+ except with this defined.])
+ fi
+
+dnl Use a different key than __EXTENSIONS__, as that name broke existing
+dnl configure.ac when using autoheader 2.62.
+ AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
+[/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+ AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+ [ac_cv_safe_to_define___extensions__],
+ [AC_COMPILE_IFELSE(
+ dnl http://lists.gnu.org/archive/html/bug-gnulib/2006-02/msg00002.html
+ dnl implies that testing <stdlib.h> is adequate.
+ [AC_LANG_PROGRAM([[
+# define __EXTENSIONS__ 1
+# include <stdlib.h>
+ ]])],
+ [ac_cv_safe_to_define___extensions__=yes],
+ [ac_cv_safe_to_define___extensions__=no])])
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ AC_DEFINE([__EXTENSIONS__])
+ AC_DEFINE([_ALL_SOURCE])
+ AC_DEFINE([_GNU_SOURCE])
+ AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+ AC_DEFINE([_TANDEM_SOURCE])
+])# AX_SYS_EXTENSIONS
More information about the tor-commits
mailing list