diff options
28 files changed, 335 insertions, 92 deletions
diff --git a/Help/release/3.14.rst b/Help/release/3.14.rst index ff499f5..afc2f5f 100644 --- a/Help/release/3.14.rst +++ b/Help/release/3.14.rst @@ -310,8 +310,8 @@ Deprecated and Removed Features Other Changes ============= -* Object library linking has been fixed to propagate transitive link - dependencies of object libraries to consuming targets. +* Object library linking has been fixed to propagate private link libraries + of object libraries to consuming targets. * Install rules under :command:`add_subdirectory` now interleave with those in the calling directory. See policy :policy:`CMP0082` for details. diff --git a/Help/release/dev/FindCups-imported-target.rst b/Help/release/dev/FindCups-imported-target.rst new file mode 100644 index 0000000..0fd9178 --- /dev/null +++ b/Help/release/dev/FindCups-imported-target.rst @@ -0,0 +1,4 @@ +FindCups-imported-target +------------------------ + +* The :module:`FindCups` module now provides imported targets. diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index d7f6f97..3ec534f 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -139,8 +139,9 @@ if (CMAKE_CROSSCOMPILING AND NOT _CMAKE_TOOLCHAIN_PREFIX) if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|QCC") get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME) - if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$") set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5}) elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") if(CMAKE_C_COMPILER_TARGET) set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_C_COMPILER_TARGET}-) diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake index bd878b2..68cb9fe 100644 --- a/Modules/CMakeDetermineCXXCompiler.cmake +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -136,8 +136,9 @@ if (CMAKE_CROSSCOMPILING AND NOT _CMAKE_TOOLCHAIN_PREFIX) if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC") get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME) - if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$") set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5}) elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") if(CMAKE_CXX_COMPILER_TARGET) set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_CXX_COMPILER_TARGET}-) diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 2f84c8e..83ce392 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -360,6 +360,15 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS} else() set(id_sdkroot "") endif() + set(id_clang_cxx_library "") + set(stdlib_regex "(^| )(-stdlib=)([^ ]+)( |$)") + string(REGEX MATCHALL "${stdlib_regex}" all_stdlib_matches "${CMAKE_CXX_FLAGS}") + if(all_stdlib_matches) + list(GET all_stdlib_matches "-1" last_stdlib_match) + if(last_stdlib_match MATCHES "${stdlib_regex}") + set(id_clang_cxx_library "CLANG_CXX_LIBRARY = \"${CMAKE_MATCH_3}\";") + endif() + endif() configure_file(${CMAKE_ROOT}/Modules/CompilerId/Xcode-3.pbxproj.in ${id_dir}/CompilerId${lang}.xcodeproj/project.pbxproj @ONLY) unset(_ENV_MACOSX_DEPLOYMENT_TARGET) diff --git a/Modules/CPackIFW.cmake b/Modules/CPackIFW.cmake index 141e842..8380977 100644 --- a/Modules/CPackIFW.cmake +++ b/Modules/CPackIFW.cmake @@ -518,7 +518,7 @@ macro(_cpack_ifw_resolve_script _variable) get_filename_component(${_ifw_script_macro} ${_ifw_script_file} ABSOLUTE) set(_ifw_script_file ${${_ifw_script_macro}}) if(NOT EXISTS ${_ifw_script_file}) - message(WARNING "CPack IFW: script file \"${_ifw_script_file}\" is not exists") + message(WARNING "CPack IFW: script file \"${_ifw_script_file}\" does not exist") set(${_ifw_script_macro}) endif() endif() diff --git a/Modules/Compiler/GNU-FindBinUtils.cmake b/Modules/Compiler/GNU-FindBinUtils.cmake index 16b7bbd..097fbf3 100644 --- a/Modules/Compiler/GNU-FindBinUtils.cmake +++ b/Modules/Compiler/GNU-FindBinUtils.cmake @@ -18,7 +18,7 @@ get_filename_component(__gcc_hints "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPIL find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x_y}" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x}" - "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" + "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_COMPILER_SUFFIX}" HINTS ${__gcc_hints} DOC "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" ) @@ -28,7 +28,7 @@ mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR) find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x_y}" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x}" - "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib" + "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_COMPILER_SUFFIX}" HINTS ${__gcc_hints} DOC "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" ) diff --git a/Modules/CompilerId/Xcode-3.pbxproj.in b/Modules/CompilerId/Xcode-3.pbxproj.in index 813c074..672044e 100644 --- a/Modules/CompilerId/Xcode-3.pbxproj.in +++ b/Modules/CompilerId/Xcode-3.pbxproj.in @@ -86,6 +86,7 @@ SYMROOT = .; @id_toolset@ @id_lang_version@ + @id_clang_cxx_library@ @id_deployment_target@ @id_sdkroot@ }; diff --git a/Modules/FindCups.cmake b/Modules/FindCups.cmake index 10ce229..27105b9 100644 --- a/Modules/FindCups.cmake +++ b/Modules/FindCups.cmake @@ -5,18 +5,38 @@ FindCups -------- -Try to find the Cups printing system +Find the CUPS printing system. -Once done this will define +Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which +features this function (i.e. at least 1.1.19) -:: +Imported targets +^^^^^^^^^^^^^^^^ - CUPS_FOUND - system has Cups - CUPS_INCLUDE_DIR - the Cups include directory - CUPS_LIBRARIES - Libraries needed to use Cups - CUPS_VERSION_STRING - version of Cups found (since CMake 2.8.8) - Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which - features this function (i.e. at least 1.1.19) +This module defines :prop_tgt:`IMPORTED` target ``Cups::Cups``, if Cups has +been found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``CUPS_FOUND`` + true if CUPS headers and libraries were found +``CUPS_INCLUDE_DIRS`` + the directory containing the Cups headers +``CUPS_LIBRARIES`` + the libraries to link against to use CUPS. +``CUPS_VERSION_STRING`` + the version of CUPS found (since CMake 2.8.8) + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``CUPS_INCLUDE_DIR`` + the directory containing the Cups headers #]=======================================================================] find_path(CUPS_INCLUDE_DIR cups/cups.h ) @@ -66,3 +86,13 @@ else () endif () mark_as_advanced(CUPS_INCLUDE_DIR CUPS_LIBRARIES) + +if (CUPS_FOUND) + set(CUPS_INCLUDE_DIRS "${CUPS_INCLUDE_DIR}") + if (NOT TARGET Cups::Cups) + add_library(Cups::Cups INTERFACE IMPORTED) + set_target_properties(Cups::Cups PROPERTIES + INTERFACE_LINK_LIBRARIES "${CUPS_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${CUPS_INCLUDE_DIR}") + endif () +endif () diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake index 2772b7d..70bfc96 100644 --- a/Modules/FindHDF5.cmake +++ b/Modules/FindHDF5.cmake @@ -8,7 +8,6 @@ FindHDF5 Find HDF5, a library for reading and writing self describing array data. - This module invokes the HDF5 wrapper compiler that should be installed alongside HDF5. Depending upon the HDF5 Configuration, the wrapper compiler is called either h5cc or h5pcc. If this succeeds, the module @@ -45,54 +44,75 @@ an HDF5 client application, this module also makes an effort to find tools that come with the HDF5 distribution that may be useful for regression testing. -This module will define the following variables: - -:: - - HDF5_FOUND - true if HDF5 was found on the system - HDF5_VERSION - HDF5 version in format Major.Minor.Release - HDF5_INCLUDE_DIRS - Location of the hdf5 includes - HDF5_INCLUDE_DIR - Location of the hdf5 includes (deprecated) - HDF5_DEFINITIONS - Required compiler definitions for HDF5 - HDF5_LIBRARIES - Required libraries for all requested bindings - HDF5_HL_LIBRARIES - Required libraries for the HDF5 high level API for all - bindings, if the HL component is enabled - -Available components are: C CXX Fortran and HL. For each enabled language -binding, a corresponding HDF5_${LANG}_LIBRARIES variable, and potentially -HDF5_${LANG}_DEFINITIONS, will be defined. -If the HL component is enabled, then an HDF5_${LANG}_HL_LIBRARIES will +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``HDF5_FOUND`` + HDF5 was found on the system +``HDF5_VERSION`` + HDF5 library version +``HDF5_INCLUDE_DIRS`` + Location of the HDF5 header files +``HDF5_DEFINITIONS`` + Required compiler definitions for HDF5 +``HDF5_LIBRARIES`` + Required libraries for all requested bindings +``HDF5_HL_LIBRARIES`` + Required libraries for the HDF5 high level API for all bindings, + if the ``HL`` component is enabled + +Available components are: ``C`` ``CXX`` ``Fortran`` and ``HL``. +For each enabled language binding, a corresponding ``HDF5_${LANG}_LIBRARIES`` +variable, and potentially ``HDF5_${LANG}_DEFINITIONS``, will be defined. +If the ``HL`` component is enabled, then an ``HDF5_${LANG}_HL_LIBRARIES`` will also be defined. With all components enabled, the following variables will be defined: -:: - - HDF5_C_DEFINITIONS -- Required compiler definitions for HDF5 C bindings - HDF5_CXX_DEFINITIONS -- Required compiler definitions for HDF5 C++ bindings - HDF5_Fortran_DEFINITIONS -- Required compiler definitions for HDF5 Fortran bindings - HDF5_C_INCLUDE_DIRS -- Required include directories for HDF5 C bindings - HDF5_CXX_INCLUDE_DIRS -- Required include directories for HDF5 C++ bindings - HDF5_Fortran_INCLUDE_DIRS -- Required include directories for HDF5 Fortran bindings - HDF5_C_LIBRARIES - Required libraries for the HDF5 C bindings - HDF5_CXX_LIBRARIES - Required libraries for the HDF5 C++ bindings - HDF5_Fortran_LIBRARIES - Required libraries for the HDF5 Fortran bindings - HDF5_C_HL_LIBRARIES - Required libraries for the high level C bindings - HDF5_CXX_HL_LIBRARIES - Required libraries for the high level C++ bindings - HDF5_Fortran_HL_LIBRARIES - Required libraries for the high level Fortran - bindings. - - HDF5_IS_PARALLEL - Whether or not HDF5 was found with parallel IO support - HDF5_C_COMPILER_EXECUTABLE - the path to the HDF5 C wrapper compiler - HDF5_CXX_COMPILER_EXECUTABLE - the path to the HDF5 C++ wrapper compiler - HDF5_Fortran_COMPILER_EXECUTABLE - the path to the HDF5 Fortran wrapper compiler - HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C compiler - which is also the HDF5 wrapper - HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C++ - compiler which is also - the HDF5 wrapper - HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary - Fortran compiler which - is also the HDF5 wrapper - HDF5_DIFF_EXECUTABLE - the path to the HDF5 dataset comparison tool +``HDF5_C_DEFINITIONS`` + Required compiler definitions for HDF5 C bindings +``HDF5_CXX_DEFINITIONS`` + Required compiler definitions for HDF5 C++ bindings +``HDF5_Fortran_DEFINITIONS`` + Required compiler definitions for HDF5 Fortran bindings +``HDF5_C_INCLUDE_DIRS`` + Required include directories for HDF5 C bindings +``HDF5_CXX_INCLUDE_DIRS`` + Required include directories for HDF5 C++ bindings +``HDF5_Fortran_INCLUDE_DIRS`` + Required include directories for HDF5 Fortran bindings +``HDF5_C_LIBRARIES`` + Required libraries for the HDF5 C bindings +``HDF5_CXX_LIBRARIES`` + Required libraries for the HDF5 C++ bindings +``HDF5_Fortran_LIBRARIES`` + Required libraries for the HDF5 Fortran bindings +``HDF5_C_HL_LIBRARIES`` + Required libraries for the high level C bindings +``HDF5_CXX_HL_LIBRARIES`` + Required libraries for the high level C++ bindings +``HDF5_Fortran_HL_LIBRARIES`` + Required libraries for the high level Fortran bindings. + +``HDF5_IS_PARALLEL`` + HDF5 library has parallel IO support +``HDF5_C_COMPILER_EXECUTABLE`` + path to the HDF5 C wrapper compiler +``HDF5_CXX_COMPILER_EXECUTABLE`` + path to the HDF5 C++ wrapper compiler +``HDF5_Fortran_COMPILER_EXECUTABLE`` + path to the HDF5 Fortran wrapper compiler +``HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE`` + path to the primary C compiler which is also the HDF5 wrapper +``HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE`` + path to the primary C++ compiler which is also the HDF5 wrapper +``HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE`` + path to the primary Fortran compiler which is also the HDF5 wrapper +``HDF5_DIFF_EXECUTABLE`` + path to the HDF5 dataset comparison tool + +Hints +^^^^^ The following variable can be set to guide the search for HDF5 libraries and includes: @@ -100,10 +120,10 @@ The following variable can be set to guide the search for HDF5 libraries and inc Specify the path to the HDF5 installation to use. ``HDF5_FIND_DEBUG`` - Set to a true value to get some extra debugging output. + Set ``true`` to get extra debugging output. ``HDF5_NO_FIND_PACKAGE_CONFIG_FILE`` - Set to a true value to skip trying to find ``hdf5-config.cmake``. + Set ``true`` to skip trying to find ``hdf5-config.cmake``. #]=======================================================================] # This module is maintained by Will Dicharry <wdicharry@stellarscience.com>. @@ -322,20 +342,22 @@ macro( _HDF5_invoke_compiler language output return_value version is_parallel) elseif("${language}" STREQUAL "Fortran") set(test_file ${scratch_dir}/cmake_hdf5_test.f90) endif() - exec_program( ${HDF5_${language}_COMPILER_EXECUTABLE} - ARGS -show ${lib_type_args} ${test_file} - OUTPUT_VARIABLE ${output} - RETURN_VALUE ${return_value} - ) + execute_process( + COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -show ${lib_type_args} ${test_file} + OUTPUT_VARIABLE ${output} + ERROR_VARIABLE ${output} + RESULT_VARIABLE ${return_value} + ) if(NOT ${${return_value}} EQUAL 0) message(STATUS "Unable to determine HDF5 ${language} flags from HDF5 wrapper.") endif() - exec_program( ${HDF5_${language}_COMPILER_EXECUTABLE} - ARGS -showconfig - OUTPUT_VARIABLE config_output - RETURN_VALUE config_return - ) + execute_process( + COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -showconfig + OUTPUT_VARIABLE config_output + ERROR_VARIABLE config_output + RESULT_VARIABLE config_return + ) if(NOT ${return_value} EQUAL 0) message( STATUS "Unable to determine HDF5 ${language} version from HDF5 wrapper.") diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index ef4318b..39cb7e6 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 14) -set(CMake_VERSION_PATCH 20190206) +set(CMake_VERSION_PATCH 20190207) #set(CMake_VERSION_RC 1) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 07656ed..d8b2e89 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -1136,6 +1136,8 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry, value |= cmIDEFlagTable::CaseInsensitive; } else if (s == "SpaceAppendable") { value |= cmIDEFlagTable::SpaceAppendable; + } else if (s == "CommaAppendable") { + value |= cmIDEFlagTable::CommaAppendable; } } } diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 16f8a0e..51c001e 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -2254,6 +2254,22 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt, debugStr = "NO"; } + // extract C++ stdlib + for (auto const& language : languages) { + if (language != "CXX") { + continue; + } + std::string& flags = cflags[language]; + + auto stdlib = + this->ExtractFlagRegex("(^| )(-stdlib=[^ ]+)( |$)", 2, flags); + if (stdlib.size() > 8) { + const auto cxxLibrary = stdlib.substr(8); + buildSettings->AddAttribute("CLANG_CXX_LIBRARY", + this->CreateString(cxxLibrary)); + } + } + buildSettings->AddAttribute("COMBINE_HIDPI_IMAGES", this->CreateString("YES")); buildSettings->AddAttribute("GCC_GENERATE_DEBUGGING_SYMBOLS", diff --git a/Source/cmIDEFlagTable.h b/Source/cmIDEFlagTable.h index 28d5d53..ff93432 100644 --- a/Source/cmIDEFlagTable.h +++ b/Source/cmIDEFlagTable.h @@ -29,6 +29,9 @@ struct cmIDEFlagTable SpaceAppendable = (1 << 7), // a flag that if specified multiple times // should have its value appended to the // old value with spaces + CommaAppendable = (1 << 8), // a flag that if specified multiple times + // should have its value appended to the + // old value with commas (e.g. C# /nowarn UserValueIgnored = UserValue | UserIgnored, UserValueRequired = UserValue | UserRequired diff --git a/Source/cmIDEOptions.cxx b/Source/cmIDEOptions.cxx index ee0c782..ea67d45 100644 --- a/Source/cmIDEOptions.cxx +++ b/Source/cmIDEOptions.cxx @@ -148,6 +148,8 @@ void cmIDEOptions::FlagMapUpdate(cmIDEFlagTable const* entry, this->FlagMap[entry->IDEName].push_back(new_value); } else if (entry->special & cmIDEFlagTable::SpaceAppendable) { this->FlagMap[entry->IDEName].append_with_space(new_value); + } else if (entry->special & cmIDEFlagTable::CommaAppendable) { + this->FlagMap[entry->IDEName].append_with_comma(new_value); } else { // Use the user-specified value. this->FlagMap[entry->IDEName] = new_value; diff --git a/Source/cmIDEOptions.h b/Source/cmIDEOptions.h index a4e5757..4a43073 100644 --- a/Source/cmIDEOptions.h +++ b/Source/cmIDEOptions.h @@ -65,12 +65,22 @@ protected: this->derived::operator=(r); return *this; } + FlagValue& append_with_comma(std::string const& r) + { + return append_with_separator(r, ','); + } FlagValue& append_with_space(std::string const& r) { + return append_with_separator(r, ' '); + } + + private: + FlagValue& append_with_separator(std::string const& r, char separator) + { this->resize(1); std::string& l = this->operator[](0); if (!l.empty()) { - l += " "; + l += separator; } l += r; return *this; diff --git a/Templates/MSBuild/FlagTables/v10_CSharp.json b/Templates/MSBuild/FlagTables/v10_CSharp.json index a0780a4..5989aea 100644 --- a/Templates/MSBuild/FlagTables/v10_CSharp.json +++ b/Templates/MSBuild/FlagTables/v10_CSharp.json @@ -299,11 +299,15 @@ "flags": [] }, { - "name": "DisabledWarnings", - "switch": "nowarn", + "name": "NoWarn", + "switch": "nowarn:", "comment": "", "value": "", - "flags": [] + "flags": [ + "UserValue", + "UserRequired", + "CommaAppendable" + ] }, { "name": "CheckForOverflowUnderflow", diff --git a/Templates/MSBuild/FlagTables/v11_CSharp.json b/Templates/MSBuild/FlagTables/v11_CSharp.json index a0780a4..5989aea 100644 --- a/Templates/MSBuild/FlagTables/v11_CSharp.json +++ b/Templates/MSBuild/FlagTables/v11_CSharp.json @@ -299,11 +299,15 @@ "flags": [] }, { - "name": "DisabledWarnings", - "switch": "nowarn", + "name": "NoWarn", + "switch": "nowarn:", "comment": "", "value": "", - "flags": [] + "flags": [ + "UserValue", + "UserRequired", + "CommaAppendable" + ] }, { "name": "CheckForOverflowUnderflow", diff --git a/Templates/MSBuild/FlagTables/v12_CSharp.json b/Templates/MSBuild/FlagTables/v12_CSharp.json index a0780a4..5989aea 100644 --- a/Templates/MSBuild/FlagTables/v12_CSharp.json +++ b/Templates/MSBuild/FlagTables/v12_CSharp.json @@ -299,11 +299,15 @@ "flags": [] }, { - "name": "DisabledWarnings", - "switch": "nowarn", + "name": "NoWarn", + "switch": "nowarn:", "comment": "", "value": "", - "flags": [] + "flags": [ + "UserValue", + "UserRequired", + "CommaAppendable" + ] }, { "name": "CheckForOverflowUnderflow", diff --git a/Templates/MSBuild/FlagTables/v140_CSharp.json b/Templates/MSBuild/FlagTables/v140_CSharp.json index a0780a4..5989aea 100644 --- a/Templates/MSBuild/FlagTables/v140_CSharp.json +++ b/Templates/MSBuild/FlagTables/v140_CSharp.json @@ -299,11 +299,15 @@ "flags": [] }, { - "name": "DisabledWarnings", - "switch": "nowarn", + "name": "NoWarn", + "switch": "nowarn:", "comment": "", "value": "", - "flags": [] + "flags": [ + "UserValue", + "UserRequired", + "CommaAppendable" + ] }, { "name": "CheckForOverflowUnderflow", diff --git a/Templates/MSBuild/FlagTables/v141_CSharp.json b/Templates/MSBuild/FlagTables/v141_CSharp.json index a0780a4..5989aea 100644 --- a/Templates/MSBuild/FlagTables/v141_CSharp.json +++ b/Templates/MSBuild/FlagTables/v141_CSharp.json @@ -299,11 +299,15 @@ "flags": [] }, { - "name": "DisabledWarnings", - "switch": "nowarn", + "name": "NoWarn", + "switch": "nowarn:", "comment": "", "value": "", - "flags": [] + "flags": [ + "UserValue", + "UserRequired", + "CommaAppendable" + ] }, { "name": "CheckForOverflowUnderflow", diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index ed98d97..8094c40 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1413,6 +1413,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release add_subdirectory(FindCURL) endif() + if(CMake_TEST_FindCups) + add_subdirectory(FindCups) + endif() + if(CMake_TEST_FindDoxygen) add_subdirectory(FindDoxygen) endif() @@ -3373,6 +3377,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release --build-options ${build_options} -DCMake_TEST_NESTED_MAKE_PROGRAM:FILEPATH=${CMake_TEST_EXPLICIT_MAKE_PROGRAM} -DCMake_TEST_Fortran_SUBMODULES:BOOL=${CMake_TEST_Fortran_SUBMODULES} + ${CMake_TEST_FortranModules_BUILD_OPTIONS} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/FortranModules") endif() diff --git a/Tests/FindCups/CMakeLists.txt b/Tests/FindCups/CMakeLists.txt new file mode 100644 index 0000000..5be1ac1 --- /dev/null +++ b/Tests/FindCups/CMakeLists.txt @@ -0,0 +1,10 @@ +add_test(NAME FindCups.Test COMMAND + ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindCups/Test" + "${CMake_BINARY_DIR}/Tests/FindCups/Test" + ${build_generator_args} + --build-project FindCups + --build-options ${build_options} + --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION> + ) diff --git a/Tests/FindCups/Test/CMakeLists.txt b/Tests/FindCups/Test/CMakeLists.txt new file mode 100644 index 0000000..9e90553 --- /dev/null +++ b/Tests/FindCups/Test/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.10) +project(TestFindCups C) +include(CTest) + +find_package(Cups REQUIRED) + +add_definitions(-DCMAKE_EXPECTED_CUPS_VERSION="${CUPS_VERSION_STRING}") + +add_executable(test_tgt main.c) +target_link_libraries(test_tgt Cups::Cups) +add_test(NAME test_tgt COMMAND test_tgt) + +add_executable(test_var main.c) +target_include_directories(test_var PRIVATE ${CUPS_INCLUDE_DIRS}) +target_link_libraries(test_var PRIVATE ${CUPS_LIBRARIES}) +add_test(NAME test_var COMMAND test_var) diff --git a/Tests/FindCups/Test/main.c b/Tests/FindCups/Test/main.c new file mode 100644 index 0000000..b69d621 --- /dev/null +++ b/Tests/FindCups/Test/main.c @@ -0,0 +1,12 @@ +#include <cups/cups.h> + +int main() +{ + int num_options = 0; + cups_option_t* options = NULL; + + num_options = cupsAddOption(CUPS_COPIES, "1", num_options, &options); + cupsFreeOptions(num_options, options); + + return 0; +} diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index 7c1ed4e..df253a9 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -1,5 +1,6 @@ include(RunCMake) +run_cmake(VsCSharpCompilerOpts) run_cmake(ExplicitCMakeLists) run_cmake(SourceGroupCMakeLists) diff --git a/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts-check.cmake b/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts-check.cmake new file mode 100644 index 0000000..3e418c3 --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts-check.cmake @@ -0,0 +1,64 @@ +# +# Check C# VS project for required elements. +# +set(csProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.csproj") +if(NOT EXISTS "${csProjectFile}") + set(RunCMake_TEST_FAILED "Project file ${csProjectFile} does not exist.") + return() +endif() + + +set(inDebug FALSE) +set(inRelease FALSE) +set(debugOK FALSE) +set(releaseOK FALSE) + + +file(STRINGS "${csProjectFile}" lines) +foreach(line IN LISTS lines) + #message(STATUS ${line}) + if(line MATCHES "^ *<PropertyGroup .*Debug\\|(Win32|x64).*") + set(inDebug TRUE) + elseif(line MATCHES "^ *<PropertyGroup .*Release\\|(Win32|x64).*") + set(inRelease TRUE) + elseif(line MATCHES "^ *</PropertyGroup> *$") + set(inRelease FALSE) + set(inDebug FALSE) + elseif(inDebug AND + (line MATCHES "^ *<NoWarn>.*505.*</NoWarn> *$") AND + (line MATCHES "^ *<NoWarn>.*707.*</NoWarn> *$") AND + (line MATCHES "^ *<NoWarn>.*808.*</NoWarn> *$") AND + (line MATCHES "^ *<NoWarn>.*909.*</NoWarn> *$") + ) + set(debugOK TRUE) + elseif(inRelease AND + (NOT (line MATCHES "^ *<NoWarn>.*505.*</NoWarn> *$")) AND + (line MATCHES "^ *<NoWarn>.*707.*</NoWarn> *$") AND + (line MATCHES "^ *<NoWarn>.*808.*</NoWarn> *$") AND + (line MATCHES "^ *<NoWarn>.*909.*</NoWarn> *$") + ) + set(releaseOK TRUE) + endif() +endforeach() + +function(print_csprojfile) + file(STRINGS "${csProjectFile}" lines) + foreach(line IN LISTS lines) + message(STATUS ${line}) + endforeach() +endfunction() + + +if(NOT debugOK) + message(STATUS "Failed to set Debug configuration warning config correctly.") + set(RunCMake_TEST_FAILED "Failed to set Debug configuration defines correctly.") + print_csprojfile() + return() +endif() + +if(NOT releaseOK) + message(STATUS "Failed to set Release configuration warning config correctly.") + set(RunCMake_TEST_FAILED "Failed to set Release configuration defines correctly.") + print_csprojfile() + return() +endif() diff --git a/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts.cmake b/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts.cmake new file mode 100644 index 0000000..85af38b --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsCSharpCompilerOpts.cmake @@ -0,0 +1,14 @@ +enable_language(CSharp) + +add_library(foo SHARED + foo.cs) + +set_target_properties(foo PROPERTIES + LINKER_LANGUAGE CSharp) + + +# Issue 18878 +target_compile_options(foo PRIVATE "/platform:anycpu" "/nowarn:707,808" "/nowarn:909" ) + +# Debug only warning disable +set(CMAKE_CSharp_FLAGS_DEBUG "${CMAKE_CSharp_FLAGS_DEBUG} /nowarn:505") |