1287361f64
This will allow us to expose private headers in a controlled manner, and ensure that they are not used by accident. This also means that we internally will have to enable the private headers for the modules we wish to use in the project.
206 lines
8.1 KiB
Plaintext
206 lines
8.1 KiB
Plaintext
defineReplace(qtLibraryTarget) {
|
|
unset(LIBRARY_NAME)
|
|
LIBRARY_NAME = $$1
|
|
mac:!static:contains(QT_CONFIG, qt_framework) {
|
|
QMAKE_FRAMEWORK_BUNDLE_NAME = $$LIBRARY_NAME
|
|
export(QMAKE_FRAMEWORK_BUNDLE_NAME)
|
|
}
|
|
contains(TEMPLATE, .*lib):CONFIG(debug, debug|release) {
|
|
!debug_and_release|build_pass {
|
|
mac:RET = $$member(LIBRARY_NAME, 0)_debug
|
|
else:win32:RET = $$member(LIBRARY_NAME, 0)d
|
|
}
|
|
}
|
|
isEmpty(RET):RET = $$LIBRARY_NAME
|
|
return($$RET)
|
|
}
|
|
|
|
defineTest(qtAddLibrary) {
|
|
INCLUDEPATH -= $$QMAKE_INCDIR_QT/$$1
|
|
INCLUDEPATH = $$QMAKE_INCDIR_QT/$$1 $$INCLUDEPATH
|
|
|
|
LIB_NAME = $$1
|
|
unset(LINKAGE)
|
|
mac {
|
|
CONFIG(qt_framework, qt_framework|qt_no_framework) { #forced
|
|
QMAKE_FRAMEWORKPATH *= $${QMAKE_LIBDIR_QT}
|
|
FRAMEWORK_INCLUDE = $$QMAKE_LIBDIR_QT/$${LIB_NAME}.framework/Headers
|
|
!qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
|
|
INCLUDEPATH -= $$FRAMEWORK_INCLUDE
|
|
INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
|
|
}
|
|
LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX}
|
|
} else:!qt_no_framework { #detection
|
|
for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
|
|
exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
|
|
QMAKE_FRAMEWORKPATH *= $${frmwrk_dir}
|
|
FRAMEWORK_INCLUDE = $$frmwrk_dir/$${LIB_NAME}.framework/Headers
|
|
!qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
|
|
INCLUDEPATH -= $$FRAMEWORK_INCLUDE
|
|
INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
|
|
}
|
|
LINKAGE = -framework $${LIB_NAME}
|
|
break()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
symbian {
|
|
isEqual(LIB_NAME, QtCore) {
|
|
#workaround for dependency from f32file.h on e32svr.h which has moved location in symbian3
|
|
contains(SYMBIAN_VERSION, Symbian3) {
|
|
INCLUDEPATH *= $$OS_LAYER_SYSTEMINCLUDE
|
|
}
|
|
} else:isEqual(LIB_NAME, QtGui) {
|
|
# Needed for #include <QtGui> because qs60mainapplication.h includes aknapp.h
|
|
INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE
|
|
} else:isEqual(LIB_NAME, QtWebKit) {
|
|
# Needed for because relative inclusion problem in toolchain
|
|
INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtXmlPatterns
|
|
INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtNetwork
|
|
isEmpty(TARGET.CAPABILITY): TARGET.CAPABILITY = NetworkServices
|
|
isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
|
|
} else:isEqual(LIB_NAME, QtXmlPatterns) {
|
|
# Needed for #include <QtXmlPatterns/QtXmlPatterns> because relative inclusion problem in toolchain
|
|
INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtNetwork
|
|
} else:isEqual(LIB_NAME, QtNetwork) {
|
|
isEmpty(TARGET.CAPABILITY): TARGET.CAPABILITY = NetworkServices
|
|
} else:isEqual(LIB_NAME, QtDeclarative) {
|
|
isEmpty(TARGET.CAPABILITY): TARGET.CAPABILITY = NetworkServices
|
|
isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
|
|
}
|
|
export(TARGET.EPOCHEAPSIZE)
|
|
export(TARGET.CAPABILITY)
|
|
}
|
|
isEmpty(LINKAGE) {
|
|
if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
|
|
win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d
|
|
mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
|
|
}
|
|
isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
|
|
}
|
|
!isEmpty(QMAKE_LSB) {
|
|
QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT
|
|
QMAKE_LFLAGS *= -L/opt/lsb/lib
|
|
QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}$${QT_LIBINFIX}
|
|
}
|
|
LIBS += $$LINKAGE
|
|
export(LIBS)
|
|
export(INCLUDEPATH)
|
|
export(QMAKE_FRAMEWORKPATH)
|
|
export(QMAKE_LFLAGS)
|
|
return(true)
|
|
}
|
|
|
|
defineTest(qtAddModule) {
|
|
MODULE_NAME = $$eval(QT.$${1}.name)
|
|
MODULE_INCLUDES = $$eval(QT.$${1}.includes)
|
|
MODULE_LIBS = $$eval(QT.$${1}.libs)
|
|
|
|
CONFIG += $$eval(QT.$${1}.CONFIG)
|
|
DEFINES += $$eval(QT.$${1}.DEFINES)
|
|
|
|
INCLUDEPATH -= $$MODULE_INCLUDES
|
|
INCLUDEPATH = $$MODULE_INCLUDES $$INCLUDEPATH
|
|
isEqual(2, UsePrivate) { # Tests function parameter 2 ($$2) being equal to 'UsePrivate'
|
|
# This adds both
|
|
# <module privates include path>/
|
|
# and <module privates include path>/<module name>
|
|
# since we have code using both #include <QtCore/private/foo> and #include <private/foo>
|
|
# Both need to be supported with the new private includes structure
|
|
MODULE_INCLUDES_PRIVATES = $$eval(QT.$${1}.private_includes)
|
|
INCLUDEPATH -= $$MODULE_INCLUDES_PRIVATES $$MODULE_INCLUDES_PRIVATES/$$MODULE_NAME
|
|
INCLUDEPATH = $$MODULE_INCLUDES_PRIVATES $$MODULE_INCLUDES_PRIVATES/$$MODULE_NAME $$INCLUDEPATH
|
|
}
|
|
|
|
unset(LINKAGE)
|
|
mac {
|
|
CONFIG(qt_framework, qt_framework|qt_no_framework) { #forced
|
|
QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS}
|
|
FRAMEWORK_INCLUDE = $$MODULE_INCLUDES.framework/Headers
|
|
!qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
|
|
INCLUDEPATH -= $$FRAMEWORK_INCLUDE
|
|
INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
|
|
}
|
|
LINKAGE = -framework $${MODULE_NAME}$${QT_LIBINFIX}
|
|
} else:!qt_no_framework { #detection
|
|
for(frmwrk_dir, $$list($$MODULE_LIBS $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
|
|
exists($${frmwrk_dir}/$${MODULE_NAME}.framework) {
|
|
QMAKE_FRAMEWORKPATH *= $${frmwrk_dir}
|
|
FRAMEWORK_INCLUDE = $$frmwrk_dir/$${MODULE_NAME}.framework/Headers
|
|
!qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
|
|
INCLUDEPATH -= $$FRAMEWORK_INCLUDE
|
|
INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
|
|
}
|
|
LINKAGE = -framework $${MODULE_NAME}
|
|
break()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
isEmpty(LINKAGE) {
|
|
# Make sure we can link to uninstalled libraries
|
|
!isEqual(MODULE_LIBS, $[QT_INSTALL_LIBS]) {
|
|
QMAKE_LIBDIR *= $$MODULE_LIBS
|
|
unix:QMAKE_LFLAGS *= "-Wl,-rpath-link,$$MODULE_LIBS"
|
|
}
|
|
if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
|
|
win32:LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX}d
|
|
mac:LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX}_debug
|
|
}
|
|
isEmpty(LINKAGE):LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX}
|
|
}
|
|
# Only link to this module if a libs directory is set, else this is just a module
|
|
# to give access to sources or include files, and not for linking.
|
|
!isEmpty(MODULE_LIBS) {
|
|
!isEmpty(QMAKE_LSB) {
|
|
QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT
|
|
QMAKE_LFLAGS *= -L/opt/lsb/lib
|
|
QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX}
|
|
}
|
|
LIBS += $$LINKAGE
|
|
}
|
|
export(CONFIG)
|
|
export(DEFINES)
|
|
export(LIBS)
|
|
export(INCLUDEPATH)
|
|
export(QMAKE_FRAMEWORKPATH)
|
|
export(QMAKE_LFLAGS)
|
|
export(QMAKE_LIBDIR)
|
|
return(true)
|
|
}
|
|
|
|
# variable, default
|
|
defineTest(qtPrepareTool) {
|
|
MODBASE = $$[QT_INSTALL_BINS]
|
|
!isEmpty(QT_BUILD_TREE):MODBASE = $$QT_BUILD_TREE/bin
|
|
count(ARGS, 2, greaterThan) {
|
|
isEmpty(QT.$${3}.bins):warning("No QT.$${3}.bins, module path ignored for qtPrepareTool($$1, $$2, $$3)")
|
|
else:MODBASE = $$eval(QT.$${3}.bins)
|
|
}
|
|
isEmpty($$1):$$1 = $$MODBASE/$$2
|
|
$$1 ~= s,[/\\\\],$$QMAKE_DIR_SEP,
|
|
contains(QMAKE_HOST.os, Windows):!contains($$1, .*\\.(exe|bat)$) {
|
|
exists($$eval($$1).bat) {
|
|
$$1 = $$eval($$1).bat
|
|
} else {
|
|
$$1 = $$eval($$1).exe
|
|
}
|
|
}
|
|
export($$1)
|
|
}
|
|
|
|
defineTest(packagesExist) {
|
|
# this can't be done in global scope here because qt_functions is loaded
|
|
# before the .pro is parsed, so if the .pro set PKG_CONFIG, we wouldn't know it
|
|
# yet. oops.
|
|
isEmpty(PKG_CONFIG):PKG_CONFIG = pkg-config # keep consistent with link_pkgconfig.prf! too
|
|
|
|
for(package, ARGS) {
|
|
!system($$PKG_CONFIG --exists $$package):return(false)
|
|
}
|
|
|
|
return(true)
|
|
}
|
|
|