Revert "configure: actually resolve libraries into full filepaths"
This reverts commit521a85395d
. Having libraries resolved to absolute file paths by configure has annoying consequences: 1. The Qt installer needs to unabsolutify paths in all kinds of files. This is error-prone and fragile. 2. It hurts Qt's relocatabilty. The absolute paths are unlikely to be right on different systems. 3. Qt's configure must imitate linker behavior correctly to do the resolution right on every platform, which is hard to get right. Consequently, the disadvantages of521a8539
outweigh the advantages. Task-number: QTBUG-72903 Change-Id: I3e159c46a1348963615b95614e56f026ecb2aefd Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
39b0a6f152
commit
9864d2c6f3
@ -14,7 +14,6 @@ include(unix.conf)
|
||||
|
||||
QMAKE_RESOURCE = /Developer/Tools/Rez
|
||||
QMAKE_EXTENSION_SHLIB = dylib
|
||||
QMAKE_EXTENSIONS_AUX_SHLIB = tbd
|
||||
QMAKE_LIBDIR =
|
||||
|
||||
# sdk.prf will prefix the proper SDK sysroot
|
||||
|
@ -22,6 +22,8 @@ for(ever) {
|
||||
!defined(QMAKE_LIBS_$$nu, var): \
|
||||
error("Library '$$lower($$replace(nu, _, -))' is not defined.")
|
||||
|
||||
QMAKE_LIBDIR += $$eval(QMAKE_LIBDIR_$$nu)
|
||||
|
||||
android {
|
||||
ABI_LIBS = $$eval(QMAKE_LIBS_$${nu}_$${QT_ARCH})
|
||||
isEmpty(ABI_LIBS): ABI_LIBS = $$eval(QMAKE_LIBS_$${nu})
|
||||
|
@ -537,98 +537,23 @@ defineReplace(qtGccSysrootifiedPaths) {
|
||||
return($$sysrootified)
|
||||
}
|
||||
|
||||
# libs-var, libs, in-paths, out-paths-var
|
||||
# libs-var, libs, in-paths
|
||||
defineTest(qtConfResolveLibs) {
|
||||
ret = true
|
||||
paths = $$3
|
||||
out =
|
||||
copy = false
|
||||
for (l, 2) {
|
||||
$$copy {
|
||||
copy = false
|
||||
out += $$l
|
||||
} else: equals(l, "-s") {
|
||||
# em++ flag to link libraries from emscripten-ports; passed on literally.
|
||||
copy = true
|
||||
out += $$l
|
||||
} else: contains(l, "^-L.*") {
|
||||
lp = $$replace(l, "^-L", )
|
||||
gcc: lp = $$qtGccSysrootifiedPath($$lp)
|
||||
!exists($$lp/.) {
|
||||
qtLog("Library path $$val_escape(lp) is invalid.")
|
||||
ret = false
|
||||
} else {
|
||||
paths += $$lp
|
||||
}
|
||||
} else: !android: contains(l, "^-l.*") {
|
||||
lib = $$replace(l, "^-l", )
|
||||
lcan =
|
||||
integrity:contains(lib, "^.*\\.a") {
|
||||
# INTEGRITY compiler searches for exact filename
|
||||
# if -l argument has .a suffix
|
||||
lcan += $${lib}
|
||||
} else: contains(lib, "^:.*") {
|
||||
# Use exact filename when -l:filename syntax is used.
|
||||
lib ~= s/^://
|
||||
lcan += $${lib}
|
||||
} else: unix {
|
||||
# Under UNIX, we look for actual shared libraries, in addition
|
||||
# to static ones.
|
||||
shexts = $$QMAKE_EXTENSION_SHLIB $$QMAKE_EXTENSIONS_AUX_SHLIB
|
||||
for (ext, shexts) {
|
||||
lcan += $${QMAKE_PREFIX_SHLIB}$${lib}.$${ext}
|
||||
}
|
||||
lcan += \
|
||||
$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB}
|
||||
} else {
|
||||
# Under Windows, we look only for static libraries, as even for DLLs
|
||||
# one actually links against a static import library.
|
||||
mingw {
|
||||
lcan += \
|
||||
# MinGW supports UNIX-style library naming in addition to
|
||||
# the MSVC style.
|
||||
lib$${lib}.dll.a lib$${lib}.a \
|
||||
# Fun fact: prefix-less libraries are also supported.
|
||||
$${lib}.dll.a $${lib}.a
|
||||
}
|
||||
lcan += $${lib}.lib
|
||||
}
|
||||
l = $$qtConfFindInPathList($$lcan, $$paths $$EXTRA_LIBDIR $$QMAKE_DEFAULT_LIBDIRS)
|
||||
isEmpty(l) {
|
||||
qtLog("None of [$$val_escape(lcan)] found in [$$val_escape(paths)] and global paths.")
|
||||
ret = false
|
||||
} else {
|
||||
out += $$l
|
||||
}
|
||||
} else {
|
||||
out += $$l
|
||||
}
|
||||
}
|
||||
$$1 = $$out
|
||||
for (path, 3): \
|
||||
pre_lflags += -L$$path
|
||||
$$1 = $$pre_lflags $$2
|
||||
export($$1)
|
||||
!isEmpty(4) {
|
||||
$$4 = $$paths
|
||||
export($$4)
|
||||
}
|
||||
return($$ret)
|
||||
}
|
||||
|
||||
# source-var
|
||||
defineTest(qtConfResolveAllLibs) {
|
||||
ret = true
|
||||
!qtConfResolveLibs($${1}.libs, $$eval($${1}.libs), , $${1}.libdirs): \
|
||||
ret = false
|
||||
for (b, $${1}.builds._KEYS_): \
|
||||
!qtConfResolveLibs($${1}.builds.$${b}, $$eval($${1}.builds.$${b}), $$eval($${1}.libdirs), ): \
|
||||
ret = false
|
||||
return($$ret)
|
||||
return(true)
|
||||
}
|
||||
|
||||
# libs-var, in-paths, libs
|
||||
defineTest(qtConfResolvePathLibs) {
|
||||
ret = true
|
||||
gcc: 2 = $$qtGccSysrootifiedPaths($$2)
|
||||
for (libdir, 2) {
|
||||
gcc: \
|
||||
local_paths = $$qtGccSysrootifiedPaths($$2)
|
||||
else: \
|
||||
local_paths = $$2
|
||||
for (libdir, local_paths) {
|
||||
!exists($$libdir/.) {
|
||||
qtLog("Library path $$val_escape(libdir) is invalid.")
|
||||
ret = false
|
||||
@ -678,8 +603,11 @@ defineReplace(qtConfGetTestIncludes) {
|
||||
# includes-var, in-paths, test-object-var
|
||||
defineTest(qtConfResolvePathIncs) {
|
||||
ret = true
|
||||
gcc: 2 = $$qtGccSysrootifiedPaths($$2)
|
||||
for (incdir, 2) {
|
||||
gcc: \
|
||||
local_paths = $$qtGccSysrootifiedPaths($$2)
|
||||
else: \
|
||||
local_paths = $$2
|
||||
for (incdir, local_paths) {
|
||||
!exists($$incdir/.) {
|
||||
qtLog("Include path $$val_escape(incdir) is invalid.")
|
||||
ret = false
|
||||
@ -773,11 +701,9 @@ defineTest(qtConfLibrary_inline) {
|
||||
for (ld, libdir): \
|
||||
libs += -L$$ld
|
||||
$${1}.libs = $$libs $$eval($${1}.libs)
|
||||
export($${1}.libs)
|
||||
}
|
||||
|
||||
!qtConfResolveAllLibs($$1): \
|
||||
return(false)
|
||||
|
||||
!qtConfResolvePathIncs($${1}.includedir, $$includes, $$2): \
|
||||
return(false)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user