|
@@ -73,10 +73,15 @@ endif()
|
|
|
################################################################################
|
|
|
|
|
|
add_library(igl_common INTERFACE)
|
|
|
-target_include_directories(igl_common SYSTEM INTERFACE ${LIBIGL_SOURCE_DIR})
|
|
|
+target_include_directories(igl_common SYSTEM INTERFACE
|
|
|
+ $<BUILD_INTERFACE:${LIBIGL_SOURCE_DIR}>
|
|
|
+ $<INSTALL_INTERFACE:include>
|
|
|
+)
|
|
|
if(LIBIGL_USE_STATIC_LIBRARY)
|
|
|
target_compile_definitions(igl_common INTERFACE -DIGL_STATIC_LIBRARY)
|
|
|
endif()
|
|
|
+LIST(APPEND ALL_MODULES igl_common)
|
|
|
+LIST(APPEND INSTALL_HEADERS igl)
|
|
|
|
|
|
# Transitive C++11 flags
|
|
|
include(CXXFeatures)
|
|
@@ -101,7 +106,15 @@ if(TARGET Eigen3::Eigen)
|
|
|
# If an imported target already exists, use it
|
|
|
target_link_libraries(igl_common INTERFACE Eigen3::Eigen)
|
|
|
else()
|
|
|
- target_include_directories(igl_common SYSTEM INTERFACE ${LIBIGL_EXTERNAL}/eigen)
|
|
|
+ target_include_directories(igl_common SYSTEM INTERFACE
|
|
|
+ $<BUILD_INTERFACE:${LIBIGL_EXTERNAL}/eigen>
|
|
|
+ $<INSTALL_INTERFACE:include/igl/private>
|
|
|
+ )
|
|
|
+ # need to install eigen headers
|
|
|
+ install(
|
|
|
+ DIRECTORY ${LIBIGL_EXTERNAL}/eigen/Eigen
|
|
|
+ DESTINATION include/igl/private
|
|
|
+ )
|
|
|
endif()
|
|
|
|
|
|
# C++11 Thread library
|
|
@@ -141,6 +154,7 @@ function(compile_igl_module module_dir)
|
|
|
add_library(igl::${module_name} ALIAS ${module_libname})
|
|
|
endfunction()
|
|
|
|
|
|
+
|
|
|
################################################################################
|
|
|
### IGL Core
|
|
|
################################################################################
|
|
@@ -151,6 +165,7 @@ if(LIBIGL_USE_STATIC_LIBRARY)
|
|
|
"${LIBIGL_SOURCE_DIR}/igl/copyleft/*.cpp")
|
|
|
endif()
|
|
|
compile_igl_module("core" ${SOURCES_IGL})
|
|
|
+LIST(APPEND ALL_MODULES igl)
|
|
|
|
|
|
################################################################################
|
|
|
## Compile the AntTweakBar part ###
|
|
@@ -161,6 +176,8 @@ if(LIBIGL_WITH_ANTTWEAKBAR)
|
|
|
endif()
|
|
|
compile_igl_module("anttweakbar")
|
|
|
target_link_libraries(igl_anttweakbar ${IGL_SCOPE} AntTweakBar)
|
|
|
+ list(APPEND ALL_MODULES anttweakbar)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/anttweakbar)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -181,6 +198,8 @@ if(LIBIGL_WITH_CGAL)
|
|
|
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})
|
|
|
+ list(APPEND ALL_MODULES igl_cgal)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/copyleft/cgal)
|
|
|
else()
|
|
|
set(LIBIGL_WITH_CGAL OFF CACHE BOOL "" FORCE)
|
|
|
endif()
|
|
@@ -222,6 +241,9 @@ if(LIBIGL_WITH_COMISO)
|
|
|
add_subdirectory("${LIBIGL_EXTERNAL}/CoMISo" CoMISo)
|
|
|
endif()
|
|
|
target_link_libraries(igl_comiso ${IGL_SCOPE} CoMISo)
|
|
|
+ # CoMISo does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_comiso)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/copyleft/comiso)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -237,6 +259,8 @@ if(LIBIGL_WITH_CORK)
|
|
|
target_include_directories(igl_cork ${IGL_SCOPE} cork)
|
|
|
target_include_directories(igl_cork ${IGL_SCOPE} "${CORK_DIR}/src")
|
|
|
target_link_libraries(igl_cork ${IGL_SCOPE} cork)
|
|
|
+ list(APPEND ALL_MODULES igl_cork)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/copyleft/cork)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -275,6 +299,8 @@ if(LIBIGL_WITH_EMBREE)
|
|
|
if(NOT MSVC)
|
|
|
target_compile_definitions(igl_embree ${IGL_SCOPE} -DENABLE_STATIC_LIB)
|
|
|
endif()
|
|
|
+ list(APPEND ALL_MODULES igl_embree)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/embree)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -287,6 +313,9 @@ if(LIBIGL_WITH_LIM)
|
|
|
compile_igl_module("lim")
|
|
|
target_link_libraries(igl_lim ${IGL_SCOPE} lim)
|
|
|
target_include_directories(igl_lim ${IGL_SCOPE} ${LIM_DIR})
|
|
|
+ # lim does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_lim)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/lim)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -296,6 +325,8 @@ if(LIBIGL_WITH_MATLAB)
|
|
|
compile_igl_module("matlab")
|
|
|
target_link_libraries(igl_matlab ${IGL_SCOPE} ${Matlab_LIBRARIES})
|
|
|
target_include_directories(igl_matlab ${IGL_SCOPE} ${Matlab_INCLUDE_DIRS})
|
|
|
+ list(APPEND ALL_MODULES igl_matlab)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/matlab)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -306,6 +337,8 @@ if(LIBIGL_WITH_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)
|
|
|
+ list(APPEND ALL_MODULES igl_mosek)
|
|
|
+ list(APPEND INSTALL_HEADERS igl/mosek)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -323,6 +356,10 @@ if(LIBIGL_WITH_OPENGL)
|
|
|
add_subdirectory(${LIBIGL_EXTERNAL}/glad glad)
|
|
|
endif()
|
|
|
target_link_libraries(igl_opengl ${IGL_SCOPE} glad)
|
|
|
+ # glad does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_opengl)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/opengl)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/opengl2)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -340,6 +377,9 @@ if(LIBIGL_WITH_OPENGL_GLFW)
|
|
|
add_subdirectory(${LIBIGL_EXTERNAL}/glfw glfw)
|
|
|
endif()
|
|
|
target_link_libraries(igl_opengl_glfw ${IGL_SCOPE} igl_opengl glfw)
|
|
|
+ # glfw does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_opengl_glfw)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/opengl/glfw)
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
@@ -354,6 +394,8 @@ if(LIBIGL_WITH_OPENGL_GLFW_IMGUI)
|
|
|
add_subdirectory(${LIBIGL_EXTERNAL}/imgui imgui)
|
|
|
endif()
|
|
|
target_link_libraries(igl_opengl_glfw_imgui ${IGL_SCOPE} igl_opengl_glfw imgui)
|
|
|
+ # list(APPEND ALL_MODULES igl_opengl_glfw_imgui)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/opengl/glfw/imgui)
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
@@ -369,6 +411,9 @@ if(LIBIGL_WITH_PNG)
|
|
|
endif()
|
|
|
compile_igl_module("png" "")
|
|
|
target_link_libraries(igl_png ${IGL_SCOPE} igl_stb_image igl_opengl)
|
|
|
+ # igl_std_image does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_png)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/png)
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
@@ -382,6 +427,9 @@ if(LIBIGL_WITH_TETGEN)
|
|
|
compile_igl_module("tetgen")
|
|
|
target_link_libraries(igl_tetgen ${IGL_SCOPE} tetgen)
|
|
|
target_include_directories(igl_tetgen ${IGL_SCOPE} ${TETGEN_DIR})
|
|
|
+ # tetget does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_tetgen)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/copyleft/tetgen)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -394,6 +442,9 @@ if(LIBIGL_WITH_TRIANGLE)
|
|
|
compile_igl_module("triangle")
|
|
|
target_link_libraries(igl_triangle ${IGL_SCOPE} triangle)
|
|
|
target_include_directories(igl_triangle ${IGL_SCOPE} ${TRIANGLE_DIR})
|
|
|
+ # triangle does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_triangle)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/triangle)
|
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
@@ -410,4 +461,33 @@ if(LIBIGL_WITH_XML)
|
|
|
compile_igl_module("xml")
|
|
|
target_link_libraries(igl_xml ${IGL_SCOPE} tinyxml2)
|
|
|
target_include_directories(igl_xml ${IGL_SCOPE} ${TINYXML2_DIR})
|
|
|
+ # tinyxml2 does not get exported, so skip for now
|
|
|
+ # list(APPEND ALL_MODULES igl_xml)
|
|
|
+ # list(APPEND INSTALL_HEADERS igl/xml)
|
|
|
endif()
|
|
|
+
|
|
|
+################################################################################
|
|
|
+### Install and export all modules
|
|
|
+
|
|
|
+include(GNUInstallDirs)
|
|
|
+
|
|
|
+install(TARGETS ${ALL_MODULES} EXPORT iglConfig
|
|
|
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
+)
|
|
|
+
|
|
|
+foreach(HEADERS ${INSTALL_HEADERS})
|
|
|
+ file(GLOB HEADER_FILES "${CMAKE_SOURCE_DIR}/../include/${HEADERS}/*.h")
|
|
|
+ install(
|
|
|
+ FILES ${HEADER_FILES}
|
|
|
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${HEADERS}
|
|
|
+ )
|
|
|
+endforeach(HEADERS)
|
|
|
+
|
|
|
+install(EXPORT iglConfig NAMESPACE igl::
|
|
|
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/igl/cmake
|
|
|
+)
|
|
|
+export(TARGETS ${ALL_MODULES} NAMESPACE igl:: FILE iglConfig.cmake)
|
|
|
+
|