From 42c81e1a764d565823c203e9e07376379639ffa7 Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Wed, 6 May 2009 01:15:06 +0000 Subject: Set better default CXXFLAGS and don't use optimization when compiling tests (takes too long). --- configure.ac | 37 +++++++++++++++++++++++++++++++++++++ src/Makefile.am | 10 ++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index b0d1e150..7f068c31 100644 --- a/configure.ac +++ b/configure.ac @@ -14,6 +14,12 @@ AC_PREREQ(2.59) # the size of one file name in the dist tarfile over the 99-char limit.) AC_INIT([Protocol Buffers],[2.0.4-pre],[protobuf@googlegroups.com],[protobuf]) +# Detect whether the user specified their own compilation flags. If so then +# we want to respect their decision, otherwise we will twiddle them later. +AS_IF([test "$CXXFLAGS" = ""],[ + protobuf_default_cxxflags=yes +]) + AC_CONFIG_SRCDIR(src/google/protobuf/message.cc) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) @@ -32,6 +38,37 @@ ACX_USE_SYSTEM_EXTENSIONS AC_PROG_LIBTOOL AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc +# autoconf's default CXXFLAGS are usually "-g -O2". These aren't necessarily +# the best choice for libprotobuf. +AC_MSG_CHECKING([C++ compiler flags...]) +AS_IF([test "$protobuf_default_cxxflags" = "yes"],[ + + # test_util.cc takes forever to compile with GCC and optimization turned on. + # But we cannot override anything that is part of CXXFLAGS since it is the + # last thing added to the command line. The automake docs insist that you + # should never want to override CXXFLAGS because they represent the intent of + # the user, and the user knows best. But if the user actually did not set + # any CXXFLAGS, then AC_PROG_CXX sets them to a rather arbitrary default. + # That's not user intent at all, but automake still treats it like it is. + # Grr. Anyway, getting back to the point, this hack here strips out the -O + # flag from autoconf's defaults and puts it into another variable so that + # we can override it. BTW, m4 escaping sucks. + PROTOBUF_OPT_FLAG=`echo "$CXXFLAGS" | grep -o '\-O@<:@0-9@:>@\?'` + CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ \?-O@<:@0-9@:>@\?//g'` + + # Protocol Buffers contains several checks that are intended to be used only + # for debugging and which might hurt performance. Most users are probably + # end users who don't want these checks, so add -DNDEBUG by default. + CXXFLAGS="$CXXFLAGS -DNDEBUG" + + AC_MSG_RESULT([use default: $PROTOBUF_OPT_FLAG $CXXFLAGS]) +],[ + PROTOBUF_OPT_FLAG= + AC_MSG_RESULT([use user-supplied: $CXXFLAGS]) +]) + +AC_SUBST(PROTOBUF_OPT_FLAG) + ACX_CHECK_SUNCC # Checks for header files. diff --git a/src/Makefile.am b/src/Makefile.am index 902e6af8..260834de 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,11 +12,13 @@ endif if GCC # These are good warnings to turn on by default -AM_CXXFLAGS = $(PTHREAD_CFLAGS) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare +NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare else -AM_CXXFLAGS = $(PTHREAD_CFLAGS) +NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) endif +AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) + AM_LDFLAGS = $(PTHREAD_CFLAGS) # If I say "dist_include_DATA", automake complains that $(includedir) is not @@ -234,6 +236,10 @@ protobuf_test_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la \ $(top_builddir)/gtest/lib/libgtest_main.la protobuf_test_CPPFLAGS = -I$(top_srcdir)/gtest/include \ -I$(top_builddir)/gtest/include +# Disable optimization for tests unless the user explicitly asked for it, +# since test_util.cc takes forever to compile with optimization (with GCC). +# See configure.ac for more info. +protobuf_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) protobuf_test_SOURCES = \ google/protobuf/stubs/common_unittest.cc \ google/protobuf/stubs/once_unittest.cc \ -- cgit v1.2.3