mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-31 01:24:19 +02:00
CMake 3.15 introduced the `MSVC_RUNTIME_LIBRARY` property as a way to specify which MSVC runtime library is used and how it is linked. Also with that release, policy CMP0091 was introduced where the new behavior no longer adds the corresponding compile flags to the `CMAKE_<LANG>_FLAGS_<CONFIG>` variables. The new policy was enabled by 7f164bda96341272be385fa1359a26f97eb9d2b4, resulting in the MSI no longer working on previous Windows Server versions (2019 for example) as the CMake configuration replaced those compile flags (lines 3-9 in the same file) which no longer works when they are no longer part of the string. This commit fixes this regression by setting the `MSVC_RUNTIME_LIBRARY` property on the icinga-installer target. I've also added a comment stating my understanding of why this is necessary. Unfortunately, I couldn't find an explanation of why replacing the /MD with the /MT flag was done originally in the project history, so it's a bit of guesswork. https://cmake.org/cmake/help/latest/policy/CMP0091.html https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html
52 lines
1.5 KiB
CMake
52 lines
1.5 KiB
CMake
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
|
|
|
foreach(flag_var
|
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
if(${flag_var} MATCHES "/MD")
|
|
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
endif(${flag_var} MATCHES "/MD")
|
|
endforeach(flag_var)
|
|
|
|
set(icinga_installer_SOURCES
|
|
icinga-installer.cpp
|
|
)
|
|
|
|
add_executable(icinga-installer ${icinga_installer_SOURCES})
|
|
|
|
set_target_properties(
|
|
icinga-installer PROPERTIES
|
|
FOLDER Bin
|
|
OUTPUT_NAME icinga2-installer
|
|
LINK_FLAGS "/SUBSYSTEM:WINDOWS"
|
|
|
|
# Use a statically-linked runtime library as this binary is run during the installation process where the other DLLs
|
|
# may not have been installed already and the system-provided version may be too old.
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
|
|
target_link_libraries(icinga-installer shlwapi)
|
|
|
|
install(CODE "
|
|
execute_process(COMMAND \${CMAKE_COMMAND} -E copy \"${CMAKE_CURRENT_BINARY_DIR}/icinga2.wixpatch.\${BUILD_TYPE}\"
|
|
\"${CMAKE_CURRENT_BINARY_DIR}/icinga2.wixpatch\"
|
|
RESULT_VARIABLE copy_result
|
|
ERROR_VARIABLE error_output)
|
|
if(copy_result)
|
|
message(FATAL_ERROR \${error_output})
|
|
endif()"
|
|
)
|
|
|
|
file(
|
|
GENERATE
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/icinga2.wixpatch.$<CONFIG>"
|
|
INPUT "${CMAKE_CURRENT_SOURCE_DIR}/icinga2.wixpatch.cmake"
|
|
)
|
|
|
|
set(InstallPath "${CMAKE_INSTALL_SBINDIR}")
|
|
|
|
install(
|
|
TARGETS icinga-installer
|
|
RUNTIME DESTINATION ${InstallPath}
|
|
)
|