diff options
author | Brad King <brad.king@kitware.com> | 2016-03-21 13:39:24 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2016-03-21 13:39:24 (GMT) |
commit | cd992170db7a85f00d4ad38f78f0b38c33f83d1f (patch) | |
tree | ab14ac8e8e9a3cd06669358b9f5829ba7d42ae49 | |
parent | 8da0997872d454062bc50b3d4ff5d2777583202f (diff) | |
parent | d84ba668d7dd77ac38b3795f92e4ef0f894c696e (diff) | |
download | CMake-cd992170db7a85f00d4ad38f78f0b38c33f83d1f.zip CMake-cd992170db7a85f00d4ad38f78f0b38c33f83d1f.tar.gz CMake-cd992170db7a85f00d4ad38f78f0b38c33f83d1f.tar.bz2 |
Merge topic 'cpack-osx-optional-CoreServices'
d84ba668 CPack: Avoid using OS X CoreServices if compiler fails on header (#16021)
-rw-r--r-- | Source/CMakeLists.txt | 15 | ||||
-rw-r--r-- | Source/CPack/cmCPackDragNDropGenerator.cxx | 6 |
2 files changed, 20 insertions, 1 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 8dd58af..467b692 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -724,7 +724,20 @@ endif() add_library(CPackLib ${CPACK_SRCS}) target_link_libraries(CPackLib CMakeLib) if(APPLE) - target_link_libraries(CPackLib "-framework CoreServices") + # Some compilers produce errors in the CoreServices framework headers. + # Ideally such errors should be fixed by either the compiler vendor + # or the framework source, but we try to workaround it and build anyway. + # If it does not work, build with reduced functionality and warn. + check_include_file("CoreServices/CoreServices.h" HAVE_CoreServices) + if(HAVE_CoreServices) + set_property(SOURCE CPack/cmCPackDragNDropGenerator.cxx PROPERTY COMPILE_DEFINITIONS HAVE_CoreServices) + target_link_libraries(CPackLib "-framework CoreServices") + else() + message(WARNING "This compiler does not appear to support\n" + " #include <CoreServices/CoreServices.h>\n" + "Some CPack functionality may be limited.\n" + "See CMakeFiles/CMakeError.log for details of the failure.") + endif() endif() if(APPLE) diff --git a/Source/CPack/cmCPackDragNDropGenerator.cxx b/Source/CPack/cmCPackDragNDropGenerator.cxx index 521b395..d6de77d 100644 --- a/Source/CPack/cmCPackDragNDropGenerator.cxx +++ b/Source/CPack/cmCPackDragNDropGenerator.cxx @@ -22,10 +22,12 @@ #include <CoreFoundation/CoreFoundation.h> +#ifdef HAVE_CoreServices // For the old LocaleStringToLangAndRegionCodes() function, to convert // to the old Script Manager RegionCode values needed for the 'LPic' data // structure used for generating multi-lingual SLAs. #include <CoreServices/CoreServices.h> +#endif static const char* SLAHeader = "data 'LPic' (5000) {\n" @@ -643,9 +645,11 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir, kCFStringEncodingMacRoman); LangCode lang = 0; RegionCode region = 0; +#ifdef HAVE_CoreServices OSStatus err = LocaleStringToLangAndRegionCodes(iso_language_cstr, &lang, ®ion); if (err != noErr) +#endif { cmCPackLogger(cmCPackLog::LOG_ERROR, "No language/region code available for " << iso_language_cstr @@ -653,10 +657,12 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir, free(iso_language_cstr); return 0; } +#ifdef HAVE_CoreServices free(iso_language_cstr); header_data.push_back(region); header_data.push_back(i); header_data.push_back(0); +#endif } ofs << "data 'LPic' (5000) {\n"; ofs << std::hex << std::uppercase << std::setfill('0'); |