Skip to content
This repository was archived by the owner on Oct 10, 2022. It is now read-only.

Commit 03dfd81

Browse files
authored
OSX Dependencies fix (#75)
* add more dependencies to dependency install script * Fix OSX dependencies
1 parent dd1d5e5 commit 03dfd81

4 files changed

Lines changed: 60 additions & 5 deletions

File tree

src/CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ if(static_qt_windows)
66
add_definitions(-DSTATIC_WINDOWS_PLUGIN)
77
endif()
88

9-
set(drivers_destination ${APPBUNDLE_INSTALL_PREFIX}lib/${CMAKE_PROJECT_NAME}/drivers)
9+
if(OSX_BUNDLE)
10+
set(drivers_destination ${APPBUNDLE_INSTALL_PREFIX}/Contents/Plugins/${CMAKE_PROJECT_NAME})
11+
else()
12+
set(drivers_destination ${APPBUNDLE_INSTALL_PREFIX}lib/${CMAKE_PROJECT_NAME}/drivers)
13+
endif()
14+
1015
set(binary_destination bin)
1116
set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
1217

@@ -16,14 +21,15 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
1621
add_definitions(-DDRIVERS_DIRECTORY="${drivers_destination}")
1722
else()
1823
if(OSX_BUNDLE)
19-
add_definitions(-DDRIVERS_DIRECTORY="../../lib/PlanetaryImager/drivers")
24+
add_definitions(-DDRIVERS_DIRECTORY="../Plugins/${CMAKE_PROJECT_NAME}")
25+
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks" "@executable_path/../../Frameworks")
2026
else()
2127
add_definitions(-DDRIVERS_DIRECTORY="${CMAKE_INSTALL_PREFIX}/${drivers_destination}")
2228
endif()
2329
endif()
2430

2531

26-
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${drivers_destination};$ORIGIN")
32+
2733

2834
if(ADD_DRIVERS_BUILD_DIRECTORY)
2935
add_definitions(-DADDITIONAL_DRIVERS_DIRECTORY="${CMAKE_CURRENT_BINARY_DIR}/drivers")

src/bundle_install/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/macdeployqt ${CMAKE_CURRENT_BINARY_DIR}/macdeployqt)
22
install(CODE "
3-
execute_process(COMMAND bash ${CMAKE_CURRENT_BINARY_DIR}/macdeployqt ${MACOSX_BUNDLE_BUNDLE_NAME}.app WORKING_DIRECTORY \$ENV\{DESTDIR\} )
3+
set(BUNDLE_PATH \$ENV\{DESTDIR\})
4+
message(\"Running ${CMAKE_CURRENT_BINARY_DIR}/macdeployqt ${MACOSX_BUNDLE_BUNDLE_NAME}.app WORKING_DIRECTORY \${BUNDLE_PATH}\")
5+
execute_process(COMMAND bash ${CMAKE_CURRENT_BINARY_DIR}/macdeployqt ${MACOSX_BUNDLE_BUNDLE_NAME}.app WORKING_DIRECTORY \${BUNDLE_PATH} )
6+
message(\"Running ${CMAKE_SOURCE_DIR}/support/osx/fix_libraries.py WORKING_DIRECTORY \${BUNDLE_PATH}/${MACOSX_BUNDLE_BUNDLE_NAME}.app/Contents/Frameworks\")
7+
execute_process(COMMAND python ${CMAKE_SOURCE_DIR}/support/osx/fix_libraries.py WORKING_DIRECTORY \${BUNDLE_PATH}/${MACOSX_BUNDLE_BUNDLE_NAME}.app/Contents/Frameworks )
48
")
59

support/osx/fix_libraries.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env python3
2+
import os
3+
import sys
4+
import subprocess
5+
import argparse
6+
import shutil
7+
8+
parser = argparse.ArgumentParser(description='Fix libraries path in an application/library')
9+
parser.add_argument('--otool', default='otool')
10+
parser.add_argument('--install-name-tool', default='install_name_tool')
11+
parser.add_argument('files', nargs='*')
12+
13+
args = parser.parse_args()
14+
15+
brew_prefix = subprocess.check_output(['brew', '--prefix']).decode().strip()
16+
17+
def is_brew_dependency(library):
18+
if os.path.basename(library).startswith('Qt'):
19+
return False
20+
if library.startswith(brew_prefix):
21+
return True
22+
return False
23+
24+
def dependencies(file):
25+
deps = [
26+
x.strip().split(' (')[0] for x in
27+
subprocess.check_output([args.otool, '-L', file]).decode().split('\n')[1:]
28+
if x
29+
]
30+
deps = [d for d in deps if is_brew_dependency(d)]
31+
return deps
32+
33+
def fix_dependencies(file):
34+
for library in dependencies(file):
35+
libname = os.path.basename(library)
36+
print('fixing library {}: add rpath for dependency {}'.format(file, libname))
37+
result = subprocess.call([args.install_name_tool, '-change', library, '@rpath/{0}'.format(libname), file])
38+
39+
files = args.files
40+
if not files:
41+
print('Looking for libraries in {}'.format(os.getcwd()))
42+
files = [os.path.join(os.getcwd(), x) for x in os.listdir('.') if x.endswith('.dylib')]
43+
44+
for file in files:
45+
fix_dependencies(file)

support/osx/install-deps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ if ! which brew &>/dev/null; then
77
exit 1
88
fi
99

10-
for pkg in qt opencv pkg-config cmake boost cfitsio; do
10+
for pkg in libusb wget qt opencv pkg-config cmake boost cfitsio libdc1394; do
1111
if ! brew list "$pkg" &>/dev/null; then
1212
brew install "$pkg"
1313
fi

0 commit comments

Comments
 (0)