summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorGereon Kremer <nafur42@gmail.com>2021-06-15 23:00:47 +0200
committerGitHub <noreply@github.com>2021-06-15 21:00:47 +0000
commit44299210154706701d56bfa40e8cb5c58079e9ca (patch)
treeb7447be8cd5401b738b986971f036f8022cfbb64 /cmake
parent6bae871954c48993009ed91d4b907c136017ed38 (diff)
Add cocoalib (#6731)
This PR adds CoCoALib as an optional dependency. It will be used in the CAD-based nonlinear solver for computer algebra routines beyond the capabilities of libpoly like quotient rings and polynomial factorization.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindCoCoA.cmake96
1 files changed, 96 insertions, 0 deletions
diff --git a/cmake/FindCoCoA.cmake b/cmake/FindCoCoA.cmake
new file mode 100644
index 000000000..1a4f82e9f
--- /dev/null
+++ b/cmake/FindCoCoA.cmake
@@ -0,0 +1,96 @@
+###############################################################################
+# Top contributors (to current version):
+# Gereon Kremer
+#
+# This file is part of the cvc5 project.
+#
+# Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
+# in the top-level source directory and their institutional affiliations.
+# All rights reserved. See the file COPYING in the top-level source
+# directory for licensing information.
+# #############################################################################
+#
+# Find CoCoA
+# CoCoA_FOUND - system has CoCoA lib
+# CoCoA_INCLUDE_DIR - the CoCoA include directory
+# CoCoA_LIBRARIES - Libraries needed to use CoCoA
+##
+
+include(deps-helper)
+
+find_path(CoCoA_INCLUDE_DIR NAMES CoCoA/CoCoA.h)
+find_library(CoCoA_LIBRARIES NAMES CoCoA)
+
+set(CoCoA_FOUND_SYSTEM FALSE)
+if(CoCoA_INCLUDE_DIR AND CoCoA_LIBRARIES)
+ set(CoCoA_FOUND_SYSTEM TRUE)
+
+ file(STRINGS ${CoCoA_INCLUDE_DIR}/CoCoA/library.H CoCoA_VERSION
+ REGEX "^COCOALIB_VERSION=.*"
+ )
+ string(REGEX MATCH "[0-9]+\\.[0-9]+" CoCoA_VERSION "${CoCoA_VERSION}")
+
+ check_system_version("CoCoA")
+endif()
+
+if(NOT CoCoA_FOUND_SYSTEM)
+ check_ep_downloaded("CoCoA-EP")
+ if(NOT CoCoA-EP_DOWNLOADED)
+ check_auto_download("CoCoA" "--no-cocoa")
+ endif()
+
+ include(ExternalProject)
+
+ set(CoCoA_VERSION "0.99712")
+
+ if("${CMAKE_GENERATOR}" STREQUAL "Unix Makefiles")
+ # use $(MAKE) instead of "make" to allow for parallel builds
+ set(make_cmd "$(MAKE)")
+ else()
+ # $(MAKE) does not work with ninja
+ set(make_cmd "make")
+ endif()
+
+ ExternalProject_Add(
+ CoCoA-EP
+ ${COMMON_EP_CONFIG}
+ URL "http://cocoa.dima.unige.it/cocoalib/tgz/CoCoALib-${CoCoA_VERSION}.tgz"
+ URL_HASH SHA1=873d0b60800cd3852939816ce0aa2e7f72dac4ce
+ BUILD_IN_SOURCE YES
+ CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR>
+ BUILD_COMMAND ${make_cmd} library
+ )
+ # Remove install directory before make install. CoCoA will complain otherwise
+ ExternalProject_Add_Step(
+ CoCoA-EP clear-install
+ COMMAND ${CMAKE_COMMAND} -E remove_directory <INSTALL_DIR>/include/CoCoA-${CoCoA_VERSION}
+ DEPENDEES build
+ DEPENDERS install
+ )
+
+ add_dependencies(CoCoA-EP GMP)
+
+ set(CoCoA_INCLUDE_DIR "${DEPS_BASE}/include/")
+ set(CoCoA_LIBRARIES "${DEPS_BASE}/lib/libcocoa.a")
+endif()
+
+set(CoCoA_FOUND TRUE)
+
+add_library(CoCoA STATIC IMPORTED GLOBAL)
+set_target_properties(CoCoA PROPERTIES IMPORTED_LOCATION "${CoCoA_LIBRARIES}")
+set_target_properties(
+ CoCoA PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CoCoA_INCLUDE_DIR}"
+)
+set_target_properties(CoCoA PROPERTIES INTERFACE_LINK_LIBRARIES GMP)
+
+mark_as_advanced(CoCoA_FOUND)
+mark_as_advanced(CoCoA_FOUND_SYSTEM)
+mark_as_advanced(CoCoA_INCLUDE_DIR)
+mark_as_advanced(CoCoA_LIBRARIES)
+
+if(CoCoA_FOUND_SYSTEM)
+ message(STATUS "Found CoCoA ${CoCoA_VERSION}: ${CoCoA_LIBRARIES}")
+else()
+ message(STATUS "Building CoCoA ${CoCoA_VERSION}: ${CoCoA_LIBRARIES}")
+ add_dependencies(CoCoA CoCoA-EP)
+endif()
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback