5dcc36b15c
User applications are those that users run directly, whether it be for development or not. The executable binaries that the user does not usually run but is still required for proper functioning are called "program executables" in Autoconf and they are placed in libexec. This commit adds support for "program executables" in Qt by adding the -libexecdir option to the configures, the qmake variable QT_INSTALL_LIBEXECS (note the plural, to match all other properties), and QLibraryInfo::LibraryExecutables. At the time of this commit, the only expected "program executable" is the QtWebProcess, the WebKit2 helper process from QtWebKit. Change-Id: I66c3a3e0cf7f9d93b5f88f55f18e957faff608fc Reviewed-by: Lars Knoll <lars.knoll@digia.com>
245 lines
8.7 KiB
Plaintext
245 lines
8.7 KiB
Plaintext
!no_qt_module_warning:!contains(QMAKE_INTERNAL_INCLUDED_FILES, .*qmodule\\.pri) {
|
|
QMAKE_ACTUAL_PRO_FILE = $$basename(_PRO_FILE_)
|
|
isEmpty(QMAKE_ACTUAL_PRO_FILE): QMAKE_ACTUAL_PRO_FILE=.pro
|
|
warning("You should probably load(qt_build_config) first in $$QMAKE_ACTUAL_PRO_FILE for $$TARGET, as the latter also load()s qt_module.")
|
|
message("Not doing so may lead to qt_module.prf overriding compiler/linker options in your .pro file.")
|
|
message("Ignore this warning with CONFIG+=no_qt_module_warning if you know what you are doing.")
|
|
unset(QMAKE_ACTUAL_PRO_FILE)
|
|
}
|
|
load(qt_build_config) # loads qmodule.pri if hasn't been loaded already
|
|
|
|
isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0)
|
|
isEmpty(VERSION):VERSION = $$QT_VERSION
|
|
|
|
# Compile as shared/DLL or static according to the option given to configure
|
|
# unless overridden. Host builds are always static
|
|
host_build|staticlib: CONFIG += static
|
|
!static:!shared {
|
|
contains(QT_CONFIG, static): \
|
|
CONFIG += static
|
|
else: \
|
|
CONFIG += shared
|
|
}
|
|
|
|
ucmodule = $$upper($$MODULE)
|
|
|
|
MODULE_DEPENDS = $$replace(QT, -private$, )
|
|
MODULE_DEPENDS = $$unique(MODULE_DEPENDS)
|
|
|
|
contains(TARGET, QtAddOn.*): \
|
|
MODULE_DEFINE = QT_ADDON_$${ucmodule}_LIB
|
|
else: \
|
|
MODULE_DEFINE = QT_$${ucmodule}_LIB
|
|
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
|
|
|
|
load(qt_build_paths)
|
|
|
|
# This check will be removed soon. Weird indentation to avoid reindenting the code later.
|
|
!isEmpty(MODULE_PRI) {
|
|
!build_pass:warning("$$_PRO_FILE_ still sets MODULE_PRI. Not auto-generating module .pri file.")
|
|
MODULE_PRI = $$absolute_path($$MODULE_PRI, $$_PRO_FILE_PWD_)
|
|
exists($$MODULE_PRI)|error("Specified module pri file $$MODULE_PRI does not exist.")
|
|
} else {
|
|
|
|
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
|
|
|
|
!build_pass {
|
|
|
|
# Create a module .pri file
|
|
!isEmpty(QT_FOR_PRIVATE) {
|
|
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
|
|
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
|
|
} else {
|
|
module_privdep =
|
|
}
|
|
static: \
|
|
module_build_type = "QT.$${MODULE}.module_config = staticlib"
|
|
else:mac:contains(QT_CONFIG, qt_framework): \
|
|
module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
|
|
else: \
|
|
module_build_type =
|
|
!isEmpty(MODULE_CONFIG): \
|
|
module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
|
|
else: \
|
|
module_config =
|
|
!no_module_headers {
|
|
MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$TARGET"
|
|
MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$TARGET/\$\$QT.$${MODULE}.VERSION \
|
|
\$\$QT_MODULE_INCLUDE_BASE/$$TARGET/\$\$QT.$${MODULE}.VERSION/$$TARGET"
|
|
}
|
|
MODULE_PRI_CONT = \
|
|
"QT.$${MODULE}.VERSION = $${VERSION}" \
|
|
"QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
|
|
"QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
|
|
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
|
|
"" \
|
|
"QT.$${MODULE}.name = $$TARGET" \
|
|
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
|
|
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
|
|
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
|
|
"QT.$${MODULE}.sources = $$val_escape(_PRO_FILE_PWD_)" \
|
|
"QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
|
|
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
|
|
"QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]" \
|
|
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
|
|
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
|
|
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
|
|
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
|
$$module_privdep \
|
|
$$module_build_type \
|
|
$$module_config \
|
|
"QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
|
|
"" \
|
|
"QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
|
|
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
|
|
|
|
} # !build_pass
|
|
|
|
} # isEmpty(MODULE_PRI)
|
|
|
|
load(qt_module_fwdpri)
|
|
|
|
INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
|
|
|
|
!no_module_headers: load(qt_module_headers)
|
|
|
|
#other
|
|
TEMPLATE = lib
|
|
DESTDIR = $$eval(QT.$${MODULE}.libs)
|
|
win32:!wince*:exists($$[QT_INSTALL_PREFIX]/.qmake.cache): DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
|
|
|
|
CONFIG += qt warn_on depend_includepath
|
|
CONFIG += qmake_cache target_qt
|
|
|
|
!isEmpty(QMAKE_DOCS) {
|
|
doc_subdir = doc
|
|
|
|
unset(QMAKE_DOCS_INDEX)
|
|
QMAKE_DOCS_BASE_OUTDIR = $$MODULE_BASE_OUTDIR/$$doc_subdir
|
|
QMAKE_DOCS_OUTPUTDIR = $$QMAKE_DOCS_BASE_OUTDIR/qt$${MODULE}
|
|
QMAKE_DOCS_TARGET = $$replace(QMAKE_DOCS, ^(.*/)?(.*)\\.qdocconf$, \\2)
|
|
for(qmod, QMAKEMODULES): \
|
|
QMAKE_DOCS_INDEX += $$section(qmod, /, 0, -3)/$$doc_subdir
|
|
|
|
CONFIG += qt_install_module_docs
|
|
}
|
|
|
|
# If Qt was configured with -debug-and-release then build the module the same way
|
|
# - unless this is a host library
|
|
!host_build:if(win32|mac):!macx-xcode {
|
|
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
|
|
contains(QT_CONFIG, build_all):CONFIG += build_all
|
|
}
|
|
|
|
linux*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
|
|
|
QT += $$QT_FOR_PRIVATE
|
|
unset(QT_FOR_PRIVATE)
|
|
|
|
!internal_module:CONFIG += create_cmake
|
|
|
|
contains(TARGET, QtAddOn.*): \
|
|
DEFINES += QT_BUILD_ADDON_$${ucmodule}_LIB
|
|
else: \
|
|
DEFINES += QT_BUILD_$${ucmodule}_LIB
|
|
|
|
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
|
|
unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
|
|
contains(QT_CONFIG, largefile):CONFIG += largefile
|
|
contains(QT_CONFIG, separate_debug_info):CONFIG += separate_debug_info
|
|
contains(QT_CONFIG, separate_debug_info_nocopy):CONFIG += separate_debug_info_nocopy
|
|
contains(QT_CONFIG, c++11):CONFIG += c++11
|
|
|
|
#mac frameworks
|
|
mac:!static:contains(QT_CONFIG, qt_framework) {
|
|
#QMAKE_FRAMEWORK_VERSION = 4.0
|
|
CONFIG += lib_bundle qt_no_framework_direct_includes qt_framework
|
|
CONFIG(release, debug|release) {
|
|
!debug_and_release|build_pass {
|
|
CONFIG -= qt_install_headers #no need to install these as well
|
|
FRAMEWORK_HEADERS.version = Versions
|
|
FRAMEWORK_HEADERS.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
|
|
FRAMEWORK_HEADERS.path = Headers
|
|
}
|
|
QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
|
|
}
|
|
}
|
|
|
|
mac {
|
|
CONFIG += explicitlib
|
|
macx-g++ {
|
|
QMAKE_CFLAGS += -fconstant-cfstrings
|
|
QMAKE_CXXFLAGS += -fconstant-cfstrings
|
|
}
|
|
}
|
|
|
|
DEFINES += QT_BUILDING_QT
|
|
win32 {
|
|
INCLUDEPATH += tmp
|
|
CONFIG += skip_target_version_ext
|
|
}
|
|
|
|
aix-g++* {
|
|
QMAKE_CFLAGS += -mminimal-toc
|
|
QMAKE_CXXFLAGS += -mminimal-toc
|
|
}
|
|
|
|
#install directives
|
|
load(qt_installs)
|
|
|
|
unix|win32-g++* {
|
|
CONFIG += create_pc
|
|
QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
|
QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]/$$TARGET
|
|
QMAKE_PKGCONFIG_CFLAGS = -I$$[QT_INSTALL_HEADERS/raw]
|
|
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
|
|
include_replace.match = $$[QT_INSTALL_HEADERS/get]
|
|
include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
|
|
lib_replace.match = $$[QT_INSTALL_LIBS/get]
|
|
lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
|
|
prefix_replace.match = $$QT_BUILD_TREE
|
|
prefix_replace.replace = $$[QT_INSTALL_PREFIX/raw]
|
|
QMAKE_PKGCONFIG_INSTALL_REPLACE += include_replace lib_replace prefix_replace
|
|
}
|
|
|
|
unix {
|
|
CONFIG += create_libtool explicitlib
|
|
QMAKE_PRL_LIBDIR = $$[QT_INSTALL_LIBS/raw] ### XXX
|
|
QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
|
|
QMAKE_LIBTOOL_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
|
QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
|
|
}
|
|
|
|
unix|win32-g++* {
|
|
for(i, QT):QMAKE_PKGCONFIG_REQUIRES += $$eval(QT.$${i}.name)
|
|
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
|
|
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
|
|
}
|
|
|
|
contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE
|
|
DEFINES *= QT_NO_CAST_TO_ASCII QT_ASCII_CAST_WARNINGS
|
|
DEFINES *= QT_MOC_COMPAT #we don't need warnings from calling moc code in our generated code
|
|
DEFINES *= QT_USE_QSTRINGBUILDER
|
|
DEFINES *= QT_DEPRECATED_WARNINGS
|
|
|
|
win32 {
|
|
# On Windows, due to the way DLLs work, we need to export all functions,
|
|
# including the inlines
|
|
DEFINES *= QT_DISABLE_DEPRECATED_BEFORE=0x040800
|
|
} else {
|
|
# On other platforms, Qt's own compilation goes needs to compile the Qt 5.0 API
|
|
DEFINES *= QT_DISABLE_DEPRECATED_BEFORE=0x050000
|
|
}
|
|
|
|
TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
|
|
|
|
# Provides useful info normally only contained in the internal .qmake.cache file
|
|
qt_conf.name = qt_config
|
|
qt_conf.variable = CONFIG
|
|
QMAKE_PKGCONFIG_VARIABLES += qt_conf
|
|
|
|
load(qt_targets)
|
|
|
|
win32:DEFINES+=_USE_MATH_DEFINES
|
|
|