فهرست منبع

Fix CMake that was overwriting desired options when not found

Former-commit-id: 321343d402a590c855040ed89469025155484981
Alec Jacobson 7 سال پیش
والد
کامیت
134a7bb8ba
1فایلهای تغییر یافته به همراه35 افزوده شده و 35 حذف شده
  1. 35 35
      shared/cmake/libigl.cmake

+ 35 - 35
shared/cmake/libigl.cmake

@@ -1,22 +1,34 @@
 cmake_minimum_required(VERSION 3.1)
 
+### Find packages to populate default options ###
+#
+# COMPONENTS should match subsequent calls
+find_package(CGAL COMPONENTS Core) # --> CGAL_FOUND
+find_package(Boost 1.48 COMPONENTS thread system) # --> BOOST_FOUND
+if(CGAL_FOUND AND BOOST_FOUND)
+  set(CGAL_AND_BOOST_FOUND TRUE)
+endif()
+find_package(Matlab COMPONENTS MEX_COMPILER MX_LIBRARY ENG_LIBRARY) # --> Matlab_FOUND
+find_package(MOSEK) # --> MOSEK_FOUND
+find_package(OpenGL) # --> OPENGL_FOUND
+
 ### Available options ###
 option(LIBIGL_USE_STATIC_LIBRARY    "Use libigl as static library" OFF)
 option(LIBIGL_WITH_ANTTWEAKBAR      "Use AntTweakBar"    OFF)
-option(LIBIGL_WITH_CGAL             "Use CGAL"           ON)
+option(LIBIGL_WITH_CGAL             "Use CGAL"           "${CGAL_AND_BOOST_FOUND}")
 option(LIBIGL_WITH_COMISO           "Use CoMiso"         ON)
 option(LIBIGL_WITH_CORK             "Use Cork"           OFF)
 option(LIBIGL_WITH_EMBREE           "Use Embree"         OFF)
 option(LIBIGL_WITH_LIM              "Use LIM"            ON)
-option(LIBIGL_WITH_MATLAB           "Use Matlab"         ON)
-option(LIBIGL_WITH_MOSEK            "Use MOSEK"          ON)
+option(LIBIGL_WITH_MATLAB           "Use Matlab"         "${Matlab_FOUND}")
+option(LIBIGL_WITH_MOSEK            "Use MOSEK"          "${MOSEK_FOUND}")
 option(LIBIGL_WITH_NANOGUI          "Use Nanogui menu"   OFF)
-option(LIBIGL_WITH_OPENGL           "Use OpenGL"         ON)
-option(LIBIGL_WITH_OPENGL_GLFW      "Use GLFW"           ON)
+option(LIBIGL_WITH_OPENGL           "Use OpenGL"         "${OPENGL_FOUND}")
+option(LIBIGL_WITH_OPENGL_GLFW      "Use GLFW"           "${OPENGL_FOUND}")
 option(LIBIGL_WITH_PNG              "Use PNG"            ON)
 option(LIBIGL_WITH_TETGEN           "Use Tetgen"         ON)
 option(LIBIGL_WITH_TRIANGLE         "Use Triangle"       ON)
-option(LIBIGL_WITH_VIEWER           "Use OpenGL viewer"  ON)
+option(LIBIGL_WITH_VIEWER           "Use OpenGL viewer"  "${OPENGL_FOUND}")
 option(LIBIGL_WITH_XML              "Use XML"            ON)
 option(LIBIGL_WITH_PYTHON           "Use Python"         OFF)
 
@@ -136,19 +148,15 @@ endif()
 if(LIBIGL_WITH_CGAL)
   # CGAL Core is needed for
   # `Exact_predicates_exact_constructions_kernel_with_sqrt`
-  find_package(CGAL COMPONENTS Core)
-  if(CGAL_FOUND)
-    compile_igl_module("cgal")
-    if(WIN32)
-      set(Boost_USE_STATIC_LIBS ON) # Favor static Boost libs on Windows
-    endif()
-    target_include_directories(igl_cgal ${IGL_SCOPE} "${GMP_INCLUDE_DIR}" "${MPFR_INCLUDE_DIR}")
-    find_package(Boost 1.48 REQUIRED thread system)
-    target_include_directories(igl_cgal ${IGL_SCOPE} ${CGAL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
-    target_link_libraries(igl_cgal ${IGL_SCOPE} CGAL::CGAL CGAL::CGAL_Core ${Boost_LIBRARIES})
-  else()
-    set(LIBIGL_WITH_CGAL OFF CACHE BOOL "" FORCE)
+  find_package(CGAL REQUIRED COMPONENTS Core)
+  compile_igl_module("cgal")
+  if(WIN32)
+    set(Boost_USE_STATIC_LIBS ON) # Favor static Boost libs on Windows
   endif()
+  target_include_directories(igl_cgal ${IGL_SCOPE} "${GMP_INCLUDE_DIR}" "${MPFR_INCLUDE_DIR}")
+  find_package(Boost 1.48 REQUIRED thread system)
+  target_include_directories(igl_cgal ${IGL_SCOPE} ${CGAL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
+  target_link_libraries(igl_cgal ${IGL_SCOPE} CGAL::CGAL CGAL::CGAL_Core ${Boost_LIBRARIES})
 endif()
 
 # Helper function for `igl_copy_cgal_dll()`
@@ -249,28 +257,20 @@ endif()
 ################################################################################
 ### Compile the matlab part ###
 if(LIBIGL_WITH_MATLAB)
-  find_package(Matlab)
-  if(MATLAB_FOUND)
-    compile_igl_module("matlab")
-    target_link_libraries(igl_matlab ${IGL_SCOPE} ${MATLAB_LIBRARIES})
-    target_include_directories(igl_matlab ${IGL_SCOPE} ${MATLAB_INCLUDE_DIR})
-  else()
-    set(LIBIGL_WITH_MATLAB OFF CACHE BOOL "" FORCE)
-  endif()
+  find_package(Matlab REQUIRED COMPONENTS MEX_COMPILER MX_LIBRARY ENG_LIBRARY)
+  compile_igl_module("matlab")
+  target_link_libraries(igl_matlab ${IGL_SCOPE} ${MATLAB_LIBRARIES})
+  target_include_directories(igl_matlab ${IGL_SCOPE} ${MATLAB_INCLUDE_DIR})
 endif()
 
 ################################################################################
 ### Compile the mosek part ###
 if(LIBIGL_WITH_MOSEK)
-  find_package(MOSEK)
-  if(MOSEK_FOUND)
-    compile_igl_module("mosek")
-    target_link_libraries(igl_mosek ${IGL_SCOPE} ${MOSEK_LIBRARIES})
-    target_include_directories(igl_mosek ${IGL_SCOPE} ${MOSEK_INCLUDE_DIRS})
-    target_compile_definitions(igl_mosek ${IGL_SCOPE} -DLIBIGL_WITH_MOSEK)
-  else()
-    set(LIBIGL_WITH_MOSEK OFF CACHE BOOL "" FORCE)
-  endif()
+  find_package(MOSEK REQUIRED)
+  compile_igl_module("mosek")
+  target_link_libraries(igl_mosek ${IGL_SCOPE} ${MOSEK_LIBRARIES})
+  target_include_directories(igl_mosek ${IGL_SCOPE} ${MOSEK_INCLUDE_DIRS})
+  target_compile_definitions(igl_mosek ${IGL_SCOPE} -DLIBIGL_WITH_MOSEK)
 endif()
 
 ################################################################################