diff options
22 files changed, 185 insertions, 30 deletions
diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake index 2213acceea..bc15e9a0b7 100644 --- a/Modules/CheckCCompilerFlag.cmake +++ b/Modules/CheckCCompilerFlag.cmake @@ -6,6 +6,9 @@ # sets CMAKE_REQUIRED_DEFINITIONS to <flag>. # See help for CheckCSourceCompiles for a listing of variables # that can otherwise modify the build. +# The result only tells that the compiler does not give an error message when +# it encounters the flag. If the flag has any effect or even a specific one is +# beyond the scope of this module. #============================================================================= # Copyright 2006-2011 Kitware, Inc. diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake index 5e8db031c4..eee3a701e0 100644 --- a/Modules/CheckCXXCompilerFlag.cmake +++ b/Modules/CheckCXXCompilerFlag.cmake @@ -6,6 +6,9 @@ # sets CMAKE_REQUIRED_DEFINITIONS to <flag>. # See help for CheckCXXSourceCompiles for a listing of variables # that can otherwise modify the build. +# The result only tells that the compiler does not give an error message when +# it encounters the flag. If the flag has any effect or even a specific one is +# beyond the scope of this module. #============================================================================= # Copyright 2006-2010 Kitware, Inc. diff --git a/Modules/FindImageMagick.cmake b/Modules/FindImageMagick.cmake index 02a5777bb8..7c6cce7866 100644 --- a/Modules/FindImageMagick.cmake +++ b/Modules/FindImageMagick.cmake @@ -147,17 +147,17 @@ foreach(component ${ImageMagick_FIND_COMPONENTS} ) if(component STREQUAL "Magick++") FIND_IMAGEMAGICK_API(Magick++ Magick++.h - Magick++ CORE_RL_Magick++_ Magick++-6.Q16 Magick++-Q16 Magick++-6.Q8 Magick++-Q8 + Magick++ CORE_RL_Magick++_ Magick++-6.Q16 Magick++-Q16 Magick++-6.Q8 Magick++-Q8 Magick++-6.Q16HDRI Magick++-Q16HDRI Magick++-6.Q8HDRI Magick++-Q8HDRI ) list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY) elseif(component STREQUAL "MagickWand") FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h - Wand MagickWand CORE_RL_wand_ MagickWand-6.Q16 MagickWand-Q16 MagickWand-6.Q8 MagickWand-Q8 + Wand MagickWand CORE_RL_wand_ MagickWand-6.Q16 MagickWand-Q16 MagickWand-6.Q8 MagickWand-Q8 MagickWand-6.Q16HDRI MagickWand-Q16HDRI MagickWand-6.Q8HDRI MagickWand-Q8HDRI ) list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY) elseif(component STREQUAL "MagickCore") FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h - Magick MagickCore CORE_RL_magick_ MagickCore-6.Q16 MagickCore-Q16 MagickCore-6.Q8 MagickCore-Q8 + Magick MagickCore CORE_RL_magick_ MagickCore-6.Q16 MagickCore-Q16 MagickCore-6.Q8 MagickCore-Q8 MagickCore-6.Q16HDRI MagickCore-Q16HDRI MagickCore-6.Q8HDRI MagickCore-Q8HDRI ) list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY) else() diff --git a/Modules/FindTCL.cmake b/Modules/FindTCL.cmake index f649ddc56c..37e43d05a7 100644 --- a/Modules/FindTCL.cmake +++ b/Modules/FindTCL.cmake @@ -172,6 +172,8 @@ set(TCLTK_POSSIBLE_INCLUDE_PATHS /usr/include/tcl8.3 /usr/include/tcl8.2 /usr/include/tcl8.0 + /usr/local/include/tcl8.6 + /usr/local/include/tk8.6 /usr/local/include/tcl8.5 /usr/local/include/tk8.5 /usr/local/include/tcl8.4 diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index b9a95ee2f0..5fb1e69741 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,5 +2,5 @@ set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 11) -set(CMake_VERSION_TWEAK 20130815) +set(CMake_VERSION_TWEAK 20130827) #set(CMake_VERSION_RC 1) diff --git a/Source/CPack/cmCPackDocumentVariables.cxx b/Source/CPack/cmCPackDocumentVariables.cxx index 1dfaaf990b..8b16ae985e 100644 --- a/Source/CPack/cmCPackDocumentVariables.cxx +++ b/Source/CPack/cmCPackDocumentVariables.cxx @@ -28,7 +28,7 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm) " the so-called top level directory. The purpose of" " is to include (set to 1 or ON or TRUE) the top level directory" " in the package or not (set to 0 or OFF or FALSE).\n" - "Each CPack generator as a built-in default value for this" + "Each CPack generator has a built-in default value for this" " variable. E.g. Archive generators (ZIP, TGZ, ...) includes" " the top level whereas RPM or DEB don't. The user may override" " the default value by setting this variable.\n" diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx index e7b185a57f..819ac371e6 100644 --- a/Source/cmExportTryCompileFileGenerator.cxx +++ b/Source/cmExportTryCompileFileGenerator.cxx @@ -93,7 +93,9 @@ cmExportTryCompileFileGenerator::PopulateProperties(cmTarget* target, { properties[i->first] = i->second.GetValue(); - if(i->first.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0) + if(i->first.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0 + || i->first.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0 + || i->first.find("INTERFACE_LINK_LIBRARIES") == 0) { const std::string libs = i->second.GetValue(); diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 0a95091b5c..31e122efe5 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -81,6 +81,9 @@ public: void PathTooLong(cmTarget* target, cmSourceFile* sf, std::string const& sfRel); + + virtual const char* GetToolsVersion() { return "4.0"; } + protected: virtual const char* GetIDEVersion() { return "10.0"; } diff --git a/Source/cmGlobalVisualStudio12Generator.h b/Source/cmGlobalVisualStudio12Generator.h index 064e310d09..8c8aeb1fd6 100644 --- a/Source/cmGlobalVisualStudio12Generator.h +++ b/Source/cmGlobalVisualStudio12Generator.h @@ -31,6 +31,11 @@ public: /** TODO: VS 12 user macro support. */ virtual std::string GetUserMacrosDirectory() { return ""; } + + //in Visual Studio 2013 they detached the MSBuild tools version + //from the .Net Framework version and instead made it have it's own + //version number + virtual const char* GetToolsVersion() { return "12.0"; } protected: virtual const char* GetIDEVersion() { return "12.0"; } private: diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 13cd0067dc..147c332788 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1617,7 +1617,7 @@ void cmTarget::SetMakefile(cmMakefile* mf) this->IsApple = this->Makefile->IsOn("APPLE"); // Setup default property values. - this->SetPropertyDefault("INSTALL_NAME_DIR", ""); + this->SetPropertyDefault("INSTALL_NAME_DIR", 0); this->SetPropertyDefault("INSTALL_RPATH", ""); this->SetPropertyDefault("INSTALL_RPATH_USE_LINK_PATH", "OFF"); this->SetPropertyDefault("SKIP_BUILD_RPATH", "OFF"); @@ -3303,7 +3303,10 @@ static void processIncludeDirectories(cmTarget *tgt, if (!noMessage) { tgt->GetMakefile()->IssueMessage(messageType, e.str().c_str()); - return; + if (messageType == cmake::FATAL_ERROR) + { + return; + } } } @@ -4567,6 +4570,10 @@ bool cmTarget::HasMacOSXRpath(const char* config) { install_name_is_rpath = true; } + else if(install_name && use_install_name) + { + return false; + } } else { @@ -5299,18 +5306,18 @@ std::string cmTarget::GetInstallNameDirForInstallTree() if(this->Makefile->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME")) { std::string dir; + const char* install_name_dir = this->GetProperty("INSTALL_NAME_DIR"); if(!this->Makefile->IsOn("CMAKE_SKIP_RPATH") && !this->Makefile->IsOn("CMAKE_SKIP_INSTALL_RPATH")) { - const char* install_name_dir = this->GetProperty("INSTALL_NAME_DIR"); if(install_name_dir && *install_name_dir) { dir = install_name_dir; dir += "/"; } } - if(dir.empty() && this->GetPropertyAsBool("MACOSX_RPATH")) + if(!install_name_dir && this->GetPropertyAsBool("MACOSX_RPATH")) { dir = "@rpath/"; } diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index ea05347313..a26b2913ab 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -216,12 +216,16 @@ void cmVisualStudio10TargetGenerator::Generate() // Write the encoding header into the file char magic[] = {0xEF,0xBB, 0xBF}; this->BuildFileStream->write(magic, 3); - this->WriteString("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",0); - this->WriteString("<Project DefaultTargets=\"Build\" " - "ToolsVersion=\"4.0\" " - "xmlns=\"http://schemas.microsoft.com/" - "developer/msbuild/2003\">\n", - 0); + + //get the tools version to use + const std::string toolsVer(this->GlobalGenerator->GetToolsVersion()); + std::string project_defaults="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; + project_defaults.append("<Project DefaultTargets=\"Build\" ToolsVersion=\""); + project_defaults.append(toolsVer +"\" "); + project_defaults.append( + "xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"); + this->WriteString(project_defaults.c_str(),0); + this->WriteProjectConfigurations(); this->WriteString("<PropertyGroup Label=\"Globals\">\n", 1); this->WriteString("<ProjectGUID>", 2); @@ -716,12 +720,16 @@ void cmVisualStudio10TargetGenerator::WriteGroups() fout.write(magic, 3); cmGeneratedFileStream* save = this->BuildFileStream; this->BuildFileStream = & fout; - this->WriteString("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" - "<Project " - "ToolsVersion=\"4.0\" " - "xmlns=\"http://schemas.microsoft.com/" - "developer/msbuild/2003\">\n", - 0); + + //get the tools version to use + const std::string toolsVer(this->GlobalGenerator->GetToolsVersion()); + std::string project_defaults="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; + project_defaults.append("<Project ToolsVersion=\""); + project_defaults.append(toolsVer +"\" "); + project_defaults.append( + "xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"); + this->WriteString(project_defaults.c_str(),0); + for(ToolSourceMap::const_iterator ti = this->Tools.begin(); ti != this->Tools.end(); ++ti) { diff --git a/Tests/ExportImport/Export/CMakeLists.txt b/Tests/ExportImport/Export/CMakeLists.txt index b5b2027813..1f23b2ae79 100644 --- a/Tests/ExportImport/Export/CMakeLists.txt +++ b/Tests/ExportImport/Export/CMakeLists.txt @@ -213,6 +213,34 @@ set_property(TARGET testSharedLibRequired APPEND PROPERTY $<$<CXX_COMPILER_ID:GNU>:-DCUSTOM_COMPILE_OPTION> ) +add_library(testSharedLibRequiredUser SHARED testSharedLibRequiredUser.cpp) +generate_export_header(testSharedLibRequiredUser) +# LINK_PRIVATE so that it appears in the LINK_DEPENDENT_LIBRARIES, but not +# the INTERFACE_LINK_LIBRARIES. +set_property(TARGET testSharedLibRequiredUser APPEND PROPERTY + INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>" +) +target_link_libraries(testSharedLibRequiredUser LINK_PRIVATE testSharedLibRequired) +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser.h" + "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser_export.h" + DESTINATION include/testSharedLibRequiredUser +) + +cmake_policy(SET CMP0022 NEW) +add_library(testSharedLibRequiredUser2 SHARED testSharedLibRequiredUser2.cpp) +generate_export_header(testSharedLibRequiredUser2) +set_property(TARGET testSharedLibRequiredUser2 APPEND PROPERTY + INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>" +) +set_property(TARGET testSharedLibRequiredUser2 PROPERTY LINK_LIBRARIES testSharedLibRequired) +set_property(TARGET testSharedLibRequiredUser2 PROPERTY INTERFACE_LINK_LIBRARIES testSharedLibRequired) +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser2.h" + "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser2_export.h" + DESTINATION include/testSharedLibRequiredUser2 +) +cmake_policy(SET CMP0022 OLD) add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp) set_property(TARGET testSharedLibDepends APPEND PROPERTY @@ -284,6 +312,8 @@ install(TARGETS testLibIncludeRequired5 testLibIncludeRequired6 testSharedLibRequired + testSharedLibRequiredUser + testSharedLibRequiredUser2 noIncludesInterface EXPORT RequiredExp DESTINATION lib INCLUDES DESTINATION @@ -384,7 +414,8 @@ add_subdirectory(sublib) # For CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE test. # Export from build tree. export(TARGETS testExe1 testLib1 testLib2 testLib3 testExe2libImp testLib3Imp testLib3ImpDep subdirlib - testSharedLibRequired testSharedLibDepends renamed_on_export + testSharedLibRequired testSharedLibRequiredUser testSharedLibRequiredUser2 + testSharedLibDepends renamed_on_export cmp0022NEW cmp0022OLD NAMESPACE bld_ FILE ExportBuildTree.cmake diff --git a/Tests/ExportImport/Export/testSharedLibRequiredUser.cpp b/Tests/ExportImport/Export/testSharedLibRequiredUser.cpp new file mode 100644 index 0000000000..5580005176 --- /dev/null +++ b/Tests/ExportImport/Export/testSharedLibRequiredUser.cpp @@ -0,0 +1,10 @@ + +#include "testSharedLibRequiredUser.h" + +#include "testSharedLibRequired.h" + +int TestSharedLibRequiredUser::foo() +{ + TestSharedLibRequired req; + return req.foo(); +} diff --git a/Tests/ExportImport/Export/testSharedLibRequiredUser.h b/Tests/ExportImport/Export/testSharedLibRequiredUser.h new file mode 100644 index 0000000000..58bcaa5070 --- /dev/null +++ b/Tests/ExportImport/Export/testSharedLibRequiredUser.h @@ -0,0 +1,12 @@ + +#ifndef TESTSHAREDLIBREQUIREDUSER_H +#define TESTSHAREDLIBREQUIREDUSER_H + +#include "testsharedlibrequireduser_export.h" + +struct TESTSHAREDLIBREQUIREDUSER_EXPORT TestSharedLibRequiredUser +{ + int foo(); +}; + +#endif diff --git a/Tests/ExportImport/Export/testSharedLibRequiredUser2.cpp b/Tests/ExportImport/Export/testSharedLibRequiredUser2.cpp new file mode 100644 index 0000000000..d671bf0651 --- /dev/null +++ b/Tests/ExportImport/Export/testSharedLibRequiredUser2.cpp @@ -0,0 +1,8 @@ + +#include "testSharedLibRequiredUser2.h" + +TestSharedLibRequired TestSharedLibRequiredUser2::foo() +{ + TestSharedLibRequired req; + return req; +} diff --git a/Tests/ExportImport/Export/testSharedLibRequiredUser2.h b/Tests/ExportImport/Export/testSharedLibRequiredUser2.h new file mode 100644 index 0000000000..a132940289 --- /dev/null +++ b/Tests/ExportImport/Export/testSharedLibRequiredUser2.h @@ -0,0 +1,14 @@ + +#ifndef TESTSHAREDLIBREQUIREDUSER2_H +#define TESTSHAREDLIBREQUIREDUSER2_H + +#include "testsharedlibrequireduser2_export.h" + +#include "testSharedLibRequired.h" + +struct TESTSHAREDLIBREQUIREDUSER2_EXPORT TestSharedLibRequiredUser2 +{ + TestSharedLibRequired foo(); +}; + +#endif diff --git a/Tests/ExportImport/Import/try_compile/CMakeLists.txt b/Tests/ExportImport/Import/try_compile/CMakeLists.txt index 5600dffdf6..10884616ba 100644 --- a/Tests/ExportImport/Import/try_compile/CMakeLists.txt +++ b/Tests/ExportImport/Import/try_compile/CMakeLists.txt @@ -5,17 +5,32 @@ find_package(testLibRequired 2.5 REQUIRED) include(CheckCXXSourceCompiles) -set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequired) +set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequiredUser) check_cxx_source_compiles( " -#include \"testSharedLibRequired.h\" +#include \"testSharedLibRequiredUser.h\" int main(int argc, char **argv) { - TestSharedLibRequired req; - return req.foo(); + TestSharedLibRequiredUser user; + return user.foo(); } -" SHARED_LIB_REQUIRED) +" SHARED_LIB_DEPENDS) -if(NOT SHARED_LIB_REQUIRED) +if(NOT SHARED_LIB_DEPENDS) + message(SEND_ERROR "try_compile with IMPORTED targets failed!\n\n${OUTPUT}") +endif() + +set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequiredUser2) +check_cxx_source_compiles( + " +#include \"testSharedLibRequiredUser2.h\" +int main(int argc, char **argv) +{ + TestSharedLibRequiredUser2 user; + return user.foo().foo(); +} +" SHARED_LIB_DEPENDS2) + +if(NOT SHARED_LIB_DEPENDS2) message(SEND_ERROR "try_compile with IMPORTED targets failed!\n\n${OUTPUT}") endif() diff --git a/Tests/IncludeDirectories/CMP0021/CMakeLists.txt b/Tests/IncludeDirectories/CMP0021/CMakeLists.txt new file mode 100644 index 0000000000..0b9aee899a --- /dev/null +++ b/Tests/IncludeDirectories/CMP0021/CMakeLists.txt @@ -0,0 +1,14 @@ + +cmake_policy(SET CMP0021 OLD) +add_executable(cmp0021exe main.cpp) + +if(NOT CMAKE_CURRENT_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/includes") + execute_process(COMMAND ${CMAKE_COMMAND} -E + copy_directory + "${CMAKE_CURRENT_SOURCE_DIR}/includes" + "${CMAKE_CURRENT_BINARY_DIR}/includes" + ) +endif() +set_property(TARGET cmp0021exe PROPERTY + INCLUDE_DIRECTORIES includes/cmp0021) diff --git a/Tests/IncludeDirectories/CMP0021/includes/cmp0021/cmp0021.h b/Tests/IncludeDirectories/CMP0021/includes/cmp0021/cmp0021.h new file mode 100644 index 0000000000..3d49b31d57 --- /dev/null +++ b/Tests/IncludeDirectories/CMP0021/includes/cmp0021/cmp0021.h @@ -0,0 +1,2 @@ + +#define CMP0021_DEFINE diff --git a/Tests/IncludeDirectories/CMP0021/main.cpp b/Tests/IncludeDirectories/CMP0021/main.cpp new file mode 100644 index 0000000000..f886c4629c --- /dev/null +++ b/Tests/IncludeDirectories/CMP0021/main.cpp @@ -0,0 +1,11 @@ + +#include "cmp0021.h" + +#ifndef CMP0021_DEFINE +#error Expected CMP0021_DEFINE +#endif + +int main(int, char **) +{ + return 0; +} diff --git a/Tests/IncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/CMakeLists.txt index 596a280660..35ad8dc90d 100644 --- a/Tests/IncludeDirectories/CMakeLists.txt +++ b/Tests/IncludeDirectories/CMakeLists.txt @@ -86,3 +86,7 @@ get_target_property(incs empty_entry_test INCLUDE_DIRECTORIES) if (NOT incs STREQUAL ";/one/two") message(SEND_ERROR "Empty include_directories entry was not ignored.") endif() + +if(NOT CMAKE_GENERATOR STREQUAL Xcode AND NOT CMAKE_GENERATOR STREQUAL Ninja) + add_subdirectory(CMP0021) +endif() diff --git a/Tests/RunCMake/Configure/FailCopyFileABI-check.cmake b/Tests/RunCMake/Configure/FailCopyFileABI-check.cmake index c439aac7d2..db0cb0a346 100644 --- a/Tests/RunCMake/Configure/FailCopyFileABI-check.cmake +++ b/Tests/RunCMake/Configure/FailCopyFileABI-check.cmake @@ -4,10 +4,11 @@ if(EXISTS "${log}") else() set(error_log "") endif() -if(NOT error_log MATCHES "Cannot copy output executable.* +string(REPLACE "\r\n" "\n" regex "Cannot copy output executable.* to destination specified by COPY_FILE:.* Unable to find the executable at any of: .*\\.missing") +if(NOT error_log MATCHES "${regex}") string(REGEX REPLACE "\n" "\n " error_log " ${error_log}") set(RunCMake_TEST_FAILED "Log file:\n ${log}\ndoes not have expected COPY_FILE failure message:\n${error_log}") endif() |