Blob Blame History Raw
From d011885857365284874a14a9cb14a454eb72b157 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Sun, 22 Jan 2023 07:07:41 +0100
Subject: [PATCH] Allow usage of system provided levmar

---
 src/external/levmar.cmake                     | 22 ++++++++++++++++++-
 .../edit_mutualcorrs/levmarmethods.h          |  2 +-
 src/meshlabplugins/edit_mutualcorrs/solver.h  |  2 +-
 .../param_collapse.h                          |  2 +-
 .../parametrizator.h                          |  1 -
 .../filter_mutualglobal/levmarmethods.h       |  2 +-
 .../filter_mutualglobal/solver.h              |  2 +-
 .../filter_mutualinfo/levmarmethods.h         |  2 +-
 src/meshlabplugins/filter_mutualinfo/solver.h |  2 +-
 9 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/src/external/levmar.cmake b/src/external/levmar.cmake
index 63ed77e..50e066a 100644
--- a/src/external/levmar.cmake
+++ b/src/external/levmar.cmake
@@ -3,10 +3,30 @@
 # SPDX-License-Identifier: BSL-1.0
 
 option(ALLOW_BUNDLED_LEVMAR "Allow use of bundled levmar source" ON)
+option(ALLOW_SYSTEM_LEVMAR "Allow use of system-provided levmar" ON)
 
 set(LEVMAR_DIR ${CMAKE_CURRENT_LIST_DIR}/levmar-2.3)
 
-if(ALLOW_BUNDLED_LEVMAR AND EXISTS "${LEVMAR_DIR}/lm.h")
+if (ALLOW_SYSTEM_LEVMAR)
+	find_library(LEVMAR_LIBRARY NAMES levmar)
+	find_path(LEVMAR_INCLUDE_DIR NAMES levmar.h PATH_SUFFIXES levmar)
+
+	if (LEVMAR_LIBRARY AND LEVMAR_INCLUDE_DIR)
+	        message(STATUS "Found levmar: ${LEVMAR_LIBRARY} ${LEVMAR_INCLUDE_DIR}")
+		add_library(levmar::levmar UNKNOWN IMPORTED)
+		set_target_properties(levmar::levmar PROPERTIES
+			INTERFACE_INCLUDE_DIRECTORIES "${LEVMAR_INCLUDE_DIR}")
+		set_property(TARGET levmar::levmar APPEND PROPERTY
+			IMPORTED_LOCATION "${LEVMAR_LIBRARY}")
+	endif()
+endif()
+
+if (TARGET levmar::levmar)
+	message(STATUS "- levmar - using system-provided library")
+	add_library(external-levmar INTERFACE)
+	target_link_libraries(external-levmar INTERFACE levmar::levmar)
+
+elseif(ALLOW_BUNDLED_LEVMAR AND EXISTS "${LEVMAR_DIR}/lm.h")
 	message(STATUS "- levmar - using bundled source")
 	add_library(
 		external-levmar STATIC
diff --git a/src/meshlabplugins/edit_mutualcorrs/levmarmethods.h b/src/meshlabplugins/edit_mutualcorrs/levmarmethods.h
index 7801493..c1a15c8 100644
--- a/src/meshlabplugins/edit_mutualcorrs/levmarmethods.h
+++ b/src/meshlabplugins/edit_mutualcorrs/levmarmethods.h
@@ -12,7 +12,7 @@ sufficient to get a calibrated shot.<br>
 
 #include <list>
 
-#include "lm.h"
+#include <levmar.h>
 
 
 struct LevmarCorrelation {
diff --git a/src/meshlabplugins/edit_mutualcorrs/solver.h b/src/meshlabplugins/edit_mutualcorrs/solver.h
index 7ee965a..7d93079 100644
--- a/src/meshlabplugins/edit_mutualcorrs/solver.h
+++ b/src/meshlabplugins/edit_mutualcorrs/solver.h
@@ -5,7 +5,7 @@
 #include "alignset.h"
 
 #include "parameters.h"
-#include "lm.h"
+#include <levmar.h>
 
 #include <iostream>
 #include <fstream>
diff --git a/src/meshlabplugins/filter_isoparametrization/param_collapse.h b/src/meshlabplugins/filter_isoparametrization/param_collapse.h
index 98060e9..363b2ff 100644
--- a/src/meshlabplugins/filter_isoparametrization/param_collapse.h
+++ b/src/meshlabplugins/filter_isoparametrization/param_collapse.h
@@ -14,7 +14,7 @@
 
 #include <local_parametrization.h>
 #include <mesh_operators.h>
-#include <lm.h>
+#include <levmar.h>
 #include <uv_grid.h>
 
 #include "opt_patch.h"
diff --git a/src/meshlabplugins/filter_isoparametrization/parametrizator.h b/src/meshlabplugins/filter_isoparametrization/parametrizator.h
index 74b03db..c548a31 100644
--- a/src/meshlabplugins/filter_isoparametrization/parametrizator.h
+++ b/src/meshlabplugins/filter_isoparametrization/parametrizator.h
@@ -32,7 +32,6 @@
 #include <vcg/space/color4.h>
 #include <dual_coord_optimization.h>
 #include <float.h>
-#include <lm.h>
 #ifndef _MESHLAB
 #include <wrap/io_trimesh/export_ply.h>
 #endif
diff --git a/src/meshlabplugins/filter_mutualglobal/levmarmethods.h b/src/meshlabplugins/filter_mutualglobal/levmarmethods.h
index decb063..a35d185 100644
--- a/src/meshlabplugins/filter_mutualglobal/levmarmethods.h
+++ b/src/meshlabplugins/filter_mutualglobal/levmarmethods.h
@@ -12,7 +12,7 @@ sufficient to get a calibrated shot.<br>
 
 #include <list>
 
-#include "lm.h"
+#include <levmar.h>
 
 
 struct LevmarCorrelation {
diff --git a/src/meshlabplugins/filter_mutualglobal/solver.h b/src/meshlabplugins/filter_mutualglobal/solver.h
index c7008ec..9e2e497 100644
--- a/src/meshlabplugins/filter_mutualglobal/solver.h
+++ b/src/meshlabplugins/filter_mutualglobal/solver.h
@@ -5,7 +5,7 @@
 #include "alignset.h"
 
 #include "parameters.h"
-#include "lm.h"
+#include <levmar.h>
 
 #include <iostream>
 #include <fstream>
diff --git a/src/meshlabplugins/filter_mutualinfo/levmarmethods.h b/src/meshlabplugins/filter_mutualinfo/levmarmethods.h
index decb063..a35d185 100644
--- a/src/meshlabplugins/filter_mutualinfo/levmarmethods.h
+++ b/src/meshlabplugins/filter_mutualinfo/levmarmethods.h
@@ -12,7 +12,7 @@ sufficient to get a calibrated shot.<br>
 
 #include <list>
 
-#include "lm.h"
+#include <levmar.h>
 
 
 struct LevmarCorrelation {
diff --git a/src/meshlabplugins/filter_mutualinfo/solver.h b/src/meshlabplugins/filter_mutualinfo/solver.h
index c7008ec..9e2e497 100644
--- a/src/meshlabplugins/filter_mutualinfo/solver.h
+++ b/src/meshlabplugins/filter_mutualinfo/solver.h
@@ -5,7 +5,7 @@
 #include "alignset.h"
 
 #include "parameters.h"
-#include "lm.h"
+#include <levmar.h>
 
 #include <iostream>
 #include <fstream>
-- 
2.39.0