summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorAdam Strzelecki <ono@java.pl>2014-10-21 16:42:33 +0200
committerBrad King <brad.king@kitware.com>2014-10-21 11:42:30 -0400
commit41564ff289b486ea0ccff46cb51f7ac3250f0312 (patch)
tree14418f4a8578c7b59e72ed065f63c63874d279e4 /Modules
parent631fadeae9b9077831fc310e7bdc62029a2204df (diff)
downloadcmake-41564ff289b486ea0ccff46cb51f7ac3250f0312.tar.gz
BundleUtilities: Ensure framework symlinks and Info.plist exist
This restores Qt SDK 4.8 and OS X >= 10.6.5 codesign compatibility improving embedding frameworks using correct bundle layout described at: https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html 1. If Versions/VERSION/Resources/Info.plist is missing, well known incorrect locations are checked for Info.plist and Info.plist is copied from there, otherwise codesign will fail. 2. Root framework symlinks to binary and Resources are restored to point inside Versions/Current, otherwise Qt 4.8 looking for Resources/ in framework root will fail.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/BundleUtilities.cmake18
1 files changed, 16 insertions, 2 deletions
diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake
index 445c71953e..fee0a7ca6f 100644
--- a/Modules/BundleUtilities.cmake
+++ b/Modules/BundleUtilities.cmake
@@ -655,8 +655,12 @@ function(copy_resolved_framework_into_bundle resolved_item resolved_embedded_ite
if(EXISTS "${resolved_resources}")
#message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_resources}' '${resolved_embedded_resources}'")
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_resources}" "${resolved_embedded_resources}")
- else()
- # Otherwise try at least copy Contents/Info.plist to Resources/Info.plist, if it exists:
+ endif()
+
+ # Some frameworks e.g. Qt put Info.plist in wrong place, so when it is
+ # missing in resources, copy it from other well known incorrect locations:
+ if(NOT EXISTS "${resolved_resources}/Info.plist")
+ # Check for Contents/Info.plist in framework root (older Qt SDK):
string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1/Contents/Info.plist" resolved_info_plist "${resolved_item}")
string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources/Info.plist" resolved_embedded_info_plist "${resolved_embedded_item}")
if(EXISTS "${resolved_info_plist}")
@@ -674,6 +678,16 @@ function(copy_resolved_framework_into_bundle resolved_item resolved_embedded_ite
if(NOT EXISTS "${resolved_embedded_versions}/Current")
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${resolved_embedded_version}" "${resolved_embedded_versions}/Current")
endif()
+ # Restore symlinks in framework root pointing to current framework
+ # binary and resources:
+ string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1" resolved_embedded_root "${resolved_embedded_item}")
+ string(REGEX REPLACE "^.*/([^/]+)$" "\\1" resolved_embedded_item_basename "${resolved_embedded_item}")
+ if(NOT EXISTS "${resolved_embedded_root}/${resolved_embedded_item_basename}")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/${resolved_embedded_item_basename}" "${resolved_embedded_root}/${resolved_embedded_item_basename}")
+ endif()
+ if(NOT EXISTS "${resolved_embedded_root}/Resources")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/Resources" "${resolved_embedded_root}/Resources")
+ endif()
endif()
endif()
if(UNIX AND NOT APPLE)