Commit Graph

193 Commits

Author SHA1 Message Date
Lars Knoll
8d6f2e7e15 Add a QT_REQUIRE_CONFIG(feature) macro
This macro expands into a static_assert and can be used to
trigger a compile error if a certain feature is not available
when trying to compile some code.

This is especially useful to protect against accidental inclusion
of headers that implement functionality related to a feature.

Change-Id: I456c55b989ce5f35f3af0e13c1886a85c23dfe29
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-09-16 12:27:59 +00:00
Lars Knoll
60e5a1c8ef Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.

This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.

When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.

When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.

Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.

This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.

The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.

qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.

Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-09-10 14:04:01 +00:00
Oswald Buddenhagen
e776031281 minor optimization in stale file removal code
don't bother opening headers.pri files, as they won't match anyway.

Change-Id: I4d923266dabf1c9684fba4086f55bc24d76d23c5
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-09-10 14:03:46 +00:00
Oswald Buddenhagen
19877a0507 automatically exclude generated headers from syncqt checks
Change-Id: I349a132745165f8873eda351e86bf15c90156aaf
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:11:06 +00:00
Oswald Buddenhagen
a5bb91c2b8 make it possible to exclude private headers from syncqt include check
the limitation to public headers seemed pretty arbitrary.

Change-Id: I0f2290fe09c8a6a70d056ec250b902be7049790e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:11:02 +00:00
Oswald Buddenhagen
f93032848e Merge remote-tracking branch 'origin/5.6.0' into 5.7
Change-Id: Idcda6d52266f557ce4a819b6669f6797473a48a2
2016-03-07 17:08:56 +01:00
Simon Hausmann
38944d662e Fix syncqt.pl not respecting #pragma qt_no_master_include in files with Windows line endings
We need to do the same chop trick that we do further down the file.

Change-Id: If4f832f375a11473e66adfcfa76a3b4504b3d406
Task-number: QTBUG-51324
Reviewed-by: Iikka Eklund <iikka.eklund@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-02-25 16:25:37 +00:00
Thiago Macieira
cfe891eeb8 Add Intel copyright to files that Intel has had non-trivial contribution
I wrote a script to help find the files, but I reviewed the
contributions manually to be sure I wasn't claiming copyright for search
& replace, adding Q_DECL_NOTHROW or adding "We mean it" headers.

Change-Id: I7a9e11d7b64a4cc78e24ffff142b506368fc8842
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-21 22:44:21 +00:00
Jani Heikkinen
1a88b2f768 Updated license headers
From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/

Updated license headers to use new LGPL header instead of LGPL21 one
(in those files which will be under LGPL v3)

Change-Id: I046ec3e47b1876cd7b4b0353a576b352e3a946d9
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-15 12:25:24 +00:00
Thiago Macieira
3304ea8f0e syncqt.pl: say "ERROR" when it's an error
Change-Id: I0f2ce894387048f78465ffff141cdae9ea760175
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-12-08 06:32:24 +00:00
Thiago Macieira
dae77465d1 syncqt: print errors and warnings to stderr
Change-Id: Ib056b47dde3341ef9a52ffff13ef5f6b8d21aeab
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-12-05 00:05:24 +00:00
Joerg Bornemann
ad963ef05b syncqt: fix false positives in header check
Restore the condition for deciding what a private header is from
fe383e04 to not check *_pch.h files and third party headers.
This amends commit eddb938c.

Change-Id: Idc55269478e7f2c98fb7debceef8a53c3cb5c657
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-12-02 15:05:56 +00:00
Joerg Bornemann
eddb938c39 Remove duplicated header iteration code
Do not iterate separately over all header files. This removes
duplicated header iteration code which already was out of sync.
As a side-effect, we do run the header check only on header files that
are considered part of the module, if moduleheaders is set in
sync.profile.

Change-Id: Iec4c8febe9128139d2f377a1da8ce08c24110a77
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-11-27 17:28:47 +00:00
Joerg Bornemann
779d2aa5fc Factor header check out into a separate function
Another step towards the removal of the duplicated loop over header
files.

Change-Id: I542782627d8742a515a42034264e4569a2355823
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-11-27 17:28:39 +00:00
Joerg Bornemann
1dd1e48e73 Simplify tests whether to run header checks
Turn lists into hashes and check for existence of an element using key
lookup. This leads to simpler testing code and is potentially faster.

Change-Id: Ibbf4f03ec64d6c295cc5e1664dfa73cd0ce8c272
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-11-27 17:28:32 +00:00
Oswald Buddenhagen
ded63fbb94 make a proper header-only module for QtZlib
that way other modules can use the headers without hacks.

this required making the base directory for paths in headers.pri
configurable in syncqt.

Change-Id: Id35cfe05bcf4c576d3f2d0d8d09590a5e23d21d3
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-11-17 20:22:17 +00:00
Thiago Macieira
c9e2763909 syncqt: complain if a public header includes a private one
We should even cause syncqt to exit, but that would cause developers
trying to test something to be unable to. So leave it just with an
"ERROR" message. That is hopefully enough.

Change-Id: Ib056b47dde3341ef9a52ffff13ef5f8588b62b99
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-10-15 16:20:37 +00:00
Thiago Macieira
2d2cb6434f Move the official Qt version from qglobal.h to .qmake.conf
It's easier to parse than qglobal.h. The objective is actually to have
macros with parts of the version number, so the major or minor numbers
could be used in other preprocessor macros.

Change-Id: I42e7ef1a481840699a8dffff1404eda1dd5c308d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-10-14 20:12:57 +00:00
Thiago Macieira
fe383e045b syncqt: scan private headers for the "We mean it" comment
Change-Id: Ib056b47dde3341ef9a52ffff13ef5f50c72d753d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-10-02 16:48:01 +00:00
Friedemann Kleint
e1350c56c1 fixqt4headers.pl: Improve detection of Qt 5 location.
Obtain the location of the include files by querying
the qmake variable QT_INSTALL_HEADERS by default, which
can be overridden by the command line option.

Task-number: QTBUG-45662
Change-Id: I03a781e9b98f5e2980dbaef86eedd05aec0103ce
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-04-22 10:23:41 +00:00
Thiago Macieira
6668f5becf Implement a more direct headersclean check
Test each include file directly, instead of doing a large #include. This
verifies that each header is compilable on its own. One big advantage of
doing it via a special compiler in qmake is that we skip pre-compiled
headers, which has hidden build errors in the past.

This solution is implemented by making syncqt produce a second list of
headers.  This list is the same as the list of headers in the source
code to be installed, minus the headers that declare themselves to be
unclean, via the pragma:
  #pragma qt_sync_skip_header_check

This mechanism is applied only for public libraries (skipping
QtPlatformSupport, an internal_module).

This test is enabled only for -developer-builds of Qt because it
increases the compilation time.

On QtTest: the library only links to QtCore, but it has two headers that
provide inline-only functionality by including QtGui and QtWidgets
headers (namely, qtest_gui.h and qtest_widget.h). If those two modules
aren't getting compiled due to -no-gui or -no-widgets to configure, we
need to remove the respective headers from the list of headers to be
checked. If they are being built, then we need to make QtTest's build
wait for the headers to be generated and that happens when qmake is
first run inside the src/gui and src/widgets directories.

Change-Id: I57d64bd697a92367c8464c073a42e4d142a9a15f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-04-17 00:54:45 +00:00
Jani Heikkinen
cb95fff1c7 Fixed license headers
Change-Id: Ibebe1318d1c2de97601aa07269705c87737083ee
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-02-17 18:46:09 +00:00
Oswald Buddenhagen
b6f0060f60 support spaces in build and install dirs
spaces in the source dir are not supported for now, as that requires
some more profound refactoring of the bootstrap makefiles.

Change-Id: Ie0c07a1558b8326f642f2ea144bc1cd85ee761af
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-17 18:28:00 +00:00
Jani Heikkinen
83a5694dc2 Update copyright headers
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.

Outdated header.LGPL removed (use header.LGPL21 instead)

Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)

Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination

Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
2015-02-11 06:49:51 +00:00
Thiago Macieira
1eb7005850 Use the new warning enabling/disabling macros in qtbase
Change-Id: I91ff06644e8047c2ca483f9768b46c1372eb6171
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
2014-12-03 18:09:17 +01:00
Olivier Goffart
84e189502a syncqt: Fix regexp capturing class names of partial specialisation
Example with this code:
"template <class Key> struct QHashNode<Key, QHashDummyValue> {"

The previous regexp would take "QHashNode<Key," as some keyword,
and "QHashDummyValue>" as the class name.  By forbidding '<' in the
keyword, we avoid such mistake

Change-Id: I5d5077b9e5e764e91899bcaef137d99214ea5d63
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-07-08 16:12:44 +02:00
Oswald Buddenhagen
c9be7743cd nuke findtr script
it's a precursor of lupdate from the stone age.

[ChangeLog][Tools] The obsolete findtr script was removed.

Task-number: QTBUG-30900
Change-Id: Ic3efdc44df084573aec2512d8f86101832253d77
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
2014-05-21 13:41:30 +02:00
Oswald Buddenhagen
f8c5dd9857 automate handling of generated headers some more
let the syncqt + qt_module_header.prf pair handle generation of
forwarding headers.

in qtbase this is ineffective to some degree, as the need to create
QtCore's forwarding headers early for QtBootstrap requires qtbase.pro
already doing the real work, but at least we get the verification that
nothing breaks.
Other Modules (TM) will need the full functionality.

Change-Id: Ifd3dfa05c4c8a91698a365160edb6dabc84e553f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Oswald Buddenhagen
46feffea1b de-duplicate header install source calculation
Change-Id: I7c26d70fdfceac6d3c562e704cc725fad80c4f59
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Oswald Buddenhagen
e8b2ff63ec remove duplicated nested condition
Change-Id: I433773dbf21a7a7625d4f763b3cebe75c746aa1f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Oswald Buddenhagen
40babf8b4a un-pluralize code
since ever we've thrown out the phonon hack, each header is synced to
only one location (CamelCase headers notwithstanding).

Change-Id: Idfef33db9410908aefe309bc7a3edeae5fc5a671
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Oswald Buddenhagen
6571aaf1c4 merge %explicitheaders into %classnames
no need to have two mechanisms for the same thing.

the values of %classnames can be comma-separated lists now, so one
header can have multiple classes assigned. conversely, if an extracted
class name reverse-maps to a different file name, it is omitted.

Change-Id: Ia0a35d64764b6376f33b77bbfe59e1df70a3cf1a
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Oswald Buddenhagen
3d50a09645 remove vestiges of uic class map code
amends ad52be1ac.

Change-Id: I2bfb10908217708c4f046d0d315dadd1b626da12
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2014-02-28 03:17:11 +01:00
Frederik Gladhorn
e5bcf68d30 Merge "Merge remote-tracking branch 'origin/release' into stable" into refs/staging/stable 2013-06-15 22:39:25 +02:00
Oswald Buddenhagen
af2f1e14f6 don't touch deprecated headers unless they actually change
Change-Id: Iabeec90c2a6549cf92b3b8369a41764a576fd0aa
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-12 13:03:06 +02:00
Oswald Buddenhagen
ad52be1acc purge dead uic class map code.
Change-Id: I9b67924a66c847cd4cf2ce9f2996017ae7eb61a4
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-12 13:03:01 +02:00
Oswald Buddenhagen
f5a5272bc7 remove unused symlinkFile() function
Change-Id: Ie235fe65020ed7c4870d9c8784a181bf880b9e28
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-12 13:02:58 +02:00
Oswald Buddenhagen
150408e37d don't process ANGLE and zlib headers like real qt modules
we run syncqt on them only to get normal forwarding headers and the
headers.pri file. the module master include header and the module
version header are useless, and scanning for qt class names just wastes
time.

Change-Id: I58e8d1eb36cea5c31cbd46ce673438316d1963dc
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-10 21:12:05 +02:00
Oswald Buddenhagen
96557bc389 move module master header generation back to syncqt
now that we split out the part that depends on the project file, we can
do it cleanly here.
this way we can generate these headers at pre-build time already.
and for git builds, perl is probably faster than qmake at this task.

Change-Id: I343255c6de22329471a3ae2c2aac9ebeb160a501
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-03 17:59:42 +02:00
Oswald Buddenhagen
8d69232b28 let configure create the forwarding qconfig.h again
this avoids that syncqt needs to forward to a yet unexisting file (which
will have a yet unknown location, when syncqt is run at packaging time
already).

the %inject_headers syncqt config variable remains, so it can be told
not to purge "foreign" files.

Change-Id: I127ff6e0b7d5702fb0acaee9a5b7940b482d3608
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-03 17:59:31 +02:00
Oswald Buddenhagen
5d8b8eed90 move module version header generation back to syncqt
there is no particular reason for it being done by qmake.
avoids that the logic is distributed over two source files,
and allows us to generate these headers at pre-build time already,
including not forwarding to a yet unexisting file (which would have a
yet unknown location).

Change-Id: I9c78ab425cf6f01d076c86fd1ee602626f231487
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-03 17:59:25 +02:00
Oswald Buddenhagen
5c555e3a29 factor out writeFile() function
Change-Id: I8e3e1665d7628c3210d000c46dfffa9f1af71009
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-06-03 17:59:19 +02:00
Oswald Buddenhagen
6b38524bba get rid of syncqt wrapper scripts
instead, rename it to syncqt.pl and rely on qtPrepareTool()'s new
ability to correctly invoke it as a perl script even under windows.
the wrappers themselves have been trivial at this point, so there is no
added value in keeping them, either.

Change-Id: I77cf65edbcfaa48ed1900defe940d4eb4b82d5b9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-05-13 21:54:48 +02:00
Andrew Knight
a27877c8e9 Handle more drive fix situations in syncqt
Normalize paths that begin with <drive_letter>:/ as well.

Task-number: QTBUG-30638
Change-Id: Icdc7ee9782a358771d06ae2500d32e59e6bbe866
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-04-20 11:35:10 +02:00
Oswald Buddenhagen
52cad781d3 restore compat with older perl versions
the // operator is a tad too new.

Task-number: QTBUG-30637
Change-Id: I3672d41a4a17937ffea251f0937b09045d6c386d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-04-19 20:10:46 +02:00
Oswald Buddenhagen
6c9e8e611f don't complain about missing macros in <module>version.h
we just generated them, and they really don't need QT_{BEGIN,END}_*.

Change-Id: Ib7b2454ae80762e644d9667106960cc7632f90fc
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-04-02 18:58:28 +02:00
Samuel Rødal
2ab9b747fc Merge remote-tracking branch 'gerrit/release' into stable
Conflicts:
	configure
	mkspecs/features/qt_module_headers.prf
	mkspecs/features/qt_tool.prf
	src/angle/angle.pro
	src/tools/bootstrap/bootstrap.pro
	tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp

Change-Id: Ide5759fe419a50f1c944211a48f7c66f662684e0
2013-03-21 08:49:01 +01:00
Oswald Buddenhagen
e79e1c1a16 pass module version to syncqt
this is cleaner than having it parse qmake project files.
the only remaining built-in version extraction is the fallback to
qglobal.h needed for bootstrapping.

as a "side effect", this fixes the build of modules with mismatched
versions centralized in .qmake.conf, as this was simply not handled so
far.

the -mkspecsdir syncqt option goes away, as there is no use case for it
any more.

Task-number: QTBUG-29838
Change-Id: I6912a38f0e93a26bc267a9e3d738506fd3ad431b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-03-20 19:03:45 +01:00
Ray Donnelly
7d408c543f syncqt: Use /usr/bin/env perl not /usr/bin/perl
This is because on some systems, /usr/bin/perl is too old to
run syncqt. MSYS is one such system.

Change-Id: I3e1aa2db557cc3919618350775e7218ae05aa93f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-02-20 22:19:43 +01:00
Frederik Gladhorn
e65cd6f379 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/concurrent/doc/qtconcurrent.qdocconf
	src/corelib/doc/qtcore.qdocconf
	src/corelib/global/qglobal.h
	src/dbus/doc/qtdbus.qdocconf
	src/dbus/qdbusmessage.h
	src/gui/doc/qtgui.qdocconf
	src/gui/image/qimagereader.cpp
	src/network/doc/qtnetwork.qdocconf
	src/opengl/doc/qtopengl.qdocconf
	src/opengl/qgl.h
	src/plugins/platforms/windows/qwindowswindow.cpp
	src/printsupport/doc/qtprintsupport.qdocconf
	src/sql/doc/qtsql.qdocconf
	src/testlib/doc/qttestlib.qdocconf
	src/tools/qdoc/doc/config/qt-cpp-ignore.qdocconf
	src/widgets/doc/qtwidgets.qdocconf
	src/xml/doc/qtxml.qdocconf

Change-Id: Ie9a1fa2cc44bec22a0b942e817a1095ca3414629
2013-02-14 14:24:57 +01:00