qmake: link qt libraries by full path
this avoids the scenario where the linker would pick up the wrong qt libraries for LIBS_PRIVATE because LIBS added the "wrong" path first. this is also consistent with configure-supplied dependencies as of recently. as a side effect, this also removes pretenses of lsb linker handling, as it makes no sense after the change and is certainly obsolete anyway. Fixes: QTBUG-50921 Change-Id: I84398c9143f393c2eefb3c69a31bd9f633669924 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
parent
2a815855a9
commit
5b3dfa470e
@ -145,12 +145,14 @@ import_plugins:qtConfig(static) {
|
|||||||
# the plugin path. Unknown plugins must rely on the default link path.
|
# the plugin path. Unknown plugins must rely on the default link path.
|
||||||
plug_type = $$eval(QT_PLUGIN.$${plug}.TYPE)
|
plug_type = $$eval(QT_PLUGIN.$${plug}.TYPE)
|
||||||
!isEmpty(plug_type) {
|
!isEmpty(plug_type) {
|
||||||
|
plug_name = $$QMAKE_PREFIX_STATICLIB$${plug}$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB
|
||||||
plug_path = $$eval(QT_PLUGIN.$${plug}.PATH)
|
plug_path = $$eval(QT_PLUGIN.$${plug}.PATH)
|
||||||
isEmpty(plug_path): \
|
isEmpty(plug_path): \
|
||||||
plug_path = $$[QT_INSTALL_PLUGINS/get]
|
plug_path = $$[QT_INSTALL_PLUGINS/get]
|
||||||
LIBS += -L$$plug_path/$$plug_type
|
LIBS += $$plug_path/$$plug_type/$$plug_name
|
||||||
|
} else {
|
||||||
|
LIBS += -l$${plug}$$qtPlatformTargetSuffix()
|
||||||
}
|
}
|
||||||
LIBS += -l$${plug}$$qtPlatformTargetSuffix()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,8 +197,6 @@ for(ever) {
|
|||||||
qtProcessModuleFlags(DEFINES, QT.$${QTLIB}.DEFINES)
|
qtProcessModuleFlags(DEFINES, QT.$${QTLIB}.DEFINES)
|
||||||
|
|
||||||
MODULE_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS
|
MODULE_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS
|
||||||
MODULE_LIBS_ADD = $$MODULE_LIBS
|
|
||||||
MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS
|
|
||||||
|
|
||||||
# Frameworks shouldn't need include paths, but much code does not use
|
# Frameworks shouldn't need include paths, but much code does not use
|
||||||
# module-qualified #includes, so by default we add paths which point
|
# module-qualified #includes, so by default we add paths which point
|
||||||
@ -209,23 +209,17 @@ for(ever) {
|
|||||||
!isEmpty(MODULE_MODULE) {
|
!isEmpty(MODULE_MODULE) {
|
||||||
contains(MODULE_CONFIG, lib_bundle) {
|
contains(MODULE_CONFIG, lib_bundle) {
|
||||||
framework = $$MODULE_MODULE
|
framework = $$MODULE_MODULE
|
||||||
|
# Linking frameworks by absolute path does not work.
|
||||||
LIBS$$var_sfx += -framework $$framework
|
LIBS$$var_sfx += -framework $$framework
|
||||||
} else {
|
} else {
|
||||||
!isEmpty(MODULE_LIBS_ADD): \
|
|
||||||
LIBS$$var_sfx += -L$$MODULE_LIBS_ADD
|
|
||||||
|
|
||||||
lib = $$MODULE_MODULE$$qtPlatformTargetSuffix()
|
lib = $$MODULE_MODULE$$qtPlatformTargetSuffix()
|
||||||
LIBS$$var_sfx += -l$$lib
|
win32|contains(MODULE_CONFIG, staticlib) {
|
||||||
|
lib = $$MODULE_LIBS/$$QMAKE_PREFIX_STATICLIB$${lib}.$$QMAKE_EXTENSION_STATICLIB
|
||||||
contains(MODULE_CONFIG, staticlib): \
|
PRE_TARGETDEPS += $$lib
|
||||||
PRE_TARGETDEPS *= $$MODULE_LIBS/$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB}
|
} else {
|
||||||
|
lib = $$MODULE_LIBS/$$QMAKE_PREFIX_SHLIB$${lib}.$$QMAKE_EXTENSION_SHLIB
|
||||||
!isEmpty(QMAKE_LSB) {
|
|
||||||
!isEmpty(MODULE_LIBS_ADD): \
|
|
||||||
QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD
|
|
||||||
QMAKE_LFLAGS *= --lsb-shared-libs=$$lib
|
|
||||||
QMAKE_LIBDIR *= /opt/lsb/lib
|
|
||||||
}
|
}
|
||||||
|
LIBS$$var_sfx += $$lib
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QMAKE_USE$$var_sfx += $$MODULE_USES
|
QMAKE_USE$$var_sfx += $$MODULE_USES
|
||||||
@ -295,7 +289,8 @@ contains(all_qt_module_deps, qml): \
|
|||||||
for (key, IMPORTS._KEYS_) {
|
for (key, IMPORTS._KEYS_) {
|
||||||
PATH = $$eval(IMPORTS.$${key}.path)
|
PATH = $$eval(IMPORTS.$${key}.path)
|
||||||
PLUGIN = $$eval(IMPORTS.$${key}.plugin)
|
PLUGIN = $$eval(IMPORTS.$${key}.plugin)
|
||||||
!isEmpty(PATH):!isEmpty(PLUGIN): LIBS *= -L$$PATH -l$${PLUGIN}$$qtPlatformTargetSuffix()
|
!isEmpty(PATH):!isEmpty(PLUGIN): \
|
||||||
|
LIBS += $$PATH/$$QMAKE_PREFIX_STATICLIB$${PLUGIN}$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB
|
||||||
}
|
}
|
||||||
|
|
||||||
# create qml_plugin_import.cpp
|
# create qml_plugin_import.cpp
|
||||||
|
@ -1,13 +1,21 @@
|
|||||||
QT_FOR_CONFIG += gui
|
QT_FOR_CONFIG += gui
|
||||||
|
|
||||||
|
defineTest(prependOpenGlLib) {
|
||||||
|
path = $$QT.core.libs/$$QMAKE_PREFIX_STATICLIB$$1
|
||||||
|
ext = .$$QMAKE_EXTENSION_STATICLIB
|
||||||
|
QMAKE_LIBS_OPENGL_ES2 = $${path}$${ext} $$QMAKE_LIBS_OPENGL_ES2
|
||||||
|
QMAKE_LIBS_OPENGL_ES2_DEBUG = $${path}d$${ext} $$QMAKE_LIBS_OPENGL_ES2_DEBUG
|
||||||
|
export(QMAKE_LIBS_OPENGL_ES2)
|
||||||
|
export(QMAKE_LIBS_OPENGL_ES2_DEBUG)
|
||||||
|
}
|
||||||
|
|
||||||
qtConfig(opengles2) {
|
qtConfig(opengles2) {
|
||||||
# Depending on the configuration we use libQtANGLE or libEGL and libGLESv2
|
# Depending on the configuration we use libQtANGLE or libEGL and libGLESv2
|
||||||
qtConfig(combined-angle-lib) {
|
qtConfig(combined-angle-lib) {
|
||||||
QMAKE_LIBS_OPENGL_ES2 = -l$${LIBQTANGLE_NAME} $$QMAKE_LIBS_OPENGL_ES2
|
prependOpenGlLib($$LIBQTANGLE_NAME)
|
||||||
QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBQTANGLE_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG
|
|
||||||
} else {
|
} else {
|
||||||
QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} $$QMAKE_LIBS_OPENGL_ES2
|
prependOpenGlLib($$LIBGLESV2_NAME)
|
||||||
QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBEGL_NAME}d -l$${LIBGLESV2_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG
|
prependOpenGlLib($$LIBEGL_NAME)
|
||||||
}
|
}
|
||||||
# For Desktop, use the ANGLE library location passed on from configure.
|
# For Desktop, use the ANGLE library location passed on from configure.
|
||||||
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
||||||
|
@ -6,10 +6,9 @@ contains(TEMPLATE, ".*app") {
|
|||||||
|
|
||||||
qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) {
|
qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) {
|
||||||
isEqual(entryLib, -lqtmain) {
|
isEqual(entryLib, -lqtmain) {
|
||||||
!contains(QMAKE_DEFAULT_LIBDIRS, $$QT.core.libs): \
|
lib = $$QT.core.libs/$${QMAKE_PREFIX_STATICLIB}qtmain$$QT_LIBINFIX$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB
|
||||||
QMAKE_LIBS += -L$$QT.core.libs
|
PRE_TARGETDEPS += $$lib
|
||||||
CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}d
|
QMAKE_LIBS += $$lib
|
||||||
else: QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}
|
|
||||||
} else {
|
} else {
|
||||||
QMAKE_LIBS += $${entryLib}
|
QMAKE_LIBS += $${entryLib}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ load(qt_config)
|
|||||||
|
|
||||||
QMAKE_LIBS_THREAD += -lrt
|
QMAKE_LIBS_THREAD += -lrt
|
||||||
|
|
||||||
QMAKE_LSB = 1
|
|
||||||
QMAKE_CC = lsbcc
|
QMAKE_CC = lsbcc
|
||||||
QMAKE_CXX = lsbc++
|
QMAKE_CXX = lsbc++
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user