[VTK 9.0.1] Missing call to find_package(pugixml) with external pugixml
Observed error:
/bin/ld: cannot find -lpugixml
After investigating:
VTK-vtk-module-find-packages.cmake
is not doing the find_package(pugixml) call since _vtk_module_find_package_enabled
is OFF
for pugixml although VTK has been configured with VTK_MODULE_USE_EXTERNAL_VTK_pugixml=ON
Used CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
include(CMakePrintHelpers)
project(vtk_test)
#find_package(VTK CONFIG REQUIRED)
set(VTK_SEARCH_MODULES FiltersExtraction
FiltersSources
FiltersTexture
IOExport
IOGeometry
IOPLY
InteractionStyle
RenderingCore
RenderingLOD
RenderingOpenGL2
pugixml)
find_package(VTK 9 NAMES vtk COMPONENTS ${VTK_SEARCH_MODULES} NO_MODULE REQUIRED)
cmake_print_variables(VTK_LIBRARIES VTK_INCLUDE_DIRS CMAKE_BUILD_TYPE)
add_executable(vtk_test main.cpp)
target_include_directories(vtk_test PRIVATE ${VTK_INCLUDE_DIRS})
target_link_libraries(vtk_test PRIVATE ${VTK_LIBRARIES})
From VTK-vtk-module-find-packages.cmake
unset(_vtk_module_find_package_fail_if_not_found)
unset(_vtk_module_find_package_enabled)
unset(_vtk_module_find_package_required)
set(_vtk_module_find_package_enabled OFF)
set(_vtk_module_find_package_is_required OFF)
set(_vtk_module_find_package_fail_if_not_found OFF)
if (_vtk_module_find_package_components)
if ("pugixml_vtk_module_mangle" IN_LIST _vtk_module_find_package_components)
set(_vtk_module_find_package_enabled ON)
if ("pugixml_vtk_module_mangle" IN_LIST _vtk_module_find_package_components_required)
set(_vtk_module_find_package_is_required "${${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED}")
set(_vtk_module_find_package_fail_if_not_found ON)
endif ()
endif ()
else ()
set(_vtk_module_find_package_enabled ON)
set(_vtk_module_find_package_is_required "${${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED}")
set(_vtk_module_find_package_fail_if_not_found ON)
endif ()
message(STATUS "${_vtk_module_find_package_enabled} blub")
if (_vtk_module_find_package_enabled)
set(_vtk_module_find_package_required)
if (_vtk_module_find_package_is_required)
set(_vtk_module_find_package_required REQUIRED)
endif ()
message(STATUS "SEARCHING FOR PUGIXML")
find_package(pugixml
${_vtk_module_find_package_quiet}
${_vtk_module_find_package_required}
COMPONENTS
OPTIONAL_COMPONENTS )
if (NOT pugixml_FOUND AND _vtk_module_find_package_fail_if_not_found)
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
message(STATUS
"Could not find the ${CMAKE_FIND_PACKAGE_NAME} package due to a "
"missing dependency: pugixml")
endif ()
set("${CMAKE_FIND_PACKAGE_NAME}_pugixml_vtk_module_mangle_FOUND" 0)
list(APPEND "${CMAKE_FIND_PACKAGE_NAME}_pugixml_vtk_module_mangle_NOT_FOUND_MESSAGE"
"Failed to find the pugixml package.")
endif ()
endif ()
The error is probably in
if ("pugixml_vtk_module_mangle" IN_LIST _vtk_module_find_package_components)
since the list contains pugixml without the extra mangling:
FiltersExtraction;FiltersSources;FiltersTexture;IOExport;IOGeometry;IOPLY;InteractionStyle;RenderingCore;RenderingLOD;RenderingOpenGL2;**pugixml**;CommonCore;CommonExecutionModel;FiltersGeneral;CommonDataModel;FiltersCore;FiltersStatistics;ParallelDIY;CommonComputationalGeometry;CommonTransforms;IOCore;IOImage;IOXML;RenderingContext2D;RenderingFreeType;RenderingVtkJS;CommonMath;FiltersGeometry;ImagingCore;jsoncpp;libharu;IOLegacy;CommonMisc;CommonSystem;FiltersHybrid;vtksys;zlib;CommonColor;FiltersModeling;RenderingUI;glew;opengl;kwiml;utf8;loguru;ImagingFourier;eigen;ParallelCore;diy2;doubleconversion;lz4;lzma;DICOMParser;jpeg;metaio;png;tiff;IOXMLParser;freetype;RenderingSceneGraph;ImagingSources;expat