From 53819123e73479b8d9075a86b5a7bef12a87cc26 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 29 Oct 2019 17:12:33 +0100 Subject: Simplify RPATHs for qmake build Use central rpath.pri for setting RPATHs and qttestrpath.pri for tests. Simplify install names of plugins and libraries on macOS to be just @rpath/libName, which follows convention better and makes setting up RPATHs easier. Preparation for moving tools one directory level down on macOS, to be able to add a qt.conf for the tools generically. Task-number: QTCREATORBUG-23120 Change-Id: I16625d48904abd3a7f4c2ad7bbba5916cdc400cd Reviewed-by: Christian Kandeler --- src/app/app.pro | 2 ++ src/qtcreatorlibrary.pri | 4 +++- src/qtcreatorplugin.pri | 4 +++- src/qtcreatortool.pri | 10 ++-------- src/rpath.pri | 20 +++++++++++++------- src/tools/cplusplus-shared/tool.pri | 2 ++ src/tools/iostool/iostool.pro | 2 ++ src/tools/qml2puppet/qml2puppet/qml2puppet.pro | 1 + tests/auto/cplusplus/shared/shared.pri | 1 - tests/auto/debugger/dumpers.pro | 3 --- .../auto/qml/codemodel/importscheck/importscheck.pro | 1 - tests/auto/qml/qrcparser/qrcparser.pro | 1 - tests/auto/qttestrpath.pri | 4 ++-- 13 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/app/app.pro b/src/app/app.pro index 8621a63f02..e76ba26b71 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -12,7 +12,9 @@ win32: VERSION= HEADERS += ../tools/qtcreatorcrashhandler/crashhandlersetup.h SOURCES += main.cpp ../tools/qtcreatorcrashhandler/crashhandlersetup.cpp +RPATH_BASE = $$IDE_BIN_PATH include(../rpath.pri) + include(../libs/qt-breakpad/qtbreakpad.pri) LIBS *= -l$$qtLibraryName(ExtensionSystem) -l$$qtLibraryName(Aggregation) -l$$qtLibraryName(Utils) diff --git a/src/qtcreatorlibrary.pri b/src/qtcreatorlibrary.pri index a4165a794f..003b2b0a69 100644 --- a/src/qtcreatorlibrary.pri +++ b/src/qtcreatorlibrary.pri @@ -13,9 +13,11 @@ win32 { DESTDIR = $$IDE_LIBRARY_PATH osx { - QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/Frameworks/ + QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/ QMAKE_LFLAGS += -compatibility_version $$QTCREATOR_COMPAT_VERSION } + +RPATH_BASE = $$IDE_LIBRARY_PATH include(rpath.pri) TARGET = $$qtLibraryTargetName($$TARGET) diff --git a/src/qtcreatorplugin.pri b/src/qtcreatorplugin.pri index a409ec19a5..806ed6f865 100644 --- a/src/qtcreatorplugin.pri +++ b/src/qtcreatorplugin.pri @@ -85,9 +85,11 @@ exists($$PLUGINJSON_IN) { } osx { - QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/PlugIns/ + QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/ QMAKE_LFLAGS += -compatibility_version $$QTCREATOR_COMPAT_VERSION } + +RPATH_BASE = $$IDE_PLUGIN_PATH include(rpath.pri) contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols diff --git a/src/qtcreatortool.pri b/src/qtcreatortool.pri index ac00786bbe..900f728b9d 100644 --- a/src/qtcreatortool.pri +++ b/src/qtcreatortool.pri @@ -6,14 +6,8 @@ CONFIG += console CONFIG -= app_bundle DESTDIR = $$IDE_LIBEXEC_PATH -REL_PATH_TO_LIBS = $$relative_path($$IDE_LIBRARY_PATH, $$IDE_LIBEXEC_PATH) -REL_PATH_TO_PLUGINS = $$relative_path($$IDE_PLUGIN_PATH, $$IDE_LIBEXEC_PATH) -osx { - QMAKE_LFLAGS += -Wl,-rpath,@executable_path/$$REL_PATH_TO_LIBS,-rpath,@executable_path/$$REL_PATH_TO_PLUGINS -} else { - QMAKE_RPATHDIR += \$\$ORIGIN/$$REL_PATH_TO_LIBS - QMAKE_RPATHDIR += \$\$ORIGIN/$$REL_PATH_TO_PLUGINS -} + +RPATH_BASE = $$IDE_LIBEXEC_PATH include(rpath.pri) target.path = $$INSTALL_LIBEXEC_PATH diff --git a/src/rpath.pri b/src/rpath.pri index 0d8911a4d9..ef0a6b773b 100644 --- a/src/rpath.pri +++ b/src/rpath.pri @@ -1,13 +1,19 @@ -macx { - QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../,-rpath,@executable_path/../ +# set RPATH_BASE to the IDE_..._PATH of the target + +isEmpty(RPATH_BASE): \ + error("You must set RPATH_BASE before including rpath.pri") + +REL_PATH_TO_LIBS = $$relative_path($$IDE_LIBRARY_PATH, $$RPATH_BASE) +REL_PATH_TO_PLUGINS = $$relative_path($$IDE_PLUGIN_PATH, $$RPATH_BASE) + +macos { + QMAKE_LFLAGS += -Wl,-rpath,@loader_path/$$REL_PATH_TO_LIBS,-rpath,@loader_path/$$REL_PATH_TO_PLUGINS } else:linux-* { - #do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR - # this expands to $ORIGIN (after qmake and make), it does NOT read a qmake var QMAKE_RPATHDIR += \$\$ORIGIN - QMAKE_RPATHDIR += \$\$ORIGIN/.. - QMAKE_RPATHDIR += \$\$ORIGIN/../$$IDE_LIBRARY_BASENAME/qtcreator - IDE_PLUGIN_RPATH = $$join(QMAKE_RPATHDIR, ":") + QMAKE_RPATHDIR += \$\$ORIGIN/$$REL_PATH_TO_LIBS + QMAKE_RPATHDIR += \$\$ORIGIN/$$REL_PATH_TO_PLUGINS + IDE_PLUGIN_RPATH = $$join(QMAKE_RPATHDIR, ":") QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${IDE_PLUGIN_RPATH}\' QMAKE_RPATHDIR = } diff --git a/src/tools/cplusplus-shared/tool.pri b/src/tools/cplusplus-shared/tool.pri index 569d099e2f..dbd31739a3 100644 --- a/src/tools/cplusplus-shared/tool.pri +++ b/src/tools/cplusplus-shared/tool.pri @@ -1,6 +1,8 @@ QTC_LIB_DEPENDS += cplusplus include(../../../qtcreator.pri) + +RPATH_BASE = $$IDE_BIN_PATH include(../../rpath.pri) DESTDIR = $$IDE_BIN_PATH diff --git a/src/tools/iostool/iostool.pro b/src/tools/iostool/iostool.pro index 8ea9a78d6b..4ecd607ac2 100644 --- a/src/tools/iostool/iostool.pro +++ b/src/tools/iostool/iostool.pro @@ -19,6 +19,8 @@ include(../../../qtcreator.pri) # put into a subdir, so we can deploy a separate qt.conf for it DESTDIR = $$IDE_LIBEXEC_PATH/ios + +RPATH_BASE = $$DESTDIR include(../../rpath.pri) SOURCES += main.cpp \ diff --git a/src/tools/qml2puppet/qml2puppet/qml2puppet.pro b/src/tools/qml2puppet/qml2puppet/qml2puppet.pro index 9644cf4bca..403f8e24fb 100644 --- a/src/tools/qml2puppet/qml2puppet/qml2puppet.pro +++ b/src/tools/qml2puppet/qml2puppet/qml2puppet.pro @@ -7,6 +7,7 @@ include(../../../../qtcreator.pri) osx: DESTDIR = $$IDE_LIBEXEC_PATH/qmldesigner else: DESTDIR = $$IDE_LIBEXEC_PATH +RPATH_BASE = $$DESTDIR include(../../../rpath.pri) include(../../../../share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pri) diff --git a/tests/auto/cplusplus/shared/shared.pri b/tests/auto/cplusplus/shared/shared.pri index 579608c266..c6f06df44f 100644 --- a/tests/auto/cplusplus/shared/shared.pri +++ b/tests/auto/cplusplus/shared/shared.pri @@ -1,5 +1,4 @@ QTC_PLUGIN_DEPENDS += cpptools include(../../qttest.pri) -include($$IDE_SOURCE_TREE/src/rpath.pri) DEFINES += Q_PLUGIN_PATH=\"\\\"$$IDE_PLUGIN_PATH\\\"\" diff --git a/tests/auto/debugger/dumpers.pro b/tests/auto/debugger/dumpers.pro index 0eec400a89..f0e4420d6a 100644 --- a/tests/auto/debugger/dumpers.pro +++ b/tests/auto/debugger/dumpers.pro @@ -30,9 +30,6 @@ msvc { DEBUGGERDIR = $$IDE_SOURCE_TREE/src/plugins/debugger DUMPERDIR = $$IDE_SOURCE_TREE/share/qtcreator/debugger -include($$IDE_SOURCE_TREE/src/rpath.pri) - - SOURCES += \ $$DEBUGGERDIR/debuggerprotocol.cpp \ $$DEBUGGERDIR/simplifytype.cpp \ diff --git a/tests/auto/qml/codemodel/importscheck/importscheck.pro b/tests/auto/qml/codemodel/importscheck/importscheck.pro index d5e9ba7781..03501d4ed9 100644 --- a/tests/auto/qml/codemodel/importscheck/importscheck.pro +++ b/tests/auto/qml/codemodel/importscheck/importscheck.pro @@ -1,6 +1,5 @@ QTC_LIB_DEPENDS += cplusplus utils extensionsystem include(../../../qttest.pri) -include($$IDE_SOURCE_TREE/src/rpath.pri) DEFINES += QMLJS_LIBRARY QT += qml xml diff --git a/tests/auto/qml/qrcparser/qrcparser.pro b/tests/auto/qml/qrcparser/qrcparser.pro index cb991a4e8f..d043d709f0 100644 --- a/tests/auto/qml/qrcparser/qrcparser.pro +++ b/tests/auto/qml/qrcparser/qrcparser.pro @@ -2,7 +2,6 @@ QTC_LIB_DEPENDS += utils include(../../qttest.pri) #DEFINES+=CPLUSPLUS_BUILD_STATIC_LIB -include($$IDE_SOURCE_TREE/src/rpath.pri) #DEFINES += Q_PLUGIN_PATH=\"\\\"$$IDE_PLUGIN_PATH\\\"\" diff --git a/tests/auto/qttestrpath.pri b/tests/auto/qttestrpath.pri index bd65a2f3ef..d69f084db0 100644 --- a/tests/auto/qttestrpath.pri +++ b/tests/auto/qttestrpath.pri @@ -1,11 +1,11 @@ linux-* { - QMAKE_RPATHDIR += $$IDE_BUILD_TREE/$$IDE_LIBRARY_BASENAME/qtcreator + QMAKE_RPATHDIR += $$IDE_LIBRARY_PATH QMAKE_RPATHDIR += $$IDE_PLUGIN_PATH IDE_PLUGIN_RPATH = $$join(QMAKE_RPATHDIR, ":") QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${IDE_PLUGIN_RPATH}\' } else:macx { - QMAKE_LFLAGS += -Wl,-rpath,\"$$IDE_BIN_PATH/../\" + QMAKE_LFLAGS += -Wl,-rpath,\"$$IDE_LIBRARY_PATH\",-rpath,\"$$IDE_PLUGIN_PATH\" } -- cgit v1.2.1