From 7473f9aa1afe9a0aa731ce452d6d94c691789530 Mon Sep 17 00:00:00 2001 From: Alejandro Rodriguez Moreno Date: Thu, 2 Jul 2026 13:43:54 +0100 Subject: [PATCH] COMP: Fix IPOPT packaging in Windows Re #298 --- CMakeLists.txt | 17 +++++------------ ExternalBeamPlanning/Widgets/CMakeLists.txt | 8 ++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f5a53611..0d862b5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,18 +152,11 @@ endif() set(EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS) list(APPEND EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS "${vtkIECTransformLogic_DIR};vtkIECTransformLogic;RuntimeLibraries;/") -# Add optimization runtime libraries if enabled -if(EXTENSION_BUILDS_IPOPT) - if(DEFINED Mumps_DIR AND UNIX) - list(APPEND EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS "${Mumps_DIR};Mumps;RuntimeLibraries;/") - endif() - if(DEFINED HSL_DIR AND UNIX) - list(APPEND EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS "${HSL_DIR};HSL;RuntimeLibraries;/") - endif() - if(DEFINED Ipopt_DIR) - list(APPEND EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS "${Ipopt_DIR};Ipopt;RuntimeLibraries;/") - endif() -endif() +# Note: Mumps/HSL/Ipopt are built via autotools (Unix) or downloaded as a prebuilt zip +# (Windows), so none of them are CMake build trees with a cmake_install.cmake script. +# They cannot be registered via CPACK_INSTALL_CMAKE_PROJECTS (CPack fails trying to run +# a nonexistent install script for them); their runtime files are installed directly by +# the modules that consume them instead (see ExternalBeamPlanning/Widgets/CMakeLists.txt). if((LINUX OR APPLE) AND EXTENSION_BUILDS_ADAPTIVE_CPP) list(APPEND EXTENSION_CPACK_INSTALL_CMAKE_PROJECTS "${AdaptiveCpp_DIR};AdaptiveCpp;RuntimeLibraries;/") diff --git a/ExternalBeamPlanning/Widgets/CMakeLists.txt b/ExternalBeamPlanning/Widgets/CMakeLists.txt index fd41d11b..af358619 100644 --- a/ExternalBeamPlanning/Widgets/CMakeLists.txt +++ b/ExternalBeamPlanning/Widgets/CMakeLists.txt @@ -281,6 +281,14 @@ if(EXTENSION_BUILDS_IPOPT AND WIN32 AND DEFINED Ipopt_DLL_DIR) "$" ) endforeach() + + # Also install the DLLs for packaging. Ipopt is a prebuilt zip on Windows (not a CMake + # build tree), so it cannot be registered via CPACK_INSTALL_CMAKE_PROJECTS; install it + # as part of this module instead. + install(DIRECTORY "${Ipopt_DLL_DIR}/" + DESTINATION ${Slicer_INSTALL_QTLOADABLEMODULES_BIN_DIR} + COMPONENT RuntimeLibraries + FILES_MATCHING PATTERN "*.dll") endif() #-----------------------------------------------------------------------------