From fa4a3b04d0904a2e93242c0c3dd02a357d337f77 Mon Sep 17 00:00:00 2001 From: David Cole Date: Thu, 13 Jan 2011 16:43:56 -0500 Subject: [PATCH] Add CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS variable The parent commit added a warning message whenever a required file does not exist. As it turns out, the "required" files never exist when built with Visual Studio Express editions. Add a variable to suppress these warning messages because only packagers or naive includers of this file will care to see such warning messages. We want to warn about this condition by default so that people who are using InstallRequiredSystemLibraries without understanding it fully will have a chance of understanding why it's not working in the event of missing required files. But we also want to give projects the ability to suppress this warning (by "project's choice default") so that they can encourage users who are restricted to using an Express edition to build their project. Packagers should explicitly use... -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS=OFF ...when building releases. That way, their release build process will warn them about any missing files, but only if their project CMakeLists files use a construct similar to CMake's: IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) ENDIF() --- CMakeCPack.cmake | 8 +++++++- Modules/InstallRequiredSystemLibraries.cmake | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CMakeCPack.cmake b/CMakeCPack.cmake index 692befa2f3..aa993cfa01 100644 --- a/CMakeCPack.cmake +++ b/CMakeCPack.cmake @@ -13,9 +13,15 @@ # If the cmake version includes cpack, use it IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") IF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") - OPTION(CMAKE_INSTALL_DEBUG_LIBRARIES + OPTION(CMAKE_INSTALL_DEBUG_LIBRARIES "Install Microsoft runtime debug libraries with CMake." FALSE) MARK_AS_ADVANCED(CMAKE_INSTALL_DEBUG_LIBRARIES) + + # By default, do not warn when built on machines using only VS Express: + IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) + ENDIF() + INCLUDE(${CMake_SOURCE_DIR}/Modules/InstallRequiredSystemLibraries.cmake) ENDIF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") # Set the options file that needs to be included inside CMakeCPackOptions.cmake diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index 63b3d5e5fd..2dfe8b1d0c 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -16,6 +16,12 @@ # libraries are installed as well as the CRT run time libraries. # If CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION is set then the libraries are # installed to that directory rather than the default. +# If CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS is NOT set, then this file +# warns about required files that do not exist. You can set this variable to +# ON before including this file to avoid the warning. For example, the Visual +# Studio Express editions do not include the redistributable files, so if you +# include this file on a machine with only VS Express installed, you'll get +# the warning. #============================================================================= # Copyright 2006-2009 Kitware, Inc. @@ -304,9 +310,14 @@ IF(MSVC) SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib}) ELSE(EXISTS ${lib}) - MESSAGE(WARNING "system runtime library file does not exist: '${lib}'") - # This warning indicates an incomplete Visual Studio installation - # or a bug somewhere above here in this file + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + MESSAGE(WARNING "system runtime library file does not exist: '${lib}'") + # This warning indicates an incomplete Visual Studio installation + # or a bug somewhere above here in this file. + # If you would like to avoid this warning, fix the real problem, or + # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including + # this file. + ENDIF() ENDIF(EXISTS ${lib}) ENDFOREACH(lib) ENDIF(MSVC)