Fix CoCoA build for newer compilers (#6919)
authorAndres Noetzli <andres.noetzli@gmail.com>
Fri, 23 Jul 2021 20:47:16 +0000 (13:47 -0700)
committerGitHub <noreply@github.com>
Fri, 23 Jul 2021 20:47:16 +0000 (20:47 +0000)
Newer compilers, such as GCC 11, default to C++17. CoCoA does not
compile with C++17 and its check for the C++ version used by the
compiler does not take into account newer C++ versions. As a result,
building CoCoA using `--auto-download` fails with GCC 11. This commit
adds a patch that makes the test in CoCoA take into account compilers
that default to C++17 or newer.

cmake/FindCoCoA.cmake
cmake/deps-utils/CoCoA-patch-0.99712.patch [new file with mode: 0644]

index 1a4f82e9ff007e8fb961b2ca65ae36f21ec445fd..d84bf0f2c4e58bbe91becf5e178966228daf9cfe 100644 (file)
@@ -56,6 +56,10 @@ if(NOT CoCoA_FOUND_SYSTEM)
     ${COMMON_EP_CONFIG}
     URL "http://cocoa.dima.unige.it/cocoalib/tgz/CoCoALib-${CoCoA_VERSION}.tgz"
     URL_HASH SHA1=873d0b60800cd3852939816ce0aa2e7f72dac4ce
+    # CoCoA requires C++14, but the check does not work with compilers that
+    # default to C++17 or newer. The patch fixes the check.
+    PATCH_COMMAND patch -p1 -d <SOURCE_DIR>
+        -i ${CMAKE_CURRENT_LIST_DIR}/deps-utils/CoCoA-patch-0.99712.patch
     BUILD_IN_SOURCE YES
     CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR>
     BUILD_COMMAND ${make_cmd} library
diff --git a/cmake/deps-utils/CoCoA-patch-0.99712.patch b/cmake/deps-utils/CoCoA-patch-0.99712.patch
new file mode 100644 (file)
index 0000000..464d39f
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/configuration/cxx14.sh b/configuration/cxx14.sh
+index cdbf338..0436983 100755
+--- a/configuration/cxx14.sh
++++ b/configuration/cxx14.sh
+@@ -40,7 +40,7 @@ int main()
+ {
+   int ReturnCode = 0; // will mean c++14 compliant
+   std::cout << "C++ version: " << __cplusplus << std::endl;
+-#if __cplusplus < 201400L
++#if __cplusplus < 201400L || __cplusplus >= 201703L
+   ReturnCode = 1;  // NOT C++14 compilant
+ #endif
+   return ReturnCode;