add gcc version information to Configuration, and warn when building with v4.5.1...
authorMorgan Deters <mdeters@gmail.com>
Fri, 21 Oct 2011 04:25:19 +0000 (04:25 +0000)
committerMorgan Deters <mdeters@gmail.com>
Fri, 21 Oct 2011 04:25:19 +0000 (04:25 +0000)
README
config/gcc_version.m4 [new file with mode: 0644]
configure.ac
src/util/configuration.cpp
src/util/configuration.h
src/util/configuration_private.h

diff --git a/README b/README
index 562ae39388d803fe77e651c14354814cdefc853e..4188c9d9b5dd338dd29b501b90a2cf02b0258efb 100644 (file)
--- a/README
+++ b/README
@@ -10,7 +10,15 @@ installed (see below). Execute,
     make
 
 You can then "make install" to install in the prefix you gave to
-the configure script (/usr/local by default).
+the configure script (/usr/local by default).  ** You should run
+"make check" ** before installation to ensure that CVC4 has been
+built correctly.  In particular, GCC version 4.5.1 seems to have a
+bug in the optimizer that results in incorrect behavior (and wrong
+results) in many builds.  This is a known problem for Minisat, and
+since Minisat is at the core of CVC4, a problem for CVC4.  "make check"
+easily detects this problem (by showing a number of FAILed test cases).
+It is ok if the unit tests aren't run as part of "make check", but all
+system tests and regression tests should pass without incident.
 
 To build a source release, use "make dist"; this will include the
 configure script and all the bits of automake/autoconf/libtool that
@@ -27,12 +35,19 @@ given are minimum versions; more recent versions should be compatible.
 
 GNU C and C++ (gcc and g++), reasonably recent versions
 GNU Make
+GNU Bash
 GMP v4.2 (GNU Multi-Precision arithmetic library)
 libantlr3c v3.2 (ANTLR parser generator)
 Optional: CLN v1.3 (Class Library for Numbers)
 Optional: CUDD v2.4.2 (Colorado University Decision Diagram package)
 Optional: GNU Readline library (for an improved interactive experience)
 
+If "make" is non-GNU on your system, make sure to invoke "gmake" (or
+whatever GNU Make is installed as).  If your usual shell is not
+Bash, the configure script should auto-correct this.  If it does not,
+you'll see strange shell syntax errors, and you may need to explicitly
+set SHELL or CONFIG_SHELL to the location of bash on your system.
+
 CUDD, if desired, must be installed delicately.  The CVC4 configure
 script attempts to auto-detect the locations and names of CUDD headers
 and libraries the way that the Fedora RPMs install them, the way that
diff --git a/config/gcc_version.m4 b/config/gcc_version.m4
new file mode 100644 (file)
index 0000000..acd0510
--- /dev/null
@@ -0,0 +1,7 @@
+# GCC version 4.5.1 builds Minisat incorrectly with -O2
+# and that gives incorrect answers!  Warn the user!
+AC_DEFUN([CVC4_GCC_VERSION], [
+  if expr "$($CC -dumpversion)" : '4\.5\.1' &>/dev/null; then
+    CVC4_INTEGRITY_WARNING="GCC 4.5.1's optimizer is known to make errors building Minisat (and by extension CVC4)"
+  fi
+])# CVC4_GCC_VERSION
index 9d28d21fa0f76906826530b785285ca64d4d07e5..cabb5070655d804cbcb08c509a2ee087c01b2c8c 100644 (file)
@@ -208,6 +208,8 @@ AC_PROG_CC
 AC_PROG_CXX
 AC_PROG_INSTALL
 
+CVC4_GCC_VERSION
+
 # [chris 8/24/2010] The user *must* specify --with-cln to get CLN
 # (and, thus, opt in to the GPL dependency).
 
@@ -1062,3 +1064,10 @@ Install into : $prefix
 ${licensewarn}Now just type make, followed by make check or make install, as you like.
 
 EOF
+
+if test -n "$CVC4_INTEGRITY_WARNING"; then
+  AC_MSG_WARN([])
+  AC_MSG_WARN($CVC4_INTEGRITY_WARNING)
+  AC_MSG_WARN([Please run "make check" after building to ensure integrity of the binary and library])
+  AC_MSG_WARN([])
+fi
index 7225b8108e09a2ff20c7c96c4ffe4874d300a9f7..3164b75a5c54d182e1235085803718625c5f9aee 100644 (file)
@@ -186,4 +186,19 @@ string Configuration::getSubversionId() {
   return ss.str();
 }
 
+string Configuration::getCompiler() {
+  stringstream ss;
+#ifdef __GNUC__
+  ss << "GCC";
+#else /* __GNUC__ */
+  ss << "unknown compiler";
+#endif /* __GNUC__ */
+#ifdef __VERSION__
+  ss << " version " << __VERSION__;
+#else /* __VERSION__ */
+  ss << ", unknown version";
+#endif /* __VERSION__ */
+  return ss.str();
+}
+
 }/* CVC4 namespace */
index b4caf842c57a1b76d0730b9eca8cf346571f1a0b..c3040f3fbdbb69254f370b3f1a9f04c8473e63af 100644 (file)
@@ -99,6 +99,8 @@ public:
   static bool hasSubversionModifications();
   static std::string getSubversionId();
 
+  static std::string getCompiler();
+
 };/* class Configuration */
 
 }/* CVC4 namespace */
index 13347d970373890d1624763b274381d4f76ad065..abff15b3b6b360a48c0351d6b55cf7fc42cc2ac5 100644 (file)
@@ -114,7 +114,8 @@ This is CVC4 version " CVC4_RELEASE_STRING ) + \
     ( ::CVC4::Configuration::isSubversionBuild() \
         ? ( ::std::string(" [") + ::CVC4::Configuration::getSubversionId() + "]" ) \
         : ::std::string("") \
-    ) + "\n\n\
+    ) + "\n\
+compiled with " + ::CVC4::Configuration::getCompiler() + "\n\n\
 Copyright (C) 2009, 2010, 2011\n\
   The ACSys Group\n\
   Courant Institute of Mathematical Sciences\n\