Commit Graph

41185 Commits

Author SHA1 Message Date
Leander Beernaert
5d7bb2e4f0 Add support for converting qtTargetLibrary() value assignments
Add support to pro2cmake to handle variable assignments via functions,
e.g: TARGET = $$qtTargetLibrary($$TARGET). The evalulation of the
functions happens during parsing and is very rudementary in nature.

Currently it only covers the qtTargetLibrary(), required for certain
projects, and quote(), required for passing unit tests.

If we run into any unhanlded function an exception will be thrown.

This patch also changes the TARGET property on Scope to expand the
value.

Change-Id: I678b7058067348a3972944bdba110f556cf22447
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-08 13:03:28 +00:00
Leander Beernaert
6396840182 Fix conversion of SUBDIR pro files not in current directory
This patch fixes the processing of pro files that do not reside in
the current directory. Before this patch statements such as SUBDIRS +=
Foo/Bar/z.pro would cause z.pro to be parsed in the current
CMakeLists.txt. What we want instead is a call to
add_subdirectory(Foo/Bar). Failing to do so leads to issues with
relative paths specified in z.pro being invalid.

Change-Id: I7bfa7837d54877e5340081d1c9aebe855cf6796d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-08 08:07:11 +00:00
Leander Beernaert
d8a7c0f40f Handle DESTDIR override
Set OUTPUT_DIRECTORY on a target when DESTDIR is specified.

Change-Id: I72061ae8156356fcb2aa9ba6cb87049fcef600c7
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-07 13:47:51 +00:00
Leander Beernaert
f9db9a22e9 Handle qmake's CONFIG=plugin
In some tests in qtdeclarative we have projects that are built
as a lib with CONFIG=plugin. Without these changes they would be
translated to an add_qt_module call.

Change-Id: I208d31d43b087ed0b87eb4715f6c49b218fcc2c5
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-07 12:34:59 +00:00
Alexandru Croitor
e76c83a879 Regenerate some of the test projects that do SUBDIRS += foo
This show cases the new cleaner subdirs handling code in
pro2cmake.

Change-Id: I25001942ef020e4c4191b355f55309c4fb033ecc
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-07 11:55:38 +00:00
Alexandru Croitor
b4ef975a0a Handle conditions for SUBDIRS *more* correctly
There are project files that not only do SUBDIRS -= foo depending on
some condition, but also SUBDIRS += foo. To handle these cases
correctly we need to do a whole pass across all scopes and collect
all addition and subtraction conditions.

Once we have that information, we can compute a final condition for a
particular subdirectory. After we have the condition information for
all subdirectories, we can simplify all those conditions using SimPy,
and group all subdirectories that have the same simplified condition.

Finally we print out the subdirectories grouped by the simplified
condition.

The end result is similar to how we have extend_target() calls with
multiple sources grouped into a single conditional call, except in
this case it's subdirectories.

Amends b26b1455d7.

Change-Id: I5b648ac67264ba9a940561baee5b49c43c13b721
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-07 11:55:28 +00:00
Leander Beernaert
2c7ccfefed Perform check for tool builds before src
Perform the test whether tools should be built before entering the
source directory of a project. In QtDeclarative this would result in
a configuration error since the tools are used while building everything
under src.

Change-Id: I33ce2cb317ef221836d696654f3bb4e39db47e54
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-07 08:28:27 +00:00
Leander Beernaert
ebe77c89de Fix typo in QtBuild.cmake
Fix typo for set command.

Change-Id: I1881bf77cab47ef37081065057200a72a2bc7e8f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-07 07:48:49 +00:00
Leander Beernaert
9ca1d79539 Fix regular expression for add_qml_module
Values such as Foo.2 would no longer be converted into Foo due to an
error in the regular expression.

Change-Id: I6a11d02662782094f5b264f86a930d9aaf002c77
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-06 13:27:20 +00:00
Leander Beernaert
d943252741 Fix shared resource paths in tests
Resources shared by tests were incorrectly setup. Resources would
always be registered with BASE/filename as alias. In these cases the
fix is to set the alias with the original file name.

Change-Id: I667ce7b74ae5f86740c8bb8a040cc2895a3dc116
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-06 13:17:17 +00:00
Leander Beernaert
709538096c Fix add_qml_module URI
Make sure the URI name for qml modules correctly strips out the version
number for instances such as QtQuick.Controls.2.

Change-Id: I18e706b371323eeefdd6d7564b922265fa5cad3f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-06 13:10:22 +00:00
Leander Beernaert
a3e149d92a Fix qml plugin conversion: always install qml files
Always install qml files regardless of whether the install_qml_files
configuration is present in qmake. This was causing most unit tests to
fail due to missing qml files.

Change-Id: I53c7200cfa66805d0e459190ef105c1a73c34a5f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-06 10:29:28 +00:00
Simon Hausmann
e343affd63 Propagate library/plugin resources automatically when linking statically
The rcc generated code relies on global constructors to register the resources.
The object file of the generated code is included by default in shared libraries
and executables. However when the object file ends up in a static library, the
linker will discard the object file when nothing references any of the symbols
in that object file, when linking the static library into the executable/shared library.
The solution is to link the object file straight into the final target, by means of a
cmake object library.

Change-Id: I02ad1173e4f7e8f907022c906640dc9086233676
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-06 08:41:51 +00:00
Leander Beernaert
5d88ba001e Fix $$_PRO_FILE_PWD substitution
PRO_FILE_PWD should return CMAKE_CURRENT_SOURCE dir without any
compenstation for mistmatching directory locations as we are doing with
PWD.

There are test that use a shared .pri project file which gets included
into the .pro file of test. In this .pri file we have a statement such
as DEFINES += QT_QMLTEST_DATADIR=\\\"$${_PRO_FILE_PWD_}/data\\\".
Since the .pri project file is located in ../../shared/shared.pri the
substitution would result in
${CMAKE_CURRENT_SOURCE_DIR}/../../shared/data instead of the expected
${CMAKE_CURRENT_SOURCE_DIR}/data.

Change-Id: Id899d6a624acc45425af47ca9aa1b332cf63e659
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-05 12:58:10 +00:00
Leander Beernaert
0ceed231b4 Add __default_public_args to add_qt_test and add_qt_executable
Due to the missing argument processing on PUBLIC arguments we could
run into situations where the defines for an executable (mostly tests)
would be incorrectly processed.

If one were to pass a define into a test that also specifies public
libraries, the defines passed in by test would fall under the
PUBLIC_LIBRARIES argument in add_qt_executable.

For instance, in a test with DEFINES Foo PUBLIC_LIBRARIES Core
would cause arg_DEFINES to be "Foo=BAR;PUBLIC_LIBRARIES;Core". This
combined with the defines specified by add_qt_test would result
in the following string "Foo=BAR;PUBLIC_LIBRARIES;Core;TEST_DIR=..."
and would cause TEST_DIR to be treated as a public library in
add add_qt_executable.

For some reason I can't figure out, these two defines end up in the
linker flag section of certain test programs. There is nothing wrong
with the rest of the propagation chain into add_qt_executable. My best
guess is that it has something to do with the generators. In any case
add an explicit -D fixes the issue.

Change-Id: I340790c1c2426fa76785d1bd1b3332a904323d56
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-05 08:06:37 +00:00
Alexandru Croitor
ad0e3e26fa Regenerate tests/auto/corelib/kernel.pro
Makes the conditions nicer to look at.

Change-Id: If07b4f96892e459a7e7a6a4f541311ebda11b1a8
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-01 18:33:29 +00:00
Alexandru Croitor
e2ab42c2aa Implement condition simplification for add_subdirectory conditions
This makes the SUBDIRS -= foo conditions simplified and nice to look
at.

Amends b26b1455d7.

Change-Id: I9ffe3db1e358f94fb65a885cc90c44218482825b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-08-01 18:33:16 +00:00
Alexandru Croitor
2e7d7c5035 Regenerate qsocketnotifier test
Remove the previously wrongly committed CMakeLists.gen.txt file.

Change-Id: I75e87865a9f2b237d321d29f92e25aee5f7febb9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-01 14:52:49 +00:00
Alexandru Croitor
67bbb9179f Fix pro2cmake to handle QT default values properly
Setting the "QT" SetOperation which defaults to "core" and "gui",
should only be done once on the top-level .pro scope. To distinguish
the top level scope, we need to check for both an empty parent_scope
and an empty base_dir.

Amends 9e96c38426

Change-Id: I9db1cbf0e6592c8c195d11b97b3eff40b1adbcbd
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-01 14:50:17 +00:00
Alexandru Croitor
cb370593df Small fix to correctly handle default arguments
Dictionaries are mutable, and should not be assigned as a default
parameter.

Change-Id: Id08c17f89c17b404560241849603e1e1a0ec6562
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-01 14:50:07 +00:00
Leander Beernaert
97b76704ea Refactor QML_FILES for add_qml_module
It has been decided, that going forward all qml files are to be added
to a module via the resource system. This patch does the ground work
to make sure all qml modules in the qt codebase follow these new
conventions.

New properties on targets have been added so that we can't track all the
qml related information for later use.

To make sure it is still possible to install qml files we added the
qt_install_qml_files() command.

Pro2cmake has been adjusted to handle the special cases of versioned
qml modules (e.g: QtQuick.2). It will now insert a TARGET_PATH
override to avoid the default conversion from the URI parameter.

Finally, this patch temporarliy disables the quick compiler by moving
all relevant code into a dummy function. This will be removed in a
follow up patch where the quick compiler will be enable for all
qml files present in resource files.

Change-Id: I09fe4517fad26ec96122d9c7c777dbfbd214905c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-01 14:07:01 +00:00
Jędrzej Nowacki
9e96c38426 Properly convert default QT directive
If unset QT by default has value: "core gui". This patch adds this
behavior by pre-defining the value in the root scope.

qmimedata CMakeList.txt was re-generated.

Change-Id: Ib8b6064bc46c72d829e0077d09f21bbfb494e137
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-08-01 13:38:21 +00:00
Jędrzej Nowacki
b26b1455d7 Implement SUBDIR-= conversion in pro2cmake tool
CMake doesn't support removing subdirectories therefore one need to
convert all removal to conditional adds. The resulting code doesn't
win a beauty contest. That is because handle_subdir works on already
processed strings which means it doesn't have access to the boolean
operations. As such it can not minimize the expressions, but it works
and in the most simple cases it is pretty good.

The patch re-generates CMakeLists.txt under tests/auto/corelib/kernel
excluding qcoreapplication, qmetatype, qmimedata, qobject, qtimer,
which are suffering from unrelated problems, like for example Gui,
pthread linkage issues.

Change-Id: I18a02f6eda7a3b41b1313211c8bc9ce277bb67be
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-08-01 13:36:39 +00:00
Leander Beernaert
a920c16ef2 Add Qt Quick Compiler support
This patch adds support for the qtquick compiler feature, which
will embed the compiled qml files as resources along with the
respective qml_loader.

This patch also changes the add_qml_module call to require either
EMBED_QML_FILES and/or INSTALL_QML_FILES to be specified.

Change-Id: I32d29c9b554b8286ed3b980027a56dd4abe11c92
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-31 12:52:20 +00:00
Simon Hausmann
517a0ea8f0 Fix add_qml_module() with non-static builds
Make sure that the .qml/.js/.mjs files are copied or installed into
their target destination.

Change-Id: Ib1649e5168c9fe3a570800af92d82293e5b295d6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-30 15:37:00 +00:00
Alexandru Croitor
1fc70ac0de Fix creation of generated plugin cpp files in static builds
When building qtdeclarative against a static iOS qtbase build,
QtNetwork is find_package'd twice, once in the top level
CMakeLists.txt file, and once by the qtuiotouchplugin which has
Network as a dependency.

This meant that the static plugins that Network exposes had
auto import cpp files generated twice, which failed the configuration
of qtdeclarative.

To fix this, don't generate the same file more than once.

To do that, protect the inclusion of the FooPlugins.cmake file, to
only be included once in every directory scope. That can be achieved
by setting a variable to TRUE when the target does not exist yet.

If the target exists in the same scope, that means that find_package()
was called a second time in the same scope, so there is no need
to include the Plugins file.

Change-Id: I9d7c3e7b7c22c2b4526cf1d717b9d15919f213f3
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-30 13:26:37 +00:00
Alexandru Croitor
5528bcf99c Protect against extending imported host targets
When cross-compiling qtdeclarative, add_qt_tools makes sure to import
the host tool and not build it. But there are also some
extend_target and add_qt_resource calls which try to extend the host
tool.

Make sure to protect those functions not to do anything if they are
called on an imported target.

Change-Id: Ifd8bcab8e56ad389a8c145382b23bd2c1bda5e81
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-30 13:26:25 +00:00
Alexandru Croitor
a285bcba26 Ugly fix for handling QT_SOURCE_TREE
QT_SOURCE_TREE is a variable that is set in qtbase/.qmake.conf.
In qtbase, it's used throughout various
projects to find cpp sources when building standalone tests (among
other things).
Everything works fine with qmake, because even if qmake is invoked
on the tests subfolder, qmake searches up the source directory tree
until it finds a .qmake.conf file, and uses that.

When building qttools with qmake, the qdoc project expects
to have a QT_SOURCE_TREE value, but it's not actually set in the
qttools/.qmake.conf file, so the generated include paths that use
that value are incorrect. Curiously the build still succeeds.

Now in CMake land we replaced QT_SOURCE_TREE with
CMAKE_SOURCE_DIR, but that does not work properly when doing a
standalone tests build, because the project in that case is the
tests one, and not the qtbase one, so configuration fails in a
developer build when trying to configure some private tests.

So far I've found that only qtbase actively uses this value.
A temporary fix is to save the qtbase source directory into a
QT_SOURCE_TREE variable inside the generated
BuildInternalsExtra.cmake file.

The pro2cmake script is changed to handle presence of QT_SOURCE_TREE
in a qrc file path. This is handled by finding the location of a
.qmake.conf file starting from the project file absolute path.
This is needed to stop the script from crashing when handling
the mimedatabase test projects for example.

The change also regenerates the relevant failing test projects, and
thus standalone tests (when doing developer builds aka private_tests
enabled) now configure and build successfully.

Change-Id: I15adc6f4ab6e3056c43ed850196204e2229c4d98
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-29 13:16:14 +00:00
Simon Hausmann
c75dcc6875 Permit the use of qml cache file generation even inside qtdeclarative
After re-arranging subdirs, the cmake target level dependencies can
handle building qmlcachegen before running the custom command for
generating cache files.

Change-Id: I8a35b2b5bfd2fdf4b49462ff9c27e5f3075254fc
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-29 13:15:16 +00:00
Liang Qi
6887ae2ff9 cmake: Enable network test
Task-number: QTBUG-74146
Change-Id: Ib29d1531f89676afb2b4df5032529b731ace029d
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-29 13:14:55 +00:00
Alexandru Croitor
1307736c7d Fix testdata handling
Make sure to handle glob expressions in the entire path given, not just
the end of the path. This handles tests like qsslkey and qnetworkreply.

Also copy/install the testdata in the final test directory path under
a "testdata" subdir.
Previously INSTALL_TESTDIR was used, which was never set to anything.

Change-Id: I2408e12f586cadeb524ffa249e851a4179324b23
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
2019-07-29 13:14:44 +00:00
Leander Beernaert
e61a7a2c57 Add support for qmlcachegen
This patch adds support for qmake's qmlcache feature. It's enabled
when option EMBED_QML_FILES is not present in add_qml_module.

Change-Id: I9b35f0bda7dfaf777f55c14eaf3d763f9b550fa4
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-29 11:52:43 +00:00
Leander Beernaert
88bf485f91 Add EMBED_QML_FILES option to add_qml_module
Some projects in QtQuickControls force the qml files to embedded into
the binary. This change exposes an option to mimic that bevhavior.

Change-Id: I4cbf0c21c05ca03b8dd1189eb7d81e43279c7157
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-25 09:44:03 +00:00
Leander Beernaert
a92f029e2a Fix QML_FILES conversion
Use a the more appropriate scope.get_files() to retrieve the qml file
list from the qmake project. This makes it more consitent with the
rest of the conversion script and fixes some issues with incorrect
aliases in qrc files.

Change-Id: I8907516be9457ba0d60d14af53d241197637aa9f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-25 09:42:09 +00:00
Leander Beernaert
2cc865b943 Extend add_qt_test to support qmltestcase
Extend add_qt_test for qmltest by setting the option QMLTEST
when we detect the config qmltestcase.

We also forwards the GUI option to the tests when detected.
This is a requirement for some QtQuickControls2 tests.

Finally when doing a prefix build, we add the install directory
to the QT_PLUGIN_PATH environment variable.

Change-Id: I3b2ecb494955976e98abbcf3d03925c314336122
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-24 10:49:20 +00:00
Leander Beernaert
1072a8f579 Add missing QT_INSTALL_DIR paths to qml files and test data
Make sure that paths passed to qt_copy_or_install are prefixed with
QT_INSTALL_DIR so that they behave correctly with prefix and non-prefix
builds.

Make sure that plugin.qmltypes and qmldir are also copied to binary dir
when doing prefix builds to match qmake's behavior.

Change-Id: I6f87ed478e797c9f66dbf85264904ad29a60ad95
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-24 09:28:18 +00:00
Alexandru Croitor
96bdec394c Regenerate qtextedit test
It was not built previously on macOS due to private_tests feature
misbehaving, and thus it now fails due to incorrect framework linkage.
Regenerate it.

Change-Id: I2f4338e3ef3bf160ae4f13083e8da5f8db47b9c0
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-24 09:01:36 +00:00
Alexandru Croitor
f54881f73a Fix exporting of Core tools
It should happen after qmake is built, to make sure that the target is
made global, otherwise when cross-building qtbase in another build tree,
the configuration phase will fail due to not finding qmake.

qmake was accidentally exported before if you configured qtbase twice,
because the tool was kept around in a cache variable, the second
configuration actually recreated the CoreToolsConfig.cmake file to
contain qmake as well.

Change-Id: I6941e83f7d6bd03c56de120fba1d18e50c4af0e4
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-24 09:01:24 +00:00
Leander Beernaert
42589df6b9 Fix define value for QtQui
A define was placed in the wrong section.

Change-Id: Ibaf16fc45d51d99f7581bc98d6df334972b04278
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-07-23 11:32:30 +00:00
Alexandru Croitor
e86509016c Fix mapping of Apple platforms in pro2cmake.py
"mac" scope in qmake actually means all mac platforms,
just like "darwin", aka macOS, iOS, watchOS, etc.

Regenerate corelib, gui and testlib after this modification.
This is a requirement for the iOS port.

Change-Id: I029c7e907d13f6ec31816a08602a5930f9ac16a7
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-23 10:31:15 +00:00
Alexandru Croitor
cd408af9bc Add some missing CLASS_NAME values to plugins
This substantially decreases the number of warnings when doing
a Qt static build with examples.

This is a quickfix modifying the relevant files directly. A proper
fix will follow that regenerates the whole files.

Change-Id: I2a3cc2c4ea02b3412beb96f7b4be9d43365a460d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-22 18:48:28 +00:00
Alexandru Croitor
59912b9558 Fix building examples when doing a Qt static build
The build failed due to two different reasons.

We tried to assign properties on an aliased target, which does not
work. Make sure to set properties on the original unaliased target.

We tried to query for the value of the QT_DEFAULT_PLUGINS property
when automatically linking to plugins, but the generator expression
failed in the AND section, because querying for an unexisting value
does not return an integer, and the AND expression expects an integer.
The fix is to wrap the relevant expression in a BOOL generator
expression.

Change-Id: Ia065bc1de939cee49e5de0b2aef70e356cc5419a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-22 18:48:17 +00:00
Alexandru Croitor
35fbe525fe Fix warnings regarding QML plugins
Some author warnings don't make sense when dealing with QML
plugins, like the messages regarding CLASS_NAME or not
belonging to a certain module. Take care not to print those
warnings in those cases.

Change-Id: I017bd63cca650dc262337949242e813b7b6a56cc
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-22 16:02:30 +00:00
Alexandru Croitor
f60e4058aa Fix non-prefix builds for non qtbase repos
QT_WILL_INSTALL was previously always set to ON when doing a
qtdeclarative build, because
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT evaluated to false due to
always having to set CMAKE_INSTALL_PREFIX to point to the qtbase build
directory.

Instead of recomputing the value of QT_WILL_INSTALL, compute it once
while configuring qtbase, and add it to the generated
QtBuildInternalsExtra.cmake file, so it propagates to all other repos
that will be built.

Change-Id: If8bf63e7501b5758fe7aa0f799cb0746704f4811
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-22 16:02:21 +00:00
Leander Beernaert
31341ad63a Simplify add_qml_module code
Reduce the amount of code required to add a qml plugin to cmake
by making add_qml_module wrap the add_qt_plugin code where required.

add_qml_module will also create a dummy target so that qml files
will appear as source files in an IDE when no cpp files are present.

CXX_MODULE qmake parameter has been dropped in favor of an
explicit IMPORT_VERSION parameter, since it was only used to
determine the version when the IMPORT_VERSION was not specified.

Change-Id: I4a4b626566720d04c62d246ca521db8c4a95b10f
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-22 14:28:19 +00:00
Simon Hausmann
9f40dddaaa Minor cleanup
Remove unnecessary condition. We're already inside a FEATURE_vulkan
block.

Change-Id: I3a4d2db9ad830b6a0a0b2c5895ab8b2060713370
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-22 13:01:39 +00:00
Leander Beernaert
ff5a75a60e Process private libraries set in QT_PRIVATE
The pro2cmake conversion was not processing private libraries specified
with the QT_PRIVATE variable.

Change-Id: I0c44595bb8e1ed9a748af51a2a859bee62e7d264
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-22 08:34:54 +00:00
Simon Hausmann
fecefdd369 Fix mapping of features to private features
When a feature generates a private feature, we should not just repeat
the condition but also make it depend on the original feature. In qmake
features had different outputs, while we have a 1:1 mapping. For example
the developer_build feature had "private_tests" as an output feature.
There's no condition attached to the feature and auto-detect is off, so
we'd generate

    qt_feature("developer_build" AUTODETECT OFF)
    qt_feature("private_tests" AUTODETECT OFF)

and that's wrong, because when the user enables the visible feature
(developer_build) we want it to propagate to the private_tests feature.

Change-Id: Id8408864802fa1e1ed9e67a5f47d1d2fde38d321
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-22 08:29:33 +00:00
Leander Beernaert
3212f1b866 Add special case handling for corelib mimetypes resources
We have to treat the resources from mimetypes in corelibs specially
as they are reused for two test cases. Since we no longer use the qrc
files, we have wrapped the relevant code in a function that can be
called for every target that depends on it.

This change also corrects formatting for the generate CMake code
regarding resource commands.

Change-Id: I50a05c81151d75aefc9ca165f5ffeb9f5cd77162
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-18 08:05:58 +00:00
Leander Beernaert
341ccc3b59 Enable recursive expansion of simple qmake variables
Allow _expand_value to expand variables that may have more than
one level of expansion when the regular expression covers all
of the input. E.g.:

A = Foo
B = $$A/Bar
scope.expand('$$B')

While the original code was able to expand the string '$$B/source.cpp' to
'Foo/Bar/source.cpp', it could not expand the string '$$B' completely.
The latter would always return '$$A/Bar' instead of the expected 'Foo/Bar'
string.

A test case has been added which coveres the above example.

Change-Id: Ie3b5739c24ecbeb67d408dd204b0f54bab1d0f3f
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-18 07:26:01 +00:00