Commit Graph

37946 Commits

Author SHA1 Message Date
Tobias Hunger
72404ef3e1 CMake: allow custom plugin output/install directories
Only require TYPE if no OUTPUT_DIRECTORY, ARCHIVE_INSTALL_DIRECTORY
and INSTALL_DIRECTORY is provided.

Change-Id: I6db1cfaa576bfa3ee3dc8ecf81db20e3afcd61e2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-27 14:35:46 +00:00
Tobias Hunger
9ba702bea9 CMake: Re-generate widgets
Change-Id: I3722092aaf4ff5d131223057d73f9cbb82982a98
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-27 14:20:15 +00:00
Tobias Hunger
aa50b377a7 CMake: Add widgets examples
Change-Id: Ib6142b93df066e3658eb189b50ca74c455fe7e56
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-26 15:25:39 +00:00
Tobias Hunger
05ebd62f09 .gitignore: Do not ignore stuff in examples for the time being
Change-Id: Iccf61b6613c4cd82a10051eac448711400a27ea1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-26 13:03:20 +00:00
Tobias Hunger
64c6c943c7 CMake: Add more examples
Change-Id: I7a8a3fd0a844a518592957fe07c6e707dd452d5f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-26 13:03:01 +00:00
Jędrzej Nowacki
a0a94576fa Fix RemoveOperation
The operation was using an empty set as a base, so it was not really
functional.

Change-Id: I98fd80c1ede31994857aa1f0c8947ca7b9f76649
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-03-26 11:14:32 +00:00
Jędrzej Nowacki
eb3d73ffb7 Speedup run_pro2cmake
We can use all cores. Sadly it doesn't balance cores well as
corelib.pro takes most of the time anyway, but the speedup is
visible from ~15 to 5 min.

Change-Id: Id8209c58491b38d19c6e9f1163d366c3e33a182c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-26 11:10:10 +00:00
Alexandru Croitor
890ddd2540 Fix AUTOMOC and friends to run only once the tools are built
While building on macOS, AUTOMOC sometimes hanged indefinitely.
The problem was that AUTOMOC was executed for the qmacstyle
plugin before moc was actually built.

Because of an upstream bug in CMake, AUTOMOC was caught in a deadlock
without reporting that spawning the moc process failed. Specifically
if a libuv spawn() call failed, the condition variable for a waiting
thread was not notified, and the thread kept waiting forever for the
process launch to finish.

Fix the dependency by setting the AUTOGEN_TARGET_DEPENDS property
on all targets that have AUTOGEN tools enabled. This makes sure that
moc and friends are built before they are used.

Also add some special cases to disable autogen tools on certain targets
to break cycles between targets.

Fixes: QTBUG-74636
Change-Id: I6e689e63cba1962525f169f332a58498d173c0a6
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
2019-03-22 14:40:48 +00:00
Alexandru Croitor
5fd30d0a18 Revert "Fix wrong target in qt_feature_module_begin"
It broke builds because the qconfig.h file was created in the wrong
directory.

This reverts commit 25f67fbb07.

Change-Id: Ia458ef4193a3985a9ba613d82f679b7df5ca0107
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-03-22 14:40:38 +00:00
Alexandru Croitor
8158a8767c Temporarily disable the opengles2 feature on WIN32
The feature used to be implicitly enabled because qt source ships with
ANGLE sources, and thus ANGLE could always be built. Yet because the
CMake port of ANGLE is not done yet, and because the feature is
implicitly enabled, the build failed when trying to find GLES headers.

To provide a nicer out-of-the-box configuring of the Windows build,
disable the opengles2 feature on Windows, to default to a desktop GL
build. It can be re-enabled once (if) ANGLE porting is done.

After this change, you shouldn't need to pass any additional custom
FEATURE_foo options to cmake to build qtbase on Windows.

Change-Id: I94c96d8ef70cf671d2ce0198311f70b55fa642b1
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-21 21:51:22 +00:00
Alexandru Croitor
9281abb1bc Fix windows build after gui regeneration
- vulkan/nolink is not a valid target, instead pass along vulkan
  include directories to consuming targets, and don't link to the
  library at all
- fix vulkan support target name in the windows qpa dependencies
- the wrong opengl dynamic feature was used in the windows qpa
  (the current way is consistent with qmake, otherwise
  there were issues with the feature evaluation, because
  gui feature definitions are not available in the qpa
  project scope)
- fix issue with qfloat16_f16c not being built because
  of previous subarch issues

Change-Id: Ia75fc76a71e516fe8718027063fe554657d4d47b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-21 21:51:09 +00:00
Alexandru Croitor
92ab6c2108 Add MSVC specific instruction set compiler flags
This is only a half solution, because some of them need to be set
based on the detected MSVC version and Windows kit, similar to
how it's done by qmake.

Change-Id: Ice13c99d6fe0a033ddfebf9d4be924dcd6b8a36c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-21 17:47:09 +00:00
Alexandru Croitor
ba7c62eed5 Fix sub-architecture (instruction sets / SIMD) handling
In qmake there are at least 2 things to know regarding
sub-architectures and instruction sets.

Which instruction sets does the compiler know to compile for,
represented by the various config.tests and features in
qtbase/configure.json.

And which instructions sets are enabled by the compiler by default,
represented by the configure.json "architecture" test and accessed
via QT_CPU_FEATURES.$$arch qmake argument.

Before this patch there was some mishandling of the above concepts
in CMake code.

The former can now be checked in CMake with via TEST_subarch_foo and
QT_FEATURE_foo (where foo is sse2, etc).

The latter can now be checked by
TEST_arch_${TEST_architecture_arch}_subarch_foo
(where foo is sse2, etc and the main arch is dynamyicall evaluated).

The configurejson2cmake script was adjusted to take care of the above
changes, and the cmake files were regenerated as well.

Change-Id: Ifbf558242e320cafae50da388eee56fa5de2a50c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-21 17:47:01 +00:00
Alexandru Croitor
25f67fbb07 Fix wrong target in qt_feature_module_begin
Presumably this was a copy paste that was not intended.

Change-Id: I09e3bb12b3b3f7af75726d7a952d79814ea9c876
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-21 12:41:24 +00:00
Alexandru Croitor
a9c379199d Fix internal features to also be evaluated
This amends 4f1a155909 and
37b154858f which caused the regeneration
of some json features to be internal. Some of those features were
not evaluated any more unless they were referenced in another feature.

Make sure to explicitly evaluate all internal features as well.

Change-Id: I4367f309585fe29dc89d8a6b793de381956ae51d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-21 10:29:38 +00:00
Tobias Hunger
432f7232e3 CMake: Add public dependency from Qt::Dbus to Qt::Core
Anything that uses Qt::Dbus also needs to link to Qt::Core, so encode
that in the target.

Change-Id: Ibc984d5b5e118aae8d1c0d21117fcff1664b0ae3
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 12:29:53 +00:00
Tobias Hunger
dedc645510 CMake: Make add_qt_executable link to Qt::Core by default
Make add_qt_executable link to Qt::Core by default. Add a BOOTSTRAP
flag to disable this behavior again.

Pass BOOTSTRAP on from add_qt_tool to add_qt_executable.

Change-Id: I26e7f1e03254122f626b3765cccc0dc4414a4fc0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 12:29:50 +00:00
Tobias Hunger
485e96c4ee CMake: Handle INSTALL_DIRECTORY for qt_executables
Allow to override the install directory for Qt executables.

Change-Id: I9561976eefe9c7b573bb97ddaaa39e30d3b6d9fb
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 11:55:19 +00:00
Tobias Hunger
4f736db08c CMake: Re-generate gui
Change-Id: Ia14d61ba0f2fa346090ebbb2cd179ba5b38e3056
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:47:10 +00:00
Tobias Hunger
cb7a3aaa4c CMake: pro2cmake.py: Report more qmake variables as used
Report some more qmake variables as used when they are used to decide
which kind of target to write.

Change-Id: Id2602bb8cc07130456c04c53148acb73f21b0f21
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:45:14 +00:00
Tobias Hunger
88549c2855 CMake: pro2cmake.py: Handle "target.path" and "INSTALLS = target"
Add installation location information into CMakeLists.txt files if
available in CMake.

Change-Id: I498deac71b1cc33c7d30790e32da236afdcb23af
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:45:04 +00:00
Tobias Hunger
347261aaf6 CMake: pro2cmake.py: Handle DBUS_*S
Handle DBUS_ADAPTORS and DBUS_INTERFACES and turn them into
equivalent CMake statements.

Change-Id: Ia8a69e7ab97d9f18df93097a6e2c7c1686cb16a3
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:44:46 +00:00
Tobias Hunger
d84a2b8274 CMake: pro2cmake.py: Fix typo
Change-Id: I5eebe64f825ab28a67093b1a2cef417ed0908ec0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:44:33 +00:00
Tobias Hunger
74aa6abac6 CMake: Fix names for generated DBus adaptor/interface files
Use the same names for DBus adaptor/interface files that are also
used by qmake. E.g. io.qt.something.xml will be turned into
something_interface.(cpp|h) or something_adaptor.(cpp|h).

Change-Id: I799b8aee7addd1fe590e8f3ec078e5325b68d5b1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:44:19 +00:00
Tobias Hunger
b173f0b905 CMake: Treat OUTPUT_DIRECTORY as relative to top level build directory
Treat a relative path in OUTPUT_DIRECTORY as relative to the top level
build directory, not to the current build directory.

Change-Id: I4d409d1362a8f73d13b93cf5ab98e82e60dd62cb
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-20 10:38:32 +00:00
Alexandru Croitor
a9af99c926 Add windows platform plugin and its requirements
- executed pro2cmake script on windows qpa plugin
- added windowsuiautomation platformsupport project
- fixed plugin dlls and lib files to be written to the same path
- fixed an issue comErrorString which used implicit casting
  from QString to char*, but plugins are currently built
  with QT_NO_CAST_TO_ASCII

Task-number: QTBUG-74140
Change-Id: I5db3b6c5264bbd5dfba2998b049fda36eb312c70
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 15:35:07 +00:00
Alexandru Croitor
3f03917b54 Fix Windows build
- Fix qmake build
- Fix QtNetwork moc-ing, by including the moc files
  inside the cpp files
- Fix sql odbc plugin by including QT_PLUGIN define
- Fix Boostrap to link against the Platform target, to get the
  correct Unicode and WIN64 defines.
- Fix vulkan headers to be found
- Fix freetype bzip and png unresolved symbols / linker issues
  when building minimal platform plugin (also need to make
  sure to use the vcpkg toolchain instead of CMAKE_PREFIX_PATH
  because then find_package is overridden, which does magic
  to properly propagate static library dependencies).
- Fix qfilesystementry test not to be built without private
  tests feature (it led to undefined symbols issues).
- Make sure to remove QT_NO_CAST_TO_ASCII define when building
  QtCore, so that the qstringbuilder3 test builds
  successfully.

Task-number: QTBUG-74140
Change-Id: I353d08392b604d55f8e62cdd8696d1e19a3c084a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 15:34:52 +00:00
Alexandru Croitor
4f1a155909 Regenerate cmake files from configure.json files
The new files represent the json features more closely.
This helps with various build issues as well, like dynamicgl
feature not being present before.

Change-Id: I433592f48e0550700226a635492a3ce15af743c1
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 15:34:43 +00:00
Alexandru Croitor
37b154858f Improve configurejson2cmake feature output generation
There were a few cases of feature outputs that were handled
incorrectly before this change, specifically:
- publicFeatures and privateFeatures with custom names
- privateFeatures that also ended up writing defines into
  public headers
- publicFeatures that ended up in private headers
- internal features (that should have no QT_FEATURE_foo
  defines) that were still written to either public or
  private headers

The change takes care of all those cases by keeping a map
of which features need to be written along with any visibility
specifications, as well as custom name changes.

Change-Id: I37baeaeacdfe4935128a392c72ca71b5c3ca1c8d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 15:34:33 +00:00
Alexandru Croitor
e5b2699750 Do define generation after feature evaluation
Instead of generating defines guarded by feature ifdefs,
record the define information (condition, name, value, etc),
and generate the final define statement only if the feature
condition evaluated to true.

This removes the need to generate feature defines
(QT_FEATURE_foo) for features that have neither public nor
private outputs in the configure.json file.

Also note that all qt_feature_definition() calls
(which correspond to type:"define" outputs in json files)
now generate defines only in the public header, which seems
to be consistent with how qmake evaluates json files.

Change-Id: I5210b405d5735dd9df5f7a55d1ea9547bb7b1159
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 15:34:13 +00:00
Tobias Hunger
64147fcb33 CMake: Add QT_CFLAGS_* when building x86simd tests
Change-Id: I5caa088d517cb9d3749c3ed8ef88a41552c1d340
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-18 12:33:44 +00:00
Tobias Hunger
fbf98bf255 CMake: pro2cmake.py: Better reporting of unused keys from qmake
Change-Id: Ie1b1f446c314bb5248cc13efeae1f279b0182e04
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-18 11:38:05 +00:00
Tobias Hunger
6e16f127ad CMake: pro2cmake.py: Handle SIMD sources
Change-Id: Ib445888e769432e8c247ae2d2fb5d8af2d5cd275
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-18 11:37:47 +00:00
Tobias Hunger
d48160be9e Corelib: Update to include qrc-file removal
Change-Id: I18d556d7517de7d9f2eb55045511d2166f0105ce
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-18 11:01:40 +00:00
Alexandru Croitor
6ca047aba9 Use qt_evaluate_config_expression for feature enable conditions
Certain features like opengles2 can be enabled or disabled based
on the conditions that are specified in the ENABLE and DISABLE
parameters.
Because some of those conditions use STREQUAL with
a single quoted argument, we have to use
qt_evaluate_config_expression to circumvent the CMake bug
regarding single quotes, which is described in the function
implementation.
Only then will enabling / disabling work correctly.

Change-Id: I3b68ef611c985f0d8416fd089055fd862da1e542
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-14 13:56:30 +00:00
Tobias Hunger
42ae8218b1 CMake: configurejson2cmake.py: Fix typo
Change-Id: Ib142032577f1d84bfb2402103271db04a4bb25a1
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-12 08:43:03 +00:00
Alexandru Croitor
ea7d13de0d Update README to mention setting the vcpkg toolchain
Change-Id: Icac2ba956246901e02bb6aa257f81cccf56560e8
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-11 16:54:10 +00:00
Tobias Hunger
4b105d77c2 CMake: pro2cmake.py: Remove .qrc files!
Remove qrc files from CMake. Use add_qt_resource function instead.

Change-Id: I64cdbd9498f97d23cd8e03f34ab5ae4a52dba5af
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-11 14:52:09 +00:00
Alexandru Croitor
af8413af15 Fix header Depends file generation
The script used to write incorrect dependency headers due to not
clearing the qtdeps variable at each loop step.

Change-Id: Icf293be7cea596daa096ab19d390c0bb468a8654
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-03-11 14:12:06 +00:00
Tobias Hunger
becbe4df3a Improve add_qt_resource function
* Handle BASE to give the directory files will be relative to.
* Support lang="foo" for qresource sections.

Change-Id: I36087220d03789a97105dc6dd1aca7a25a063d9f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-11 09:14:33 +00:00
Tobias Hunger
4471249d33 CMake: Re-generate CMakeLists.txt file for network
Change-Id: Ib75578958a98947efbca853692b24528c1a3e8a5
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-11 09:14:22 +00:00
Tobias Hunger
138c0d0437 CMake: Re-generate CMakeLists.txt file for corelib
Change-Id: I96fb3e388a39481c513f1c6a23327e41a785e4af
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-11 09:14:10 +00:00
Liang Qi
997c869280 cmake: fix the order of parameters for homebrew
Change-Id: I7b597a8d6bc81eafb21e5368a29700638c351bdf
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-07 09:42:46 +00:00
Alexandru Croitor
e3c2d74506 Update README to specify the minimum version of CMake needed
Change-Id: I10e594859129bddfa56f078389b2272a0072fda0
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-07 09:34:04 +00:00
Liang Qi
b51fbd72b9 cmake: build qmacstyle
Change-Id: I1fa0196036ffd31b5961bb5b73ff21123a818af8
Reviewed-by: Albert Astals Cid <albert.astals.cid@kdab.com>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
2019-03-06 13:18:36 +00:00
Liang Qi
32c59d6856 cmake: fix cocoa and graphics on macOS
Change-Id: Ia956c74a54874f91cc0ea8e5105164de88890ff2
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-06 13:18:20 +00:00
Mikhail Svetkin
25ee3d1c3b cmake: Fix moc on macOS
moc does not generate moc_defs.h and that's why moc does not understand
that he runs on macOS.
It happens because cmake can not find Qt version.

Change-Id: I34c51ebb69dc1ff782a0f129e114cda819122805
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-06 13:17:48 +00:00
Simon Hausmann
d72b717119 Fix build
There is no more internal function for adding general linker flags.
Let's use the appropriate cmake function right away, regardless of the
compiler choice. This is also how global.pri handled it.

Change-Id: I20c9002a31aa4d7e64c1c59d8d67118774da337c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-06 10:19:00 +00:00
Tobias Hunger
32d4f139c8 CMake: Re-generate bootstrap-related CMakeLists.txt files
Change-Id: Ia4be80729807c6aaac5b22a0dab81a841d57bdcd
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-04 15:38:01 +00:00
Tobias Hunger
e1de70933e CMake: Handle gc-sections linker flags
Add a function to set gc-sections flags on the linker.

Change-Id: I9ac02364836d2aa8de239adb8d3a5d29659a4007
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-03-04 15:37:48 +00:00