From 3fabe9c2eea5b6bb4f61b8cbae39ff24fb41314c Mon Sep 17 00:00:00 2001
From: Slávek Banko <slavek.banko@axis.cz>
Date: Sun, 21 Sep 2025 15:59:29 +0200
Subject: Kalzim: Add CMake detection and link for nums and zarith libraries.
 This resolves issue #63.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
---
 kalzium/ConfigureChecks.cmake | 66 +++++++++++++++++++++++++++++++++++++++++++
 kalzium/src/CMakeLists.txt    |  2 +-
 2 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/kalzium/ConfigureChecks.cmake b/kalzium/ConfigureChecks.cmake
index bb1da003..88ba0ed6 100644
--- a/kalzium/ConfigureChecks.cmake
+++ b/kalzium/ConfigureChecks.cmake
@@ -72,4 +72,70 @@ if( WITH_OCAML_SOLVER )
     message( STATUS "Search for facile - found" )
   endif( )
 
+
+  if( NOT DEFINED HAVE_NUMS )
+    message( STATUS "Search for nums" )
+
+    if( NOT DEFINED NUMS_LIBRARIES )
+      find_library( NUMS_LIBRARY
+        NAMES nums.a
+        HINTS ${OCAML_BASEDIR}
+        PATH_SUFFIXES num ocaml/num
+      )
+      if( NUMS_LIBRARY )
+        set( NUMS_LIBRARIES ${NUMS_LIBRARY} )
+      endif()
+    endif( )
+
+    if( NOT DEFINED NUMS_INCLUDE_DIR )
+      find_path( NUMS_INCLUDE_DIR
+          NAMES num.cmi
+          HINTS ${OCAML_BASEDIR}
+          PATH_SUFFIXES nums lib/ocaml/nums
+      )
+    endif( )
+
+    if( NUMS_LIBRARIES AND NUMS_INCLUDE_DIR )
+      set( HAVE_NUMS 1 CACHE INTERNAL "Enable build with ocaml/nums" )
+      message( STATUS "Search for nums - found" )
+    else()
+      message( STATUS "Search for nums - not found" )
+    endif()
+  endif( )
+
+
+  if( NOT DEFINED HAVE_ZARITH )
+    message( STATUS "Search for zarith" )
+
+    if( NOT DEFINED ZARITH_LIBRARIES )
+      find_library( ZARITH_LIBRARY
+        NAMES zarith.a
+        HINTS ${OCAML_BASEDIR}
+        PATH_SUFFIXES zarith ocaml/zarith
+      )
+      if( ZARITH_LIBRARY )
+        set( ZARITH_LIBRARIES ${ZARITH_LIBRARY} )
+      endif()
+    endif( )
+
+    if( NOT DEFINED ZARITH_INCLUDE_DIR )
+      find_path( ZARITH_INCLUDE_DIR
+          NAMES z.cmi
+          HINTS ${OCAML_BASEDIR}
+          PATH_SUFFIXES zarith lib/ocaml/zarith
+      )
+    endif( )
+
+    if( ZARITH_LIBRARIES AND ZARITH_INCLUDE_DIR )
+      set( HAVE_ZARITH 1 CACHE INTERNAL "Enable build with ocaml/zarith" )
+      message( STATUS "Search for zarith - found" )
+    else()
+      message( STATUS "Search for zarith - not found" )
+    endif()
+  endif( )
+
+  if( (NOT HAVE_NUMS) AND (NOT HAVE_ZARITH) )
+    tde_message_fatal( "Facile requires nums or zarith, but neither is found on your system" )
+  endif()
+
 endif( WITH_OCAML_SOLVER )
diff --git a/kalzium/src/CMakeLists.txt b/kalzium/src/CMakeLists.txt
index 5a91842b..ee4f437b 100644
--- a/kalzium/src/CMakeLists.txt
+++ b/kalzium/src/CMakeLists.txt
@@ -20,7 +20,7 @@ link_directories(
 )
 
 if( WITH_OCAML_SOLVER )
-  set( OCAML_LIBRARIES asmrun nums m ${CMAKE_DL_LIBS} )
+  set( OCAML_LIBRARIES asmrun m ${NUMS_LIBRARIES} ${ZARITH_LIBRARIES} ${CMAKE_DL_LIBS} )
   set( OCAML_SOLVER
     ${CMAKE_CURRENT_BINARY_DIR}/solver/modwrap.o
     ${CMAKE_CURRENT_BINARY_DIR}/solver/solver.o
-- 
cgit v1.2.3

