diff options
author | Brad King <brad.king@kitware.com> | 2016-03-18 12:49:02 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-03-18 15:12:51 (GMT) |
commit | d84ba668d7dd77ac38b3795f92e4ef0f894c696e (patch) | |
tree | 8bfdf3818f4db4107fc070943a478a6f59409e86 | |
parent | c718070c0887e1c429d6ae4b717c006236c32736 (diff) | |
download | CMake-d84ba668d7dd77ac38b3795f92e4ef0f894c696e.zip CMake-d84ba668d7dd77ac38b3795f92e4ef0f894c696e.tar.gz CMake-d84ba668d7dd77ac38b3795f92e4ef0f894c696e.tar.bz2 |
CPack: Avoid using OS X CoreServices if compiler fails on header (#16021)
Some compilers on OS X report errors in the CoreServices framework headers.
Check for support of the header ahead of time and compile the relevant code
only when the header is available.
-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 5b67a2d..4ef0e80 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -728,7 +728,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'); |