From b3d06c08683f384fda08085635c9d9b9ccfc29bc Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 2 Aug 2020 17:02:28 +0200 Subject: [PATCH] Make macdeploy properly handle loader_path and libicudata --- cmake/Dmg.cmake | 2 -- dist/macos/macdeploy.py | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/cmake/Dmg.cmake b/cmake/Dmg.cmake index 45faab55a..a4feaab19 100644 --- a/cmake/Dmg.cmake +++ b/cmake/Dmg.cmake @@ -1,7 +1,5 @@ add_custom_target(dmg COMMAND /usr/local/opt/qt5/bin/macdeployqt strawberry.app - # macdeploy.py is not picking up libicudata.dylib so manually copy it for now. - COMMAND cp "/usr/local/opt/icu4c/lib/libicudata*.dylib" "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks" COMMAND ${CMAKE_SOURCE_DIR}/dist/macos/macdeploy.py strawberry.app COMMAND create-dmg --volname strawberry --background "${CMAKE_SOURCE_DIR}/dist/macos/dmg_background.png" --app-drop-link 450 218 --icon strawberry.app 150 218 --window-size 600 450 strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg strawberry.app WORKING_DIRECTORY ${CMAKE_BINARY_DIR} diff --git a/dist/macos/macdeploy.py b/dist/macos/macdeploy.py index 12f02688e..a3e3c09b4 100755 --- a/dist/macos/macdeploy.py +++ b/dist/macos/macdeploy.py @@ -27,7 +27,7 @@ import traceback LOGGER = logging.getLogger('macdeploy') -LIBRARY_SEARCH_PATH = ['/usr/local/lib'] +LIBRARY_SEARCH_PATH = ['/usr/local/lib', '/usr/local/opt/icu4c/lib'] FRAMEWORK_SEARCH_PATH = [ '/Library/Frameworks', @@ -193,11 +193,20 @@ def GetBrokenLibraries(binary): continue # unix style system library elif re.match(r'^\s*@executable_path', line) or re.match(r'^\s*@rpath', line) or re.match(r'^\s*@loader_path', line): # Potentially already fixed library - path = line.split('/')[3:] - if path: - relative_path = os.path.join(*path) + if line.count('/') == 1: + relative_path = os.path.join(*line.split('/')[1:]) + if not os.path.exists(os.path.join(frameworks_dir, relative_path)): + broken_libs['libs'].append(relative_path) + elif line.count('/') == 2: + relative_path = os.path.join(*line.split('/')[2:]) + if not os.path.exists(os.path.join(frameworks_dir, relative_path)): + broken_libs['libs'].append(relative_path) + elif line.count('/') >= 3: + relative_path = os.path.join(*line.split('/')[3:]) if not os.path.exists(os.path.join(frameworks_dir, relative_path)): broken_libs['frameworks'].append(relative_path) + else: + print "GetBrokenLibraries Error: %s" % line elif re.search(r'\w+\.framework', line): broken_libs['frameworks'].append(line) else: