e5024c219f
"system" refers to the system's native shell, which is what qmake's system() invokes, and whose convention by far most commands invoked from a makefile will need. "shell" refers to the shell invoked by make, which diverges from the system shell only when qmake/mingw32-make is called from an msys shell. its conventions need to be used for anything the shell itself does (e.g., assembling env variables, but also command line argument unquoting) and the commands the mkspec sets according to the shell (e.g., QMAKE_MOVE). Change-Id: I0000aa9417c199cf8a810619d31ded24bb0675f9 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
207 lines
7.7 KiB
Prolog
207 lines
7.7 KiB
Prolog
#####################################################################
|
|
# Main projectfile
|
|
#####################################################################
|
|
|
|
load(qt_parts)
|
|
|
|
SUBDIRS += qmake/qmake-docs.pro
|
|
|
|
cross_compile: CONFIG += nostrip
|
|
|
|
confclean.depends += clean
|
|
confclean.commands =
|
|
unix {
|
|
confclean.commands += (cd config.tests/unix/stl && $(MAKE) distclean); \
|
|
(cd config.tests/unix/ptrsize && $(MAKE) distclean); \
|
|
(cd config.tests/x11/notype && $(MAKE) distclean); \
|
|
(cd config.tests/unix/getaddrinfo && $(MAKE) distclean); \
|
|
(cd config.tests/unix/cups && $(MAKE) distclean); \
|
|
(cd config.tests/unix/psql && $(MAKE) distclean); \
|
|
(cd config.tests/unix/mysql && $(MAKE) distclean); \
|
|
(cd config.tests/unix/mysql_r && $(MAKE) distclean); \
|
|
(cd config.tests/unix/nis && $(MAKE) distclean); \
|
|
(cd config.tests/unix/iodbc && $(MAKE) distclean); \
|
|
(cd config.tests/unix/odbc && $(MAKE) distclean); \
|
|
(cd config.tests/unix/oci && $(MAKE) distclean); \
|
|
(cd config.tests/unix/tds && $(MAKE) distclean); \
|
|
(cd config.tests/unix/db2 && $(MAKE) distclean); \
|
|
(cd config.tests/unix/ibase && $(MAKE) distclean); \
|
|
(cd config.tests/unix/ipv6ifname && $(MAKE) distclean); \
|
|
(cd config.tests/unix/zlib && $(MAKE) distclean); \
|
|
(cd config.tests/unix/sqlite2 && $(MAKE) distclean); \
|
|
(cd config.tests/unix/libjpeg && $(MAKE) distclean); \
|
|
(cd config.tests/unix/libpng && $(MAKE) distclean); \
|
|
(cd config.tests/unix/slog2 && $(MAKE) distclean); \
|
|
(cd config.tests/unix/lgmon && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xcursor && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xrender && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xrandr && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xkb && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xinput && $(MAKE) distclean); \
|
|
(cd config.tests/x11/fontconfig && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xinerama && $(MAKE) distclean); \
|
|
(cd config.tests/x11/xshape && $(MAKE) distclean); \
|
|
(cd config.tests/x11/opengl && $(MAKE) distclean); \
|
|
$(DEL_FILE) config.tests/.qmake.cache; \
|
|
$(DEL_FILE) src/corelib/global/qconfig.h; \
|
|
$(DEL_FILE) src/corelib/global/qconfig.cpp; \
|
|
$(DEL_FILE) mkspecs/qconfig.pri; \
|
|
$(DEL_FILE) mkspecs/qdevice.pri; \
|
|
$(DEL_FILE) mkspecs/qmodule.pri; \
|
|
$(DEL_FILE) .qmake.cache; \
|
|
(cd qmake && $(MAKE) distclean);
|
|
}
|
|
win32 {
|
|
confclean.commands += -$(DEL_FILE) src\\corelib\\global\\qconfig.h $$escape_expand(\\n\\t) \
|
|
-$(DEL_FILE) src\\corelib\\global\\qconfig.cpp $$escape_expand(\\n\\t) \
|
|
-$(DEL_FILE) mkspecs\\qconfig.pri $$escape_expand(\\n\\t) \
|
|
-$(DEL_FILE) mkspecs\\qdevice.pri $$escape_expand(\\n\\t) \
|
|
-$(DEL_FILE) mkspecs\\qmodule.pri $$escape_expand(\\n\\t) \
|
|
-$(DEL_FILE) .qmake.cache $$escape_expand(\\n\\t) \
|
|
(cd qmake && $(MAKE) distclean)
|
|
}
|
|
QMAKE_EXTRA_TARGETS += confclean
|
|
qmakeclean.commands += (cd qmake && $(MAKE) clean)
|
|
QMAKE_EXTRA_TARGETS += qmakeclean
|
|
CLEAN_DEPS += qmakeclean
|
|
|
|
CONFIG -= qt
|
|
|
|
### installations ####
|
|
|
|
#qmake
|
|
qmake.path = $$[QT_HOST_BINS]
|
|
equals(QMAKE_HOST.os, Windows) {
|
|
qmake.files = $$OUT_PWD/bin/qmake.exe
|
|
} else {
|
|
qmake.files = $$OUT_PWD/bin/qmake
|
|
}
|
|
INSTALLS += qmake
|
|
|
|
#syncqt
|
|
syncqt.path = $$[QT_HOST_BINS]
|
|
syncqt.files = $$PWD/bin/syncqt.pl
|
|
INSTALLS += syncqt
|
|
|
|
# If we are doing a prefix build, create a "module" pri which enables
|
|
# qtPrepareTool() to find the non-installed syncqt.
|
|
prefix_build|!equals(PWD, $$OUT_PWD) {
|
|
|
|
cmd = perl -w $$system_path($$PWD/bin/syncqt.pl)
|
|
|
|
TOOL_PRI = $$OUT_PWD/mkspecs/modules/qt_tool_syncqt.pri
|
|
|
|
TOOL_PRI_CONT = "QT_TOOL.syncqt.binary = $$val_escape(cmd)"
|
|
write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")
|
|
|
|
# Then, inject the new tool into the current cache state
|
|
!contains(QMAKE_INTERNAL_INCLUDED_FILES, $$TOOL_PRI) { # before the actual include()!
|
|
added = $$TOOL_PRI
|
|
cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
|
|
}
|
|
include($$TOOL_PRI)
|
|
cache(QT_TOOL.syncqt.binary, transient)
|
|
|
|
}
|
|
|
|
# Generate qfeatures.h
|
|
features =
|
|
lines = $$cat("src/corelib/global/qfeatures.txt", lines)
|
|
for (line, lines) {
|
|
t = $$replace(line, "^Feature: (\\S+)\\s*$", "\\1")
|
|
!isEqual(t, $$line) {
|
|
feature = $$t
|
|
features += $$t
|
|
} else {
|
|
t = $$replace(line, "^Requires: (.*)$", "\\1")
|
|
!isEqual(t, $$line) {
|
|
features.$${feature}.depends = $$replace(t, \\s+$, )
|
|
} else {
|
|
t = $$replace(line, "^Name: (.*)$", "\\1")
|
|
!isEqual(t, $$line) {
|
|
features.$${feature}.name = $$replace(t, \\s+$, )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
features = $$sort_depends(features, features.)
|
|
features = $$reverse(features)
|
|
FEATURES_H = \
|
|
"/*" \
|
|
" * All feature dependencies." \
|
|
" *" \
|
|
" * This list is generated by qmake from <qtbase>/src/corelib/global/qfeatures.txt" \
|
|
" */"
|
|
FEATURES_PRI =
|
|
for (ft, features) {
|
|
!isEmpty(features.$${ft}.depends) {
|
|
FEATURES_H += \
|
|
"$${LITERAL_HASH}if !defined(QT_NO_$$ft) && ($$join($$list($$split(features.$${ft}.depends)), ") || defined(QT_NO_", "defined(QT_NO_", ")"))" \
|
|
"$${LITERAL_HASH} define QT_NO_$$ft" \
|
|
"$${LITERAL_HASH}endif"
|
|
FEATURES_PRI += \
|
|
"contains(QT_DISABLED_FEATURES, "^($$lower($$join($$list($$replace(features.$${ft}.depends, _, -)), "|")))$"): \\" \
|
|
" QT_DISABLED_FEATURES += $$lower($$replace(ft, _, -))"
|
|
}
|
|
}
|
|
write_file($$OUT_PWD/src/corelib/global/qfeatures.h, FEATURES_H)|error("Aborting.")
|
|
# Create forwarding header
|
|
FWD_FEATURES_H = \
|
|
'$${LITERAL_HASH}include "../../src/corelib/global/qfeatures.h"'
|
|
write_file($$OUT_PWD/include/QtCore/qfeatures.h, FWD_FEATURES_H)|error("Aborting.")
|
|
|
|
no_features =
|
|
lines = $$cat($$absolute_path($$QT_QCONFIG_PATH, $$PWD/src/corelib/global), lines)
|
|
for (line, lines) {
|
|
# We ignore all defines that don't follow the #ifndef + indent pattern.
|
|
# This makes it possible to have unchecked defines which are no features.
|
|
t = $$replace(line, "^$${LITERAL_HASH} define QT_NO_(\\S+)\\s*$", "\\1")
|
|
!isEqual(t, $$line) {
|
|
isEmpty(features.$${t}.name): \
|
|
error("$$QT_QCONFIG_PATH disables unknown feature $$t")
|
|
no_features += $$t
|
|
}
|
|
}
|
|
for (def, QT_NO_DEFINES) {
|
|
!isEmpty(features.$${def}.name): \
|
|
no_features += $$def
|
|
}
|
|
no_features = $$unique(no_features)
|
|
|
|
# Can't simply add these to QT_CONFIG, as e.g., contains(QT_CONFIG, accessibility) matches no-accessibililty.
|
|
FEATURES_PRI = \
|
|
"$${LITERAL_HASH} Features disabled by configure:" \
|
|
"QT_DISABLED_FEATURES =$$lower($$join($$list($$replace(no_features, _, -)), " ", " "))" \
|
|
"$$escape_expand(\\n)$${LITERAL_HASH} Dependencies derived from <qtbase>/src/corelib/global/qfeatures.txt:" \
|
|
$$FEATURES_PRI \
|
|
"QT_DISABLED_FEATURES = \$\$unique(QT_DISABLED_FEATURES)"
|
|
write_file($$OUT_PWD/mkspecs/qfeatures.pri, FEATURES_PRI)|error("Aborting.")
|
|
|
|
# Create forwarding headers for qconfig.h
|
|
FWD_QCONFIG_H = \
|
|
'$${LITERAL_HASH}include "../../src/corelib/global/qconfig.h"'
|
|
write_file($$OUT_PWD/include/QtCore/qconfig.h, FWD_QCONFIG_H)|error("Aborting.")
|
|
FWD_QTCONFIG = \
|
|
'$${LITERAL_HASH}include "qconfig.h"'
|
|
write_file($$OUT_PWD/include/QtCore/QtConfig, FWD_QTCONFIG)|error("Aborting.")
|
|
|
|
#mkspecs
|
|
mkspecs.path = $$[QT_HOST_DATA]/mkspecs
|
|
mkspecs.files = \
|
|
$$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$OUT_PWD/mkspecs/qdevice.pri $$OUT_PWD/mkspecs/qfeatures.pri \
|
|
$$files($$PWD/mkspecs/*)
|
|
mkspecs.files -= $$PWD/mkspecs/modules $$PWD/mkspecs/modules-inst
|
|
INSTALLS += mkspecs
|
|
|
|
global_docs.files = $$PWD/doc/global
|
|
global_docs.path = $$[QT_INSTALL_DOCS]
|
|
INSTALLS += global_docs
|
|
|
|
OTHER_FILES += \
|
|
configure \
|
|
header.BSD \
|
|
header.FDL \
|
|
header.LGPL \
|
|
header.LGPL-ONLY \
|
|
sync.profile
|