summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore16
-rw-r--r--CMakeLists.txt75
-rw-r--r--bin/qt-cmake.bat.in1
-rwxr-xr-xbin/qt-cmake.in3
-rw-r--r--cmake/3rdparty/extra-cmake-modules/COPYING-CMAKE-SCRIPTS22
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake1
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/FindEGL.cmake164
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/FindGLIB2.cmake101
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/FindWayland.cmake143
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/FindX11_XCB.cmake118
-rw-r--r--cmake/3rdparty/extra-cmake-modules/find-modules/FindXCB.cmake201
-rw-r--r--cmake/3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers.cmake173
-rw-r--r--cmake/3rdparty/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake297
-rw-r--r--cmake/3rdparty/extra-cmake-modules/qt_attribution.json15
-rw-r--r--cmake/3rdparty/kwin/COPYING-CMAKE-SCRIPTS22
-rw-r--r--cmake/3rdparty/kwin/FindLibdrm.cmake126
-rw-r--r--cmake/3rdparty/kwin/FindLibinput.cmake125
-rw-r--r--cmake/3rdparty/kwin/FindXKB.cmake101
-rw-r--r--cmake/3rdparty/kwin/Findgbm.cmake125
-rw-r--r--cmake/3rdparty/kwin/qt_attribution.json17
-rw-r--r--cmake/3rdpartyConfig.cmake.in13
-rw-r--r--cmake/FindATSPI2.cmake8
-rw-r--r--cmake/FindAtomic.cmake44
-rw-r--r--cmake/FindCups.cmake98
-rw-r--r--cmake/FindGLESv2.cmake40
-rw-r--r--cmake/FindGTK3.cmake7
-rw-r--r--cmake/FindLibproxy.cmake7
-rw-r--r--cmake/FindLibsystemd.cmake7
-rw-r--r--cmake/FindLibudev.cmake7
-rw-r--r--cmake/FindMtdev.cmake7
-rw-r--r--cmake/FindPPS.cmake19
-rw-r--r--cmake/FindSlog2.cmake19
-rw-r--r--cmake/FindTslib.cmake7
-rw-r--r--cmake/FindWrapDBus1.cmake31
-rw-r--r--cmake/FindWrapDoubleConversion.cmake61
-rw-r--r--cmake/FindWrapFreetype.cmake33
-rw-r--r--cmake/FindWrapPCRE2.cmake20
-rw-r--r--cmake/FindWrapRt.cmake34
-rw-r--r--cmake/FindXKB_COMMON_X11.cmake7
-rw-r--r--cmake/FindXRender.cmake9
-rw-r--r--cmake/FindZSTD.cmake50
-rw-r--r--cmake/Finddouble-conversion.cmake32
-rw-r--r--cmake/QtAutoDetect.cmake57
-rw-r--r--cmake/QtBaseCMakeTesting.cmake9
-rw-r--r--cmake/QtBaseConfigureTests.cmake154
-rw-r--r--cmake/QtBaseGlobalTargets.cmake227
-rw-r--r--cmake/QtBuild.cmake3184
-rw-r--r--cmake/QtBuildInternals/QtBuildInternalsAndroid.cmake206
-rw-r--r--cmake/QtBuildInternals/QtBuildInternalsConfig.cmake149
-rw-r--r--cmake/QtBuildInternalsExtra.cmake.in27
-rw-r--r--cmake/QtCompilerFlags.cmake6
-rw-r--r--cmake/QtCompilerOptimization.cmake121
-rw-r--r--cmake/QtConfig.cmake.in49
-rw-r--r--cmake/QtFeature.cmake542
-rw-r--r--cmake/QtInternalTargets.cmake98
-rw-r--r--cmake/QtModuleConfig.cmake.in42
-rw-r--r--cmake/QtModuleDependencies.cmake.in76
-rw-r--r--cmake/QtModuleToolsConfig.cmake.in14
-rw-r--r--cmake/QtModuleToolsDependencies.cmake.in16
-rw-r--r--cmake/QtPlatformAndroid.cmake288
-rw-r--r--cmake/QtPlatformSupport.cmake81
-rw-r--r--cmake/QtPluginConfig.cmake.in15
-rw-r--r--cmake/QtPluginDependencies.cmake.in54
-rw-r--r--cmake/QtPlugins.cmake.in50
-rw-r--r--cmake/QtPostProcess.cmake299
-rw-r--r--cmake/QtProperties.cmake97
-rw-r--r--cmake/QtSetup.cmake129
-rw-r--r--cmake/QtToolsConfig.cmake.in35
-rw-r--r--cmake/README.md194
-rw-r--r--cmake/qt.toolchain.cmake.in20
-rw-r--r--cmake/tests/CMakeLists.txt48
-rw-r--r--cmake/tests/empty.cpp0
-rw-r--r--cmake/tests/features/CMakeLists.txt42
-rw-r--r--cmake/tests/features/configure.cmake35
-rw-r--r--cmake/tests/features/src/CMakeLists.txt7
-rw-r--r--cmake/tests/main.cpp1
-rw-r--r--cmake/tests/qt_make_output_file/CMakeLists.txt22
-rw-r--r--cmake/tests/test.cmake54
-rw-r--r--coin/instructions/prepare_building_env.yaml202
-rw-r--r--coin/module_config.yaml130
-rw-r--r--config.tests/x86_simd/CMakeLists.txt23
-rwxr-xr-xconfigure167
-rw-r--r--configure.cmake490
-rw-r--r--configure.json11
-rw-r--r--doc/global/macros.qdocconf1
-rw-r--r--examples/CMakeLists.txt54
-rw-r--r--examples/corelib/CMakeLists.txt10
-rw-r--r--examples/corelib/ipc/CMakeLists.txt14
-rw-r--r--examples/corelib/ipc/localfortuneclient/CMakeLists.txt29
-rw-r--r--examples/corelib/ipc/localfortuneserver/CMakeLists.txt29
-rw-r--r--examples/corelib/ipc/sharedmemory/CMakeLists.txt27
-rw-r--r--examples/corelib/mimetypes/CMakeLists.txt6
-rw-r--r--examples/corelib/mimetypes/mimetypebrowser/CMakeLists.txt28
-rw-r--r--examples/corelib/serialization/CMakeLists.txt5
-rw-r--r--examples/corelib/serialization/cbordump/CMakeLists.txt27
-rw-r--r--examples/corelib/serialization/convert/CMakeLists.txt34
-rw-r--r--examples/corelib/serialization/savegame/CMakeLists.txt30
-rw-r--r--examples/corelib/threads/CMakeLists.txt9
-rw-r--r--examples/corelib/threads/mandelbrot/CMakeLists.txt28
-rw-r--r--examples/corelib/threads/queuedcustomtype/CMakeLists.txt29
-rw-r--r--examples/corelib/threads/semaphores/CMakeLists.txt26
-rw-r--r--examples/corelib/threads/waitconditions/CMakeLists.txt26
-rw-r--r--examples/corelib/tools/CMakeLists.txt5
-rw-r--r--examples/corelib/tools/contiguouscache/CMakeLists.txt27
-rw-r--r--examples/corelib/tools/customtype/CMakeLists.txt27
-rw-r--r--examples/corelib/tools/customtypesending/CMakeLists.txt28
-rw-r--r--examples/dbus/CMakeLists.txt13
-rw-r--r--examples/dbus/chat/CMakeLists.txt44
-rw-r--r--examples/dbus/complexpingpong/CMakeLists.txt27
-rw-r--r--examples/dbus/listnames/CMakeLists.txt27
-rw-r--r--examples/dbus/pingpong/CMakeLists.txt28
-rw-r--r--examples/dbus/remotecontrolledcar/CMakeLists.txt4
-rw-r--r--examples/dbus/remotecontrolledcar/car/CMakeLists.txt39
-rw-r--r--examples/dbus/remotecontrolledcar/controller/CMakeLists.txt37
-rw-r--r--examples/embedded/CMakeLists.txt8
-rw-r--r--examples/embedded/digiflip/CMakeLists.txt26
-rw-r--r--examples/embedded/flickable/CMakeLists.txt27
-rw-r--r--examples/embedded/flightinfo/CMakeLists.txt30
-rw-r--r--examples/embedded/lightmaps/CMakeLists.txt31
-rw-r--r--examples/embedded/raycasting/CMakeLists.txt27
-rw-r--r--examples/embedded/styleexample/CMakeLists.txt28
-rw-r--r--examples/gui/CMakeLists.txt8
-rw-r--r--examples/gui/analogclock/CMakeLists.txt33
-rw-r--r--examples/gui/openglwindow/CMakeLists.txt32
-rw-r--r--examples/gui/rasterwindow/CMakeLists.txt32
-rw-r--r--examples/network/CMakeLists.txt45
-rw-r--r--examples/network/bearermonitor/CMakeLists.txt37
-rw-r--r--examples/network/blockingfortuneclient/CMakeLists.txt31
-rw-r--r--examples/network/broadcastreceiver/CMakeLists.txt30
-rw-r--r--examples/network/broadcastsender/CMakeLists.txt30
-rw-r--r--examples/network/dnslookup/CMakeLists.txt29
-rw-r--r--examples/network/download/CMakeLists.txt29
-rw-r--r--examples/network/downloadmanager/CMakeLists.txt31
-rw-r--r--examples/network/fortuneclient/CMakeLists.txt30
-rw-r--r--examples/network/fortuneserver/CMakeLists.txt30
-rw-r--r--examples/network/googlesuggest/CMakeLists.txt31
-rw-r--r--examples/network/http/CMakeLists.txt31
-rw-r--r--examples/network/loopback/CMakeLists.txt30
-rw-r--r--examples/network/multicastreceiver/CMakeLists.txt30
-rw-r--r--examples/network/multicastsender/CMakeLists.txt30
-rw-r--r--examples/network/multistreamclient/CMakeLists.txt34
-rw-r--r--examples/network/multistreamserver/CMakeLists.txt34
-rw-r--r--examples/network/network-chat/CMakeLists.txt34
-rw-r--r--examples/network/securesocketclient/CMakeLists.txt33
-rw-r--r--examples/network/secureudpclient/CMakeLists.txt32
-rw-r--r--examples/network/secureudpserver/CMakeLists.txt32
-rw-r--r--examples/network/threadedfortuneserver/CMakeLists.txt32
-rw-r--r--examples/network/torrent/.prev_CMakeLists.txt41
-rw-r--r--examples/network/torrent/CMakeLists.txt43
-rw-r--r--examples/qpa/CMakeLists.txt4
-rw-r--r--examples/qpa/qrasterwindow/CMakeLists.txt25
-rw-r--r--examples/qpa/windows/CMakeLists.txt34
-rw-r--r--examples/qtconcurrent/CMakeLists.txt9
-rw-r--r--examples/qtconcurrent/imagescaling/CMakeLists.txt30
-rw-r--r--examples/qtconcurrent/map/.prev_CMakeLists.txt26
-rw-r--r--examples/qtconcurrent/map/CMakeLists.txt28
-rw-r--r--examples/qtconcurrent/progressdialog/CMakeLists.txt29
-rw-r--r--examples/qtconcurrent/runfunction/CMakeLists.txt29
-rw-r--r--examples/qtconcurrent/wordcount/CMakeLists.txt29
-rw-r--r--examples/qtestlib/CMakeLists.txt7
-rw-r--r--examples/qtestlib/tutorial1/CMakeLists.txt28
-rw-r--r--examples/qtestlib/tutorial2/CMakeLists.txt28
-rw-r--r--examples/qtestlib/tutorial3/CMakeLists.txt28
-rw-r--r--examples/qtestlib/tutorial4/CMakeLists.txt28
-rw-r--r--examples/qtestlib/tutorial5/CMakeLists.txt28
-rw-r--r--examples/sql/CMakeLists.txt17
-rw-r--r--examples/sql/books/CMakeLists.txt36
-rw-r--r--examples/sql/cachedtable/CMakeLists.txt31
-rw-r--r--examples/sql/drilldown/CMakeLists.txt34
-rw-r--r--examples/sql/masterdetail/CMakeLists.txt35
-rw-r--r--examples/sql/querymodel/CMakeLists.txt32
-rw-r--r--examples/sql/relationaltablemodel/CMakeLists.txt30
-rw-r--r--examples/sql/sqlbrowser/CMakeLists.txt33
-rw-r--r--examples/sql/sqlwidgetmapper/CMakeLists.txt30
-rw-r--r--examples/sql/tablemodel/CMakeLists.txt30
-rw-r--r--examples/widgets/CMakeLists.txt33
-rw-r--r--examples/widgets/animation/CMakeLists.txt8
-rw-r--r--examples/widgets/animation/animatedtiles/CMakeLists.txt28
-rw-r--r--examples/widgets/animation/easing/CMakeLists.txt31
-rw-r--r--examples/widgets/animation/moveblocks/CMakeLists.txt27
-rw-r--r--examples/widgets/animation/states/CMakeLists.txt28
-rw-r--r--examples/widgets/animation/stickman/CMakeLists.txt33
-rw-r--r--examples/widgets/animation/sub-attaq/CMakeLists.txt44
-rw-r--r--examples/widgets/desktop/CMakeLists.txt4
-rw-r--r--examples/widgets/desktop/screenshot/CMakeLists.txt28
-rw-r--r--examples/widgets/desktop/systray/CMakeLists.txt29
-rw-r--r--examples/widgets/dialogs/CMakeLists.txt14
-rw-r--r--examples/widgets/dialogs/classwizard/CMakeLists.txt28
-rw-r--r--examples/widgets/dialogs/extension/CMakeLists.txt28
-rw-r--r--examples/widgets/dialogs/findfiles/CMakeLists.txt28
-rw-r--r--examples/widgets/dialogs/licensewizard/CMakeLists.txt30
-rw-r--r--examples/widgets/dialogs/standarddialogs/CMakeLists.txt28
-rw-r--r--examples/widgets/dialogs/tabdialog/CMakeLists.txt28
-rw-r--r--examples/widgets/dialogs/trivialwizard/CMakeLists.txt27
-rw-r--r--examples/widgets/draganddrop/CMakeLists.txt7
-rw-r--r--examples/widgets/draganddrop/draggableicons/CMakeLists.txt29
-rw-r--r--examples/widgets/draganddrop/draggabletext/CMakeLists.txt29
-rw-r--r--examples/widgets/draganddrop/dropsite/CMakeLists.txt29
-rw-r--r--examples/widgets/draganddrop/fridgemagnets/CMakeLists.txt30
-rw-r--r--examples/widgets/draganddrop/puzzle/CMakeLists.txt31
-rw-r--r--examples/widgets/effects/CMakeLists.txt4
-rw-r--r--examples/widgets/effects/blurpicker/CMakeLists.txt29
-rw-r--r--examples/widgets/effects/fademessage/CMakeLists.txt28
-rw-r--r--examples/widgets/gestures/CMakeLists.txt3
-rw-r--r--examples/widgets/gestures/imagegestures/CMakeLists.txt29
-rw-r--r--examples/widgets/graphicsview/CMakeLists.txt20
-rw-r--r--examples/widgets/graphicsview/anchorlayout/CMakeLists.txt27
-rw-r--r--examples/widgets/graphicsview/basicgraphicslayouts/CMakeLists.txt30
-rw-r--r--examples/widgets/graphicsview/boxes/CMakeLists.txt39
-rw-r--r--examples/widgets/graphicsview/chip/CMakeLists.txt39
-rw-r--r--examples/widgets/graphicsview/collidingmice/CMakeLists.txt29
-rw-r--r--examples/widgets/graphicsview/diagramscene/CMakeLists.txt32
-rw-r--r--examples/widgets/graphicsview/dragdroprobot/CMakeLists.txt29
-rw-r--r--examples/widgets/graphicsview/elasticnodes/CMakeLists.txt30
-rw-r--r--examples/widgets/graphicsview/embeddeddialogs/CMakeLists.txt30
-rw-r--r--examples/widgets/graphicsview/flowlayout/CMakeLists.txt29
-rw-r--r--examples/widgets/graphicsview/padnavigator/.prev_CMakeLists.txt45
-rw-r--r--examples/widgets/graphicsview/padnavigator/CMakeLists.txt38
-rw-r--r--examples/widgets/graphicsview/simpleanchorlayout/CMakeLists.txt27
-rw-r--r--examples/widgets/graphicsview/weatheranchorlayout/CMakeLists.txt28
-rw-r--r--examples/widgets/itemviews/CMakeLists.txt27
-rw-r--r--examples/widgets/itemviews/addressbook/CMakeLists.txt32
-rw-r--r--examples/widgets/itemviews/basicsortfiltermodel/CMakeLists.txt28
-rw-r--r--examples/widgets/itemviews/chart/CMakeLists.txt30
-rw-r--r--examples/widgets/itemviews/coloreditorfactory/CMakeLists.txt29
-rw-r--r--examples/widgets/itemviews/combowidgetmapper/CMakeLists.txt28
-rw-r--r--examples/widgets/itemviews/customsortfiltermodel/CMakeLists.txt31
-rw-r--r--examples/widgets/itemviews/dirview/CMakeLists.txt27
-rw-r--r--examples/widgets/itemviews/editabletreemodel/CMakeLists.txt31
-rw-r--r--examples/widgets/itemviews/fetchmore/CMakeLists.txt29
-rw-r--r--examples/widgets/itemviews/flattreeview/CMakeLists.txt27
-rw-r--r--examples/widgets/itemviews/frozencolumn/CMakeLists.txt29
-rw-r--r--examples/widgets/itemviews/interview/CMakeLists.txt29
-rw-r--r--examples/widgets/itemviews/pixelator/CMakeLists.txt37
-rw-r--r--examples/widgets/itemviews/puzzle/CMakeLists.txt31
-rw-r--r--examples/widgets/itemviews/simpledommodel/CMakeLists.txt32
-rw-r--r--examples/widgets/itemviews/simpletreemodel/CMakeLists.txt30
-rw-r--r--examples/widgets/itemviews/simplewidgetmapper/CMakeLists.txt28
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt28
-rw-r--r--examples/widgets/itemviews/spreadsheet/CMakeLists.txt37
-rw-r--r--examples/widgets/itemviews/stardelegate/CMakeLists.txt30
-rw-r--r--examples/widgets/itemviews/storageview/CMakeLists.txt32
-rw-r--r--examples/widgets/layouts/CMakeLists.txt6
-rw-r--r--examples/widgets/layouts/basiclayouts/CMakeLists.txt28
-rw-r--r--examples/widgets/layouts/borderlayout/CMakeLists.txt29
-rw-r--r--examples/widgets/layouts/dynamiclayouts/CMakeLists.txt28
-rw-r--r--examples/widgets/layouts/flowlayout/CMakeLists.txt29
-rw-r--r--examples/widgets/mac/CMakeLists.txt7
-rw-r--r--examples/widgets/mac/qmaccocoaviewcontainer/CMakeLists.txt28
-rw-r--r--examples/widgets/mac/qmacnativewidget/CMakeLists.txt28
-rw-r--r--examples/widgets/mainwindows/CMakeLists.txt8
-rw-r--r--examples/widgets/mainwindows/application/CMakeLists.txt29
-rw-r--r--examples/widgets/mainwindows/dockwidgets/CMakeLists.txt35
-rw-r--r--examples/widgets/mainwindows/mainwindow/CMakeLists.txt30
-rw-r--r--examples/widgets/mainwindows/mdi/CMakeLists.txt30
-rw-r--r--examples/widgets/mainwindows/menus/CMakeLists.txt28
-rw-r--r--examples/widgets/mainwindows/sdi/CMakeLists.txt29
-rw-r--r--examples/widgets/painting/CMakeLists.txt14
-rw-r--r--examples/widgets/painting/affine/CMakeLists.txt34
-rw-r--r--examples/widgets/painting/basicdrawing/CMakeLists.txt30
-rw-r--r--examples/widgets/painting/composition/CMakeLists.txt33
-rw-r--r--examples/widgets/painting/concentriccircles/CMakeLists.txt29
-rw-r--r--examples/widgets/painting/deform/CMakeLists.txt34
-rw-r--r--examples/widgets/painting/fontsampler/CMakeLists.txt29
-rw-r--r--examples/widgets/painting/gradients/CMakeLists.txt33
-rw-r--r--examples/widgets/painting/imagecomposition/CMakeLists.txt29
-rw-r--r--examples/widgets/painting/painterpaths/CMakeLists.txt29
-rw-r--r--examples/widgets/painting/pathstroke/CMakeLists.txt35
-rw-r--r--examples/widgets/painting/shared/CMakeLists.txt27
-rw-r--r--examples/widgets/painting/transformations/CMakeLists.txt29
-rw-r--r--examples/widgets/richtext/CMakeLists.txt6
-rw-r--r--examples/widgets/richtext/calendar/CMakeLists.txt28
-rw-r--r--examples/widgets/richtext/orderform/CMakeLists.txt33
-rw-r--r--examples/widgets/richtext/syntaxhighlighter/CMakeLists.txt29
-rw-r--r--examples/widgets/richtext/textedit/CMakeLists.txt34
-rw-r--r--examples/widgets/scroller/CMakeLists.txt3
-rw-r--r--examples/widgets/scroller/graphicsview/CMakeLists.txt27
-rw-r--r--examples/widgets/statemachine/CMakeLists.txt11
-rw-r--r--examples/widgets/statemachine/eventtransitions/CMakeLists.txt27
-rw-r--r--examples/widgets/statemachine/factorial/CMakeLists.txt27
-rw-r--r--examples/widgets/statemachine/pingpong/CMakeLists.txt27
-rw-r--r--examples/widgets/statemachine/rogue/CMakeLists.txt29
-rw-r--r--examples/widgets/statemachine/trafficlight/CMakeLists.txt27
-rw-r--r--examples/widgets/statemachine/twowaybutton/CMakeLists.txt27
-rw-r--r--examples/widgets/tools/CMakeLists.txt22
-rw-r--r--examples/widgets/tools/codecs/CMakeLists.txt31
-rw-r--r--examples/widgets/tools/completer/CMakeLists.txt30
-rw-r--r--examples/widgets/tools/customcompleter/CMakeLists.txt30
-rw-r--r--examples/widgets/tools/echoplugin/CMakeLists.txt4
-rw-r--r--examples/widgets/tools/echoplugin/echowindow/CMakeLists.txt29
-rw-r--r--examples/widgets/tools/echoplugin/plugin/CMakeLists.txt10
-rw-r--r--examples/widgets/tools/i18n/CMakeLists.txt30
-rw-r--r--examples/widgets/tools/plugandpaint/CMakeLists.txt4
-rw-r--r--examples/widgets/tools/plugandpaint/app/CMakeLists.txt34
-rw-r--r--examples/widgets/tools/plugandpaint/plugins/CMakeLists.txt4
-rw-r--r--examples/widgets/tools/plugandpaint/plugins/basictools/CMakeLists.txt13
-rw-r--r--examples/widgets/tools/plugandpaint/plugins/extrafilters/CMakeLists.txt9
-rw-r--r--examples/widgets/tools/regexp/CMakeLists.txt28
-rw-r--r--examples/widgets/tools/regularexpression/CMakeLists.txt29
-rw-r--r--examples/widgets/tools/settingseditor/CMakeLists.txt31
-rw-r--r--examples/widgets/tools/styleplugin/CMakeLists.txt19
-rw-r--r--examples/widgets/tools/styleplugin/plugin/CMakeLists.txt9
-rw-r--r--examples/widgets/tools/styleplugin/stylewindow/CMakeLists.txt28
-rw-r--r--examples/widgets/tools/treemodelcompleter/CMakeLists.txt29
-rw-r--r--examples/widgets/tools/undo/CMakeLists.txt31
-rw-r--r--examples/widgets/tools/undoframework/CMakeLists.txt32
-rw-r--r--examples/widgets/touch/CMakeLists.txt6
-rw-r--r--examples/widgets/touch/dials/CMakeLists.txt28
-rw-r--r--examples/widgets/touch/fingerpaint/CMakeLists.txt35
-rw-r--r--examples/widgets/touch/knobs/CMakeLists.txt28
-rw-r--r--examples/widgets/touch/pinchzoom/CMakeLists.txt30
-rw-r--r--examples/widgets/tutorials/CMakeLists.txt7
-rw-r--r--examples/widgets/tutorials/addressbook/CMakeLists.txt9
-rw-r--r--examples/widgets/tutorials/addressbook/part1/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/addressbook/part2/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/addressbook/part3/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/addressbook/part4/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/addressbook/part5/CMakeLists.txt29
-rw-r--r--examples/widgets/tutorials/addressbook/part6/CMakeLists.txt29
-rw-r--r--examples/widgets/tutorials/addressbook/part7/CMakeLists.txt29
-rw-r--r--examples/widgets/tutorials/gettingStarted/CMakeLists.txt2
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/CMakeLists.txt7
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/part1/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/part2/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/part3/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/part4/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/gettingStarted/gsQt/part5/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/modelview/1_readonly/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/2_formatting/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/3_changingmodel/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/4_headers/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/5_edit/CMakeLists.txt29
-rw-r--r--examples/widgets/tutorials/modelview/6_treeview/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/7_selections/CMakeLists.txt28
-rw-r--r--examples/widgets/tutorials/modelview/CMakeLists.txt9
-rw-r--r--examples/widgets/tutorials/notepad/.prev_CMakeLists.txt49
-rw-r--r--examples/widgets/tutorials/notepad/CMakeLists.txt36
-rw-r--r--examples/widgets/tutorials/widgets/CMakeLists.txt6
-rw-r--r--examples/widgets/tutorials/widgets/childwidget/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/widgets/nestedlayouts/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/widgets/toplevel/CMakeLists.txt27
-rw-r--r--examples/widgets/tutorials/widgets/windowlayout/CMakeLists.txt27
-rw-r--r--examples/widgets/widgets/CMakeLists.txt27
-rw-r--r--examples/widgets/widgets/analogclock/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/calculator/CMakeLists.txt29
-rw-r--r--examples/widgets/widgets/calendarwidget/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/charactermap/CMakeLists.txt29
-rw-r--r--examples/widgets/widgets/codeeditor/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/digitalclock/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/elidedlabel/CMakeLists.txt33
-rw-r--r--examples/widgets/widgets/groupbox/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/icons/CMakeLists.txt33
-rw-r--r--examples/widgets/widgets/imageviewer/CMakeLists.txt34
-rw-r--r--examples/widgets/widgets/lineedits/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/mousebuttons/CMakeLists.txt30
-rw-r--r--examples/widgets/widgets/movie/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/scribble/CMakeLists.txt35
-rw-r--r--examples/widgets/widgets/shapedclock/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/sliders/CMakeLists.txt29
-rw-r--r--examples/widgets/widgets/spinboxes/CMakeLists.txt28
-rw-r--r--examples/widgets/widgets/styles/CMakeLists.txt30
-rw-r--r--examples/widgets/widgets/stylesheet/CMakeLists.txt30
-rw-r--r--examples/widgets/widgets/tablet/CMakeLists.txt31
-rw-r--r--examples/widgets/widgets/tetrix/CMakeLists.txt30
-rw-r--r--examples/widgets/widgets/tooltips/CMakeLists.txt30
-rw-r--r--examples/widgets/widgets/validators/CMakeLists.txt31
-rw-r--r--examples/widgets/widgets/wiggly/CMakeLists.txt29
-rw-r--r--examples/widgets/widgets/windowflags/CMakeLists.txt29
-rw-r--r--examples/widgets/windowcontainer/CMakeLists.txt31
-rw-r--r--examples/xml/CMakeLists.txt14
-rw-r--r--examples/xml/dombookmarks/CMakeLists.txt30
-rw-r--r--examples/xml/htmlinfo/CMakeLists.txt26
-rw-r--r--examples/xml/rsslisting/CMakeLists.txt31
-rw-r--r--examples/xml/saxbookmarks/CMakeLists.txt31
-rw-r--r--examples/xml/streambookmarks/CMakeLists.txt31
-rw-r--r--examples/xml/xmlstreamlint/CMakeLists.txt27
-rw-r--r--qmake/.prev_CMakeLists.txt178
-rw-r--r--qmake/CMakeLists.txt210
-rw-r--r--src/3rdparty/CMakeLists.txt9
-rw-r--r--src/3rdparty/double-conversion/CMakeLists.txt21
-rw-r--r--src/3rdparty/gradle/CMakeLists.txt20
-rw-r--r--src/3rdparty/harfbuzz/CMakeLists.txt14
-rw-r--r--src/3rdparty/tinycbor/CMakeLists.txt6
-rw-r--r--src/CMakeLists.txt54
-rw-r--r--src/android/CMakeLists.txt13
-rw-r--r--src/android/jar/CMakeLists.txt32
-rw-r--r--src/android/java/CMakeLists.txt11
-rw-r--r--src/android/templates/CMakeLists.txt18
-rw-r--r--src/concurrent/CMakeLists.txt49
-rw-r--r--src/corelib/.prev_CMakeLists.txt999
-rw-r--r--src/corelib/CMakeLists.txt1114
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in173
-rw-r--r--src/corelib/Qt6CTestMacros.cmake (renamed from src/corelib/Qt5CTestMacros.cmake)0
-rw-r--r--src/corelib/Qt6Config.cmake.in (renamed from src/corelib/Qt5Config.cmake.in)0
-rw-r--r--src/corelib/Qt6CoreConfigExtras.cmake.in52
-rw-r--r--src/corelib/Qt6CoreConfigExtrasMkspecDir.cmake.in (renamed from src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in)0
-rw-r--r--src/corelib/Qt6CoreConfigExtrasMkspecDirForInstall.cmake.in (renamed from src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in)0
-rw-r--r--src/corelib/Qt6CoreMacros.cmake (renamed from src/corelib/Qt5CoreMacros.cmake)66
-rw-r--r--src/corelib/Qt6ModuleLocation.cmake.in (renamed from src/corelib/Qt5ModuleLocation.cmake.in)0
-rw-r--r--src/corelib/Qt6ModuleLocationForInstall.cmake.in (renamed from src/corelib/Qt5ModuleLocationForInstall.cmake.in)0
-rw-r--r--src/corelib/configure.cmake891
-rw-r--r--src/corelib/configure.json27
-rw-r--r--src/corelib/global/qconfig.cpp.in29
-rw-r--r--src/corelib/kernel/qvariant.cpp4
-rw-r--r--src/corelib/mimetypes/mimetypes_resources.cmake21
-rw-r--r--src/dbus/.prev_CMakeLists.txt75
-rw-r--r--src/dbus/CMakeLists.txt78
-rw-r--r--src/dbus/Qt5DBusConfigExtras.cmake.in33
-rw-r--r--src/dbus/Qt6DBusMacros.cmake (renamed from src/dbus/Qt5DBusMacros.cmake)8
-rw-r--r--src/gui/.prev_CMakeLists.txt616
-rw-r--r--src/gui/CMakeLists.txt748
-rw-r--r--src/gui/Qt5GuiConfigExtras.cmake.in193
-rw-r--r--src/gui/configure.cmake1053
-rw-r--r--src/gui/configure.json19
-rw-r--r--src/network/.prev_CMakeLists.txt449
-rw-r--r--src/network/CMakeLists.txt453
-rw-r--r--src/network/configure.cmake383
-rw-r--r--src/network/configure.json18
-rw-r--r--src/network/socket/qhttpsocketengine.cpp2
-rw-r--r--src/network/socket/qnativesocketengine.cpp2
-rw-r--r--src/network/socket/qsocks5socketengine.cpp2
-rw-r--r--src/opengl/.prev_CMakeLists.txt66
-rw-r--r--src/opengl/CMakeLists.txt66
-rw-r--r--src/platformheaders/.prev_CMakeLists.txt2
-rw-r--r--src/platformheaders/CMakeLists.txt15
-rw-r--r--src/platformheaders/fake.cpp0
-rw-r--r--src/platformsupport/CMakeLists.txt56
-rw-r--r--src/platformsupport/accessibility/CMakeLists.txt25
-rw-r--r--src/platformsupport/clipboard/CMakeLists.txt33
-rw-r--r--src/platformsupport/devicediscovery/CMakeLists.txt44
-rw-r--r--src/platformsupport/edid/CMakeLists.txt24
-rw-r--r--src/platformsupport/eglconvenience/.prev_CMakeLists.txt54
-rw-r--r--src/platformsupport/eglconvenience/CMakeLists.txt42
-rw-r--r--src/platformsupport/eventdispatchers/.prev_CMakeLists.txt46
-rw-r--r--src/platformsupport/eventdispatchers/CMakeLists.txt48
-rw-r--r--src/platformsupport/fbconvenience/CMakeLists.txt30
-rw-r--r--src/platformsupport/fontdatabases/.prev_CMakeLists.txt131
-rw-r--r--src/platformsupport/fontdatabases/CMakeLists.txt134
-rw-r--r--src/platformsupport/fontdatabases/fake.cpp0
-rw-r--r--src/platformsupport/glxconvenience/.prev_CMakeLists.txt26
-rw-r--r--src/platformsupport/glxconvenience/CMakeLists.txt28
-rw-r--r--src/platformsupport/graphics/CMakeLists.txt25
-rw-r--r--src/platformsupport/input/.prev_CMakeLists.txt145
-rw-r--r--src/platformsupport/input/CMakeLists.txt114
-rw-r--r--src/platformsupport/input/xkbcommon/CMakeLists.txt36
-rw-r--r--src/platformsupport/kmsconvenience/.prev_CMakeLists.txt26
-rw-r--r--src/platformsupport/kmsconvenience/CMakeLists.txt28
-rw-r--r--src/platformsupport/linuxaccessibility/.prev_CMakeLists.txt46
-rw-r--r--src/platformsupport/linuxaccessibility/CMakeLists.txt48
-rw-r--r--src/platformsupport/platformcompositor/CMakeLists.txt26
-rw-r--r--src/platformsupport/services/CMakeLists.txt34
-rw-r--r--src/platformsupport/themes/CMakeLists.txt59
-rw-r--r--src/platformsupport/vkconvenience/.prev_CMakeLists.txt27
-rw-r--r--src/platformsupport/vkconvenience/CMakeLists.txt29
-rw-r--r--src/platformsupport/windowsuiautomation/CMakeLists.txt33
-rw-r--r--src/plugins/CMakeLists.txt32
-rw-r--r--src/plugins/bearer/CMakeLists.txt11
-rw-r--r--src/plugins/bearer/android/CMakeLists.txt5
-rw-r--r--src/plugins/bearer/android/src/CMakeLists.txt27
-rw-r--r--src/plugins/bearer/connman/CMakeLists.txt27
-rw-r--r--src/plugins/bearer/generic/CMakeLists.txt35
-rw-r--r--src/plugins/bearer/networkmanager/CMakeLists.txt27
-rw-r--r--src/plugins/generic/CMakeLists.txt26
-rw-r--r--src/plugins/generic/evdevkeyboard/CMakeLists.txt25
-rw-r--r--src/plugins/generic/evdevmouse/CMakeLists.txt25
-rw-r--r--src/plugins/generic/evdevtablet/CMakeLists.txt25
-rw-r--r--src/plugins/generic/evdevtouch/CMakeLists.txt25
-rw-r--r--src/plugins/generic/libinput/CMakeLists.txt25
-rw-r--r--src/plugins/generic/tslib/CMakeLists.txt28
-rw-r--r--src/plugins/generic/tuiotouch/CMakeLists.txt32
-rw-r--r--src/plugins/imageformats/CMakeLists.txt14
-rw-r--r--src/plugins/imageformats/gif/CMakeLists.txt22
-rw-r--r--src/plugins/imageformats/ico/CMakeLists.txt23
-rw-r--r--src/plugins/imageformats/jpeg/CMakeLists.txt27
-rw-r--r--src/plugins/platforminputcontexts/CMakeLists.txt10
-rw-r--r--src/plugins/platforminputcontexts/compose/CMakeLists.txt29
-rw-r--r--src/plugins/platforminputcontexts/ibus/CMakeLists.txt29
-rw-r--r--src/plugins/platforms/CMakeLists.txt72
-rw-r--r--src/plugins/platforms/android/CMakeLists.txt101
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.h4
-rw-r--r--src/plugins/platforms/cocoa/.prev_CMakeLists.txt145
-rw-r--r--src/plugins/platforms/cocoa/CMakeLists.txt149
-rw-r--r--src/plugins/platforms/eglfs/.prev_CMakeLists.txt125
-rw-r--r--src/plugins/platforms/eglfs/CMakeLists.txt112
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/CMakeLists.txt49
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_emu/CMakeLists.txt34
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/CMakeLists.txt45
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt42
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/CMakeLists.txt36
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/CMakeLists.txt34
-rw-r--r--src/plugins/platforms/linuxfb/CMakeLists.txt59
-rw-r--r--src/plugins/platforms/minimal/CMakeLists.txt44
-rw-r--r--src/plugins/platforms/minimalegl/CMakeLists.txt48
-rw-r--r--src/plugins/platforms/offscreen/CMakeLists.txt49
-rw-r--r--src/plugins/platforms/vnc/CMakeLists.txt55
-rw-r--r--src/plugins/platforms/windows/.prev_CMakeLists.txt228
-rw-r--r--src/plugins/platforms/windows/CMakeLists.txt221
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp2
-rw-r--r--src/plugins/platforms/xcb/.prev_CMakeLists.txt264
-rw-r--r--src/plugins/platforms/xcb/CMakeLists.txt224
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/CMakeLists.txt10
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/CMakeLists.txt37
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/CMakeLists.txt49
-rw-r--r--src/plugins/platformthemes/CMakeLists.txt10
-rw-r--r--src/plugins/platformthemes/gtk3/CMakeLists.txt29
-rw-r--r--src/plugins/platformthemes/xdgdesktopportal/CMakeLists.txt22
-rw-r--r--src/plugins/printsupport/CMakeLists.txt11
-rw-r--r--src/plugins/printsupport/cups/CMakeLists.txt28
-rw-r--r--src/plugins/sqldrivers/CMakeLists.txt51
-rw-r--r--src/plugins/sqldrivers/configure.cmake55
-rw-r--r--src/plugins/sqldrivers/configure.json4
-rw-r--r--src/plugins/sqldrivers/odbc/CMakeLists.txt33
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc.cpp2
-rw-r--r--src/plugins/sqldrivers/psql/CMakeLists.txt28
-rw-r--r--src/plugins/sqldrivers/sqlite/CMakeLists.txt33
-rw-r--r--src/plugins/styles/CMakeLists.txt11
-rw-r--r--src/plugins/styles/mac/CMakeLists.txt25
-rw-r--r--src/printsupport/CMakeLists.txt157
-rw-r--r--src/printsupport/configure.cmake58
-rw-r--r--src/sql/CMakeLists.txt56
-rw-r--r--src/sql/configure.cmake21
-rw-r--r--src/testlib/.prev_CMakeLists.txt148
-rw-r--r--src/testlib/CMakeLists.txt134
-rw-r--r--src/testlib/Qt5TestConfigExtras.cmake.in5
-rw-r--r--src/testlib/configure.cmake31
-rw-r--r--src/testlib/qtestcase.cpp22
-rw-r--r--src/testlib/qtestcase.h11
-rw-r--r--src/tools/CMakeLists.txt12
-rw-r--r--src/tools/androiddeployqt/CMakeLists.txt27
-rw-r--r--src/tools/bootstrap/.prev_CMakeLists.txt207
-rw-r--r--src/tools/bootstrap/CMakeLists.txt195
-rw-r--r--src/tools/moc/CMakeLists.txt33
-rw-r--r--src/tools/qdbuscpp2xml/CMakeLists.txt41
-rw-r--r--src/tools/qdbusxml2cpp/CMakeLists.txt30
-rw-r--r--src/tools/qlalr/CMakeLists.txt24
-rw-r--r--src/tools/qvkgen/CMakeLists.txt14
-rw-r--r--src/tools/rcc/CMakeLists.txt23
-rw-r--r--src/tools/tracegen/CMakeLists.txt22
-rw-r--r--src/tools/tracegen/provider.h1
-rw-r--r--src/tools/uic/CMakeLists.txt48
-rw-r--r--src/widgets/.prev_CMakeLists.txt800
-rw-r--r--src/widgets/CMakeLists.txt804
-rw-r--r--src/widgets/Qt5WidgetsConfigExtras.cmake.in19
-rw-r--r--src/widgets/Qt6WidgetsMacros.cmake (renamed from src/widgets/Qt5WidgetsMacros.cmake)2
-rw-r--r--src/widgets/configure.cmake568
-rw-r--r--src/winmain/.prev_CMakeLists.txt48
-rw-r--r--src/winmain/CMakeLists.txt26
-rw-r--r--src/xml/CMakeLists.txt35
-rw-r--r--src/xml/configure.cmake22
-rw-r--r--tests/CMakeLists.txt15
-rw-r--r--tests/auto/CMakeLists.txt55
-rw-r--r--tests/auto/concurrent/CMakeLists.txt8
-rw-r--r--tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt16
-rw-r--r--tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt12
-rw-r--r--tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt19
-rw-r--r--tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt14
-rw-r--r--tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt18
-rw-r--r--tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/.prev_CMakeLists.txt18
-rw-r--r--tests/auto/corelib/CMakeLists.txt18
-rw-r--r--tests/auto/corelib/animation/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/codecs/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/codecs/qtextcodec/CMakeLists.txt5
-rw-r--r--tests/auto/corelib/codecs/qtextcodec/echo/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/codecs/utf8/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/global/q_func_info/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qflags/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qfloat16/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qgetputenv/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qglobal/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qglobalstatic/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/qhooks/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qlogging/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/global/qlogging/test/test.pro1
-rw-r--r--tests/auto/corelib/global/qlogging/tst_qlogging.cpp4
-rw-r--r--tests/auto/corelib/global/qnumeric/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qrand/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/qtendian/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/io/.prev_CMakeLists.txt56
-rw-r--r--tests/auto/corelib/io/CMakeLists.txt56
-rw-r--r--tests/auto/corelib/io/largefile/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt22
-rw-r--r--tests/auto/corelib/io/qbuffer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qdataurl/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qdebug/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qdir/CMakeLists.txt91
-rw-r--r--tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qdiriterator/CMakeLists.txt35
-rw-r--r--tests/auto/corelib/io/qfile/.prev_CMakeLists.txt90
-rw-r--r--tests/auto/corelib/io/qfile/CMakeLists.txt90
-rw-r--r--tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qfileinfo/CMakeLists.txt40
-rw-r--r--tests/auto/corelib/io/qfilesystementry/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qiodevice/CMakeLists.txt32
-rw-r--r--tests/auto/corelib/io/qipaddress/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qlockfile/CMakeLists.txt24
-rw-r--r--tests/auto/corelib/io/qlockfile/qlockfiletesthelper/.prev_CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/io/qloggingcategory/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/io/qloggingregistry/CMakeLists.txt32
-rw-r--r--tests/auto/corelib/io/qnodebug/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qsavefile/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/io/qsettings/CMakeLists.txt48
-rw-r--r--tests/auto/corelib/io/qstandardpaths/CMakeLists.txt27
-rw-r--r--tests/auto/corelib/io/qstorageinfo/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qtemporarydir/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt39
-rw-r--r--tests/auto/corelib/io/qurl/CMakeLists.txt21
-rw-r--r--tests/auto/corelib/io/qurlinternal/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qurlquery/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/itemmodels/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/kernel/.prev_CMakeLists.txt40
-rw-r--r--tests/auto/corelib/kernel/CMakeLists.txt40
-rw-r--r--tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qeventloop/CMakeLists.txt30
-rw-r--r--tests/auto/corelib/kernel/qmath/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt21
-rw-r--r--tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qmetatype/CMakeLists.txt41
-rw-r--r--tests/auto/corelib/kernel/qmimedata/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/kernel/qobject/CMakeLists.txt29
-rw-r--r--tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/kernel/qpointer/CMakeLists.txt21
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/CMakeLists.txt30
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/producerconsumer/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt36
-rw-r--r--tests/auto/corelib/kernel/qsystemsemaphore/CMakeLists.txt20
-rw-r--r--tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/kernel/qtimer/CMakeLists.txt21
-rw-r--r--tests/auto/corelib/kernel/qtranslator/CMakeLists.txt33
-rw-r--r--tests/auto/corelib/kernel/qvariant/CMakeLists.txt35
-rw-r--r--tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/mimetypes/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/.prev_CMakeLists.txt78
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt73
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/.prev_CMakeLists.txt78
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt72
-rw-r--r--tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/serialization/CMakeLists.txt5
-rw-r--r--tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt5
-rw-r--r--tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/statemachine/CMakeLists.txt2
-rw-r--r--tests/auto/corelib/statemachine/qstate/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/CMakeLists.txt22
-rw-r--r--tests/auto/corelib/text/qbytearraylist/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qregexp/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qregularexpression/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringiterator/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringlist/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringmatcher/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/text/qstringref/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/thread/qatomicint/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qfuture/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qreadlocker/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qresultstore/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qsemaphore/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qthreadpool/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/thread/qwritelocker/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/time/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/time/qdate/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/time/qtime/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/CMakeLists.txt50
-rw-r--r--tests/auto/corelib/tools/qalgorithms/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qarraydata/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/tools/qbitarray/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qcache/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt20
-rw-r--r--tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qhash/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qlinkedlist/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/qlist/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qmakearray/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qmap/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qmargins/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qpair/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qpoint/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qpointf/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qqueue/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qrect/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qringbuffer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qscopeguard/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qset/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qsize/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qsizef/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qstl/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qtimeline/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt1
-rw-r--r--tests/auto/dbus/CMakeLists.txt29
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt16
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt21
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt16
-rw-r--r--tests/auto/dbus/qdbusconnection/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt14
-rw-r--r--tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt16
-rw-r--r--tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt15
-rw-r--r--tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.cpp73
-rw-r--r--tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt17
-rw-r--r--tests/auto/dbus/qdbuscontext/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusinterface/CMakeLists.txt41
-rw-r--r--tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt19
-rw-r--r--tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp2
-rw-r--r--tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusmarshall/CMakeLists.txt4
-rw-r--r--tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt35
-rw-r--r--tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusmetaobject/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusmetatype/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbuspendingcall/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbuspendingreply/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusreply/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusthreading/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbustype/CMakeLists.txt34
-rw-r--r--tests/auto/dbus/qdbusxmlparser/CMakeLists.txt14
-rw-r--r--tests/auto/gui/.prev_CMakeLists.txt19
-rw-r--r--tests/auto/gui/CMakeLists.txt19
-rw-r--r--tests/auto/gui/image/CMakeLists.txt15
-rw-r--r--tests/auto/gui/image/qimageiohandler/CMakeLists.txt1
-rw-r--r--tests/auto/gui/image/qpicture/CMakeLists.txt1
-rw-r--r--tests/auto/gui/itemmodels/CMakeLists.txt4
-rw-r--r--tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/CMakeLists.txt38
-rw-r--r--tests/auto/gui/kernel/qcursor/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qevent/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt2
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qguivariant/CMakeLists.txt2
-rw-r--r--tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qmouseevent/CMakeLists.txt1
-rw-r--r--tests/auto/gui/kernel/qpalette/CMakeLists.txt1
-rw-r--r--tests/auto/gui/math3d/CMakeLists.txt3
-rw-r--r--tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt5
-rw-r--r--tests/auto/gui/math3d/qquaternion/CMakeLists.txt1
-rw-r--r--tests/auto/gui/math3d/qvectornd/CMakeLists.txt1
-rw-r--r--tests/auto/gui/painting/CMakeLists.txt20
-rw-r--r--tests/auto/gui/painting/qpagesize/CMakeLists.txt1
-rw-r--r--tests/auto/gui/painting/qpaintengine/CMakeLists.txt1
-rw-r--r--tests/auto/gui/painting/qpainterpath/CMakeLists.txt1
-rw-r--r--tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt1
-rw-r--r--tests/auto/gui/painting/qpen/CMakeLists.txt1
-rw-r--r--tests/auto/gui/util/CMakeLists.txt13
-rw-r--r--tests/auto/gui/util/qdoublevalidator/CMakeLists.txt1
-rw-r--r--tests/auto/gui/util/qintvalidator/CMakeLists.txt1
-rw-r--r--tests/auto/gui/util/qregexpvalidator/CMakeLists.txt1
-rw-r--r--tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt1
-rw-r--r--tests/auto/network/CMakeLists.txt7
-rw-r--r--tests/auto/network/access/CMakeLists.txt21
-rw-r--r--tests/auto/network/access/hpack/CMakeLists.txt20
-rw-r--r--tests/auto/network/access/hsts/CMakeLists.txt20
-rw-r--r--tests/auto/network/access/http2/CMakeLists.txt25
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt26
-rw-r--r--tests/auto/network/access/qftp/CMakeLists.txt19
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt20
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt19
-rw-r--r--tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qnetworkcookie/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt23
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qnetworkreply/CMakeLists.txt7
-rw-r--r--tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt13
-rw-r--r--tests/auto/network/access/qnetworkreply/test/CMakeLists.txt61
-rw-r--r--tests/auto/network/access/qnetworkreply/test/test.pro2
-rw-r--r--tests/auto/network/access/qnetworkrequest/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/spdy/CMakeLists.txt25
-rw-r--r--tests/auto/network/bearer/CMakeLists.txt6
-rw-r--r--tests/auto/network/bearer/qnetworkconfiguration/CMakeLists.txt17
-rw-r--r--tests/auto/network/bearer/qnetworkconfigurationmanager/CMakeLists.txt17
-rw-r--r--tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/CMakeLists.txt17
-rw-r--r--tests/auto/network/bearer/qnetworksession/CMakeLists.txt7
-rw-r--r--tests/auto/network/bearer/qnetworksession/lackey/CMakeLists.txt16
-rw-r--r--tests/auto/network/bearer/qnetworksession/test/CMakeLists.txt34
-rw-r--r--tests/auto/network/kernel/CMakeLists.txt19
-rw-r--r--tests/auto/network/kernel/qauthenticator/CMakeLists.txt20
-rw-r--r--tests/auto/network/kernel/qdnslookup/CMakeLists.txt16
-rw-r--r--tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt16
-rw-r--r--tests/auto/network/kernel/qhostaddress/CMakeLists.txt26
-rw-r--r--tests/auto/network/kernel/qhostinfo/CMakeLists.txt30
-rw-r--r--tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt16
-rw-r--r--tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt15
-rw-r--r--tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt19
-rw-r--r--tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt16
-rw-r--r--tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt18
-rw-r--r--tests/auto/network/socket/CMakeLists.txt20
-rw-r--r--tests/auto/network/socket/platformsocketengine/CMakeLists.txt37
-rw-r--r--tests/auto/network/socket/qabstractsocket/CMakeLists.txt16
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt41
-rw-r--r--tests/auto/network/socket/qlocalsocket/CMakeLists.txt4
-rw-r--r--tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt17
-rw-r--r--tests/auto/network/socket/qlocalsocket/test/CMakeLists.txt32
-rw-r--r--tests/auto/network/socket/qsctpsocket/CMakeLists.txt16
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt41
-rw-r--r--tests/auto/network/socket/qtcpserver/CMakeLists.txt4
-rw-r--r--tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt23
-rw-r--r--tests/auto/network/socket/qtcpserver/test/CMakeLists.txt29
-rw-r--r--tests/auto/network/socket/qtcpserver/test/test.pro6
-rw-r--r--tests/auto/network/socket/qtcpsocket/CMakeLists.txt7
-rw-r--r--tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt20
-rw-r--r--tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt46
-rw-r--r--tests/auto/network/socket/qudpsocket/CMakeLists.txt4
-rw-r--r--tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt16
-rw-r--r--tests/auto/network/socket/qudpsocket/test/CMakeLists.txt36
-rw-r--r--tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt15
-rw-r--r--tests/auto/network/ssl/CMakeLists.txt36
-rw-r--r--tests/auto/network/ssl/qasn1element/CMakeLists.txt18
-rw-r--r--tests/auto/network/ssl/qdtls/CMakeLists.txt31
-rw-r--r--tests/auto/network/ssl/qdtlscookie/CMakeLists.txt27
-rw-r--r--tests/auto/network/ssl/qocsp/CMakeLists.txt27
-rw-r--r--tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt16
-rw-r--r--tests/auto/network/ssl/qsslcertificate/CMakeLists.txt43
-rw-r--r--tests/auto/network/ssl/qsslcipher/CMakeLists.txt25
-rw-r--r--tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt16
-rw-r--r--tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt16
-rw-r--r--tests/auto/network/ssl/qsslerror/CMakeLists.txt25
-rw-r--r--tests/auto/network/ssl/qsslkey/CMakeLists.txt43
-rw-r--r--tests/auto/network/ssl/qsslsocket/CMakeLists.txt38
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt35
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt34
-rw-r--r--tests/auto/opengl/CMakeLists.txt6
-rw-r--r--tests/auto/opengl/qgl/CMakeLists.txt35
-rw-r--r--tests/auto/opengl/qglbuffer/CMakeLists.txt1
-rw-r--r--tests/auto/opengl/qglfunctions/CMakeLists.txt1
-rw-r--r--tests/auto/opengl/qglthreads/CMakeLists.txt7
-rw-r--r--tests/auto/other/qtokenautomaton/CMakeLists.txt15
-rw-r--r--tests/auto/other/toolsupport/CMakeLists.txt1
-rw-r--r--tests/auto/other/xkbkeyboard/CMakeLists.txt2
-rw-r--r--tests/auto/printsupport/CMakeLists.txt4
-rw-r--r--tests/auto/printsupport/dialogs/CMakeLists.txt3
-rw-r--r--tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt13
-rw-r--r--tests/auto/printsupport/kernel/CMakeLists.txt5
-rw-r--r--tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt14
-rw-r--r--tests/auto/printsupport/kernel/qprinter/CMakeLists.txt13
-rw-r--r--tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt14
-rw-r--r--tests/auto/sql/CMakeLists.txt4
-rw-r--r--tests/auto/sql/kernel/CMakeLists.txt9
-rw-r--r--tests/auto/sql/kernel/qsql/CMakeLists.txt6
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt6
-rw-r--r--tests/auto/sql/kernel/qsqldriver/CMakeLists.txt6
-rw-r--r--tests/auto/sql/kernel/qsqlerror/CMakeLists.txt1
-rw-r--r--tests/auto/sql/kernel/qsqlfield/CMakeLists.txt1
-rw-r--r--tests/auto/sql/kernel/qsqlquery/CMakeLists.txt6
-rw-r--r--tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt1
-rw-r--r--tests/auto/sql/kernel/qsqlresult/CMakeLists.txt8
-rw-r--r--tests/auto/sql/kernel/qsqlthread/CMakeLists.txt6
-rw-r--r--tests/auto/sql/models/CMakeLists.txt6
-rw-r--r--tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt7
-rw-r--r--tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt7
-rw-r--r--tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt6
-rw-r--r--tests/auto/sql/models/qsqltablemodel/CMakeLists.txt6
-rw-r--r--tests/auto/testlib/.prev_CMakeLists.txt8
-rw-r--r--tests/auto/testlib/CMakeLists.txt8
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt8
-rw-r--r--tests/auto/testlib/qsignalspy/CMakeLists.txt1
-rw-r--r--tests/auto/testlib/selftests/.prev_CMakeLists.txt9
-rw-r--r--tests/auto/testlib/selftests/CMakeLists.txt411
-rw-r--r--tests/auto/testlib/selftests/assert/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/assert/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/badxml/.prev_CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/badxml/CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/benchlibcallgrind/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/benchlibcounting/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/benchlibeventcounter/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/benchliboptions/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/benchlibtickcounter/.prev_CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/benchlibwalltime/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/blacklisted/.prev_CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/blacklisted/CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/cmptest/.prev_CMakeLists.txt27
-rw-r--r--tests/auto/testlib/selftests/cmptest/CMakeLists.txt29
-rw-r--r--tests/auto/testlib/selftests/commandlinedata/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/counting/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/counting/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/crashes/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/crashes/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/datatable/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/datatable/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/datetime/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/datetime/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/deleteLater/.prev_CMakeLists.txt16
-rw-r--r--tests/auto/testlib/selftests/deleteLater/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/.prev_CMakeLists.txt16
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/differentexec/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/differentexec/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/exceptionthrow/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt25
-rw-r--r--tests/auto/testlib/selftests/expectfail/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/expectfail/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/failcleanup/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/failcleanup/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/faildatatype/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/faildatatype/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/failfetchtype/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/failinit/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/failinit/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/failinitdata/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/failinitdata/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/fetchbogus/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/findtestdata/.prev_CMakeLists.txt27
-rw-r--r--tests/auto/testlib/selftests/findtestdata/CMakeLists.txt29
-rw-r--r--tests/auto/testlib/selftests/float/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/float/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/globaldata/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/globaldata/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/keyboard/.prev_CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/keyboard/CMakeLists.txt28
-rw-r--r--tests/auto/testlib/selftests/longstring/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/longstring/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/maxwarnings/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/mouse/.prev_CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/mouse/CMakeLists.txt28
-rw-r--r--tests/auto/testlib/selftests/multiexec/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/multiexec/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/pairdiagnostics/.prev_CMakeLists.txt16
-rw-r--r--tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/printdatatags/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/printdatatags/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/printdatatagswithglobaltags/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/qexecstringlist/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/signaldumper/.prev_CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/signaldumper/CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/silent/.prev_CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/silent/CMakeLists.txt26
-rw-r--r--tests/auto/testlib/selftests/singleskip/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/singleskip/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/skip/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/skip/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/skipcleanup/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/skipinit/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/skipinit/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/skipinitdata/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/sleep/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/sleep/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/strcmp/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/strcmp/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/subtest/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/subtest/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/testlib/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/testlib/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/tuplediagnostics/.prev_CMakeLists.txt16
-rw-r--r--tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/verbose1/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/verbose1/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/verbose2/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/verbose2/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/verifyexceptionthrown/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt25
-rw-r--r--tests/auto/testlib/selftests/warnings/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/warnings/CMakeLists.txt24
-rw-r--r--tests/auto/testlib/selftests/watchdog/.prev_CMakeLists.txt25
-rw-r--r--tests/auto/testlib/selftests/watchdog/CMakeLists.txt27
-rw-r--r--tests/auto/testlib/selftests/xunit/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/testlib/selftests/xunit/CMakeLists.txt24
-rw-r--r--tests/auto/tools/qdbusxml2cpp/CMakeLists.txt1
-rw-r--r--tests/auto/tools/uic/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/CMakeLists.txt10
-rw-r--r--tests/auto/widgets/dialogs/CMakeLists.txt19
-rw-r--r--tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/dialogs/qdialog/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt9
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt10
-rw-r--r--tests/auto/widgets/dialogs/qfilesystemmodel/CMakeLists.txt31
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt34
-rw-r--r--tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt5
-rw-r--r--tests/auto/widgets/dialogs/qwizard/CMakeLists.txt30
-rw-r--r--tests/auto/widgets/effects/CMakeLists.txt2
-rw-r--r--tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt5
-rw-r--r--tests/auto/widgets/graphicsview/CMakeLists.txt25
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt10
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt15
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/itemviews/CMakeLists.txt21
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt5
-rw-r--r--tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qdirmodel/CMakeLists.txt19
-rw-r--r--tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qitemview/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qlistview/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/itemviews/qtableview/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/CMakeLists.txt27
-rw-r--r--tests/auto/widgets/kernel/kernel.pro2
-rw-r--r--tests/auto/widgets/kernel/qaction/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qdesktopwidget/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qformlayout/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt24
-rw-r--r--tests/auto/widgets/kernel/qlayout/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/kernel/qshortcut/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qtooltip/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qwidget/CMakeLists.txt51
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/styles/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/styles/qmacstyle/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/styles/qstyle/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/styles/qstyleoption/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt9
-rw-r--r--tests/auto/widgets/util/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/util/qcompleter/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/util/qscroller/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/util/qundogroup/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/util/qundostack/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/CMakeLists.txt55
-rw-r--r--tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qcombobox/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/widgets/qdial/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qframe/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qlabel/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qlineedit/CMakeLists.txt9
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/widgets/qmenu/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qmenubar/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt6
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qslider/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qspinbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qsplitter/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qtabbar/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt24
-rw-r--r--tests/auto/widgets/widgets/qtextedit/CMakeLists.txt32
-rw-r--r--tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt1
-rw-r--r--tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/events/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qalgorithms/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qchar/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qdatetime/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qlist/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qlocale/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qstring/CMakeLists.txt1
-rw-r--r--tests/benchmarks/corelib/tools/qtimezone/CMakeLists.txt1
-rw-r--r--tests/benchmarks/gui/image/blendbench/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/image/qimagescale/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/painting/qtransform/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt3
-rw-r--r--tests/manual/CMakeLists.txt92
-rw-r--r--tests/manual/qcursor/childwindow/CMakeLists.txt5
-rw-r--r--tests/manual/qmetatype/CMakeLists.txt5
-rw-r--r--tests/manual/qopenglwindow/multiwindow/CMakeLists.txt3
-rw-r--r--util/cmake/Pipfile15
-rwxr-xr-xutil/cmake/cmakeconversionrate.py127
-rwxr-xr-xutil/cmake/configurejson2cmake.py983
-rwxr-xr-xutil/cmake/generate_module_map.sh38
-rw-r--r--util/cmake/helper.py464
-rw-r--r--util/cmake/json_parser.py100
-rwxr-xr-xutil/cmake/pro2cmake.py2342
-rwxr-xr-xutil/cmake/pro_conversion_rate.py218
-rwxr-xr-xutil/cmake/run_pro2cmake.py167
-rw-r--r--util/cmake/special_case_helper.py397
-rw-r--r--util/cmake/tests/__init__.py0
-rw-r--r--util/cmake/tests/data/comment_scope.pro6
-rw-r--r--util/cmake/tests/data/complex_assign.pro2
-rw-r--r--util/cmake/tests/data/complex_condition.pro4
-rw-r--r--util/cmake/tests/data/complex_values.pro22
-rw-r--r--util/cmake/tests/data/condition_without_scope.pro2
-rw-r--r--util/cmake/tests/data/contains_scope.pro4
-rw-r--r--util/cmake/tests/data/definetest.pro6
-rw-r--r--util/cmake/tests/data/else.pro6
-rw-r--r--util/cmake/tests/data/else2.pro4
-rw-r--r--util/cmake/tests/data/else3.pro7
-rw-r--r--util/cmake/tests/data/else4.pro6
-rw-r--r--util/cmake/tests/data/else5.pro10
-rw-r--r--util/cmake/tests/data/else6.pro11
-rw-r--r--util/cmake/tests/data/else7.pro2
-rw-r--r--util/cmake/tests/data/else8.pro5
-rw-r--r--util/cmake/tests/data/escaped_value.pro2
-rw-r--r--util/cmake/tests/data/for.pro11
-rw-r--r--util/cmake/tests/data/function_if.pro4
-rw-r--r--util/cmake/tests/data/include.pro3
-rw-r--r--util/cmake/tests/data/lc.pro10
-rw-r--r--util/cmake/tests/data/lc_with_comment.pro22
-rw-r--r--util/cmake/tests/data/load.pro3
-rw-r--r--util/cmake/tests/data/multi_condition_divided_by_lc.pro3
-rw-r--r--util/cmake/tests/data/multiline_assign.pro4
-rw-r--r--util/cmake/tests/data/nested_function_calls.pro2
-rw-r--r--util/cmake/tests/data/quoted.pro5
-rw-r--r--util/cmake/tests/data/single_line_for.pro4
-rw-r--r--util/cmake/tests/data/sql.pro3
-rw-r--r--util/cmake/tests/data/standardpaths.pro17
-rw-r--r--util/cmake/tests/data/unset.pro2
-rw-r--r--util/cmake/tests/data/value_function.pro2
-rwxr-xr-xutil/cmake/tests/test_lc_fixup.py46
-rwxr-xr-xutil/cmake/tests/test_logic_mapping.py186
-rwxr-xr-xutil/cmake/tests/test_operations.py57
-rwxr-xr-xutil/cmake/tests/test_parsing.py352
-rwxr-xr-xutil/cmake/tests/test_scope_handling.py346
1229 files changed, 48592 insertions, 541 deletions
diff --git a/.gitignore b/.gitignore
index e4079c6b4d..95a6964dd7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,6 +36,8 @@
qt*-config.h
qt*-config_p.h
qt*-config.pri
+*.pyc
+.mypy_cache
/include/
@@ -56,11 +58,12 @@ qt*-config.pri
/src/angle/src/QtANGLE/libANGLE/
/src/angle/src/libGLESv2/libANGLE/
-/examples/*/*/*
-!/examples/*/*/*[.]*
-!/examples/*/*/README
-!/examples/*/doc/*
-!/examples/*/doc/*/*
+# FIXME: Ignore these again?
+# /examples/*/*/*
+# !/examples/*/*/*[.]*
+# !/examples/*/*/README
+# !/examples/*/doc/*
+# !/examples/*/doc/*/*
/translations/*.qm
/translations/*_en.ts
@@ -321,3 +324,6 @@ wrapper.bat
# Generated by qt.prf
*_plugin_import.cpp
+
+# Typical cmake build directories
+/build*
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000..938a6f98cb
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,75 @@
+cmake_minimum_required(VERSION 3.15.0)
+
+# Run auto detection routines
+include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/QtAutoDetect.cmake)
+
+project(QtBase
+ VERSION 6.0.0
+ DESCRIPTION "Qt Base Libraries"
+ HOMEPAGE_URL "https://qt.io/"
+ LANGUAGES CXX C ASM
+)
+
+## Add some paths to check for cmake modules:
+list(PREPEND CMAKE_MODULE_PATH
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/3rdparty/extra-cmake-modules/find-modules"
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/3rdparty/kwin"
+)
+
+## Find the build internals package.
+list(PREPEND CMAKE_PREFIX_PATH
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+)
+find_package(QtBuildInternals CMAKE_FIND_ROOT_PATH_BOTH)
+
+qt_build_repo_begin(SKIP_CMAKE_MODULE_PATH_ADDITION)
+
+## QtBase specific configure tests:
+include(QtBaseConfigureTests)
+
+## Build System tests:
+include(QtBaseCMakeTesting)
+
+## Targets for global features, etc.:
+include(QtBaseGlobalTargets)
+
+## Should this Qt be static or dynamically linked?
+option(BUILD_SHARED_LIBS "Build Qt statically or dynamically" ON)
+set(QT_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
+
+## Should this Qt be built with Werror?
+option(WARNINGS_ARE_ERRORS "Build Qt with warnings as errors" ${FEATURE_developer_build})
+
+## Decide whether tools will be built.
+qt_check_if_tools_will_be_built()
+
+## Visit all the directories:
+add_subdirectory(src)
+
+if (BUILD_TESTING)
+ add_subdirectory(tests)
+endif()
+
+if (QT_WILL_BUILD_TOOLS)
+ add_subdirectory(qmake)
+endif()
+
+# Need to build qmake and other Core tools before exporting them.
+qt_export_tools(Core)
+
+# As long as we use the mkspecs (for qplatformdefs.h), we need to always
+# install it, especially when cross-compiling.
+set(mkspecs_install_dir "${INSTALL_DATADIR}")
+qt_path_join(mkspecs_install_dir ${QT_INSTALL_DIR} ${mkspecs_install_dir})
+
+qt_copy_or_install(DIRECTORY "${PROJECT_SOURCE_DIR}/mkspecs"
+ DESTINATION ${mkspecs_install_dir})
+
+
+qt_build_repo_end()
+
+option(BUILD_EXAMPLES "Build Qt examples" ON)
+if (BUILD_EXAMPLES)
+ add_subdirectory(examples)
+endif()
diff --git a/bin/qt-cmake.bat.in b/bin/qt-cmake.bat.in
new file mode 100644
index 0000000000..a26e153068
--- /dev/null
+++ b/bin/qt-cmake.bat.in
@@ -0,0 +1 @@
+@CMAKE_COMMAND@ -DCMAKE_TOOLCHAIN_FILE=@__GlobalConfig_install_dir_absolute@/qt.toolchain.cmake %*
diff --git a/bin/qt-cmake.in b/bin/qt-cmake.in
new file mode 100755
index 0000000000..1797d2ded5
--- /dev/null
+++ b/bin/qt-cmake.in
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec @CMAKE_COMMAND@ -DCMAKE_TOOLCHAIN_FILE=@__GlobalConfig_install_dir_absolute@/qt.toolchain.cmake $*
diff --git a/cmake/3rdparty/extra-cmake-modules/COPYING-CMAKE-SCRIPTS b/cmake/3rdparty/extra-cmake-modules/COPYING-CMAKE-SCRIPTS
new file mode 100644
index 0000000000..4b417765f3
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/COPYING-CMAKE-SCRIPTS
@@ -0,0 +1,22 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake
new file mode 100644
index 0000000000..bb8c9a62fc
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake
@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/../modules/ECMFindModuleHelpers.cmake)
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/FindEGL.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/FindEGL.cmake
new file mode 100644
index 0000000000..de271a1140
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/FindEGL.cmake
@@ -0,0 +1,164 @@
+#.rst:
+# FindEGL
+# -------
+#
+# Try to find EGL.
+#
+# This will define the following variables:
+#
+# ``EGL_FOUND``
+# True if (the requested version of) EGL is available
+# ``EGL_VERSION``
+# The version of EGL; note that this is the API version defined in the
+# headers, rather than the version of the implementation (eg: Mesa)
+# ``EGL_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the ``EGL::EGL``
+# target
+# ``EGL_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the target is not
+# used for linking
+# ``EGL_DEFINITIONS``
+# This should be passed to target_compile_options() if the target is not
+# used for linking
+#
+# If ``EGL_FOUND`` is TRUE, it will also define the following imported target:
+#
+# ``EGL::EGL``
+# The EGL library
+#
+# In general we recommend using the imported target, as it is easier to use.
+# Bear in mind, however, that if the target is in the link interface of an
+# exported library, it must be made available by the package config file.
+#
+# Since pre-1.0.0.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
+include(CheckCXXSourceCompiles)
+include(CMakePushCheckState)
+
+ecm_find_package_version_check(EGL)
+
+# Use pkg-config to get the directories and then use these values
+# in the FIND_PATH() and FIND_LIBRARY() calls
+find_package(PkgConfig)
+pkg_check_modules(PKG_EGL QUIET egl)
+
+set(EGL_DEFINITIONS ${PKG_EGL_CFLAGS_OTHER})
+
+find_path(EGL_INCLUDE_DIR
+ NAMES
+ EGL/egl.h
+ HINTS
+ ${PKG_EGL_INCLUDE_DIRS}
+)
+find_library(EGL_LIBRARY
+ NAMES
+ EGL
+ HINTS
+ ${PKG_EGL_LIBRARY_DIRS}
+)
+
+# NB: We do *not* use the version information from pkg-config, as that
+# is the implementation version (eg: the Mesa version)
+if(EGL_INCLUDE_DIR)
+ # egl.h has defines of the form EGL_VERSION_x_y for each supported
+ # version; so the header for EGL 1.1 will define EGL_VERSION_1_0 and
+ # EGL_VERSION_1_1. Finding the highest supported version involves
+ # finding all these defines and selecting the highest numbered.
+ file(READ "${EGL_INCLUDE_DIR}/EGL/egl.h" _EGL_header_contents)
+ string(REGEX MATCHALL
+ "[ \t]EGL_VERSION_[0-9_]+"
+ _EGL_version_lines
+ "${_EGL_header_contents}"
+ )
+ unset(_EGL_header_contents)
+ foreach(_EGL_version_line ${_EGL_version_lines})
+ string(REGEX REPLACE
+ "[ \t]EGL_VERSION_([0-9_]+)"
+ "\\1"
+ _version_candidate
+ "${_EGL_version_line}"
+ )
+ string(REPLACE "_" "." _version_candidate "${_version_candidate}")
+ if(NOT DEFINED EGL_VERSION OR EGL_VERSION VERSION_LESS _version_candidate)
+ set(EGL_VERSION "${_version_candidate}")
+ endif()
+ endforeach()
+ unset(_EGL_version_lines)
+endif()
+
+cmake_push_check_state(RESET)
+list(APPEND CMAKE_REQUIRED_LIBRARIES "${EGL_LIBRARY}")
+list(APPEND CMAKE_REQUIRED_INCLUDES "${EGL_INCLUDE_DIR}")
+
+check_cxx_source_compiles("
+#include <EGL/egl.h>
+
+int main(int argc, char *argv[]) {
+ EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0;
+ eglDestroyContext(dpy, ctx);
+}" HAVE_EGL)
+
+cmake_pop_check_state()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(EGL
+ FOUND_VAR
+ EGL_FOUND
+ REQUIRED_VARS
+ EGL_LIBRARY
+ EGL_INCLUDE_DIR
+ HAVE_EGL
+ VERSION_VAR
+ EGL_VERSION
+)
+
+if(EGL_FOUND AND NOT TARGET EGL::EGL)
+ add_library(EGL::EGL UNKNOWN IMPORTED)
+ set_target_properties(EGL::EGL PROPERTIES
+ IMPORTED_LOCATION "${EGL_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${EGL_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${EGL_INCLUDE_DIR}"
+ )
+endif()
+
+mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR HAVE_EGL)
+
+# compatibility variables
+set(EGL_LIBRARIES ${EGL_LIBRARY})
+set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR})
+set(EGL_VERSION_STRING ${EGL_VERSION})
+
+include(FeatureSummary)
+set_package_properties(EGL PROPERTIES
+ URL "https://www.khronos.org/egl/"
+ DESCRIPTION "A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG."
+)
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/FindGLIB2.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/FindGLIB2.cmake
new file mode 100644
index 0000000000..993535123a
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/FindGLIB2.cmake
@@ -0,0 +1,101 @@
+#.rst:
+# FindGLIB2
+# ---------
+#
+# Try to locate the GLib2 library.
+# If found, this will define the following variables:
+#
+# ``GLIB2_FOUND``
+# True if the GLib2 library is available
+# ``GLIB2_INCLUDE_DIRS``
+# The GLib2 include directories
+# ``GLIB2_LIBRARIES``
+# The GLib2 libraries for linking
+# ``GLIB2_INCLUDE_DIR``
+# Deprecated, use ``GLIB2_INCLUDE_DIRS``
+# ``GLIB2_LIBRARY``
+# Deprecated, use ``GLIB2_LIBRARIES``
+#
+# If ``GLIB2_FOUND`` is TRUE, it will also define the following
+# imported target:
+#
+# ``GLIB2::GLIB2``
+# The GLIB2 library
+#
+# Since 5.41.0.
+
+#=============================================================================
+# Copyright (c) 2008 Laurent Montel, <montel@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+find_package(PkgConfig)
+pkg_check_modules(PC_GLIB2 QUIET glib-2.0)
+
+find_path(GLIB2_INCLUDE_DIRS
+ NAMES glib.h
+ HINTS ${PC_GLIB2_INCLUDEDIR}
+ PATH_SUFFIXES glib-2.0)
+
+find_library(GLIB2_LIBRARIES
+ NAMES glib-2.0
+ HINTS ${PC_GLIB2_LIBDIR}
+)
+
+# search the glibconfig.h include dir under the same root where the library is found
+get_filename_component(glib2LibDir "${GLIB2_LIBRARIES}" PATH)
+
+find_path(GLIB2_INTERNAL_INCLUDE_DIR glibconfig.h
+ PATH_SUFFIXES glib-2.0/include
+ HINTS ${PC_GLIB2_INCLUDEDIR} "${glib2LibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH})
+
+# not sure if this include dir is optional or required
+# for now it is optional
+if(GLIB2_INTERNAL_INCLUDE_DIR)
+ list(APPEND GLIB2_INCLUDE_DIRS "${GLIB2_INTERNAL_INCLUDE_DIR}")
+endif()
+
+# Deprecated synonyms
+set(GLIB2_INCLUDE_DIR "${GLIB2_INCLUDE_DIRS}")
+set(GLIB2_LIBRARY "${GLIB2_LIBRARIES}")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GLIB2 DEFAULT_MSG GLIB2_LIBRARIES GLIB2_INCLUDE_DIRS)
+
+if(GLIB2_FOUND AND NOT TARGET GLIB2::GLIB2)
+ add_library(GLIB2::GLIB2 UNKNOWN IMPORTED)
+ set_target_properties(GLIB2::GLIB2 PROPERTIES
+ IMPORTED_LOCATION "${GLIB2_LIBRARIES}"
+ INTERFACE_INCLUDE_DIRECTORIES "${GLIB2_INCLUDE_DIRS}")
+endif()
+
+mark_as_advanced(GLIB2_INCLUDE_DIRS GLIB2_INCLUDE_DIR
+ GLIB2_LIBRARIES GLIB2_LIBRARY)
+
+include(FeatureSummary)
+set_package_properties(GLIB2 PROPERTIES
+ URL "https://wiki.gnome.org/Projects/GLib"
+ DESCRIPTION "Event loop and utility library")
+
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/FindWayland.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/FindWayland.cmake
new file mode 100644
index 0000000000..233cc88d02
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/FindWayland.cmake
@@ -0,0 +1,143 @@
+#.rst:
+# FindWayland
+# -----------
+#
+# Try to find Wayland.
+#
+# This is a component-based find module, which makes use of the COMPONENTS
+# and OPTIONAL_COMPONENTS arguments to find_module. The following components
+# are available::
+#
+# Client Server Cursor Egl
+#
+# If no components are specified, this module will act as though all components
+# were passed to OPTIONAL_COMPONENTS.
+#
+# This module will define the following variables, independently of the
+# components searched for or found:
+#
+# ``Wayland_FOUND``
+# TRUE if (the requested version of) Wayland is available
+# ``Wayland_VERSION``
+# Found Wayland version
+# ``Wayland_TARGETS``
+# A list of all targets imported by this module (note that there may be more
+# than the components that were requested)
+# ``Wayland_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the imported
+# targets
+# ``Wayland_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the targets are
+# not used for linking
+# ``Wayland_DEFINITIONS``
+# This should be passed to target_compile_options() if the targets are not
+# used for linking
+#
+# For each searched-for components, ``Wayland_<component>_FOUND`` will be set to
+# TRUE if the corresponding Wayland library was found, and FALSE otherwise. If
+# ``Wayland_<component>_FOUND`` is TRUE, the imported target
+# ``Wayland::<component>`` will be defined. This module will also attempt to
+# determine ``Wayland_*_VERSION`` variables for each imported target, although
+# ``Wayland_VERSION`` should normally be sufficient.
+#
+# In general we recommend using the imported targets, as they are easier to use
+# and provide more control. Bear in mind, however, that if any target is in the
+# link interface of an exported library, it must be made available by the
+# package config file.
+#
+# Since pre-1.0.0.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
+
+ecm_find_package_version_check(Wayland)
+
+set(Wayland_known_components
+ Client
+ Server
+ Cursor
+ Egl
+)
+foreach(_comp ${Wayland_known_components})
+ string(TOLOWER "${_comp}" _lc_comp)
+ set(Wayland_${_comp}_component_deps)
+ set(Wayland_${_comp}_pkg_config "wayland-${_lc_comp}")
+ set(Wayland_${_comp}_lib "wayland-${_lc_comp}")
+ set(Wayland_${_comp}_header "wayland-${_lc_comp}.h")
+endforeach()
+set(Wayland_Egl_component_deps Client)
+
+ecm_find_package_parse_components(Wayland
+ RESULT_VAR Wayland_components
+ KNOWN_COMPONENTS ${Wayland_known_components}
+)
+ecm_find_package_handle_library_components(Wayland
+ COMPONENTS ${Wayland_components}
+)
+
+# If pkg-config didn't provide us with version information,
+# try to extract it from wayland-version.h
+# (Note that the version from wayland-egl.pc will probably be
+# the Mesa version, rather than the Wayland version, but that
+# version will be ignored as we always find wayland-client.pc
+# first).
+if(NOT Wayland_VERSION)
+ find_file(Wayland_VERSION_HEADER
+ NAMES wayland-version.h
+ HINTS ${Wayland_INCLUDE_DIRS}
+ )
+ mark_as_advanced(Wayland_VERSION_HEADER)
+ if(Wayland_VERSION_HEADER)
+ file(READ ${Wayland_VERSION_HEADER} _wayland_version_header_contents)
+ string(REGEX REPLACE
+ "^.*[ \t]+WAYLAND_VERSION[ \t]+\"([0-9.]*)\".*$"
+ "\\1"
+ Wayland_VERSION
+ "${_wayland_version_header_contents}"
+ )
+ unset(_wayland_version_header_contents)
+ endif()
+endif()
+
+find_package_handle_standard_args(Wayland
+ FOUND_VAR
+ Wayland_FOUND
+ REQUIRED_VARS
+ Wayland_LIBRARIES
+ VERSION_VAR
+ Wayland_VERSION
+ HANDLE_COMPONENTS
+)
+
+include(FeatureSummary)
+set_package_properties(Wayland PROPERTIES
+ URL "http://wayland.freedesktop.org"
+ DESCRIPTION "C library implementation of the Wayland protocol: a protocol for a compositor to talk to its clients"
+)
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/FindX11_XCB.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/FindX11_XCB.cmake
new file mode 100644
index 0000000000..dd55fd7b30
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/FindX11_XCB.cmake
@@ -0,0 +1,118 @@
+#.rst:
+# FindX11_XCB
+# -----------
+#
+# Try to find the X11 XCB compatibility library.
+#
+# This will define the following variables:
+#
+# ``X11_XCB_FOUND``
+# True if (the requested version of) libX11-xcb is available
+# ``X11_XCB_VERSION``
+# The version of libX11-xcb (this is not guaranteed to be set even when
+# X11_XCB_FOUND is true)
+# ``X11_XCB_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the ``EGL::EGL``
+# target
+# ``X11_XCB_INCLUDE_DIR``
+# This should be passed to target_include_directories() if the target is not
+# used for linking
+# ``X11_XCB_DEFINITIONS``
+# This should be passed to target_compile_options() if the target is not
+# used for linking
+#
+# If ``X11_XCB_FOUND`` is TRUE, it will also define the following imported
+# target:
+#
+# ``X11::XCB``
+# The X11 XCB compatibility library
+#
+# In general we recommend using the imported target, as it is easier to use.
+# Bear in mind, however, that if the target is in the link interface of an
+# exported library, it must be made available by the package config file.
+#
+# Since pre-1.0.0.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2011 Fredrik Höglund <fredrik@kde.org>
+# Copyright 2008 Helio Chissini de Castro <helio@kde.org>
+# Copyright 2007 Matthias Kretz <kretz@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
+
+ecm_find_package_version_check(X11_XCB)
+
+# use pkg-config to get the directories and then use these values
+# in the FIND_PATH() and FIND_LIBRARY() calls
+find_package(PkgConfig)
+pkg_check_modules(PKG_X11_XCB QUIET x11-xcb)
+
+set(X11_XCB_DEFINITIONS ${PKG_X11_XCB_CFLAGS_OTHER})
+set(X11_XCB_VERSION ${PKG_X11_XCB_VERSION})
+
+find_path(X11_XCB_INCLUDE_DIR
+ NAMES X11/Xlib-xcb.h
+ HINTS ${PKG_X11_XCB_INCLUDE_DIRS}
+)
+find_library(X11_XCB_LIBRARY
+ NAMES X11-xcb
+ HINTS ${PKG_X11_XCB_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(X11_XCB
+ FOUND_VAR
+ X11_XCB_FOUND
+ REQUIRED_VARS
+ X11_XCB_LIBRARY
+ X11_XCB_INCLUDE_DIR
+ VERSION_VAR
+ X11_XCB_VERSION
+)
+
+if(X11_XCB_FOUND AND NOT TARGET X11::XCB)
+ add_library(X11::XCB UNKNOWN IMPORTED)
+ set_target_properties(X11::XCB PROPERTIES
+ IMPORTED_LOCATION "${X11_XCB_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${X11_XCB_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${X11_XCB_INCLUDE_DIR}"
+ )
+endif()
+
+mark_as_advanced(X11_XCB_INCLUDE_DIR X11_XCB_LIBRARY)
+
+# compatibility variables
+set(X11_XCB_LIBRARIES ${X11_XCB_LIBRARY})
+set(X11_XCB_INCLUDE_DIRS ${X11_XCB_INCLUDE_DIR})
+set(X11_XCB_VERSION_STRING ${X11_XCB_VERSION})
+
+include(FeatureSummary)
+set_package_properties(X11_XCB PROPERTIES
+ URL "http://xorg.freedesktop.org/"
+ DESCRIPTION "A compatibility library for code that translates Xlib API calls into XCB calls"
+)
diff --git a/cmake/3rdparty/extra-cmake-modules/find-modules/FindXCB.cmake b/cmake/3rdparty/extra-cmake-modules/find-modules/FindXCB.cmake
new file mode 100644
index 0000000000..d530d2d7f4
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/find-modules/FindXCB.cmake
@@ -0,0 +1,201 @@
+#.rst:
+# FindXCB
+# -------
+#
+# Try to find XCB.
+#
+# This is a component-based find module, which makes use of the COMPONENTS and
+# OPTIONAL_COMPONENTS arguments to find_module. The following components are
+# available::
+#
+# XCB
+# ATOM AUX COMPOSITE CURSOR DAMAGE
+# DPMS DRI2 DRI3 EVENT EWMH
+# GLX ICCCM IMAGE KEYSYMS PRESENT
+# RANDR RECORD RENDER RENDERUTIL RES
+# SCREENSAVER SHAPE SHM SYNC UTIL
+# XEVIE XF86DRI XFIXES XINERAMA XINPUT
+# XKB XPRINT XTEST XV XVMC
+#
+# If no components are specified, this module will act as though all components
+# except XINPUT (which is considered unstable) were passed to
+# OPTIONAL_COMPONENTS.
+#
+# This module will define the following variables, independently of the
+# components searched for or found:
+#
+# ``XCB_FOUND``
+# True if (the requestion version of) xcb is available
+# ``XCB_VERSION``
+# Found xcb version
+# ``XCB_TARGETS``
+# A list of all targets imported by this module (note that there may be more
+# than the components that were requested)
+# ``XCB_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the imported
+# targets
+# ``XCB_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the targets are
+# not used for linking
+# ``XCB_DEFINITIONS``
+# This should be passed to target_compile_options() if the targets are not
+# used for linking
+#
+# For each searched-for components, ``XCB_<component>_FOUND`` will be set to
+# true if the corresponding xcb library was found, and false otherwise. If
+# ``XCB_<component>_FOUND`` is true, the imported target ``XCB::<component>``
+# will be defined. This module will also attempt to determine
+# ``XCB_*_VERSION`` variables for each imported target, although
+# ``XCB_VERSION`` should normally be sufficient.
+#
+# In general we recommend using the imported targets, as they are easier to use
+# and provide more control. Bear in mind, however, that if any target is in the
+# link interface of an exported library, it must be made available by the
+# package config file.
+#
+# Since pre-1.0.0.
+
+#=============================================================================
+# Copyright 2011 Fredrik Höglund <fredrik@kde.org>
+# Copyright 2013 Martin Gräßlin <mgraesslin@kde.org>
+# Copyright 2014-2015 Alex Merry <alex.merry@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
+
+ecm_find_package_version_check(XCB)
+
+# Note that this list needs to be ordered such that any component
+# appears after its dependencies
+set(XCB_known_components
+ XCB
+ RENDER
+ SHAPE
+ XFIXES
+ SHM
+ ATOM
+ AUX
+ COMPOSITE
+ CURSOR
+ DAMAGE
+ DPMS
+ DRI2
+ DRI3
+ EVENT
+ EWMH
+ GLX
+ ICCCM
+ IMAGE
+ KEYSYMS
+ PRESENT
+ RANDR
+ RECORD
+ RENDERUTIL
+ RES
+ SCREENSAVER
+ SYNC
+ UTIL
+ XEVIE
+ XF86DRI
+ XINERAMA
+ XINPUT
+ XKB
+ XPRINT
+ XTEST
+ XV
+ XVMC
+)
+
+# XINPUT is unstable; do not include it by default
+set(XCB_default_components ${XCB_known_components})
+list(REMOVE_ITEM XCB_default_components "XINPUT")
+
+# default component info: xcb components have fairly predictable
+# header files, library names and pkg-config names
+foreach(_comp ${XCB_known_components})
+ string(TOLOWER "${_comp}" _lc_comp)
+ set(XCB_${_comp}_component_deps XCB)
+ set(XCB_${_comp}_pkg_config "xcb-${_lc_comp}")
+ set(XCB_${_comp}_lib "xcb-${_lc_comp}")
+ set(XCB_${_comp}_header "xcb/${_lc_comp}.h")
+endforeach()
+# exceptions
+set(XCB_XCB_component_deps)
+set(XCB_COMPOSITE_component_deps XCB XFIXES)
+set(XCB_DAMAGE_component_deps XCB XFIXES)
+set(XCB_IMAGE_component_deps XCB SHM)
+set(XCB_RENDERUTIL_component_deps XCB RENDER)
+set(XCB_XFIXES_component_deps XCB RENDER SHAPE)
+set(XCB_XVMC_component_deps XCB XV)
+set(XCB_XV_component_deps XCB SHM)
+set(XCB_XCB_pkg_config "xcb")
+set(XCB_XCB_lib "xcb")
+set(XCB_ATOM_header "xcb/xcb_atom.h")
+set(XCB_ATOM_lib "xcb-util")
+set(XCB_AUX_header "xcb/xcb_aux.h")
+set(XCB_AUX_lib "xcb-util")
+set(XCB_CURSOR_header "xcb/xcb_cursor.h")
+set(XCB_EVENT_header "xcb/xcb_event.h")
+set(XCB_EVENT_lib "xcb-util")
+set(XCB_EWMH_header "xcb/xcb_ewmh.h")
+set(XCB_ICCCM_header "xcb/xcb_icccm.h")
+set(XCB_IMAGE_header "xcb/xcb_image.h")
+set(XCB_KEYSYMS_header "xcb/xcb_keysyms.h")
+set(XCB_PIXEL_header "xcb/xcb_pixel.h")
+set(XCB_RENDERUTIL_header "xcb/xcb_renderutil.h")
+set(XCB_RENDERUTIL_lib "xcb-render-util")
+set(XCB_UTIL_header "xcb/xcb_util.h")
+
+ecm_find_package_parse_components(XCB
+ RESULT_VAR XCB_components
+ KNOWN_COMPONENTS ${XCB_known_components}
+ DEFAULT_COMPONENTS ${XCB_default_components}
+)
+
+list(FIND XCB_components "XINPUT" _XCB_XINPUT_index)
+if (NOT _XCB_XINPUT_index EQUAL -1)
+ message(AUTHOR_WARNING "XINPUT from XCB was requested: this is EXPERIMENTAL and is likely to unavailable on many systems!")
+endif()
+
+ecm_find_package_handle_library_components(XCB
+ COMPONENTS ${XCB_components}
+)
+
+find_package_handle_standard_args(XCB
+ FOUND_VAR
+ XCB_FOUND
+ REQUIRED_VARS
+ XCB_LIBRARIES
+ VERSION_VAR
+ XCB_VERSION
+ HANDLE_COMPONENTS
+)
+
+include(FeatureSummary)
+set_package_properties(XCB PROPERTIES
+ URL "http://xcb.freedesktop.org"
+ DESCRIPTION "X protocol C-language Binding"
+)
diff --git a/cmake/3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers.cmake b/cmake/3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers.cmake
new file mode 100644
index 0000000000..06cc0b66d8
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers.cmake
@@ -0,0 +1,173 @@
+#.rst:
+# ECMEnableSanitizers
+# -------------------
+#
+# Enable compiler sanitizer flags.
+#
+# The following sanitizers are supported:
+#
+# - Address Sanitizer
+# - Memory Sanitizer
+# - Thread Sanitizer
+# - Leak Sanitizer
+# - Undefined Behaviour Sanitizer
+#
+# All of them are implemented in Clang, depending on your version, and
+# there is an work in progress in GCC, where some of them are currently
+# implemented.
+#
+# This module will check your current compiler version to see if it
+# supports the sanitizers that you want to enable
+#
+# Usage
+# =====
+#
+# Simply add::
+#
+# include(ECMEnableSanitizers)
+#
+# to your ``CMakeLists.txt``. Note that this module is included in
+# KDECompilerSettings, so projects using that module do not need to also
+# include this one.
+#
+# The sanitizers are not enabled by default. Instead, you must set
+# ``ECM_ENABLE_SANITIZERS`` (either in your ``CMakeLists.txt`` or on the
+# command line) to a semicolon-separated list of sanitizers you wish to enable.
+# The options are:
+#
+# - address
+# - memory
+# - thread
+# - leak
+# - undefined
+#
+# The sanitizers "address", "memory" and "thread" are mutually exclusive. You
+# cannot enable two of them in the same build.
+#
+# "leak" requires the "address" sanitizer.
+#
+# .. note::
+#
+# To reduce the overhead induced by the instrumentation of the sanitizers, it
+# is advised to enable compiler optimizations (``-O1`` or higher).
+#
+# Example
+# =======
+#
+# This is an example of usage::
+#
+# mkdir build
+# cd build
+# cmake -DECM_ENABLE_SANITIZERS='address;leak;undefined' ..
+#
+# .. note::
+#
+# Most of the sanitizers will require Clang. To enable it, use::
+#
+# -DCMAKE_CXX_COMPILER=clang++
+#
+# Since 1.3.0.
+
+#=============================================================================
+# Copyright 2014 Mathieu Tarral <mathieu.tarral@gmail.com>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# MACRO check_compiler_version
+#-----------------------------
+macro (check_compiler_version gcc_required_version clang_required_version)
+ if (
+ (
+ CMAKE_CXX_COMPILER_ID MATCHES "GNU"
+ AND
+ CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_required_version}
+ )
+ OR
+ (
+ CMAKE_CXX_COMPILER_ID MATCHES "Clang"
+ AND
+ CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${clang_required_version}
+ )
+ )
+ # error !
+ message(FATAL_ERROR "You ask to enable the sanitizer ${CUR_SANITIZER},
+ but your compiler ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION}
+ does not support it !
+ You should use at least GCC ${gcc_required_version} or Clang ${clang_required_version}
+ (99.99 means not implemented yet)")
+ endif ()
+endmacro ()
+
+# MACRO check_compiler_support
+#------------------------------
+macro (enable_sanitizer_flags sanitize_option)
+ if (${sanitize_option} MATCHES "address")
+ check_compiler_version("4.8" "3.1")
+ set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls")
+ set(XSAN_LINKER_FLAGS "asan")
+ elseif (${sanitize_option} MATCHES "thread")
+ check_compiler_version("4.8" "3.1")
+ set(XSAN_COMPILE_FLAGS "-fsanitize=thread")
+ set(XSAN_LINKER_FLAGS "tsan")
+ elseif (${sanitize_option} MATCHES "memory")
+ check_compiler_version("99.99" "3.1")
+ set(XSAN_COMPILE_FLAGS "-fsanitize=memory")
+ elseif (${sanitize_option} MATCHES "leak")
+ check_compiler_version("4.9" "3.4")
+ set(XSAN_COMPILE_FLAGS "-fsanitize=leak")
+ set(XSAN_LINKER_FLAGS "lsan")
+ elseif (${sanitize_option} MATCHES "undefined")
+ check_compiler_version("4.9" "3.1")
+ set(XSAN_COMPILE_FLAGS "-fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls")
+ else ()
+ message(FATAL_ERROR "Compiler sanitizer option \"${sanitize_option}\" not supported.")
+ endif ()
+endmacro ()
+
+if (ECM_ENABLE_SANITIZERS)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ # for each element of the ECM_ENABLE_SANITIZERS list
+ foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} )
+ # lowercase filter
+ string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER)
+ # check option and enable appropriate flags
+ enable_sanitizer_flags ( ${CUR_SANITIZER} )
+ # TODO: GCC will not link pthread library if enabled ASan
+ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
+ set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XSAN_COMPILE_FLAGS}" )
+ endif()
+ set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" )
+ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ link_libraries(${XSAN_LINKER_FLAGS})
+ endif()
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
+ string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
+ endif ()
+ endforeach()
+ else()
+ message(STATUS "Tried to enable sanitizers (-DECM_ENABLE_SANITIZERS=${ECM_ENABLE_SANITIZERS}), \
+but compiler (${CMAKE_CXX_COMPILER_ID}) does not have sanitizer support")
+ endif()
+endif()
diff --git a/cmake/3rdparty/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake b/cmake/3rdparty/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake
new file mode 100644
index 0000000000..f2e32f959e
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake
@@ -0,0 +1,297 @@
+#.rst:
+# ECMFindModuleHelpers
+# --------------------
+#
+# Helper macros for find modules: ecm_find_package_version_check(),
+# ecm_find_package_parse_components() and
+# ecm_find_package_handle_library_components().
+#
+# ::
+#
+# ecm_find_package_version_check(<name>)
+#
+# Prints warnings if the CMake version or the project's required CMake version
+# is older than that required by extra-cmake-modules.
+#
+# ::
+#
+# ecm_find_package_parse_components(<name>
+# RESULT_VAR <variable>
+# KNOWN_COMPONENTS <component1> [<component2> [...]]
+# [SKIP_DEPENDENCY_HANDLING])
+#
+# This macro will populate <variable> with a list of components found in
+# <name>_FIND_COMPONENTS, after checking that all those components are in the
+# list of KNOWN_COMPONENTS; if there are any unknown components, it will print
+# an error or warning (depending on the value of <name>_FIND_REQUIRED) and call
+# return().
+#
+# The order of components in <variable> is guaranteed to match the order they
+# are listed in the KNOWN_COMPONENTS argument.
+#
+# If SKIP_DEPENDENCY_HANDLING is not set, for each component the variable
+# <name>_<component>_component_deps will be checked for dependent components.
+# If <component> is listed in <name>_FIND_COMPONENTS, then all its (transitive)
+# dependencies will also be added to <variable>.
+#
+# ::
+#
+# ecm_find_package_handle_library_components(<name>
+# COMPONENTS <component> [<component> [...]]
+# [SKIP_DEPENDENCY_HANDLING])
+# [SKIP_PKG_CONFIG])
+#
+# Creates an imported library target for each component. The operation of this
+# macro depends on the presence of a number of CMake variables.
+#
+# The <name>_<component>_lib variable should contain the name of this library,
+# and <name>_<component>_header variable should contain the name of a header
+# file associated with it (whatever relative path is normally passed to
+# '#include'). <name>_<component>_header_subdir variable can be used to specify
+# which subdirectory of the include path the headers will be found in.
+# ecm_find_package_components() will then search for the library
+# and include directory (creating appropriate cache variables) and create an
+# imported library target named <name>::<component>.
+#
+# Additional variables can be used to provide additional information:
+#
+# If SKIP_PKG_CONFIG, the <name>_<component>_pkg_config variable is set, and
+# pkg-config is found, the pkg-config module given by
+# <name>_<component>_pkg_config will be searched for and used to help locate the
+# library and header file. It will also be used to set
+# <name>_<component>_VERSION.
+#
+# Note that if version information is found via pkg-config,
+# <name>_<component>_FIND_VERSION can be set to require a particular version
+# for each component.
+#
+# If SKIP_DEPENDENCY_HANDLING is not set, the INTERFACE_LINK_LIBRARIES property
+# of the imported target for <component> will be set to contain the imported
+# targets for the components listed in <name>_<component>_component_deps.
+# <component>_FOUND will also be set to false if any of the compoments in
+# <name>_<component>_component_deps are not found. This requires the components
+# in <name>_<component>_component_deps to be listed before <component> in the
+# COMPONENTS argument.
+#
+# The following variables will be set:
+#
+# ``<name>_TARGETS``
+# the imported targets
+# ``<name>_LIBRARIES``
+# the found libraries
+# ``<name>_INCLUDE_DIRS``
+# the combined required include directories for the components
+# ``<name>_DEFINITIONS``
+# the "other" CFLAGS provided by pkg-config, if any
+# ``<name>_VERSION``
+# the value of ``<name>_<component>_VERSION`` for the first component that
+# has this variable set (note that components are searched for in the order
+# they are passed to the macro), although if it is already set, it will not
+# be altered
+#
+# Note that these variables are never cleared, so if
+# ecm_find_package_handle_library_components() is called multiple times with
+# different components (typically because of multiple find_package() calls) then
+# ``<name>_TARGETS``, for example, will contain all the targets found in any
+# call (although no duplicates).
+#
+# Since pre-1.0.0.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+include(CMakeParseArguments)
+
+macro(ecm_find_package_version_check module_name)
+ if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by Find${module_name}.cmake")
+ endif()
+ if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Find${module_name}.cmake")
+ endif()
+endmacro()
+
+macro(ecm_find_package_parse_components module_name)
+ set(ecm_fppc_options SKIP_DEPENDENCY_HANDLING)
+ set(ecm_fppc_oneValueArgs RESULT_VAR)
+ set(ecm_fppc_multiValueArgs KNOWN_COMPONENTS DEFAULT_COMPONENTS)
+ cmake_parse_arguments(ECM_FPPC "${ecm_fppc_options}" "${ecm_fppc_oneValueArgs}" "${ecm_fppc_multiValueArgs}" ${ARGN})
+
+ if(ECM_FPPC_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unexpected arguments to ecm_find_package_parse_components: ${ECM_FPPC_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT ECM_FPPC_RESULT_VAR)
+ message(FATAL_ERROR "Missing RESULT_VAR argument to ecm_find_package_parse_components")
+ endif()
+ if(NOT ECM_FPPC_KNOWN_COMPONENTS)
+ message(FATAL_ERROR "Missing KNOWN_COMPONENTS argument to ecm_find_package_parse_components")
+ endif()
+ if(NOT ECM_FPPC_DEFAULT_COMPONENTS)
+ set(ECM_FPPC_DEFAULT_COMPONENTS ${ECM_FPPC_KNOWN_COMPONENTS})
+ endif()
+
+ if(${module_name}_FIND_COMPONENTS)
+ set(ecm_fppc_requestedComps ${${module_name}_FIND_COMPONENTS})
+
+ if(NOT ECM_FPPC_SKIP_DEPENDENCY_HANDLING)
+ # Make sure deps are included
+ foreach(ecm_fppc_comp ${ecm_fppc_requestedComps})
+ foreach(ecm_fppc_dep_comp ${${module_name}_${ecm_fppc_comp}_component_deps})
+ list(FIND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}" ecm_fppc_index)
+ if("${ecm_fppc_index}" STREQUAL "-1")
+ if(NOT ${module_name}_FIND_QUIETLY)
+ message(STATUS "${module_name}: ${ecm_fppc_comp} requires ${${module_name}_${ecm_fppc_comp}_component_deps}")
+ endif()
+ list(APPEND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}")
+ endif()
+ endforeach()
+ endforeach()
+ else()
+ message(STATUS "Skipping dependency handling for ${module_name}")
+ endif()
+ list(REMOVE_DUPLICATES ecm_fppc_requestedComps)
+
+ # This makes sure components are listed in the same order as
+ # KNOWN_COMPONENTS (potentially important for inter-dependencies)
+ set(${ECM_FPPC_RESULT_VAR})
+ foreach(ecm_fppc_comp ${ECM_FPPC_KNOWN_COMPONENTS})
+ list(FIND ecm_fppc_requestedComps "${ecm_fppc_comp}" ecm_fppc_index)
+ if(NOT "${ecm_fppc_index}" STREQUAL "-1")
+ list(APPEND ${ECM_FPPC_RESULT_VAR} "${ecm_fppc_comp}")
+ list(REMOVE_AT ecm_fppc_requestedComps ${ecm_fppc_index})
+ endif()
+ endforeach()
+ # if there are any left, they are unknown components
+ if(ecm_fppc_requestedComps)
+ set(ecm_fppc_msgType STATUS)
+ if(${module_name}_FIND_REQUIRED)
+ set(ecm_fppc_msgType FATAL_ERROR)
+ endif()
+ if(NOT ${module_name}_FIND_QUIETLY)
+ message(${ecm_fppc_msgType} "${module_name}: requested unknown components ${ecm_fppc_requestedComps}")
+ endif()
+ return()
+ endif()
+ else()
+ set(${ECM_FPPC_RESULT_VAR} ${ECM_FPPC_DEFAULT_COMPONENTS})
+ endif()
+endmacro()
+
+macro(ecm_find_package_handle_library_components module_name)
+ set(ecm_fpwc_options SKIP_PKG_CONFIG SKIP_DEPENDENCY_HANDLING)
+ set(ecm_fpwc_oneValueArgs)
+ set(ecm_fpwc_multiValueArgs COMPONENTS)
+ cmake_parse_arguments(ECM_FPWC "${ecm_fpwc_options}" "${ecm_fpwc_oneValueArgs}" "${ecm_fpwc_multiValueArgs}" ${ARGN})
+
+ if(ECM_FPWC_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unexpected arguments to ecm_find_package_handle_components: ${ECM_FPWC_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT ECM_FPWC_COMPONENTS)
+ message(FATAL_ERROR "Missing COMPONENTS argument to ecm_find_package_handle_components")
+ endif()
+
+ include(FindPackageHandleStandardArgs)
+ find_package(PkgConfig)
+ foreach(ecm_fpwc_comp ${ECM_FPWC_COMPONENTS})
+ set(ecm_fpwc_dep_vars)
+ set(ecm_fpwc_dep_targets)
+ if(NOT SKIP_DEPENDENCY_HANDLING)
+ foreach(ecm_fpwc_dep ${${module_name}_${ecm_fpwc_comp}_component_deps})
+ list(APPEND ecm_fpwc_dep_vars "${module_name}_${ecm_fpwc_dep}_FOUND")
+ list(APPEND ecm_fpwc_dep_targets "${module_name}::${ecm_fpwc_dep}")
+ endforeach()
+ endif()
+
+ if(NOT ECM_FPWC_SKIP_PKG_CONFIG AND ${module_name}_${ecm_fpwc_comp}_pkg_config)
+ pkg_check_modules(PKG_${module_name}_${ecm_fpwc_comp} QUIET
+ ${${module_name}_${ecm_fpwc_comp}_pkg_config})
+ endif()
+
+ find_path(${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
+ NAMES ${${module_name}_${ecm_fpwc_comp}_header}
+ HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_INCLUDE_DIRS}
+ PATH_SUFFIXES ${${module_name}_${ecm_fpwc_comp}_header_subdir}
+ )
+ find_library(${module_name}_${ecm_fpwc_comp}_LIBRARY
+ NAMES ${${module_name}_${ecm_fpwc_comp}_lib}
+ HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_LIBRARY_DIRS}
+ )
+
+ set(${module_name}_${ecm_fpwc_comp}_VERSION "${PKG_${module_name}_${ecm_fpwc_comp}_VERSION}")
+ if(NOT ${module_name}_VERSION)
+ set(${module_name}_VERSION ${${module_name}_${ecm_fpwc_comp}_VERSION})
+ endif()
+
+ find_package_handle_standard_args(${module_name}_${ecm_fpwc_comp}
+ FOUND_VAR
+ ${module_name}_${ecm_fpwc_comp}_FOUND
+ REQUIRED_VARS
+ ${module_name}_${ecm_fpwc_comp}_LIBRARY
+ ${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
+ ${ecm_fpwc_dep_vars}
+ VERSION_VAR
+ ${module_name}_${ecm_fpwc_comp}_VERSION
+ )
+
+ mark_as_advanced(
+ ${module_name}_${ecm_fpwc_comp}_LIBRARY
+ ${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
+ )
+
+ if(${module_name}_${ecm_fpwc_comp}_FOUND)
+ list(APPEND ${module_name}_LIBRARIES
+ "${${module_name}_${ecm_fpwc_comp}_LIBRARY}")
+ list(APPEND ${module_name}_INCLUDE_DIRS
+ "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}")
+ set(${module_name}_DEFINITIONS
+ ${${module_name}_DEFINITIONS}
+ ${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS})
+ if(NOT TARGET ${module_name}::${ecm_fpwc_comp})
+ add_library(${module_name}::${ecm_fpwc_comp} UNKNOWN IMPORTED)
+ set_target_properties(${module_name}::${ecm_fpwc_comp} PROPERTIES
+ IMPORTED_LOCATION "${${module_name}_${ecm_fpwc_comp}_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}"
+ INTERFACE_LINK_LIBRARIES "${ecm_fpwc_dep_targets}"
+ )
+ endif()
+ list(APPEND ${module_name}_TARGETS
+ "${module_name}::${ecm_fpwc_comp}")
+ endif()
+ endforeach()
+ if(${module_name}_LIBRARIES)
+ list(REMOVE_DUPLICATES ${module_name}_LIBRARIES)
+ endif()
+ if(${module_name}_INCLUDE_DIRS)
+ list(REMOVE_DUPLICATES ${module_name}_INCLUDE_DIRS)
+ endif()
+ if(${module_name}_DEFINITIONS)
+ list(REMOVE_DUPLICATES ${module_name}_DEFINITIONS)
+ endif()
+ if(${module_name}_TARGETS)
+ list(REMOVE_DUPLICATES ${module_name}_TARGETS)
+ endif()
+endmacro()
diff --git a/cmake/3rdparty/extra-cmake-modules/qt_attribution.json b/cmake/3rdparty/extra-cmake-modules/qt_attribution.json
new file mode 100644
index 0000000000..cebebf82eb
--- /dev/null
+++ b/cmake/3rdparty/extra-cmake-modules/qt_attribution.json
@@ -0,0 +1,15 @@
+{
+ "Id": "extra-cmake-modules",
+ "Name": "extra-cmake-modules",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used as part of the build system.",
+
+ "Description": "Additional CMake modules.",
+ "Homepage": "https://api.kde.org/ecm/",
+ "Version": "5.50.0",
+
+ "License": "BSD-3-Clause",
+ "LicenseId": "BSD 3-Clause License",
+ "LicenseFile": "COPYING-CMAKE-SCRIPTS",
+ "Copyright": "Copyright © 2011-2018 The KDE community"
+}
diff --git a/cmake/3rdparty/kwin/COPYING-CMAKE-SCRIPTS b/cmake/3rdparty/kwin/COPYING-CMAKE-SCRIPTS
new file mode 100644
index 0000000000..4b417765f3
--- /dev/null
+++ b/cmake/3rdparty/kwin/COPYING-CMAKE-SCRIPTS
@@ -0,0 +1,22 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/cmake/3rdparty/kwin/FindLibdrm.cmake b/cmake/3rdparty/kwin/FindLibdrm.cmake
new file mode 100644
index 0000000000..9936e07eee
--- /dev/null
+++ b/cmake/3rdparty/kwin/FindLibdrm.cmake
@@ -0,0 +1,126 @@
+#.rst:
+# FindLibdrm
+# -------
+#
+# Try to find libdrm on a Unix system.
+#
+# This will define the following variables:
+#
+# ``Libdrm_FOUND``
+# True if (the requested version of) libdrm is available
+# ``Libdrm_VERSION``
+# The version of libdrm
+# ``Libdrm_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the ``Libdrm::Libdrm``
+# target
+# ``Libdrm_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the target is not
+# used for linking
+# ``Libdrm_DEFINITIONS``
+# This should be passed to target_compile_options() if the target is not
+# used for linking
+#
+# If ``Libdrm_FOUND`` is TRUE, it will also define the following imported target:
+#
+# ``Libdrm::Libdrm``
+# The libdrm library
+#
+# In general we recommend using the imported target, as it is easier to use.
+# Bear in mind, however, that if the target is in the link interface of an
+# exported library, it must be made available by the package config file.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by FindLibdrm.cmake")
+endif()
+if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use FindLibdrm.cmake")
+endif()
+
+if(NOT WIN32)
+ # Use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ find_package(PkgConfig)
+ pkg_check_modules(PKG_Libdrm QUIET libdrm)
+
+ set(Libdrm_DEFINITIONS ${PKG_Libdrm_CFLAGS_OTHER})
+ set(Libdrm_VERSION ${PKG_Libdrm_VERSION})
+
+ find_path(Libdrm_INCLUDE_DIR
+ NAMES
+ xf86drm.h
+ HINTS
+ ${PKG_Libdrm_INCLUDE_DIRS}
+ )
+ find_library(Libdrm_LIBRARY
+ NAMES
+ drm
+ HINTS
+ ${PKG_Libdrm_LIBRARY_DIRS}
+ )
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Libdrm
+ FOUND_VAR
+ Libdrm_FOUND
+ REQUIRED_VARS
+ Libdrm_LIBRARY
+ Libdrm_INCLUDE_DIR
+ VERSION_VAR
+ Libdrm_VERSION
+ )
+
+ if(Libdrm_FOUND AND NOT TARGET Libdrm::Libdrm)
+ add_library(Libdrm::Libdrm UNKNOWN IMPORTED)
+ set_target_properties(Libdrm::Libdrm PROPERTIES
+ IMPORTED_LOCATION "${Libdrm_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${Libdrm_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${Libdrm_INCLUDE_DIR}"
+ INTERFACE_INCLUDE_DIRECTORIES "${Libdrm_INCLUDE_DIR}/libdrm"
+ )
+ endif()
+
+ mark_as_advanced(Libdrm_LIBRARY Libdrm_INCLUDE_DIR)
+
+ # compatibility variables
+ set(Libdrm_LIBRARIES ${Libdrm_LIBRARY})
+ set(Libdrm_INCLUDE_DIRS ${Libdrm_INCLUDE_DIR} "${Libdrm_INCLUDE_DIR}/libdrm")
+ set(Libdrm_VERSION_STRING ${Libdrm_VERSION})
+
+else()
+ message(STATUS "FindLibdrm.cmake cannot find libdrm on Windows systems.")
+ set(Libdrm_FOUND FALSE)
+endif()
+
+include(FeatureSummary)
+set_package_properties(Libdrm PROPERTIES
+ URL "https://wiki.freedesktop.org/dri/"
+ DESCRIPTION "Userspace interface to kernel DRM services."
+)
diff --git a/cmake/3rdparty/kwin/FindLibinput.cmake b/cmake/3rdparty/kwin/FindLibinput.cmake
new file mode 100644
index 0000000000..b856e0bbcb
--- /dev/null
+++ b/cmake/3rdparty/kwin/FindLibinput.cmake
@@ -0,0 +1,125 @@
+#.rst:
+# FindLibinput
+# -------
+#
+# Try to find libinput on a Unix system.
+#
+# This will define the following variables:
+#
+# ``Libinput_FOUND``
+# True if (the requested version of) libinput is available
+# ``Libinput_VERSION``
+# The version of libinput
+# ``Libinput_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the ``Libinput::Libinput``
+# target
+# ``Libinput_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the target is not
+# used for linking
+# ``Libinput_DEFINITIONS``
+# This should be passed to target_compile_options() if the target is not
+# used for linking
+#
+# If ``Libinput_FOUND`` is TRUE, it will also define the following imported target:
+#
+# ``Libinput::Libinput``
+# The libinput library
+#
+# In general we recommend using the imported target, as it is easier to use.
+# Bear in mind, however, that if the target is in the link interface of an
+# exported library, it must be made available by the package config file.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by FindLibinput.cmake")
+endif()
+if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use FindLibinput.cmake")
+endif()
+
+if(NOT WIN32)
+ # Use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ find_package(PkgConfig)
+ pkg_check_modules(PKG_Libinput QUIET libinput)
+
+ set(Libinput_DEFINITIONS ${PKG_Libinput_CFLAGS_OTHER})
+ set(Libinput_VERSION ${PKG_Libinput_VERSION})
+
+ find_path(Libinput_INCLUDE_DIR
+ NAMES
+ libinput.h
+ HINTS
+ ${PKG_Libinput_INCLUDE_DIRS}
+ )
+ find_library(Libinput_LIBRARY
+ NAMES
+ input
+ HINTS
+ ${PKG_Libinput_LIBRARY_DIRS}
+ )
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Libinput
+ FOUND_VAR
+ Libinput_FOUND
+ REQUIRED_VARS
+ Libinput_LIBRARY
+ Libinput_INCLUDE_DIR
+ VERSION_VAR
+ Libinput_VERSION
+ )
+
+ if(Libinput_FOUND AND NOT TARGET Libinput::Libinput)
+ add_library(Libinput::Libinput UNKNOWN IMPORTED)
+ set_target_properties(Libinput::Libinput PROPERTIES
+ IMPORTED_LOCATION "${Libinput_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${Libinput_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${Libinput_INCLUDE_DIR}"
+ )
+ endif()
+
+ mark_as_advanced(Libinput_LIBRARY Libinput_INCLUDE_DIR)
+
+ # compatibility variables
+ set(Libinput_LIBRARIES ${Libinput_LIBRARY})
+ set(Libinput_INCLUDE_DIRS ${Libinput_INCLUDE_DIR})
+ set(Libinput_VERSION_STRING ${Libinput_VERSION})
+
+else()
+ message(STATUS "FindLibinput.cmake cannot find libinput on Windows systems.")
+ set(Libinput_FOUND FALSE)
+endif()
+
+include(FeatureSummary)
+set_package_properties(Libinput PROPERTIES
+ URL "http://www.freedesktop.org/wiki/Software/libinput/"
+ DESCRIPTION "Library to handle input devices in Wayland compositors and to provide a generic X.Org input driver."
+)
diff --git a/cmake/3rdparty/kwin/FindXKB.cmake b/cmake/3rdparty/kwin/FindXKB.cmake
new file mode 100644
index 0000000000..0d599df0fd
--- /dev/null
+++ b/cmake/3rdparty/kwin/FindXKB.cmake
@@ -0,0 +1,101 @@
+# Try to find xkbcommon on a Unix system
+#
+# This will define:
+#
+# XKB_FOUND - True if XKB is available
+# XKB_LIBRARIES - Link these to use XKB
+# XKB_INCLUDE_DIRS - Include directory for XKB
+# XKB_DEFINITIONS - Compiler flags for using XKB
+#
+# Additionally, the following imported targets will be defined:
+#
+# XKB::XKB
+#
+# Copyright (c) 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by FindXKB.cmake")
+endif()
+if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use FindXKB.cmake")
+endif()
+
+if(NOT WIN32)
+ # Use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ find_package(PkgConfig)
+ pkg_check_modules(PKG_XKB QUIET xkbcommon)
+
+ set(XKB_DEFINITIONS ${PKG_XKB_CFLAGS_OTHER})
+
+ find_path(XKB_INCLUDE_DIR
+ NAMES
+ xkbcommon/xkbcommon.h
+ HINTS
+ ${PKG_XKB_INCLUDE_DIRS}
+ )
+ find_library(XKB_LIBRARY
+ NAMES
+ xkbcommon
+ HINTS
+ ${PKG_XKB_LIBRARY_DIRS}
+ )
+
+ set(XKB_LIBRARIES ${XKB_LIBRARY})
+ set(XKB_INCLUDE_DIRS ${XKB_INCLUDE_DIR})
+ set(XKB_VERSION ${PKG_XKB_VERSION})
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(XKB
+ FOUND_VAR
+ XKB_FOUND
+ REQUIRED_VARS
+ XKB_LIBRARY
+ XKB_INCLUDE_DIR
+ VERSION_VAR
+ XKB_VERSION
+ )
+
+ if(XKB_FOUND AND NOT TARGET XKB::XKB)
+ add_library(XKB::XKB UNKNOWN IMPORTED)
+ set_target_properties(XKB::XKB PROPERTIES
+ IMPORTED_LOCATION "${XKB_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${XKB_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${XKB_INCLUDE_DIR}"
+ )
+ endif()
+
+else()
+ message(STATUS "FindXKB.cmake cannot find XKB on Windows systems.")
+ set(XKB_FOUND FALSE)
+endif()
+
+include(FeatureSummary)
+set_package_properties(XKB PROPERTIES
+ URL "http://xkbcommon.org"
+ DESCRIPTION "XKB API common to servers and clients."
+)
diff --git a/cmake/3rdparty/kwin/Findgbm.cmake b/cmake/3rdparty/kwin/Findgbm.cmake
new file mode 100644
index 0000000000..6dfc895daa
--- /dev/null
+++ b/cmake/3rdparty/kwin/Findgbm.cmake
@@ -0,0 +1,125 @@
+#.rst:
+# Findgbm
+# -------
+#
+# Try to find gbm on a Unix system.
+#
+# This will define the following variables:
+#
+# ``gbm_FOUND``
+# True if (the requested version of) gbm is available
+# ``gbm_VERSION``
+# The version of gbm
+# ``gbm_LIBRARIES``
+# This can be passed to target_link_libraries() instead of the ``gbm::gbm``
+# target
+# ``gbm_INCLUDE_DIRS``
+# This should be passed to target_include_directories() if the target is not
+# used for linking
+# ``gbm_DEFINITIONS``
+# This should be passed to target_compile_options() if the target is not
+# used for linking
+#
+# If ``gbm_FOUND`` is TRUE, it will also define the following imported target:
+#
+# ``gbm::gbm``
+# The gbm library
+#
+# In general we recommend using the imported target, as it is easier to use.
+# Bear in mind, however, that if the target is in the link interface of an
+# exported library, it must be made available by the package config file.
+
+#=============================================================================
+# Copyright 2014 Alex Merry <alex.merry@kde.org>
+# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by Findgbm.cmake")
+endif()
+if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Findgbm.cmake")
+endif()
+
+if(NOT WIN32)
+ # Use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ find_package(PkgConfig)
+ pkg_check_modules(PKG_gbm QUIET gbm)
+
+ set(gbm_DEFINITIONS ${PKG_gbm_CFLAGS_OTHER})
+ set(gbm_VERSION ${PKG_gbm_VERSION})
+
+ find_path(gbm_INCLUDE_DIR
+ NAMES
+ gbm.h
+ HINTS
+ ${PKG_gbm_INCLUDE_DIRS}
+ )
+ find_library(gbm_LIBRARY
+ NAMES
+ gbm
+ HINTS
+ ${PKG_gbm_LIBRARY_DIRS}
+ )
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(gbm
+ FOUND_VAR
+ gbm_FOUND
+ REQUIRED_VARS
+ gbm_LIBRARY
+ gbm_INCLUDE_DIR
+ VERSION_VAR
+ gbm_VERSION
+ )
+
+ if(gbm_FOUND AND NOT TARGET gbm::gbm)
+ add_library(gbm::gbm UNKNOWN IMPORTED)
+ set_target_properties(gbm::gbm PROPERTIES
+ IMPORTED_LOCATION "${gbm_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${gbm_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${gbm_INCLUDE_DIR}"
+ )
+ endif()
+
+ mark_as_advanced(gbm_LIBRARY gbm_INCLUDE_DIR)
+
+ # compatibility variables
+ set(gbm_LIBRARIES ${gbm_LIBRARY})
+ set(gbm_INCLUDE_DIRS ${gbm_INCLUDE_DIR})
+ set(gbm_VERSION_STRING ${gbm_VERSION})
+
+else()
+ message(STATUS "Findgbm.cmake cannot find gbm on Windows systems.")
+ set(gbm_FOUND FALSE)
+endif()
+
+include(FeatureSummary)
+set_package_properties(gbm PROPERTIES
+ URL "http://www.mesa3d.org"
+ DESCRIPTION "Mesa gbm library."
+)
diff --git a/cmake/3rdparty/kwin/qt_attribution.json b/cmake/3rdparty/kwin/qt_attribution.json
new file mode 100644
index 0000000000..5c22641132
--- /dev/null
+++ b/cmake/3rdparty/kwin/qt_attribution.json
@@ -0,0 +1,17 @@
+{
+ "Id": "kwin",
+ "Name": "KWin",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used as part of the build system.",
+
+ "Description": "Additional CMake modules for graphics system dependencies.",
+ "Homepage": "https://www.kde.org/",
+ "Version": "5.13.4",
+
+ "License": "BSD-3-Clause",
+ "LicenseId": "BSD 3-Clause License",
+ "LicenseFile": "COPYING-CMAKE-SCRIPTS",
+ "Copyright": "Copyright 2014 Alex Merry <alex.merry@kde.org>
+Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>,
+Copyright (c) 2006,2007 Laurent Montel, <montel@kde.org>"
+}
diff --git a/cmake/3rdpartyConfig.cmake.in b/cmake/3rdpartyConfig.cmake.in
new file mode 100644
index 0000000000..fe15a1efc6
--- /dev/null
+++ b/cmake/3rdpartyConfig.cmake.in
@@ -0,0 +1,13 @@
+@PACKAGE_INIT@
+
+get_filename_component(_import_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_import_prefix "${_import_prefix}" REALPATH)
+
+set(old_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
+set(CMAKE_MODULE_PATH "${_import_prefix}" ${CMAKE_MODULE_PATH} )
+
+@3RDPARTY_ADDITIONAL_SETUP_CODE@
+
+set(CMAKE_MODULE_PATH "${old_CMAKE_MODULE_PATH}")
+
+include("${CMAKE_CURRENT_LIST_DIR}/@target@Targets.cmake")
diff --git a/cmake/FindATSPI2.cmake b/cmake/FindATSPI2.cmake
new file mode 100644
index 0000000000..87e3838ee9
--- /dev/null
+++ b/cmake/FindATSPI2.cmake
@@ -0,0 +1,8 @@
+include(FindPkgConfig)
+
+if(NOT TARGET PkgConfig::ATSPI2)
+ pkg_check_modules(ATSPI2 atspi-2 IMPORTED_TARGET)
+ if (NOT TARGET PkgConfig::ATSPI2)
+ set(ATSPI2_FOUND 0)
+ endif()
+endif()
diff --git a/cmake/FindAtomic.cmake b/cmake/FindAtomic.cmake
new file mode 100644
index 0000000000..91cee62046
--- /dev/null
+++ b/cmake/FindAtomic.cmake
@@ -0,0 +1,44 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET Atomic)
+ set(Atomic_FOUND ON)
+ return()
+endif()
+
+include(CheckCXXSourceCompiles)
+
+set (atomic_test_sources "#include <atomic>
+#include <cstdint>
+
+void test(volatile std::atomic<std::int64_t> &a)
+{
+ std::int64_t v = a.load(std::memory_order_acquire);
+ while (!a.compare_exchange_strong(v, v + 1,
+ std::memory_order_acq_rel,
+ std::memory_order_acquire)) {
+ v = a.exchange(v - 1);
+ }
+ a.store(v + 1, std::memory_order_release);
+}
+
+int main(int, char **)
+{
+ void *ptr = (void*)0xffffffc0; // any random pointer
+ test(*reinterpret_cast<std::atomic<std::int64_t> *>(ptr));
+ return 0;
+}")
+
+check_cxx_source_compiles("${atomic_test_sources}" HAVE_STDATOMIC)
+if(NOT HAVE_STDATOMIC)
+ set(_req_libraries "${CMAKE_REQUIRE_LIBRARIES}")
+ set(CMAKE_REQUIRE_LIBRARIES "atomic")
+ check_cxx_source_compiles("${atomic_test_sources}" HAVE_STDATOMIC_WITH_LIB)
+ set(CMAKE_REQUIRE_LIBRARIES "${_req_libraries}")
+endif()
+
+add_library(Atomic INTERFACE IMPORTED)
+if(HAVE_STDATOMIC_WITH_LIB)
+ target_link_libraries(Atomic INTERFACE atomic)
+endif()
+
+set(Atomic_FOUND 1)
diff --git a/cmake/FindCups.cmake b/cmake/FindCups.cmake
new file mode 100644
index 0000000000..7a78100aae
--- /dev/null
+++ b/cmake/FindCups.cmake
@@ -0,0 +1,98 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindCups
+--------
+
+Find the CUPS printing system.
+
+Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which
+features this function (i.e. at least 1.1.19)
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines :prop_tgt:`IMPORTED` target ``Cups::Cups``, if Cups has
+been found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``CUPS_FOUND``
+ true if CUPS headers and libraries were found
+``CUPS_INCLUDE_DIRS``
+ the directory containing the Cups headers
+``CUPS_LIBRARIES``
+ the libraries to link against to use CUPS.
+``CUPS_VERSION_STRING``
+ the version of CUPS found (since CMake 2.8.8)
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``CUPS_INCLUDE_DIR``
+ the directory containing the Cups headers
+#]=======================================================================]
+
+find_path(CUPS_INCLUDE_DIR cups/cups.h )
+
+find_library(CUPS_LIBRARIES NAMES cups )
+
+if (CUPS_INCLUDE_DIR AND CUPS_LIBRARIES AND CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
+ include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
+ include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_QUIET ${Cups_FIND_QUIETLY})
+
+ # ippDeleteAttribute is new in cups-1.1.19 (and used by kdeprint)
+ CHECK_LIBRARY_EXISTS(cups ippDeleteAttribute "" CUPS_HAS_IPP_DELETE_ATTRIBUTE)
+ cmake_pop_check_state()
+endif ()
+
+if (CUPS_INCLUDE_DIR AND EXISTS "${CUPS_INCLUDE_DIR}/cups/cups.h")
+ file(STRINGS "${CUPS_INCLUDE_DIR}/cups/cups.h" cups_version_str
+ REGEX "^#[\t ]*define[\t ]+CUPS_VERSION_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
+
+ unset(CUPS_VERSION_STRING)
+ foreach(VPART MAJOR MINOR PATCH)
+ foreach(VLINE ${cups_version_str})
+ if(VLINE MATCHES "^#[\t ]*define[\t ]+CUPS_VERSION_${VPART}[\t ]+([0-9]+)$")
+ set(CUPS_VERSION_PART "${CMAKE_MATCH_1}")
+ if(CUPS_VERSION_STRING)
+ string(APPEND CUPS_VERSION_STRING ".${CUPS_VERSION_PART}")
+ else()
+ set(CUPS_VERSION_STRING "${CUPS_VERSION_PART}")
+ endif()
+ endif()
+ endforeach()
+ endforeach()
+endif ()
+
+include(FindPackageHandleStandardArgs)
+
+if (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
+ REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR CUPS_HAS_IPP_DELETE_ATTRIBUTE
+ VERSION_VAR CUPS_VERSION_STRING)
+else ()
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
+ REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR
+ VERSION_VAR CUPS_VERSION_STRING)
+endif ()
+
+mark_as_advanced(CUPS_INCLUDE_DIR CUPS_LIBRARIES)
+
+if (CUPS_FOUND)
+ set(CUPS_INCLUDE_DIRS "${CUPS_INCLUDE_DIR}")
+ if (NOT TARGET Cups::Cups)
+ add_library(Cups::Cups INTERFACE IMPORTED)
+ set_target_properties(Cups::Cups PROPERTIES
+ INTERFACE_LINK_LIBRARIES "${CUPS_LIBRARIES}"
+ INTERFACE_INCLUDE_DIRECTORIES "${CUPS_INCLUDE_DIR}")
+ endif ()
+endif ()
diff --git a/cmake/FindGLESv2.cmake b/cmake/FindGLESv2.cmake
new file mode 100644
index 0000000000..a4af6cbbbc
--- /dev/null
+++ b/cmake/FindGLESv2.cmake
@@ -0,0 +1,40 @@
+include(CheckCXXSourceCompiles)
+
+find_library(GLESv2_LIBRARY NAMES GLESv2)
+find_path(GLESv2_INCLUDE_DIR NAMES "GLES2/gl2.h" DOC "The OpenGLES 2 include path")
+
+set(_libraries "${CMAKE_REQUIRED_LIBRARIES}")
+list(APPEND CMAKE_REQUIRED_LIBRARIES "${GLESv2_LIBRARY}")
+set(_includes "${CMAKE_REQUIRED_INCLUDES}")
+list(APPEND CMAKE_REQUIRED_INCLUDES "${GLESv2_INCLUDE_DIR}")
+
+check_cxx_source_compiles("
+#ifdef __APPLE__
+# include <OpenGLES/ES2/gl.h>
+#else
+# define GL_GLEXT_PROTOTYPES
+# include <GLES2/gl2.h>
+#endif
+
+int main(int argc, char *argv[]) {
+ glUniform1f(1, GLfloat(1.0));
+ glClear(GL_COLOR_BUFFER_BIT);
+}" HAVE_GLESv2)
+
+set(CMAKE_REQUIRED_LIBRARY "${_libraries}")
+unset(_libraries)
+set(CMAKE_REQUIRED_INCLUDES "${_includes}")
+unset(_includes)
+
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GLESv2 DEFAULT_MSG GLESv2_INCLUDE_DIR GLESv2_LIBRARY HAVE_GLESv2)
+
+mark_as_advanced(GLESv2_INCLUDE_DIR GLESv2_LIBRARY HAVE_GLESv2)
+
+if(GLESv2_FOUND AND NOT TARGET GLESv2::GLESv2)
+ add_library(GLESv2::GLESv2 UNKNOWN IMPORTED)
+ set_target_properties(GLESv2::GLESv2 PROPERTIES
+ IMPORTED_LOCATION "${GLESv2_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${GLESv2_INCLUDE_DIR}")
+endif()
diff --git a/cmake/FindGTK3.cmake b/cmake/FindGTK3.cmake
new file mode 100644
index 0000000000..9423eb4b9b
--- /dev/null
+++ b/cmake/FindGTK3.cmake
@@ -0,0 +1,7 @@
+include(FindPkgConfig)
+
+pkg_check_modules(GTK3 "gtk+-3.0 >= 3.6" IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::GTK3)
+ set(GTK3_FOUND 0)
+endif()
diff --git a/cmake/FindLibproxy.cmake b/cmake/FindLibproxy.cmake
new file mode 100644
index 0000000000..95d86d1617
--- /dev/null
+++ b/cmake/FindLibproxy.cmake
@@ -0,0 +1,7 @@
+find_package(PkgConfig)
+
+pkg_check_modules(Libproxy libproxy-1.0 IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::Libproxy)
+ set(Libproxy_FOUND 0)
+endif()
diff --git a/cmake/FindLibsystemd.cmake b/cmake/FindLibsystemd.cmake
new file mode 100644
index 0000000000..09c6452932
--- /dev/null
+++ b/cmake/FindLibsystemd.cmake
@@ -0,0 +1,7 @@
+find_package(PkgConfig)
+
+pkg_check_modules(Libsystemd systemd IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::Libsystemd)
+ set(Libsystemd_FOUND 0)
+endif()
diff --git a/cmake/FindLibudev.cmake b/cmake/FindLibudev.cmake
new file mode 100644
index 0000000000..637c7c6d88
--- /dev/null
+++ b/cmake/FindLibudev.cmake
@@ -0,0 +1,7 @@
+find_package(PkgConfig)
+
+pkg_check_modules(Libudev libudev IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::Libudev)
+ set(Libudev_FOUND 0)
+endif()
diff --git a/cmake/FindMtdev.cmake b/cmake/FindMtdev.cmake
new file mode 100644
index 0000000000..c852a77c1c
--- /dev/null
+++ b/cmake/FindMtdev.cmake
@@ -0,0 +1,7 @@
+find_package(PkgConfig)
+
+pkg_check_modules(Mtdev mtdev IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::MtDev)
+ set(Mtdev_FOUND 0)
+endif()
diff --git a/cmake/FindPPS.cmake b/cmake/FindPPS.cmake
new file mode 100644
index 0000000000..c3360fa82c
--- /dev/null
+++ b/cmake/FindPPS.cmake
@@ -0,0 +1,19 @@
+# Find the PPS library
+
+# Will make the target PPS::PPS available when found.
+
+find_library(PPS_LIBRARY NAMES "pps")
+find_path(PPS_INCLUDE_DIR NAMES "sys/pps.h" DOC "The PPS Include path")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PPS DEFAULT_MSG PPS_INCLUDE_DIR PPS_LIBRARY)
+
+mark_as_advanced(PPS_INCLUDE_DIR PPS_LIBRARY)
+
+if(PPS_FOUND)
+ add_library(__PPS INTERFACE IMPORTED)
+ target_link_libraries(__PPS INTERFACE ${PPS_LIBRARY})
+ target_include_directories(__PPS INTERFACE ${PPS_INCLUDE_DIR})
+
+ add_library(PPS::PPS ALIAS __PPS)
+endif()
diff --git a/cmake/FindSlog2.cmake b/cmake/FindSlog2.cmake
new file mode 100644
index 0000000000..dfb6635a39
--- /dev/null
+++ b/cmake/FindSlog2.cmake
@@ -0,0 +1,19 @@
+# Find the Slog2 library
+
+# Will make the target Slog2::Slog2 available when found.
+
+find_library(Slog2_LIBRARY NAMES "slog2")
+find_path(Slog2_INCLUDE_DIR NAMES "sys/slog2.h" DOC "The Slog2 Include path")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Slog2 DEFAULT_MSG Slog2_INCLUDE_DIR Slog2_LIBRARY)
+
+mark_as_advanced(Slog2_INCLUDE_DIR Slog2_LIBRARY)
+
+if(Slog2_FOUND)
+ add_library(__Slog2 INTERFACE IMPORTED)
+ target_link_libraries(__Slog2 INTERFACE ${Slog2_LIBRARY})
+ target_include_directories(__Slog2 INTERFACE ${Slog2_INCLUDE_DIR})
+
+ add_library(Slog2::Slog2 ALIAS __Slog2)
+endif()
diff --git a/cmake/FindTslib.cmake b/cmake/FindTslib.cmake
new file mode 100644
index 0000000000..3c50116d0a
--- /dev/null
+++ b/cmake/FindTslib.cmake
@@ -0,0 +1,7 @@
+find_package(PkgConfig)
+
+pkg_check_modules(Tslib tslib IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::Tslib)
+ set(Tslib_FOUND 0)
+endif()
diff --git a/cmake/FindWrapDBus1.cmake b/cmake/FindWrapDBus1.cmake
new file mode 100644
index 0000000000..42349a8b1a
--- /dev/null
+++ b/cmake/FindWrapDBus1.cmake
@@ -0,0 +1,31 @@
+# DBus1 is buggy and breaks PKG_CONFIG environment.
+# Work around that:-/
+# See https://gitlab.freedesktop.org/dbus/dbus/issues/267 for more information
+
+if(DEFINED ENV{PKG_CONFIG_DIR})
+ set(__qt_dbus_pcd "$ENV{PKG_CONFIG_DIR}")
+endif()
+if(DEFINED ENV{PKG_CONFIG_PATH})
+ set(__qt_dbus_pcp "$ENV{PKG_CONFIG_PATH}")
+endif()
+if(DEFINED ENV{PKG_CONFIG_LIBDIR})
+ set(__qt_dbus_pcl "$ENV{PKG_CONFIG_LIBDIR}")
+endif()
+
+find_package(DBus1)
+
+if(DEFINED __qt_dbus_pcd)
+ set(ENV{PKG_CONFIG_DIR} "${__qt_dbus_pcd}")
+else()
+ unset(ENV{PKG_CONFIG_DIR})
+endif()
+if(DEFINED __qt_dbus_pcp)
+ set(ENV{PKG_CONFIG_PATH} "${__qt_dbus_pcp}")
+else()
+ unset(ENV{PKG_CONFIG_PATH})
+endif()
+if(DEFINED __qt_dbus_pcl)
+ set(ENV{PKG_CONFIG_LIBDIR} "${__qt_dbus_pcl}")
+else()
+ unset(ENV{PKG_CONFIG_LIBDIR})
+endif()
diff --git a/cmake/FindWrapDoubleConversion.cmake b/cmake/FindWrapDoubleConversion.cmake
new file mode 100644
index 0000000000..9c804a3eec
--- /dev/null
+++ b/cmake/FindWrapDoubleConversion.cmake
@@ -0,0 +1,61 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapDoubleConversion::WrapDoubleConversion)
+ set(WrapDoubleConversion_FOUND ON)
+ return()
+endif()
+
+add_library(WrapDoubleConversion::WrapDoubleConversion INTERFACE IMPORTED)
+
+find_package(double-conversion)
+if (double-conversion_FOUND)
+ include(FeatureSummary)
+ set_package_properties(double-conversion PROPERTIES TYPE REQUIRED)
+ target_link_libraries(WrapDoubleConversion::WrapDoubleConversion
+ INTERFACE double-conversion::double-conversion)
+ set(WrapDoubleConversion_FOUND 1)
+ return()
+endif()
+
+include(CheckCXXSourceCompiles)
+
+check_cxx_source_compiles("
+#include <stdio.h>
+#include <locale.h>
+
+int main(int argc, char *argv[]) {
+ _locale_t invalidLocale = NULL;
+ double a = 3.14;
+ const char *format = \"invalid format\";
+ _sscanf_l(argv[0], invalidLocale, format, &a, &argc);
+ _snprintf_l(argv[0], 1, invalidLocale, format, a);
+}" HAVE__SPRINTF_L)
+
+check_cxx_source_compiles("
+#include <stdio.h>
+#include <xlocale.h>
+
+int main(int argc, char *argv[]) {
+ locale_t invalidLocale = NULL;
+ double a = 3.14;
+ const char *format = \"invalid format\";
+ snprintf_l(argv[0], 1, invalidLocale, format, a);
+ sscanf_l(argv[0], invalidLocale, format, &a, &argc);
+ return 0;
+}" HAVE_SPRINTF_L)
+
+# In a static build, we need to find the package to bring the target into scope.
+find_package(QtDoubleConversion QUIET)
+
+if (HAVE__SPRINTF_L OR HAVE_SPRINTF_L)
+ target_compile_definitions(WrapDoubleConversion::WrapDoubleConversion
+ INTERFACE QT_NO_DOUBLECONVERSION)
+ set(WrapDoubleConversion_FOUND 1)
+elseif(TARGET QtDoubleConversion)
+ # If a Config package wasn't found, and the C++ library doesn't contain the necessary functions,
+ # use the library bundled with Qt.
+ target_link_libraries(WrapDoubleConversion::WrapDoubleConversion INTERFACE QtDoubleConversion)
+ set(WrapDoubleConversion_FOUND 1)
+else()
+ set(WrapDoubleConversion_FOUND 0)
+endif()
diff --git a/cmake/FindWrapFreetype.cmake b/cmake/FindWrapFreetype.cmake
new file mode 100644
index 0000000000..ec7d2a8d24
--- /dev/null
+++ b/cmake/FindWrapFreetype.cmake
@@ -0,0 +1,33 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapFreetype::WrapFreetype)
+ set(WrapFreetype_FOUND ON)
+ return()
+endif()
+
+set(WrapFreetype_FOUND OFF)
+
+# Hunter has the package named freetype, but exports the Freetype::Freetype target as upstream
+# First try the CONFIG package, and afterwards the MODULE if not found
+
+find_package(Freetype CONFIG NAMES Freetype freetype QUIET)
+if(NOT Freetype_FOUND)
+ find_package(Freetype MODULE)
+endif()
+
+if(Freetype_FOUND)
+ # vcpkg defines a lower case target name, while upstream Find module defines a prefixed
+ # upper case name.
+ set(potential_target_names Freetype::Freetype freetype)
+ foreach(target_name ${potential_target_names})
+ if(TARGET ${target_name})
+ set(WrapFreetype_FOUND ON)
+ set(final_target_name ${target_name})
+
+ add_library(WrapFreetype::WrapFreetype INTERFACE IMPORTED)
+ target_link_libraries(WrapFreetype::WrapFreetype INTERFACE ${final_target_name})
+
+ break()
+ endif()
+ endforeach()
+endif()
diff --git a/cmake/FindWrapPCRE2.cmake b/cmake/FindWrapPCRE2.cmake
new file mode 100644
index 0000000000..b69c5078a5
--- /dev/null
+++ b/cmake/FindWrapPCRE2.cmake
@@ -0,0 +1,20 @@
+include_guard(GLOBAL) # pragma once equivalent
+
+find_package(PCRE2 CONFIG QUIET)
+
+if(PCRE2_FOUND AND TARGET PCRE2::pcre2-16)
+ # Hunter case.
+ add_library(WrapPCRE2::WrapPCRE2 INTERFACE IMPORTED)
+ target_link_libraries(WrapPCRE2::WrapPCRE2 INTERFACE PCRE2::pcre2-16)
+ set(WrapPCRE2_FOUND TRUE)
+else()
+ find_library(PCRE2_LIBRARIES NAMES pcre2-16)
+ find_path(PCRE2_INCLUDE_DIRS pcre2.h)
+
+ if (PCRE2_LIBRARIES AND PCRE2_INCLUDE_DIRS)
+ add_library(WrapPCRE2::WrapPCRE2 INTERFACE IMPORTED)
+ target_link_libraries(WrapPCRE2::WrapPCRE2 INTERFACE ${PCRE2_LIBRARIES})
+ target_include_directories(WrapPCRE2::WrapPCRE2 INTERFACE ${PCRE2_INCLUDE_DIRS})
+ set(WrapPCRE2_FOUND TRUE)
+ endif()
+endif()
diff --git a/cmake/FindWrapRt.cmake b/cmake/FindWrapRt.cmake
new file mode 100644
index 0000000000..d14b922062
--- /dev/null
+++ b/cmake/FindWrapRt.cmake
@@ -0,0 +1,34 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapRt)
+ set(WrapRt_FOUND ON)
+ return()
+endif()
+
+include(CheckCXXSourceCompiles)
+include(CMakePushCheckState)
+
+find_library(LIBRT rt)
+
+cmake_push_check_state()
+if(LIBRT_FOUND)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBRT}")
+endif()
+
+check_cxx_source_compiles("
+#include <unistd.h>
+#include <time.h>
+
+int main(int argc, char *argv[]) {
+ timespec ts; clock_gettime(CLOCK_REALTIME, &ts);
+}" HAVE_GETTIME)
+
+cmake_pop_check_state()
+
+add_library(WrapRt INTERFACE IMPORTED)
+if (LIBRT_FOUND)
+ target_link_libraries(WrapRt INTERFACE "${LIBRT}")
+endif()
+
+set(WrapRt_FOUND "${HAVE_GETTIME}")
+
diff --git a/cmake/FindXKB_COMMON_X11.cmake b/cmake/FindXKB_COMMON_X11.cmake
new file mode 100644
index 0000000000..61b4ba82e7
--- /dev/null
+++ b/cmake/FindXKB_COMMON_X11.cmake
@@ -0,0 +1,7 @@
+include(FindPkgConfig)
+
+pkg_check_modules(XKB_COMMON_X11 "xkbcommon-x11>=0.4.1" IMPORTED_TARGET)
+
+if (NOT TARGET PkgConfig::XKB_COMMON_X11)
+ set(XKB_COMMON_X11_FOUND 0)
+endif()
diff --git a/cmake/FindXRender.cmake b/cmake/FindXRender.cmake
new file mode 100644
index 0000000000..9f2e341208
--- /dev/null
+++ b/cmake/FindXRender.cmake
@@ -0,0 +1,9 @@
+include(FindPkgConfig)
+
+if(NOT TARGET PkgConfig::XRender)
+ pkg_check_modules(XRender xrender IMPORTED_TARGET)
+
+ if (NOT TARGET PkgConfig::XRender)
+ set(XRender_FOUND 0)
+ endif()
+endif()
diff --git a/cmake/FindZSTD.cmake b/cmake/FindZSTD.cmake
new file mode 100644
index 0000000000..90d667dc29
--- /dev/null
+++ b/cmake/FindZSTD.cmake
@@ -0,0 +1,50 @@
+#.rst:
+# FindZstd
+# ---------
+#
+# Try to locate the Zstd library.
+# If found, this will define the following variables:
+#
+# ``ZSTD_FOUND``
+# True if the zstd library is available
+# ``ZSTD_INCLUDE_DIRS``
+# The zstd include directories
+# ``ZSTD_LIBRARIES``
+# The zstd libraries for linking
+#
+# If ``ZSTD_FOUND`` is TRUE, it will also define the following
+# imported target:
+#
+# ``ZSTD::ZSTD``
+# The zstd library
+
+find_package(PkgConfig)
+pkg_check_modules(PC_ZSTD QUIET libzstd)
+
+find_path(ZSTD_INCLUDE_DIRS
+ NAMES zstd.h
+ HINTS ${PC_ZSTD_INCLUDEDIR}
+ PATH_SUFFIXES zstd)
+
+find_library(ZSTD_LIBRARIES
+ NAMES zstd zstd_static
+ HINTS ${PC_ZSTD_LIBDIR}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ZSTD DEFAULT_MSG ZSTD_LIBRARIES ZSTD_INCLUDE_DIRS)
+
+if(ZSTD_FOUND AND NOT TARGET ZSTD::ZSTD)
+ add_library(ZSTD::ZSTD UNKNOWN IMPORTED)
+ set_target_properties(ZSTD::ZSTD PROPERTIES
+ IMPORTED_LOCATION "${ZSTD_LIBRARIES}"
+ INTERFACE_INCLUDE_DIRECTORIES "${ZSTD_INCLUDE_DIRS}")
+endif()
+
+mark_as_advanced(ZSTD_INCLUDE_DIRS ZSTD_LIBRARIES)
+
+include(FeatureSummary)
+set_package_properties(ZSTD PROPERTIES
+ URL "https://github.com/facebook/zstd"
+ DESCRIPTION "ZSTD compression library")
+
diff --git a/cmake/Finddouble-conversion.cmake b/cmake/Finddouble-conversion.cmake
new file mode 100644
index 0000000000..43d2076289
--- /dev/null
+++ b/cmake/Finddouble-conversion.cmake
@@ -0,0 +1,32 @@
+# Fallback find module for double-conversion
+# if double-conversion is built with CMake it'll install a config module, which we prefer
+# if it's built with Scons (their default), we search ourselves
+
+find_package(double-conversion CONFIG)
+if (double-conversion_FOUND)
+ if(TARGET double-conversion::double-conversion)
+ return()
+ endif()
+endif()
+
+find_path(DOUBLE_CONVERSION_INCLUDE_DIR
+ NAMES
+ double-conversion.h
+ PATH_SUFFIXES
+ double-conversion
+)
+find_library(DOUBLE_CONVERSION_LIBRARY NAMES double-conversion)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ double-conversion DEFAULT_MSG
+ DOUBLE_CONVERSION_LIBRARY DOUBLE_CONVERSION_INCLUDE_DIR)
+
+if(double-conversion_FOUND AND NOT TARGET double-conversion::double-conversion)
+ add_library(double-conversion::double-conversion UNKNOWN IMPORTED)
+ set_target_properties(double-conversion::double-conversion PROPERTIES
+ IMPORTED_LOCATION "${DOUBLE_CONVERSION_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${DOUBLE_CONVERSION_INCLUDE_DIR}")
+endif()
+
+mark_as_advanced(DOUBLE_CONVERSION_INCLUDE_DIR DOUBLE_CONVERSION_LIBRARY)
diff --git a/cmake/QtAutoDetect.cmake b/cmake/QtAutoDetect.cmake
new file mode 100644
index 0000000000..a1e66ffcbe
--- /dev/null
+++ b/cmake/QtAutoDetect.cmake
@@ -0,0 +1,57 @@
+#
+# Collection of auto dection routines to improve the user eperience when
+# building Qt from source.
+#
+
+function(qt_auto_detect_android)
+ if(DEFINED CMAKE_TOOLCHAIN_FILE AND NOT DEFINED QT_AUTODETECT_ANDROID)
+
+ file(READ ${CMAKE_TOOLCHAIN_FILE} toolchain_file_content OFFSET 0 LIMIT 80)
+ string(FIND ${toolchain_file_content} "The Android Open Source Project" find_result REVERSE)
+ if (NOT ${find_result} EQUAL -1)
+ set(android_detected TRUE)
+ else()
+ set(android_detected FALSE)
+ endif()
+
+ if(android_detected)
+ message(STATUS "Android toolchain file detected, checking configuration defaults...")
+ if(NOT DEFINED ANDROID_NATIVE_API_LEVEL)
+ message(STATUS "ANDROID_NATIVE_API_LEVEL was not specified, using API level 21 as default")
+ set(ANDROID_NATIVE_API_LEVEL 21 CACHE STRING "")
+ endif()
+ if(NOT DEFINED ANDROID_STL)
+ set(ANDROID_STL "c++_shared" CACHE STRING "")
+ endif()
+ endif()
+ set(QT_AUTODETECT_ANDROID ${android_detected} CACHE STRING "")
+ elseif (QT_AUTODETECT_ANDROID)
+ message(STATUS "Android toolchain file detected")
+ endif()
+endfunction()
+
+function(qt_auto_detect_vpckg)
+ if(DEFINED ENV{VCPKG_ROOT})
+ set(vcpkg_toolchain_file "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
+ get_filename_component(vcpkg_toolchain_file "${vcpkg_toolchain_file}" ABSOLUTE)
+
+ if(DEFINED CMAKE_TOOLCHAIN_FILE)
+ get_filename_component(supplied_toolchain_file "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE)
+ if(NOT supplied_toolchain_file STREQUAL vcpkg_toolchain_file)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" CACHE STRING "")
+ endif()
+ unset(supplied_toolchain_file)
+ endif()
+ set(CMAKE_TOOLCHAIN_FILE "${vcpkg_toolchain_file}" CACHE STRING "" FORCE)
+ message(STATUS "Using vcpkg from $ENV{VCPKG_ROOT}")
+ if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
+ set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
+ message(STATUS "Using vcpkg triplet ${VCPKG_TARGET_TRIPLET}")
+ endif()
+ unset(vcpkg_toolchain_file)
+ endif()
+endfunction()
+
+
+qt_auto_detect_android()
+qt_auto_detect_vpckg()
diff --git a/cmake/QtBaseCMakeTesting.cmake b/cmake/QtBaseCMakeTesting.cmake
new file mode 100644
index 0000000000..662ac8f498
--- /dev/null
+++ b/cmake/QtBaseCMakeTesting.cmake
@@ -0,0 +1,9 @@
+## Test the cmake build system:
+option(BUILD_CMAKE_TESTING "Build tests for the Qt build system" OFF)
+mark_as_advanced(BUILD_CMAKE_TESTING)
+
+if(BUILD_CMAKE_TESTING)
+ add_subdirectory("${PROJECT_SOURCE_DIR}/cmake/tests")
+endif()
+
+
diff --git a/cmake/QtBaseConfigureTests.cmake b/cmake/QtBaseConfigureTests.cmake
new file mode 100644
index 0000000000..ffa5019ca0
--- /dev/null
+++ b/cmake/QtBaseConfigureTests.cmake
@@ -0,0 +1,154 @@
+include(CheckCXXSourceCompiles)
+function(run_config_test_architecture)
+ set(qt_base_configure_tests_vars_to_export)
+ # Test architecture
+ set(_arch_file "${CMAKE_CURRENT_BINARY_DIR}/architecture_test")
+ try_compile(_arch_result "${CMAKE_CURRENT_BINARY_DIR}"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/arch/arch.cpp"
+ COPY_FILE "${_arch_file}")
+ if (NOT _arch_result)
+ message(FATAL_ERROR "Failed to compile architecture detection file.")
+ endif()
+
+ file(STRINGS "${_arch_file}" _arch_lines LENGTH_MINIMUM 16 LENGTH_MAXIMUM 1024 ENCODING UTF-8)
+
+ foreach (_line ${_arch_lines})
+ string(LENGTH "${_line}" lineLength)
+ string(FIND "${_line}" "==Qt=magic=Qt== Architecture:" _pos)
+ if (_pos GREATER -1)
+ math(EXPR _pos "${_pos}+29")
+ string(SUBSTRING "${_line}" ${_pos} -1 _architecture)
+ endif()
+ string(FIND "${_line}" "==Qt=magic=Qt== Sub-architecture:" _pos)
+ if (_pos GREATER -1 AND ${lineLength} GREATER 33)
+ math(EXPR _pos "${_pos}+34")
+ string(SUBSTRING "${_line}" ${_pos} -1 _sub_architecture)
+ string(REPLACE " " ";" _sub_architecture "${_sub_architecture}")
+ endif()
+ string(FIND "${_line}" "==Qt=magic=Qt== Build-ABI:" _pos)
+ if (_pos GREATER -1)
+ math(EXPR _pos "${_pos}+26")
+ string(SUBSTRING "${_line}" ${_pos} -1 _build_abi)
+ endif()
+ endforeach()
+
+ if (NOT _architecture OR NOT _build_abi)
+ message(FATAL_ERROR "Failed to extract architecture data from file.")
+ endif()
+
+ set(TEST_architecture 1 CACHE INTERNAL "Ran the architecture test")
+ set(TEST_architecture_arch "${_architecture}" CACHE INTERNAL "Target machine architecture")
+ list(APPEND qt_base_configure_tests_vars_to_export TEST_architecture_arch)
+ set(TEST_subarch 1 CACHE INTERNAL "Ran machine subArchitecture test")
+ foreach(it ${_sub_architecture})
+ # Equivalent to qmake's QT_CPU_FEATURES.$arch.
+ set(TEST_arch_${TEST_architecture_arch}_subarch_${it} 1 CACHE INTERNAL "Target sub architecture result")
+ list(APPEND qt_base_configure_tests_vars_to_export TEST_arch_${TEST_architecture_arch}_subarch_${it})
+ endforeach()
+ set(TEST_buildAbi "${_build_abi}" CACHE INTERNAL "Target machine buildAbi")
+ list(APPEND qt_base_configure_tests_vars_to_export TEST_buildAbi)
+ set(qt_base_configure_tests_vars_to_export ${qt_base_configure_tests_vars_to_export} CACHE INTERNAL "Test variables that should be exported")
+endfunction()
+
+
+function(run_config_test_posix_iconv)
+ set(source "#include <iconv.h>
+
+int main(int, char **)
+{
+ iconv_t x = iconv_open(\"\", \"\");
+
+ char *inp;
+ char *outp;
+ size_t inbytes, outbytes;
+ iconv(x, &inp, &inbytes, &outp, &outbytes);
+
+ iconv_close(x);
+
+ return 0;
+}")
+ check_cxx_source_compiles("${source}" HAVE_POSIX_ICONV)
+
+ if(NOT HAVE_POSIX_ICONV)
+ set(_req_libraries "${CMAKE_REQUIRE_LIBRARIES}")
+ set(CMAKE_REQUIRE_LIBRARIES "iconv")
+ check_cxx_source_compiles("${source}" HAVE_POSIX_ICONV)
+ set(CMAKE_REQUIRE_LIBRARIES "${_req_libraries}")
+ if(HAVE_POSIX_ICONV)
+ set(TEST_iconv_needlib 1 CACHE INTERNAL "Need to link against libiconv")
+ endif()
+ endif()
+
+ set(TEST_posix_iconv "${HAVE_POSIX_ICONV}" CACHE INTERNAL "POSIX iconv")
+endfunction()
+
+
+function(run_config_test_sun_iconv)
+ set(source "#include <iconv.h>
+
+int main(int, char **)
+{
+ iconv_t x = iconv_open(\"\", \"\");
+
+ const char *inp;
+ char *outp;
+ size_t inbytes, outbytes;
+ iconv(x, &inp, &inbytes, &outp, &outbytes);
+
+ iconv_close(x);
+
+ return 0;
+}")
+ if(DARWIN)
+ # as per !config.darwin in configure.json
+ set(HAVE_SUN_ICONV OFF)
+ else()
+ check_cxx_source_compiles("${source}" HAVE_SUN_ICONV)
+ endif()
+
+ set(TEST_sun_iconv "${HAVE_SUN_ICONV}" CACHE INTERNAL "SUN libiconv")
+endfunction()
+
+function(run_linker_version_script_support)
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/version_flag.map" "VERS_1 { global: sym; };
+VERS_2 { global: sym; }
+VERS_1;
+")
+ if(DEFINED CMAKE_REQUIRED_FLAGS)
+ set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
+ else()
+ set(CMAKE_REQUIRED_FLAGS "")
+ endif()
+ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script=\"${CMAKE_CURRENT_BINARY_DIR}/version_flag.map\"")
+ check_cxx_source_compiles("int main(void){return 0;}" HAVE_LD_VERSION_SCRIPT)
+ if(DEFINED CMAKE_REQUIRED_FLAGS_SAVE)
+ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
+ endif()
+ file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
+
+ # For some reason the linker command line written by the XCode generator, which is
+ # subsequently executed by xcodebuild, ignores the linker flag, and thus the test
+ # seemingly succeeds. Explicitly disable the version script test on darwin platforms.
+ if(APPLE)
+ set(HAVE_LD_VERSION_SCRIPT OFF)
+ endif()
+
+ set(TEST_ld_version_script "${HAVE_LD_VERSION_SCRIPT}" CACHE INTERNAL "linker version script support")
+endfunction()
+
+function(run_config_tests)
+ run_config_test_posix_iconv()
+
+ add_library(Iconv INTERFACE)
+ if(TEST_iconv_needlib)
+ target_link_libraries(Iconv PUBLIC iconv)
+ endif()
+
+ if(NOT TEST_posix_iconv)
+ run_config_test_sun_iconv()
+ endif()
+ run_config_test_architecture()
+ run_linker_version_script_support()
+endfunction()
+
+run_config_tests()
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake
new file mode 100644
index 0000000000..84ead6244f
--- /dev/null
+++ b/cmake/QtBaseGlobalTargets.cmake
@@ -0,0 +1,227 @@
+## QtPlatform Target:
+add_library(Platform INTERFACE)
+add_library(Qt::Platform ALIAS Platform)
+target_include_directories(Platform
+ INTERFACE
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/${QT_PLATFORM_DEFINITION_DIR}>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
+ $<INSTALL_INTERFACE:${INSTALL_DATADIR}/${QT_PLATFORM_DEFINITION_DIR}>
+ $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
+ )
+target_compile_definitions(Platform INTERFACE ${QT_PLATFORM_DEFINITIONS})
+
+# When building on android we need to link against the logging library
+# in order to satisfy linker dependencies. Both of these libraries are part of
+# the NDK.
+if (ANDROID)
+ target_link_libraries(Platform INTERFACE log)
+endif()
+
+set(__GlobalConfig_path_suffix "${INSTALL_CMAKE_NAMESPACE}")
+qt_path_join(__GlobalConfig_build_dir ${QT_CONFIG_BUILD_DIR} ${__GlobalConfig_path_suffix})
+qt_path_join(__GlobalConfig_install_dir ${QT_CONFIG_INSTALL_DIR} ${__GlobalConfig_path_suffix})
+set(__GlobalConfig_install_dir_absolute "${__GlobalConfig_install_dir}")
+if(QT_WILL_INSTALL)
+ # Need to prepend the install prefix when doing prefix builds, because the config install dir
+ # is relative then.
+ qt_path_join(__GlobalConfig_install_dir_absolute
+ ${CMAKE_INSTALL_PREFIX} ${__GlobalConfig_install_dir_absolute})
+endif()
+
+# Generate and install Qt6 config file.
+configure_package_config_file(
+ "${PROJECT_SOURCE_DIR}/cmake/QtConfig.cmake.in"
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}Config.cmake"
+ INSTALL_DESTINATION "${__GlobalConfig_install_dir}"
+)
+
+write_basic_package_version_file(
+ ${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigVersion.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+)
+
+# Generate and install Qt6Tools config file.
+configure_package_config_file(
+ "${PROJECT_SOURCE_DIR}/cmake/QtToolsConfig.cmake.in"
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ToolsConfig.cmake"
+ INSTALL_DESTINATION "${__GlobalConfig_install_dir}"
+)
+write_basic_package_version_file(
+ ${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ToolsConfigVersion.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+)
+
+qt_install(FILES
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}Config.cmake"
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigVersion.cmake"
+ DESTINATION "${__GlobalConfig_install_dir}"
+ COMPONENT Devel
+)
+
+qt_install(FILES
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ToolsConfig.cmake"
+ "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ToolsConfigVersion.cmake"
+ DESTINATION "${__GlobalConfig_install_dir}Tools"
+ COMPONENT Devel
+)
+
+# Generate toolchain file for convenience
+if(QT_HOST_PATH)
+ get_filename_component(init_qt_host_path "${QT_HOST_PATH}" ABSOLUTE)
+ set(init_qt_host_path "set(QT_HOST_PATH \"${init_qt_host_path}\" CACHE PATH \"\" FORCE)")
+endif()
+
+if(CMAKE_TOOLCHAIN_FILE)
+ set(init_original_toolchain_file "set(qt_chainload_toolchain_file \"${CMAKE_TOOLCHAIN_FILE}\")")
+endif()
+
+if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ list(APPEND init_vcpkg "set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE \"${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}\")")
+endif()
+
+if(VCPKG_TARGET_TRIPLET)
+ list(APPEND init_vcpkg "set(VCPKG_TARGET_TRIPLET \"${VCPKG_TARGET_TRIPLET}\" CACHE STRING \"\")")
+endif()
+
+if(APPLE)
+ if(CMAKE_OSX_SYSROOT)
+ list(APPEND init_platform "set(CMAKE_OSX_SYSROOT \"${CMAKE_OSX_SYSROOT}\" CACHE PATH \"\")")
+ endif()
+ if(CMAKE_OSX_DEPLOYMENT_TARGET)
+ list(APPEND init_platform "set(CMAKE_OSX_DEPLOYMENT_TARGET \"${CMAKE_OSX_DEPLOYMENT_TARGET}\" CACHE STRING \"\")")
+ endif()
+elseif(WIN32)
+ # On Windows compilers aren't easily mixed. Avoid that qtbase is built using cl.exe for example and then for another
+ # build gcc is picked up from %PATH%.
+ list(APPEND init_platform "set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\" CACHE STRING \"\")")
+ list(APPEND init_platform "set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\" CACHE STRING \"\")")
+elseif(ANDROID)
+ list(APPEND init_platform "set(ANDROID_NATIVE_API_LEVEL \"${ANDROID_NATIVE_API_LEVEL}\" CACHE STRING \"\")")
+ list(APPEND init_platform "set(ANDROID_STL \"${ANDROID_STL}\" CACHE STRING \"\")")
+ list(APPEND init_platform "set(ANDROID_ABI \"${ANDROID_ABI}\" CACHE STRING \"\")")
+endif()
+
+string(REPLACE ";" "\n" init_vcpkg "${init_vcpkg}")
+string(REPLACE ";" "\n" init_platform "${init_platform}")
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/qt.toolchain.cmake.in" "${__GlobalConfig_build_dir}/qt.toolchain.cmake" @ONLY)
+qt_install(FILES "${__GlobalConfig_build_dir}/qt.toolchain.cmake" DESTINATION "${__GlobalConfig_install_dir}" COMPONENT Devel)
+
+# Also provide a convenience cmake wrapper
+if(UNIX)
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/bin/qt-cmake.in" "${QT_BUILD_DIR}/${INSTALL_BINDIR}/qt-cmake" @ONLY)
+ qt_install(PROGRAMS "${QT_BUILD_DIR}/bin/qt-cmake" DESTINATION "${INSTALL_BINDIR}")
+else()
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/bin/qt-cmake.bat.in" "${QT_BUILD_DIR}/${INSTALL_BINDIR}/qt-cmake.bat" @ONLY)
+ qt_install(PROGRAMS "${QT_BUILD_DIR}/bin/qt-cmake.bat" DESTINATION "${INSTALL_BINDIR}")
+endif()
+
+## Library to hold global features:
+## These features are stored and accessed via Qt::GlobalConfig, but the
+## files always lived in Qt::Core, so we keep it that way
+add_library(GlobalConfig INTERFACE)
+target_include_directories(GlobalConfig INTERFACE
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore>
+ $<INSTALL_INTERFACE:include>
+ $<INSTALL_INTERFACE:include/QtCore>
+)
+qt_feature_module_begin(NO_MODULE
+ PUBLIC_FILE src/corelib/global/qconfig.h
+ PRIVATE_FILE src/corelib/global/qconfig_p.h
+)
+include("${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake")
+qt_feature_module_end(GlobalConfig OUT_VAR_PREFIX "__GlobalConfig_")
+
+qt_generate_global_config_pri_file()
+
+add_library(Qt::GlobalConfig ALIAS GlobalConfig)
+
+add_library(GlobalConfigPrivate INTERFACE)
+target_link_libraries(GlobalConfigPrivate INTERFACE GlobalConfig)
+target_include_directories(GlobalConfigPrivate INTERFACE
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore/${PROJECT_VERSION}>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore/${PROJECT_VERSION}/QtCore>
+ $<INSTALL_INTERFACE:include/QtCore/${PROJECT_VERSION}>
+ $<INSTALL_INTERFACE:include/QtCore/${PROJECT_VERSION}/QtCore>
+)
+add_library(Qt::GlobalConfigPrivate ALIAS GlobalConfigPrivate)
+
+# defines PlatformCommonInternal PlatformModuleInternal PlatformPluginInternal PlatformToolInternal
+include(QtInternalTargets)
+
+set(__export_targets Platform
+ GlobalConfig
+ GlobalConfigPrivate
+ PlatformCommonInternal
+ PlatformModuleInternal
+ PlatformPluginInternal
+ PlatformToolInternal)
+set(__export_name "${INSTALL_CMAKE_NAMESPACE}Targets")
+qt_install(TARGETS ${__export_targets} EXPORT "${__export_name}")
+qt_install(EXPORT ${__export_name}
+ NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE}::
+ DESTINATION "${__GlobalConfig_install_dir}")
+
+qt_internal_export_modern_cmake_config_targets_file(TARGETS ${__export_targets}
+ EXPORT_NAME_PREFIX ${INSTALL_CMAKE_NAMESPACE}
+ CONFIG_INSTALL_DIR
+ ${__GlobalConfig_install_dir})
+
+## Install some QtBase specific CMake files:
+qt_copy_or_install(FILES
+ cmake/QtBuild.cmake
+ cmake/QtCompilerFlags.cmake
+ cmake/QtCompilerOptimization.cmake
+ cmake/QtFeature.cmake
+ cmake/QtPlatformSupport.cmake
+ cmake/QtPlatformAndroid.cmake
+ cmake/QtPostProcess.cmake
+ cmake/QtSetup.cmake
+ cmake/QtModuleConfig.cmake.in
+ cmake/QtModuleDependencies.cmake.in
+ cmake/QtModuleToolsDependencies.cmake.in
+ cmake/QtModuleToolsConfig.cmake.in
+ cmake/QtPlugins.cmake.in
+ cmake/QtPluginConfig.cmake.in
+ cmake/QtPluginDependencies.cmake.in
+ DESTINATION "${__GlobalConfig_install_dir}"
+)
+if(QT_WILL_INSTALL)
+ # NOTE: QtFeature.cmake is included by the Qt module config files unconditionally
+ # In a prefix build, QtFeature.cmake is not copied to the build dir by default
+ # Thus do it explicitly in that case so we can use the module config files in the examples
+ file(COPY cmake/QtFeature.cmake DESTINATION "${__GlobalConfig_install_dir}")
+endif()
+
+
+# TODO: Check whether this is the right place to install these
+qt_copy_or_install(DIRECTORY cmake/3rdparty DESTINATION "${__GlobalConfig_install_dir}")
+
+# Install our custom Find modules, which will be used by the find_dependency() calls
+# inside the generated ModuleDependencies cmake files.
+qt_copy_or_install(DIRECTORY cmake/
+ DESTINATION "${__GlobalConfig_install_dir}"
+ FILES_MATCHING PATTERN "Find*.cmake"
+ PATTERN "tests" EXCLUDE
+ PATTERN "3rdparty" EXCLUDE
+)
+
+# Configure and install the QtBuildInternals package.
+set(__build_internals_path_suffix "${INSTALL_CMAKE_NAMESPACE}BuildInternals")
+qt_path_join(__build_internals_build_dir ${QT_CONFIG_BUILD_DIR} ${__build_internals_path_suffix})
+qt_path_join(__build_internals_install_dir ${QT_CONFIG_INSTALL_DIR}
+ ${__build_internals_path_suffix})
+configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake"
+ "${__build_internals_build_dir}/${INSTALL_CMAKE_NAMESPACE}BuildInternalsConfig.cmake"
+ @ONLY
+ )
+
+qt_install(FILES
+ "${__build_internals_build_dir}/${INSTALL_CMAKE_NAMESPACE}BuildInternalsConfig.cmake"
+ "${__build_internals_build_dir}/QtBuildInternalsExtra.cmake"
+ DESTINATION "${__build_internals_install_dir}"
+ COMPONENT Devel
+)
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
new file mode 100644
index 0000000000..3aa0c30268
--- /dev/null
+++ b/cmake/QtBuild.cmake
@@ -0,0 +1,3184 @@
+include(CMakePackageConfigHelpers)
+
+# Install locations:
+set(INSTALL_BINDIR "bin" CACHE PATH "Executables [PREFIX/bin]")
+set(INSTALL_INCLUDEDIR "include" CACHE PATH "Header files [PREFIX/include]")
+set(INSTALL_LIBDIR "lib" CACHE PATH "Libraries [PREFIX/lib]")
+set(INSTALL_ARCHDATADIR "." CACHE PATH "Arch-dependent data [PREFIX]")
+set(INSTALL_PLUGINSDIR "${INSTALL_ARCHDATADIR}/plugins" CACHE PATH
+ "Plugins [ARCHDATADIR/plugins]")
+
+set(INSTALL_TARGETS_DEFAULT_ARGS
+ RUNTIME DESTINATION "${INSTALL_BINDIR}"
+ LIBRARY DESTINATION "${INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${INSTALL_LIBDIR}" COMPONENT Devel
+ INCLUDES DESTINATION "${INSTALL_INCLUDEDIR}"
+)
+
+if (WIN32)
+ set(_default_libexec "${INSTALL_ARCHDATADIR}/bin")
+else()
+ set(_default_libexec "${INSTALL_ARCHDATADIR}/libexec")
+endif()
+
+set(INSTALL_LIBEXECDIR "${_default_libexec}" CACHE PATH
+ "Helper programs [ARCHDATADIR/bin on Windows, ARCHDATADIR/libexec otherwise]")
+set(INSTALL_IMPORTDIR "${INSTALL_ARCHDATADIR}/imports" CACHE PATH
+ "QML1 imports [ARCHDATADIR/imports]")
+set(INSTALL_QMLDIR "${INSTALL_ARCHDATADIR}/qml" CACHE PATH
+ "QML2 imports [ARCHDATADIR/qml]")
+set(INSTALL_DATADIR "." CACHE PATH "Arch-independent data [PREFIX]")
+set(INSTALL_DOCDIR "${INSTALL_DATADIR}/doc" CACHE PATH "Documentation [DATADIR/doc]")
+set(INSTALL_TRANSLATIONSDIR "${INSTALL_DATADIR}/translations" CACHE PATH
+ "Translations [DATADIR/translations]")
+set(INSTALL_SYSCONFDIR "etc/xdg" CACHE PATH
+ "Settings used by Qt programs [PREFIX/etc/xdg]")
+set(INSTALL_EXAMPLESDIR "examples" CACHE PATH "Examples [PREFIX/examples]")
+set(INSTALL_TESTSDIR "tests" CACHE PATH "Tests [PREFIX/tests]")
+
+# The variables might have already been set in QtBuildInternalsExtra.cmake if the file is included
+# while building a new module and not QtBase. In that case, stop overriding the value.
+if(NOT INSTALL_CMAKE_NAMESPACE)
+ set(INSTALL_CMAKE_NAMESPACE "Qt${PROJECT_VERSION_MAJOR}"
+ CACHE STRING "CMake namespace [Qt${PROJECT_VERSION_MAJOR}]")
+endif()
+if(NOT QT_CMAKE_EXPORT_NAMESPACE)
+ set(QT_CMAKE_EXPORT_NAMESPACE "Qt${PROJECT_VERSION_MAJOR}"
+ CACHE STRING "CMake namespace used when exporting targets [Qt${PROJECT_VERSION_MAJOR}]")
+endif()
+
+set(QT_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}")
+
+# the default RPATH to be used when installing, but only if it's not a system directory
+LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
+IF("${isSystemDir}" STREQUAL "-1")
+ SET(_default_install_rpath "${CMAKE_INSTALL_PREFIX}/lib")
+ENDIF("${isSystemDir}" STREQUAL "-1")
+
+# Default rpath settings: Use rpath for build tree as well as a full path for the installed binaries.
+# For origin builds, one needs to override CMAKE_INSTALL_RPATH for example with $ORIGIN/../lib
+SET(CMAKE_INSTALL_RPATH "${_default_install_rpath}" CACHE PATH "RPATH for installed binaries")
+
+# add the automatically determined parts of the RPATH
+# which point to directories outside the build tree to the install RPATH
+SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+# Platform define path, etc.
+set(QT_QMAKE_TARGET_MKSPEC "")
+if(WIN32)
+ set(QT_DEFAULT_PLATFORM_DEFINITIONS UNICODE _UNICODE WIN32 _ENABLE_EXTENDED_ALIGNED_STORAGE)
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS WIN64 _WIN64)
+ endif()
+ if(MSVC)
+ set(QT_QMAKE_TARGET_MKSPEC win32-msvc)
+ elseif(CLANG)
+ set(QT_QMAKE_TARGET_MKSPEC win32-clang)
+ elseif(MINGW)
+ set(QT_QMAKE_TARGET_MKSPEC win32-g++)
+ list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS _WIN32_WINNT=0x0601)
+ endif()
+elseif(LINUX)
+ if(GCC)
+ set(QT_QMAKE_TARGET_MKSPEC linux-g++)
+ elseif(CLANG)
+ set(QT_QMAKE_TARGET_MKSPEC linux-clang)
+ elseif(ICC)
+ set(QT_QMAKE_TARGET_MKSPEC linux-icc-64)
+ endif()
+elseif(ANDROID)
+ if(GCC)
+ set(QT_QMAKE_TARGET_MKSPEC android-g++)
+ elseif(CLANG)
+ set(QT_QMAKE_TARGET_MKSPEC android-clang)
+ endif()
+elseif(APPLE)
+ set(QT_QMAKE_TARGET_MKSPEC macx-clang)
+endif()
+
+# TODO: Fixme to be correct.
+set(QT_QMAKE_HOST_MKSPEC "${QT_QMAKE_TARGET_MKSPEC}")
+
+if(QT_QMAKE_TARGET_MKSPEC)
+ set(QT_DEFAULT_PLATFORM_DEFINITION_DIR mkspecs/${QT_QMAKE_TARGET_MKSPEC})
+endif()
+
+if(NOT DEFINED QT_DEFAULT_PLATFORM_DEFINITIONS)
+ set(QT_DEFAULT_PLATFORM_DEFINITIONS "")
+endif()
+
+set(QT_PLATFORM_DEFINITIONS ${QT_DEFAULT_PLATFORM_DEFINITIONS}
+ CACHE STRING "Qt platform specific pre-processor defines")
+set(QT_PLATFORM_DEFINITION_DIR ${QT_DEFAULT_PLATFORM_DEFINITION_DIR}
+ CACHE PATH "Path to directory that contains qplatformdefs.h")
+set(QT_NAMESPACE "" CACHE STRING "Qt Namespace")
+if(QT_NAMESPACE STREQUAL "")
+ set(QT_HAS_NAMESPACE OFF)
+else()
+ set(QT_HAS_NAMESPACE ON)
+endif()
+
+macro(qt_internal_set_qt_known_modules)
+ set(QT_KNOWN_MODULES ${ARGN} CACHE INTERNAL "Known Qt modules" FORCE)
+endmacro()
+macro(qt_internal_set_qt_known_plugins)
+ set(QT_KNOWN_PLUGINS ${ARGN} CACHE INTERNAL "Known Qt plugins" FORCE)
+endmacro()
+
+# Reset:
+qt_internal_set_qt_known_modules("")
+qt_internal_set_qt_known_plugins("")
+
+set(QT_KNOWN_MODULES_WITH_TOOLS "" CACHE INTERNAL "Known Qt modules with tools" FORCE)
+macro(qt_internal_append_known_modules_with_tools module)
+ if(NOT ${module} IN_LIST QT_KNOWN_MODULES_WITH_TOOLS)
+ set(QT_KNOWN_MODULES_WITH_TOOLS "${QT_KNOWN_MODULES_WITH_TOOLS};${module}"
+ CACHE INTERNAL "Known Qt modules with tools" FORCE)
+ endif()
+endmacro()
+
+macro(qt_internal_append_known_module_tool module tool)
+ if(NOT ${tool} IN_LIST QT_KNOWN_MODULE_${module}_TOOLS)
+ list(APPEND QT_KNOWN_MODULE_${module}_TOOLS "${tool}")
+ set(QT_KNOWN_MODULE_${module}_TOOLS "${QT_KNOWN_MODULE_${module}_TOOLS}"
+ CACHE INTERNAL "Known Qt module ${module} tools" FORCE)
+ endif()
+endmacro()
+
+# Reset syncqt cache variable, to make sure it gets recomputed on reconfiguration, otherwise
+# it might not get installed.
+unset(QT_SYNCQT CACHE)
+
+# For adjusting variables when running tests, we need to know what
+# the correct variable is for separating entries in PATH-alike
+# variables.
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(QT_PATH_SEPARATOR "\\;")
+else()
+ set(QT_PATH_SEPARATOR ":")
+endif()
+
+# Compute the values of QT_BUILD_DIR, QT_INSTALL_DIR, QT_CONFIG_BUILD_DIR, QT_CONFIG_INSTALL_DIR
+# taking into account whether the current build is a prefix build or a non-prefix build.
+#
+# These values should be prepended to file paths in commands or properties,
+# in order to correctly place generated Config files, generated Targets files,
+# excutables / libraries, when copying / installing files, etc.
+#
+# The build dir variables will always be absolute paths.
+# The QT_INSTALL_DIR variable will have a relative path in a prefix build,
+# which means that it can be empty, so use qt_join_path to prevent accidental absolute paths.
+if(QT_WILL_INSTALL)
+ # In the usual prefix build case, the build dir is the current module build dir,
+ # and the install dir is the prefix, so we don't set it.
+ set(QT_BUILD_DIR "${CMAKE_BINARY_DIR}")
+ set(QT_INSTALL_DIR "")
+else()
+ # When doing a non-prefix build, both the build dir and install dir are the same,
+ # pointing to the qtbase build dir.
+ set(QT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}")
+ set(QT_INSTALL_DIR "${QT_BUILD_DIR}")
+endif()
+set(__config_path_part "${INSTALL_LIBDIR}/cmake")
+set(QT_CONFIG_BUILD_DIR "${QT_BUILD_DIR}/${__config_path_part}")
+set(QT_CONFIG_INSTALL_DIR "${QT_INSTALL_DIR}")
+if(QT_CONFIG_INSTALL_DIR)
+ string(APPEND QT_CONFIG_INSTALL_DIR "/")
+endif()
+string(APPEND QT_CONFIG_INSTALL_DIR ${__config_path_part})
+unset(__config_path_part)
+
+# This is used to hold extra cmake code that should be put into QtBuildInternalsExtra.cmake file
+# at the QtPostProcess stage.
+set(QT_BUILD_INTERNALS_EXTRA_CMAKE_CODE "")
+
+# Save the value of the current first project source dir.
+# This will be /path/to/qtbase for qtbase both in a super-build and a non super-build.
+# This will be /path/to/qtbase/tests when building standalone tests.
+set(QT_TOP_LEVEL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+
+# Functions and macros:
+
+# qt_remove_args can remove arguments from an existing list of function
+# arguments in order to pass a filtered list of arguments to a different function.
+# Parameters:
+# out_var: result of remove all arguments specified by ARGS_TO_REMOVE from ALL_ARGS
+# ARGS_TO_REMOVE: Arguments to remove.
+# ALL_ARGS: All arguments supplied to cmake_parse_arguments or
+# qt_parse_all_arguments
+# from which ARGS_TO_REMOVE should be removed from. We require all the
+# arguments or we can't properly identify the range of the arguments detailed
+# in ARGS_TO_REMOVE.
+# ARGS: Arguments passed into the function, usually ${ARGV}
+#
+# E.g.:
+# We want to forward all arguments from foo to bar, execpt ZZZ since it will
+# trigger an error in bar.
+#
+# foo(target BAR .... ZZZ .... WWW ...)
+# bar(target BAR.... WWW...)
+#
+# function(foo target)
+# qt_parse_all_arguments(arg "" "" "BAR;ZZZ;WWW ${ARGV})
+# qt_remove_args(forward_args
+# ARGS_TO_REMOVE ${target} ZZZ
+# ALL_ARGS ${target} BAR ZZZ WWW
+# ARGS ${ARGV}
+# )
+# bar(${target} ${forward_args})
+# endfunction()
+#
+function(qt_remove_args out_var)
+ cmake_parse_arguments(arg "" "" "ARGS_TO_REMOVE;ALL_ARGS;ARGS" ${ARGN})
+ set(result ${arg_ARGS})
+ foreach(arg IN LISTS arg_ARGS_TO_REMOVE)
+ # find arg
+ list(FIND result ${arg} find_result)
+ if (NOT find_result EQUAL -1)
+ # remove arg
+ list(REMOVE_AT result ${find_result})
+ list(LENGTH result result_len)
+ list(GET result ${find_result} arg_current)
+ # remove values until we hit another arg
+ while(NOT ${arg_current} IN_LIST arg_ALL_ARGS AND find_result LESS result_len)
+ list(REMOVE_AT result ${find_result})
+ list(GET result ${find_result} arg_current)
+ list(LENGTH result result_len)
+ endwhile()
+ endif()
+ endforeach()
+ set(${out_var} "${result}" PARENT_SCOPE)
+endfunction()
+# Wraps install() command. In a prefix build, simply passes along arguments to install().
+# In a non-prefix build, handles association of targets to export names, and also calls export().
+function(qt_install)
+ set(flags)
+ set(options EXPORT DESTINATION NAMESPACE)
+ set(multiopts TARGETS)
+ cmake_parse_arguments(arg "${flags}" "${options}" "${multiopts}" ${ARGN})
+
+ if(arg_TARGETS)
+ set(is_install_targets TRUE)
+ endif()
+
+ # In a prefix build, always invoke install() without modification.
+ # In a non-prefix build, pass install(TARGETS) commands to allow
+ # association of targets to export names, so we can later use the export names
+ # in export() commands.
+ if(QT_WILL_INSTALL OR is_install_targets)
+ install(${ARGV})
+ endif()
+
+ # Exit early if this is a prefix build.
+ if(QT_WILL_INSTALL)
+ return()
+ endif()
+
+ # In a non-prefix build, when install(EXPORT) is called,
+ # also call export(EXPORT) to generate build tree target files.
+ if(NOT is_install_targets AND arg_EXPORT)
+ set(namespace_option "")
+ if(arg_NAMESPACE)
+ set(namespace_option NAMESPACE ${arg_NAMESPACE})
+ endif()
+ export(EXPORT ${arg_EXPORT}
+ ${namespace_option}
+ FILE "${arg_DESTINATION}/${arg_EXPORT}.cmake")
+ endif()
+endfunction()
+
+# Copies files using file(COPY) signature in non-prefix builds.
+function(qt_non_prefix_copy)
+ if(NOT QT_WILL_INSTALL)
+ file(${ARGV})
+ endif()
+endfunction()
+
+# Use case is installing files in a prefix build, or copying them to the correct build dir
+# in a non-prefix build.
+# Pass along arguments as you would pass them to install().
+# Only supports FILES, PROGRAMS and DIRECTORY signature, and without fancy things
+# like OPTIONAL or RENAME or COMPONENT.
+function(qt_copy_or_install)
+ set(flags FILES PROGRAMS DIRECTORY)
+ set(options)
+ set(multiopts)
+ cmake_parse_arguments(arg "${flags}" "${options}" "${multiopts}" ${ARGN})
+
+ # Remember which option has to be passed to the install command.
+ set(argv_copy ${ARGV})
+ if(arg_FILES)
+ set(install_option "FILES")
+ elseif(arg_PROGRAMS)
+ set(install_option "PROGRAMS")
+ elseif(arg_DIRECTORY)
+ set(install_option "DIRECTORY")
+ endif()
+
+ list(REMOVE_AT argv_copy 0)
+ qt_install(${install_option} ${argv_copy})
+ qt_non_prefix_copy(COPY ${argv_copy})
+endfunction()
+
+# Hacky way to remove the install target in non-prefix builds.
+# We need to associate targets with export names, and that is only possible to do with the
+# install(TARGETS) command. But in a non-prefix build, we don't want to install anything.
+# To make sure that developers don't accidentally run make install, replace the generated
+# cmake_install.cmake file with an empty file. To do this, always create a new temporary file
+# at CMake configuration step, and use it as an input to a custom command that replaces the
+# cmake_install.cmake file with an empty one. This means we will always replace the file on
+# every reconfiguration, but not when doing null builds.
+function(remove_install_target)
+ set(file_in "${CMAKE_BINARY_DIR}/.remove_cmake_install_in.txt")
+ set(file_generated "${CMAKE_BINARY_DIR}/.remove_cmake_install_generated.txt")
+ set(cmake_install_file "${CMAKE_BINARY_DIR}/cmake_install.cmake")
+ file(WRITE ${file_in} "")
+
+ add_custom_command(OUTPUT ${file_generated}
+ COMMAND ${CMAKE_COMMAND} -E copy ${file_in} ${file_generated}
+ COMMAND ${CMAKE_COMMAND} -E remove ${cmake_install_file}
+ COMMAND ${CMAKE_COMMAND} -E touch ${cmake_install_file}
+ COMMENT "Removing cmake_install.cmake"
+ MAIN_DEPENDENCY ${file_in})
+
+ add_custom_target(remove_cmake_install ALL DEPENDS ${file_generated})
+endfunction()
+
+function(qt_set_up_nonprefix_build)
+ if(NOT QT_WILL_INSTALL)
+ remove_install_target()
+ endif()
+endfunction()
+
+function(qt_is_imported_target target out_var)
+ if(NOT TARGET "${target}")
+ set(target "${QT_CMAKE_EXPORT_NAMESPACE}::${target}")
+ endif()
+ if(NOT TARGET "${target}")
+ message(FATAL_ERROR "Invalid target given to qt_is_imported_target: ${target}")
+ endif()
+ get_target_property(is_imported "${target}" IMPORTED)
+ set(${out_var} "${is_imported}" PARENT_SCOPE)
+endfunction()
+
+# Generates module .pri files for consumption by qmake
+function(qt_generate_module_pri_file target target_path pri_files_var)
+ set(flags INTERNAL_MODULE)
+ set(options)
+ set(multiopts QMAKE_MODULE_CONFIG)
+ cmake_parse_arguments(arg "${flags}" "${options}" "${multiopts}" ${ARGN})
+
+ qt_internal_module_info(module "${target}")
+ set(pri_files)
+
+ get_target_property(enabled_features "${target}" QT_ENABLED_PUBLIC_FEATURES)
+ get_target_property(disabled_features "${target}" QT_DISABLED_PUBLIC_FEATURES)
+ get_target_property(enabled_private_features "${target}" QT_ENABLED_PRIVATE_FEATURES)
+ get_target_property(disabled_private_features "${target}" QT_DISABLED_PRIVATE_FEATURES)
+
+ foreach(var enabled_features disabled_features enabled_private_features disabled_private_features)
+ if(${var} STREQUAL "${var}-NOTFOUND")
+ set(${var} "")
+ else()
+ string (REPLACE ";" " " ${var} "${${var}}")
+ endif()
+ endforeach()
+
+ if(arg_QMAKE_MODULE_CONFIG)
+ string(REPLACE ";" " " module_config "${arg_QMAKE_MODULE_CONFIG}")
+ set(module_config "\nQT.${module_lower}.CONFIG = ${module_config}")
+ else()
+ set(module_config "")
+ endif()
+
+ if (NOT ${arg_INTERNAL_MODULE})
+ qt_path_join(pri_file_name "${target_path}" "qt_lib_${module_lower}.pri")
+ list(APPEND pri_files "${pri_file_name}")
+
+ file(GENERATE
+ OUTPUT "${pri_file_name}"
+ CONTENT
+ "QT.${module_lower}.VERSION = ${PROJECT_VERSION}
+QT.${module_lower}.name = ${module}
+QT.${module_lower}.module = ${module_versioned}
+QT.${module_lower}.libs = $$QT_MODULE_LIB_BASE
+QT.${module_lower}.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/${module}
+QT.${module_lower}.frameworks =
+QT.${module_lower}.bins = $$QT_MODULE_BIN_BASE
+QT.${module_lower}.depends =
+QT.${module_lower}.uses =
+QT.${module_lower}.module_config = v2
+QT.${module_lower}.DEFINES = QT_${module_define}_LIB
+QT.${module_lower}.enabled_features = ${enabled_features}
+QT.${module_lower}.disabled_features = ${disabled_features}${module_config}
+QT_MODULES += ${module_lower}
+"
+ )
+ endif()
+
+ qt_path_join(private_pri_file "${target_path}" "qt_lib_${module_lower}_private.pri")
+ list(APPEND pri_files "${private_pri_file}")
+
+ file(GENERATE
+ OUTPUT "${private_pri_file}"
+ CONTENT
+ "QT.${module_lower}_private.VERSION = ${PROJECT_VERSION}
+QT.${module_lower}_private.name = ${module}
+QT.${module_lower}_private.module =
+QT.${module_lower}_private.libs = $$QT_MODULE_LIB_BASE
+QT.${module_lower}_private.includes = $$QT_MODULE_INCLUDE_BASE/${module}/${PROJECT_VERSION} $$QT_MODULE_INCLUDE_BASE/${module}/${PROJECT_VERSION}/${module}
+QT.${module_lower}_private.frameworks =
+QT.${module_lower}_private.depends = ${module_lower}
+QT.${module_lower}_private.uses =
+QT.${module_lower}_private.module_config = v2
+QT.${module_lower}_private.enabled_features = ${enabled_private_features}
+QT.${module_lower}_private.disabled_features = ${disabled_private_features}
+"
+ )
+
+ set("${pri_files_var}" "${pri_files}" PARENT_SCOPE)
+endfunction()
+
+function(qt_generate_global_config_pri_file)
+ qt_path_join(qconfig_pri_target_path ${PROJECT_BINARY_DIR} mkspecs)
+ qt_path_join(qconfig_pri_target_path "${qconfig_pri_target_path}" "qconfig.pri")
+
+ get_target_property(enabled_features GlobalConfig INTERFACE_QT_ENABLED_PUBLIC_FEATURES)
+ get_target_property(disabled_features GlobalConfig INTERFACE_QT_DISABLED_PUBLIC_FEATURES)
+
+ # configure2cmake skips the "static" feature, so emulate it here for qmake support:
+ if(QT_BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
+ list(APPEND enabled_features shared)
+ list(APPEND disabled_features static)
+ set(qt_build_config_type "shared")
+ else()
+ list(APPEND enabled_features static)
+ list(APPEND disabled_features shared)
+ set(qt_build_config_type "static")
+ endif()
+
+ # configure2cmake skips the "rpath" feature, so emulate it here for qmake support:
+ if(CMAKE_SKIP_RPATH)
+ list(APPEND disabled_features rpath)
+ elseif(LINUX OR APPLE)
+ list(APPEND enabled_features rpath)
+ endif()
+
+ string (REPLACE ";" " " enabled_features "${enabled_features}")
+ string (REPLACE ";" " " disabled_features "${disabled_features}")
+
+ # Add some required CONFIG entries.
+ set(config_entries "")
+ if(CMAKE_BUILD_TYPE STREQUAL Debug)
+ list(APPEND config_entries "debug")
+ elseif(CMAKE_BUILD_TYPE STREQUAL Release)
+ list(APPEND config_entries "release")
+ endif()
+ list(APPEND config_entries "${qt_build_config_type}")
+ string (REPLACE ";" " " config_entries "${config_entries}")
+
+ file(GENERATE
+ OUTPUT "${qconfig_pri_target_path}"
+ CONTENT
+ "QT_ARCH = ${TEST_architecture_arch}
+QT_BUILDABI = ${TEST_buildAbi}
+QT.global.enabled_features = ${enabled_features}
+QT.global.disabled_features = ${disabled_features}
+QT_VERSION = ${PROJECT_VERSION}
+QT_MAJOR_VERSION = ${PROJECT_VERSION_MAJOR}
+QT_MINOR_VERSION = ${PROJECT_VERSION_MINOR}
+QT_PATCH_VERSION = ${PROJECT_VERSION_PATCH}
+CONFIG -= link_prl # we do not create prl files right now
+CONFIG += ${config_entries}
+"
+ )
+ qt_install(FILES "${qconfig_pri_target_path}" DESTINATION mkspecs)
+endfunction()
+
+# Takes a list of path components and joins them into one path separated by forward slashes "/",
+# and saves the path in out_var.
+function(qt_path_join out_var)
+ # Remove output variable.
+ set(argv ${ARGV})
+ list(REMOVE_AT argv 0)
+
+ # Join the path components.
+ string(JOIN "/" path ${argv})
+ set(${out_var} ${path} PARENT_SCOPE)
+endfunction()
+
+function(qt_internal_export_modern_cmake_config_targets_file)
+ cmake_parse_arguments(__arg "" "EXPORT_NAME_PREFIX;CONFIG_INSTALL_DIR" "TARGETS" ${ARGN})
+
+ set(export_name "${__arg_EXPORT_NAME_PREFIX}VersionlessTargets")
+ foreach(target ${__arg_TARGETS})
+ if (TARGET "${target}Versionless")
+ continue()
+ endif()
+
+ add_library("${target}Versionless" INTERFACE)
+ target_link_libraries("${target}Versionless" INTERFACE "${target}")
+ set_target_properties("${target}Versionless" PROPERTIES EXPORT_NAME "${target}")
+ qt_install(TARGETS "${target}Versionless" EXPORT ${export_name})
+ endforeach()
+ qt_install(EXPORT ${export_name} NAMESPACE Qt:: DESTINATION "${__arg_CONFIG_INSTALL_DIR}")
+endfunction()
+
+# Print all variables defined in the current scope.
+macro(qt_debug_print_variables)
+ cmake_parse_arguments(__arg "DEDUP" "" "MATCH;IGNORE" ${ARGN})
+ message("Known Variables:")
+ get_cmake_property(__variableNames VARIABLES)
+ list (SORT __variableNames)
+ if (__arg_DEDUP)
+ list(REMOVE_DUPLICATES __variableNames)
+ endif()
+
+ foreach(__var ${__variableNames})
+ set(__ignore OFF)
+ foreach(__i ${__arg_IGNORE})
+ if(__var MATCHES "${__i}")
+ set(__ignore ON)
+ break()
+ endif()
+ endforeach()
+
+ if (__ignore)
+ continue()
+ endif()
+
+ set(__show OFF)
+ foreach(__i ${__arg_MATCH})
+ if(__var MATCHES "${__i}")
+ set(__show ON)
+ break()
+ endif()
+ endforeach()
+
+ if (__show)
+ message(" ${__var}=${${__var}}.")
+ endif()
+ endforeach()
+endmacro()
+
+
+macro(assert)
+ if (${ARGN})
+ else()
+ message(FATAL_ERROR "ASSERT: ${ARGN}.")
+ endif()
+endmacro()
+
+
+function(qt_create_nolink_target target dependee_target)
+ if(NOT TARGET "${target}")
+ message(FATAL_ERROR "${target} does not exist when trying to build a nolink target.")
+ endif()
+ get_target_property(type "${target}" TYPE)
+ if(type STREQUAL EXECUTABLE)
+ message(FATAL_ERROR "${target} must be a library of some kind.")
+ endif()
+ if(type STREQUAL OBJECT_LIBRARY)
+ message(FATAL_ERROR "${target} must not be an object library.")
+ endif()
+
+ # Strip off the namespace prefix, so from Vulkan::Vulkan to Vulkan, and then append _nolink.
+ string(REGEX REPLACE "^.*::" "" non_prefixed_target ${target})
+ set(nolink_target "${non_prefixed_target}_nolink")
+
+ # Create the nolink interface target, assign the properties from the original target,
+ # associate the nolink target with the same export which contains
+ # the target that uses the _nolink target.
+ # Also create a namespaced alias of the form {$target}::${target}_nolink which is used by
+ # our modules.
+ if(NOT TARGET "${nolink_target}")
+ add_library("${nolink_target}" INTERFACE)
+ set(prefixed_nolink_target "${target}_nolink")
+ set_target_properties("${nolink_target}" PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES
+ $<TARGET_PROPERTY:${target},INTERFACE_INCLUDE_DIRECTORIES>
+ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
+ $<TARGET_PROPERTY:${target},INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
+ INTERFACE_COMPILE_DEFINITIONS
+ $<TARGET_PROPERTY:${target},INTERFACE_COMPILE_DEFINITIONS>
+ INTERFACE_COMPILE_OPTIONS
+ $<TARGET_PROPERTY:${target},INTERFACE_COMPILE_OPTIONS>
+ INTERFACE_COMPILE_FEATURES
+ $<TARGET_PROPERTY:${target},INTERFACE_COMPILE_FEATURES>)
+
+ add_library(${prefixed_nolink_target} ALIAS ${nolink_target})
+
+ set(export_name "${INSTALL_CMAKE_NAMESPACE}${dependee_target}Targets")
+ qt_install(TARGETS ${nolink_target} EXPORT ${export_name})
+ endif()
+endfunction()
+
+function(qt_ensure_perl)
+ if(DEFINED HOST_PERL)
+ return()
+ endif()
+ find_program(HOST_PERL "perl" DOC "Perl binary")
+ if (NOT HOST_PERL)
+ message(FATAL_ERROR "Perl needs to be available to build Qt.")
+ endif()
+endfunction()
+
+
+function(qt_ensure_sync_qt)
+ qt_ensure_perl()
+ if(DEFINED QT_SYNCQT)
+ return()
+ endif()
+
+ # When building qtbase, use the source syncqt, otherwise use the installed one.
+ set(SYNCQT_FROM_SOURCE "${QtBase_SOURCE_DIR}/bin/syncqt.pl")
+ if(EXISTS "${SYNCQT_FROM_SOURCE}")
+ set(QT_SYNCQT "${SYNCQT_FROM_SOURCE}" CACHE FILEPATH "syncqt script")
+ message(STATUS "Using source syncqt found at: ${QT_SYNCQT}")
+
+ qt_path_join(syncqt_install_dir ${QT_INSTALL_DIR} ${INSTALL_LIBEXECDIR})
+ qt_copy_or_install(PROGRAMS "${SYNCQT_FROM_SOURCE}"
+ DESTINATION "${syncqt_install_dir}")
+ else()
+ get_filename_component(syncqt_absolute_path
+ "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBEXECDIR}/syncqt.pl"
+ ABSOLUTE)
+ set(QT_SYNCQT "${syncqt_absolute_path}" CACHE FILEPATH "syncqt script")
+ message(STATUS "Using installed syncqt found at: ${QT_SYNCQT}")
+ endif()
+endfunction()
+
+# A version of cmake_parse_arguments that makes sure all arguments are processed and errors out
+# with a message about ${type} having received unknown arguments.
+macro(qt_parse_all_arguments result type flags options multiopts)
+ cmake_parse_arguments(${result} "${flags}" "${options}" "${multiopts}" ${ARGN})
+ if(DEFINED ${result}_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown arguments were passed to ${type} (${${result}_UNPARSED_ARGUMENTS}).")
+ endif()
+endmacro()
+
+
+function(qt_internal_add_link_flags_no_undefined target)
+ if (GCC OR CLANG)
+ if(APPLE)
+ set(no_undefined_flag "-Wl,-undefined,error")
+ elseif(LINUX OR MINGW OR ANDROID)
+ set(no_undefined_flag "-Wl,--no-undefined")
+ else()
+ message(FATAL_ERROR "Platform linker doesn't support erroring upon encountering undefined symbols. Target:\"${target}\".")
+ endif()
+ target_link_options("${target}" PRIVATE "${no_undefined_flag}")
+ endif()
+endfunction()
+
+function(qt_internal_add_link_flags_gc_sections target visibility)
+ set(possible_visibilities PRIVATE INTERFACE PUBLIC)
+ list(FIND possible_visibilities "${visibility}" known_visibility)
+ if (known_visibility EQUAL "-1")
+ message(FATAL_ERROR "Visibitily setting must be one of PRIVATE, INTERFACE or PUBLIC.")
+ endif()
+
+ if (GCC OR CLANG)
+ if(APPLE)
+ set(gc_sections_flag "-Wl,-dead_strip")
+ elseif(LINUX OR BSD OR SOLARIS OR WIN32 OR ANDROID)
+ set(gc_sections_flag "-Wl,--gc-sections")
+ else()
+ message(FATAL_ERROR "Platform linker doesn't support gc sections. Target:\"${target}\".")
+ endif()
+ target_link_options("${target}" ${visibility} "${gc_sections_flag}")
+ endif()
+endfunction()
+
+function(qt_internal_add_linker_version_script target)
+ qt_parse_all_arguments(arg "qt_internal_add_linker" "INTERNAL" "" "PRIVATE_HEADERS" ${ARGN})
+
+ if (TEST_ld_version_script)
+ if (arg_INTERNAL)
+ set(contents "Qt_${PROJECT_VERSION_MAJOR}_PRIVATE_API { *; };")
+ else()
+ set(contents "Qt_${PROJECT_VERSION_MAJOR}_PRIVATE_API {\n qt_private_api_tag*;\n")
+ foreach(ph ${arg_PRIVATE_HEADERS})
+ string(APPEND contents " @FILE:${ph}@\n")
+ endforeach()
+ string(APPEND contents "};\n")
+ set(current "Qt_${PROJECT_VERSION_MAJOR}")
+ if (QT_NAMESPACE STREQUAL "")
+ set(tag_symbol "qt_version_tag")
+ else()
+ set(tag_symbol "qt_version_tag_${QT_NAMESPACE}")
+ endif()
+ string(APPEND contents "${current} { *; };\n")
+
+ foreach(minor_version RANGE ${PROJECT_VERSION_MINOR})
+ set(previous "${current}")
+ set(current "Qt_${PROJECT_VERSION_MAJOR}.${minor_version}")
+ if (minor_version EQUAL ${PROJECT_VERSION_MINOR})
+ string(APPEND contents "${current} { ${tag_symbol}; } ${previous};\n")
+ else()
+ string(APPEND contents "${current} {} ${previous};\n")
+ endif()
+ endforeach()
+
+ set(infile "${CMAKE_CURRENT_BINARY_DIR}/${target}.version.in")
+ set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${target}.version")
+
+ file(GENERATE OUTPUT "${infile}" CONTENT "${contents}")
+
+ qt_ensure_perl()
+
+ add_custom_command(TARGET "${target}" PRE_LINK
+ COMMAND "${HOST_PERL}" "${PROJECT_SOURCE_DIR}/mkspecs/features/data/unix/findclasslist.pl" < "${infile}" > "${outfile}"
+ BYPRODUCTS "${outfile}" DEPENDS "${infile}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Generating version linker script"
+ )
+ target_link_options("${target}" PRIVATE "-Wl,--version-script,${outfile}")
+ endif()
+ endif()
+endfunction()
+
+
+# Get a set of Qt module related values based on the target name.
+# When doing qt_internal_module_info(foo Core) this method will set
+# the following variables in the caller's scope:
+# * foo with the value "QtCore"
+# * foo_versioned with the value "Qt6Core" (based on major Qt version)
+# * foo_upper with the value "CORE"
+# * foo_lower with the value "core"
+# * foo_repo_include_dir with the module's include directory
+# e.g for QtQuick it would be qtdeclarative_build_dir/include for a prefix build or
+# qtbase_build_dir/include for a non-prefix build
+# * foo_include_dir with the module's include directory
+# e.g for QtQuick it would be qtdeclarative_build_dir/include/QtQuick for a prefix build or
+# qtbase_build_dir/include/QtQuick for a non-prefix build
+# * foo_define same as foo_uper but with - replaced as _
+function(qt_internal_module_info result target)
+ set(module "Qt${target}")
+ set("${result}" "${module}" PARENT_SCOPE)
+ set("${result}_versioned" "Qt${PROJECT_VERSION_MAJOR}${target}" PARENT_SCOPE)
+ string(TOUPPER "${target}" upper)
+ string(TOLOWER "${target}" lower)# * foo_upper with the value "CORE"
+ string(REPLACE "-" "_" define "${upper}")
+ string(REPLACE "." "_" define "${define}")
+ set("${result}_upper" "${upper}" PARENT_SCOPE)
+ set("${result}_lower" "${lower}" PARENT_SCOPE)
+ set("${result}_repo_include_dir" "${QT_BUILD_DIR}/include" PARENT_SCOPE)
+ set("${result}_include_dir" "${QT_BUILD_DIR}/include/${module}" PARENT_SCOPE)
+ set("${result}_define" "${define}" PARENT_SCOPE)
+endfunction()
+
+
+set(__default_private_args "SOURCES;LIBRARIES;INCLUDE_DIRECTORIES;DEFINES;DBUS_ADAPTOR_BASENAME;DBUS_ADAPTOR_FLAGS;DBUS_ADAPTOR_SOURCES;DBUS_INTERFACE_BASENAME;DBUS_INTERFACE_FLAGS;DBUS_INTERFACE_SOURCES;FEATURE_DEPENDENCIES;COMPILE_OPTIONS;LINK_OPTIONS;MOC_OPTIONS;DISABLE_AUTOGEN_TOOLS;ENABLE_AUTOGEN_TOOLS;PLUGIN_TYPES")
+
+set(__default_public_args "PUBLIC_LIBRARIES;PUBLIC_INCLUDE_DIRECTORIES;PUBLIC_DEFINES;PUBLIC_COMPILE_OPTIONS;PUBLIC_LINK_OPTIONS")
+
+
+option(QT_CMAKE_DEBUG_EXTEND_TARGET "Debug extend_target calls in Qt's build system" OFF)
+
+# Initial autogen setup for a target to specify certain CMake properties which are common
+# to all autogen tools. Also enable AUTOMOC by default.
+function(qt_autogen_tools_initial_setup target)
+ set_property(TARGET "${target}" PROPERTY INTERFACE_QT_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
+ set_property(TARGET "${target}" APPEND PROPERTY COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION)
+
+ set_directory_properties(PROPERTIES
+ QT_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}
+ QT_VERSION_MINOR ${PROJECT_VERSION_MINOR})
+
+ qt_enable_autogen_tool(${target} "moc" ON)
+endfunction()
+
+# Enables or disables an autogen tool like moc, uic or rcc on ${target}.
+function(qt_enable_autogen_tool target tool enable)
+ string(TOUPPER "${tool}" captitalAutogenTool)
+
+ get_target_property(tool_enabled ${target} AUTO${captitalAutogenTool})
+ get_target_property(autogen_target_depends ${target} AUTOGEN_TARGET_DEPENDS)
+
+ if(NOT autogen_target_depends)
+ set(autogen_target_depends "")
+ endif()
+ set(tool_executable "$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::${tool}>")
+ set(tool_target_name ${QT_CMAKE_EXPORT_NAMESPACE}::${tool})
+
+ if(enable)
+ list(APPEND autogen_target_depends ${tool_target_name})
+ else()
+ list(REMOVE_ITEM autogen_target_depends ${tool_target_name})
+ endif()
+
+ # f66c1db16c050c9d685a44a38ad7c5cf9f6fcc96 in qtbase introduced a new macro
+ # that the moc scanner has to look for. Inform the CMake moc scanner about it.
+ if(tool STREQUAL "moc" AND enable)
+ set_target_properties("${target}" PROPERTIES
+ AUTOMOC_MACRO_NAMES "Q_OBJECT;Q_GADGET;Q_NAMESPACE;Q_NAMESPACE_EXPORT")
+ endif()
+
+ set_target_properties("${target}"
+ PROPERTIES
+ AUTO${captitalAutogenTool} "${enable}"
+ AUTO${captitalAutogenTool}_EXECUTABLE "${tool_executable}"
+ AUTOGEN_TARGET_DEPENDS "${autogen_target_depends}"
+ )
+endfunction()
+
+# This function adds or removes additional AUTOGEN tools to a target: AUTOMOC/UIC/RCC
+function(qt_autogen_tools target)
+ qt_parse_all_arguments(arg "qt_autogen_tools" "" "" "${__default_private_args}" ${ARGN})
+
+ if (arg_ENABLE_AUTOGEN_TOOLS)
+ foreach(tool ${arg_ENABLE_AUTOGEN_TOOLS})
+ qt_enable_autogen_tool(${target} ${tool} ON)
+ endforeach()
+ endif()
+
+ if (arg_DISABLE_AUTOGEN_TOOLS)
+ foreach(tool ${arg_DISABLE_AUTOGEN_TOOLS})
+ qt_enable_autogen_tool(${target} ${tool} OFF)
+ endforeach()
+ endif()
+endfunction()
+
+# This function stores the list of Qt modules a library depend on,
+# along with their version info, for usage in ${target}Depends.cmake file
+function(qt_register_target_dependencies target public_libs private_libs)
+ get_target_property(target_deps "${target}" _qt_target_deps)
+ if(NOT target_deps)
+ set(target_deps "")
+ endif()
+
+ foreach(lib IN LISTS public_libs private_libs)
+ if ("${lib}" MATCHES "^Qt::(.*)")
+ set(lib "${CMAKE_MATCH_1}")
+ if (lib STREQUAL Platform
+ OR lib STREQUAL GlobalConfig
+ OR lib STREQUAL GlobalConfigPrivate
+ OR lib STREQUAL PlatformModuleInternal
+ OR lib STREQUAL PlatformPluginInternal
+ OR lib STREQUAL PlatformToolInternal)
+ list(APPEND target_deps "Qt6\;${PROJECT_VERSION}")
+ elseif ("${lib}" MATCHES "(.*)Private")
+ list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${CMAKE_MATCH_1}\;${PROJECT_VERSION}")
+ else()
+ list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${lib}\;${PROJECT_VERSION}")
+ endif()
+ endif()
+ endforeach()
+
+ set_target_properties("${target}" PROPERTIES _qt_target_deps "${target_deps}")
+endfunction()
+
+# This function can be used to add sources/libraries/etc. to the specified CMake target
+# if the provided CONDITION evaluates to true.
+function(extend_target target)
+ # Don't try to extend_target when cross compiling an imported host target (like a tool).
+ qt_is_imported_target("${target}" is_imported)
+ if(is_imported)
+ return()
+ endif()
+
+ if (NOT TARGET "${target}")
+ message(FATAL_ERROR "Trying to extend non-existing target \"${target}\".")
+ endif()
+ qt_parse_all_arguments(arg "extend_target" "" ""
+ "CONDITION;${__default_public_args};${__default_private_args};COMPILE_FLAGS" ${ARGN})
+ if ("x${arg_CONDITION}" STREQUAL x)
+ set(arg_CONDITION ON)
+ endif()
+
+ qt_evaluate_config_expression(result ${arg_CONDITION})
+ if (${result})
+ if(QT_CMAKE_DEBUG_EXTEND_TARGET)
+ message("extend_target(${target} CONDITION ${arg_CONDITION} ...): Evaluated")
+ endif()
+ set(dbus_sources "")
+ foreach(adaptor ${arg_DBUS_ADAPTOR_SOURCES})
+ qt_create_qdbusxml2cpp_command("${target}" "${adaptor}" ADAPTOR BASENAME "${arg_DBUS_ADAPTOR_BASENAME}" FLAGS "${arg_DBUS_ADAPTOR_FLAGS}")
+ list(APPEND dbus_sources "${sources}")
+ endforeach()
+
+ foreach(interface ${arg_DBUS_INTERFACE_SOURCES})
+ qt_create_qdbusxml2cpp_command("${target}" "${interface}" INTERFACE BASENAME "${arg_DBUS_INTERFACE_BASENAME}" FLAGS "${arg_DBUS_INTERFACE_FLAGS}")
+ list(APPEND dbus_sources "${sources}")
+ endforeach()
+
+ foreach(lib ${arg_PUBLIC_LIBRARIES} ${arg_LIBRARIES})
+ string(REGEX REPLACE "_nolink$" "" base_lib "${lib}")
+ if(NOT base_lib STREQUAL lib)
+ qt_create_nolink_target("${base_lib}" ${target})
+ endif()
+ endforeach()
+
+ # Find dependencies to internal libraries
+ get_target_property(target_deps "${target}" _qt_target_deps)
+ if(NOT target_deps)
+ set(target_deps "")
+ endif()
+
+ foreach(lib ${arg_LIBRARIES})
+ if (TARGET "${lib}")
+ get_target_property(_is_exported "${lib}" INTERFACE_QT_EXPORTED_LIBRARY)
+ if("${_is_exported}")
+ list(APPEND target_deps "${lib}\;${PROJECT_VERSION}")
+ endif()
+ endif()
+ endforeach()
+ # Set-up the target
+ target_sources("${target}" PRIVATE ${arg_SOURCES} ${dbus_sources})
+ if (arg_COMPILE_FLAGS)
+ set_source_files_properties(${arg_SOURCES} PROPERTIES COMPILE_FLAGS "${arg_COMPILE_FLAGS}")
+ endif()
+ target_include_directories("${target}" PUBLIC ${arg_PUBLIC_INCLUDE_DIRECTORIES} PRIVATE ${arg_INCLUDE_DIRECTORIES})
+ target_compile_definitions("${target}" PUBLIC ${arg_PUBLIC_DEFINES} PRIVATE ${arg_DEFINES})
+ target_link_libraries("${target}" PUBLIC ${arg_PUBLIC_LIBRARIES} PRIVATE ${arg_LIBRARIES})
+ target_compile_options("${target}" PUBLIC ${arg_PUBLIC_COMPILE_OPTIONS} PRIVATE ${arg_COMPILE_OPTIONS})
+ target_link_options("${target}" PUBLIC ${arg_PUBLIC_LINK_OPTIONS} PRIVATE ${arg_LINK_OPTIONS})
+
+ set_target_properties("${target}" PROPERTIES
+ AUTOMOC_MOC_OPTIONS "${arg_MOC_OPTIONS}"
+ _qt_target_deps "${target_deps}"
+ )
+
+ # When computing the private library dependencies, we need to check not only the known
+ # modules added by this repo's qt_build_repo() (which are stored in QT_KNOWN_MODULES), but
+ # also all module dependencies that were found via find_package() (which are stored in
+ # QT_ALL_MODULES_FOUND_VIA_FIND_PACKAGE).
+ set(known_modules ${QT_ALL_MODULES_FOUND_VIA_FIND_PACKAGE} ${QT_KNOWN_MODULES})
+ list(REMOVE_DUPLICATES known_modules)
+
+ # When a public module depends on a private module (Gui on CorePrivate)
+ # make its private module depend on the other private module (GuiPrivate will depend on
+ # CorePrivate).
+ set(qt_libs_private "")
+ foreach(it ${known_modules})
+ list(FIND arg_LIBRARIES "Qt::${it}Private" pos)
+ if(pos GREATER -1)
+ list(APPEND qt_libs_private "Qt::${it}Private")
+ endif()
+ endforeach()
+
+ set(target_private "${target}Private")
+ if(TARGET "${target_private}")
+ target_link_libraries("${target_private}" INTERFACE "${target}" "${qt_libs_private}")
+ endif()
+ qt_register_target_dependencies("${target}"
+ "${arg_PUBLIC_LIBRARIES}"
+ "${qt_libs_private};${arg_LIBRARIES}")
+
+
+ qt_autogen_tools(${target}
+ ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
+ DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS})
+
+ else()
+ if(QT_CMAKE_DEBUG_EXTEND_TARGET)
+ message("extend_target(${target} CONDITION ${arg_CONDITION} ...): Skipped")
+ endif()
+ endif()
+endfunction()
+
+
+function(qt_internal_library_deprecation_level result)
+ if(WIN32)
+ # On Windows, due to the way DLLs work, we need to export all functions,
+ # including the inlines
+ set("${result}" "QT_DISABLE_DEPRECATED_BEFORE=0x040800" PARENT_SCOPE)
+ else()
+ # On other platforms, Qt's own compilation goes needs to compile the Qt 5.0 API
+ set("${result}" "QT_DISABLE_DEPRECATED_BEFORE=0x050000" PARENT_SCOPE)
+ endif()
+ set("${result}" "QT_DEPRECATED_WARNINGS_SINCE=0x060000" PARENT_SCOPE)
+endfunction()
+
+
+function(qt_install_injections module build_dir install_dir)
+ set(injections ${ARGN})
+ # examples:
+ # SYNCQT.INJECTIONS = src/corelib/global/qconfig.h:qconfig.h:QtConfig src/corelib/global/qconfig_p.h:5.12.0/QtCore/private/qconfig_p.h
+ # SYNCQT.INJECTIONS = src/gui/vulkan/qvulkanfunctions.h:^qvulkanfunctions.h:QVulkanFunctions:QVulkanDeviceFunctions src/gui/vulkan/qvulkanfunctions_p.h:^5.12.0/QtGui/private/qvulkanfunctions_p.h
+ # The are 3 parts to the assignment, divded by colons ':'.
+ # The first part contains a path to a generated file in a build folder.
+ # The second part contains the file name that the forwarding header should have, which points
+ # to the file in the first part.
+ # The third part contains multiple UpperCaseFileNames that should be forwarding headers to the
+ # header specified in the second part.
+ separate_arguments(injections UNIX_COMMAND "${injections}")
+ foreach(injection ${injections})
+ string(REPLACE ":" ";" injection ${injection})
+ # Part 1.
+ list(GET injection 0 file)
+ # Part 2.
+ list(GET injection 1 destination)
+ string(REGEX REPLACE "^\\^" "" destination "${destination}")
+ list(REMOVE_AT injection 0 1)
+ # Part 3.
+ set(fwd_hdrs ${injection})
+ get_filename_component(destinationdir ${destination} DIRECTORY)
+ get_filename_component(destinationname ${destination} NAME)
+ get_filename_component(original_file_name ${file} NAME)
+
+ # This describes a concrete example for easier comprehension:
+ # A file 'qtqml-config.h' is generated by qt_internal_feature_write_file into
+ # ${qtdeclarative_build_dir}/src/{module}/qtqml-config.h (part 1).
+ #
+ # Generate a lower case forwarding header (part 2) 'qtqml-config.h' at the following
+ # location:
+ # ${some_prefix}/include/${module}/qtqml-config.h.
+ #
+ # Inside this file, we #include the originally generated file,
+ # ${qtdeclarative_build_dir}/src/{module}/qtqml-config.h.
+ #
+ # ${some_prefix}'s value depends on the build type.
+ # If doing a prefix build, it should point to
+ # ${current_repo_build_dir} which is ${qtdeclarative_build_dir}.
+ # If doing a non-prefix build, it should point to
+ # ${qtbase_build_dir}.
+ #
+ # In the code below, ${some_prefix} == ${build_dir}.
+ set(lower_case_forwarding_header_path "${build_dir}/${INSTALL_INCLUDEDIR}/${module}")
+ if(destinationdir)
+ string(APPEND lower_case_forwarding_header_path "/${destinationdir}")
+ endif()
+ set(current_repo_build_dir "${PROJECT_BINARY_DIR}")
+
+ file(RELATIVE_PATH relpath
+ "${lower_case_forwarding_header_path}"
+ "${current_repo_build_dir}/${file}")
+ set(main_contents "#include \"${relpath}\"")
+ file(GENERATE OUTPUT "${lower_case_forwarding_header_path}/${original_file_name}"
+ CONTENT "${main_contents}")
+
+ # Copy the actual injected (generated) header file (not the just created forwarding one)
+ # to its install location when doing a prefix build. In an non-prefix build, the qt_install
+ # will be a no-op.
+ qt_path_join(install_destination
+ ${install_dir} ${INSTALL_INCLUDEDIR} ${module} ${destinationdir})
+ qt_install(FILES ${current_repo_build_dir}/${file}
+ DESTINATION ${install_destination}
+ RENAME ${destinationname} OPTIONAL)
+
+ # Generate UpperCaseNamed forwarding headers (part 3).
+ foreach(fwd_hdr ${fwd_hdrs})
+ set(upper_case_forwarding_header_path "${INSTALL_INCLUDEDIR}/${module}")
+ if(destinationdir)
+ string(APPEND upper_case_forwarding_header_path "/${destinationdir}")
+ endif()
+
+ # Generate upper case forwarding header like QVulkanFunctions or QtConfig.
+ file(GENERATE OUTPUT "${build_dir}/${upper_case_forwarding_header_path}/${fwd_hdr}"
+ CONTENT "#include \"${destinationname}\"\n")
+
+ # Install the forwarding header.
+ qt_path_join(install_destination
+ ${install_dir} ${upper_case_forwarding_header_path})
+ qt_install(FILES "${build_dir}/${upper_case_forwarding_header_path}/${fwd_hdr}"
+ DESTINATION ${install_destination} OPTIONAL)
+ endforeach()
+ endforeach()
+endfunction()
+
+
+function(qt_read_headers_pri target resultVarPrefix)
+ qt_internal_module_info(module "${target}")
+ file(STRINGS "${module_include_dir}/headers.pri" headers_pri_contents)
+ foreach(line ${headers_pri_contents})
+ if("${line}" MATCHES "SYNCQT.HEADER_FILES = (.*)")
+ set(public_module_headers "${CMAKE_MATCH_1}")
+ separate_arguments(public_module_headers UNIX_COMMAND "${public_module_headers}")
+ elseif("${line}" MATCHES "SYNCQT.PRIVATE_HEADER_FILES = (.*)")
+ set(private_module_headers "${CMAKE_MATCH_1}")
+ separate_arguments(private_module_headers UNIX_COMMAND "${private_module_headers}")
+ elseif("${line}" MATCHES "SYNCQT.GENERATED_HEADER_FILES = (.*)")
+ set(generated_module_headers "${CMAKE_MATCH_1}")
+ separate_arguments(generated_module_headers UNIX_COMMAND "${generated_module_headers}")
+ foreach(generated_header ${generated_module_headers})
+ list(APPEND public_module_headers "${module_include_dir}/${generated_header}")
+ endforeach()
+ elseif("${line}" MATCHES "SYNCQT.INJECTIONS = (.*)")
+ set(injections "${CMAKE_MATCH_1}")
+ elseif("${line}" MATCHES "SYNCQT.([A-Z_]+)_HEADER_FILES = (.+)")
+ set(prefix "${CMAKE_MATCH_1}")
+ string(TOLOWER "${prefix}" prefix)
+ set(entries "${CMAKE_MATCH_2}")
+ separate_arguments(entries UNIX_COMMAND "${entries}")
+ set("${resultVarPrefix}_${prefix}" "${entries}" PARENT_SCOPE)
+ endif()
+ endforeach()
+ set(${resultVarPrefix}_public "${public_module_headers}" PARENT_SCOPE)
+ set(${resultVarPrefix}_private "${private_module_headers}" PARENT_SCOPE)
+ set(${resultVarPrefix}_injections "${injections}" PARENT_SCOPE)
+endfunction()
+
+
+# Add Qt::target and Qt6::target as aliases for the target
+function(qt_internal_add_target_aliases target)
+ get_target_property(type "${target}" TYPE)
+ if (type STREQUAL EXECUTABLE)
+ add_executable("Qt::${target}" ALIAS "${target}")
+ add_executable("Qt${PROJECT_VERSION_MAJOR}::${target}" ALIAS "${target}")
+ else()
+ add_library("Qt::${target}" ALIAS "${target}")
+ add_library("Qt${PROJECT_VERSION_MAJOR}::${target}" ALIAS "${target}")
+ endif()
+endfunction()
+
+# Sets the exceptions flags for the given target
+function(qt_internal_set_no_exceptions_flags target)
+ target_compile_definitions("${target}" PRIVATE "QT_NO_EXCEPTIONS")
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ target_compile_options("${target}" PRIVATE "/wd4530" "/wd4577")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ target_compile_options("${target}" PRIVATE "-fno-exceptions")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
+ target_compile_options("${target}" PRIVATE "-fno-exceptions")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ target_compile_options("${target}" PRIVATE "-fno-exceptions")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
+ target_compile_options("${target}" PRIVATE "-fno-exceptions")
+ endif()
+endfunction()
+
+# This is the main entry function for creating a Qt module, that typically
+# consists of a library, public header files, private header files and configurable
+# features.
+#
+# A CMake target with the specified target parameter is created. If the current source
+# directory has a configure.cmake file, then that is also processed for feature definition
+# and testing. Any features defined as well as any features coming from dependencies to
+# this module are imported into the scope of the calling feature.
+#
+# Target is without leading "Qt". So e.g. the "QtCore" module has the target "Core".
+function(add_qt_module target)
+ qt_internal_module_info(module "${target}")
+
+ # Process arguments:
+ qt_parse_all_arguments(arg "add_qt_module"
+ "NO_MODULE_HEADERS;STATIC;DISABLE_TOOLS_EXPORT;EXCEPTIONS;INTERNAL_MODULE;NO_SYNC_QT"
+ "CONFIG_MODULE_NAME"
+ "${__default_private_args};${__default_public_args};QMAKE_MODULE_CONFIG" ${ARGN})
+
+ if(NOT DEFINED arg_CONFIG_MODULE_NAME)
+ set(arg_CONFIG_MODULE_NAME "${module_lower}")
+ endif()
+
+ qt_internal_set_qt_known_modules("${QT_KNOWN_MODULES}" "${target}")
+
+ ### Define Targets:
+ if(${arg_STATIC})
+ add_library("${target}" STATIC)
+ elseif(${QT_BUILD_SHARED_LIBS})
+ add_library("${target}" SHARED)
+ else()
+ add_library("${target}" STATIC)
+ endif()
+ qt_internal_add_target_aliases("${target}")
+
+ # Add _private target to link against the private headers:
+ set(target_private "${target}Private")
+ add_library("${target_private}" INTERFACE)
+ qt_internal_add_target_aliases("${target_private}")
+
+ # Module headers:
+ if(${arg_NO_MODULE_HEADERS} OR ${arg_NO_SYNC_QT})
+ set_target_properties("${target}" PROPERTIES MODULE_HAS_HEADERS OFF)
+ else()
+ # Use QT_BUILD_DIR for the syncqt call.
+ # So we either write the generated files into the qtbase non-prefix build root, or the
+ # module specific build root.
+ qt_ensure_sync_qt()
+ set(syncqt_full_command "${HOST_PERL}" -w "${QT_SYNCQT}"
+ -quiet
+ -check-includes
+ -module "${module}"
+ -version "${PROJECT_VERSION}"
+ -outdir "${QT_BUILD_DIR}"
+ -builddir "${PROJECT_BINARY_DIR}"
+ "${PROJECT_SOURCE_DIR}")
+ execute_process(COMMAND ${syncqt_full_command})
+
+ set_target_properties("${target}" PROPERTIES MODULE_HAS_HEADERS ON)
+
+ ### FIXME: Can we replace headers.pri?
+ qt_read_headers_pri("${target}" "module_headers")
+ set_property(TARGET "${target}" APPEND PROPERTY PUBLIC_HEADER "${module_headers_public}")
+ set_property(TARGET "${target}" APPEND PROPERTY PUBLIC_HEADER "${module_include_dir}/${module}Depends")
+ set_property(TARGET "${target}" APPEND PROPERTY PRIVATE_HEADER "${module_headers_private}")
+ if(module_headers_qpa)
+ qt_install(FILES ${module_headers_qpa} DESTINATION ${INSTALL_INCLUDEDIR}/${module}/${PROJECT_VERSION}/${module}/qpa)
+ endif()
+ endif()
+
+ # Plugin types associated to a module
+ if(NOT "x${arg_PLUGIN_TYPES}" STREQUAL "x")
+ set_target_properties("${target}" PROPERTIES MODULE_PLUGIN_TYPES "${arg_PLUGIN_TYPES}")
+ endif()
+
+ set_target_properties("${target}" PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ RUNTIME_OUTPUT_DIRECTORY_RELEASE "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ RUNTIME_OUTPUT_DIRECTORY_DEBUG "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}"
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
+ OUTPUT_NAME "${INSTALL_CMAKE_NAMESPACE}${target}"
+ )
+
+ qt_internal_library_deprecation_level(deprecation_define)
+
+ qt_autogen_tools_initial_setup(${target})
+
+ set(private_includes
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ "${module_include_dir}/${PROJECT_VERSION}"
+ "${module_include_dir}/${PROJECT_VERSION}/${module}"
+ ${arg_INCLUDE_DIRECTORIES}
+ )
+
+ set(public_includes
+ # For the syncqt headers
+ "$<BUILD_INTERFACE:${module_repo_include_dir}>"
+ "$<BUILD_INTERFACE:${module_include_dir}>"
+ )
+
+ if(NOT arg_NO_MODULE_HEADERS)
+ # For the syncqt headers
+ list(APPEND public_includes "$<INSTALL_INTERFACE:include/${module}>")
+ endif()
+ list(APPEND public_includes ${arg_PUBLIC_INCLUDE_DIRECTORIES})
+
+ extend_target("${target}"
+ SOURCES ${arg_SOURCES}
+ INCLUDE_DIRECTORIES
+ ${private_includes}
+ PUBLIC_INCLUDE_DIRECTORIES
+ ${public_includes}
+ PUBLIC_DEFINES
+ ${arg_PUBLIC_DEFINES}
+ QT_${module_define}_LIB
+ DEFINES
+ ${arg_DEFINES}
+ QT_NO_CAST_TO_ASCII QT_ASCII_CAST_WARNINGS
+ QT_MOC_COMPAT #we don't need warnings from calling moc code in our generated code
+ QT_USE_QSTRINGBUILDER
+ QT_DEPRECATED_WARNINGS
+ QT_BUILDING_QT
+ QT_BUILD_${module_define}_LIB ### FIXME: use QT_BUILD_ADDON for Add-ons or remove if we don't have add-ons anymore
+ "${deprecation_define}"
+ PUBLIC_LIBRARIES ${arg_PUBLIC_LIBRARIES}
+ LIBRARIES ${arg_LIBRARIES} Qt::PlatformModuleInternal
+ FEATURE_DEPENDENCIES ${arg_FEATURE_DEPENDENCIES}
+ DBUS_ADAPTOR_SOURCES ${arg_DBUS_ADAPTOR_SOURCES}
+ DBUS_ADAPTOR_FLAGS ${arg_DBUS_ADAPTOR_FLAGS}
+ DBUS_INTERFACE_SOURCES ${arg_DBUS_INTERFACE_SOURCES}
+ DBUS_INTERFACE_FLAGS ${arg_DBUS_INTERFACE_FLAGS}
+ COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
+ PUBLIC_COMPILE_OPTIONS ${arg_PUBLIC_COMPILE_OPTIONS}
+ LINK_OPTIONS ${arg_LINK_OPTIONS}
+ PUBLIC_LINK_OPTIONS ${arg_PUBLIC_LINK_OPTIONS}
+ MOC_OPTIONS ${arg_MOC_OPTIONS}
+ ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
+ DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
+ )
+
+ if(NOT ${arg_EXCEPTIONS})
+ qt_internal_set_no_exceptions_flags("${target}")
+ endif()
+
+ set(configureFile "${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake")
+ if(EXISTS "${configureFile}")
+ qt_feature_module_begin(
+ LIBRARY "${target}"
+ PUBLIC_FILE "qt${arg_CONFIG_MODULE_NAME}-config.h"
+ PRIVATE_FILE "qt${arg_CONFIG_MODULE_NAME}-config_p.h"
+ PUBLIC_DEPENDENCIES ${arg_FEATURE_DEPENDENCIES}
+ PRIVATE_DEPENDENCIES ${arg_FEATURE_DEPENDENCIES}
+ )
+ include(${configureFile})
+ qt_feature_module_end("${target}")
+
+ set_property(TARGET "${target}" APPEND PROPERTY PUBLIC_HEADER "${CMAKE_CURRENT_BINARY_DIR}/qt${arg_CONFIG_MODULE_NAME}-config.h")
+ set_property(TARGET "${target}" APPEND PROPERTY PRIVATE_HEADER "${CMAKE_CURRENT_BINARY_DIR}/qt${arg_CONFIG_MODULE_NAME}-config_p.h")
+ endif()
+
+ if(DEFINED module_headers_private)
+ qt_internal_add_linker_version_script("${target}" PRIVATE_HEADERS ${module_headers_private})
+ else()
+ qt_internal_add_linker_version_script("${target}")
+ endif()
+
+ # Handle injections. Aka create forwarding headers for certain headers that have been
+ # automatically generated in the build dir (for example qconfig.h, qtcore-config.h,
+ # qvulkanfunctions.h, etc)
+ # module_headers_injections come from the qt_read_headers_pri() call.
+ # extra_library_injections come from the qt_feature_module_end() call.
+ set(final_injections "")
+ if(module_headers_injections)
+ string(APPEND final_injections "${module_headers_injections} ")
+ endif()
+ if(extra_library_injections)
+ string(APPEND final_injections "${extra_library_injections} ")
+ endif()
+
+ if(final_injections)
+ qt_install_injections("${module}" "${QT_BUILD_DIR}" "${QT_INSTALL_DIR}" ${final_injections})
+ endif()
+
+ # Handle creation of cmake files for consumers of find_package().
+ set(path_suffix "${INSTALL_CMAKE_NAMESPACE}${target}")
+ qt_path_join(config_build_dir ${QT_CONFIG_BUILD_DIR} ${path_suffix})
+ qt_path_join(config_install_dir ${QT_CONFIG_INSTALL_DIR} ${path_suffix})
+
+ set(extra_cmake_files)
+ set(extra_cmake_includes)
+ if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
+ list(APPEND extra_cmake_files "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
+ list(APPEND extra_cmake_includes "${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
+ endif()
+ if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake.in")
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake.in"
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake"
+ @ONLY)
+ list(APPEND extra_cmake_files "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake")
+ list(APPEND extra_cmake_includes "${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake")
+ endif()
+
+ set(extra_cmake_code "")
+
+ if(target STREQUAL Core)
+ # Propagate non-build related variables that are needed for consuming Qt packages.
+ # Do this in CoreConfig instead of Qt6Config, so that consumers can also use
+ # find_package(Qt6Core) instead of find_package(Qt6 COMPONENTS Core)
+ string(APPEND extra_cmake_code "
+set(QT_CMAKE_EXPORT_NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE})")
+ endif()
+
+ configure_package_config_file(
+ "${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ INSTALL_DESTINATION "${config_install_dir}"
+ )
+ write_basic_package_version_file(
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+ )
+
+ qt_install(FILES
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
+ ${extra_cmake_files}
+ DESTINATION "${config_install_dir}"
+ COMPONENT Devel
+ )
+
+ file(COPY ${extra_cmake_files} DESTINATION "${config_build_dir}")
+ set(exported_targets ${target} ${target_private})
+ set(export_name "${INSTALL_CMAKE_NAMESPACE}${target}Targets")
+ qt_install(TARGETS ${exported_targets}
+ EXPORT ${export_name}
+ RUNTIME DESTINATION ${INSTALL_BINDIR}
+ LIBRARY DESTINATION ${INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${INSTALL_LIBDIR}
+ PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDEDIR}/${module}
+ PRIVATE_HEADER DESTINATION ${INSTALL_INCLUDEDIR}/${module}/${PROJECT_VERSION}/${module}/private
+ )
+
+ if (ANDROID)
+ # Record install library location so it can be accessed by
+ # qt_android_dependencies without having to specify it again.
+ set_target_properties(${target} PROPERTIES
+ QT_ANDROID_MODULE_INSTALL_DIR ${INSTALL_LIBDIR})
+ endif()
+
+ qt_install(EXPORT ${export_name}
+ NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE}::
+ DESTINATION ${config_install_dir})
+
+ qt_internal_export_modern_cmake_config_targets_file(
+ TARGETS ${exported_targets}
+ EXPORT_NAME_PREFIX ${INSTALL_CMAKE_NAMESPACE}${target}
+ CONFIG_INSTALL_DIR "${config_install_dir}")
+
+ if (${arg_INTERNAL_MODULE})
+ set(arg_INTERNAL_MODULE "INTERNAL_MODULE")
+ else()
+ unset(arg_INTERNAL_MODULE)
+ endif()
+
+ qt_path_join(pri_target_path ${PROJECT_BINARY_DIR} mkspecs/modules)
+ qt_generate_module_pri_file("${target}" "${pri_target_path}" module_pri_files
+ ${arg_INTERNAL_MODULE}
+ QMAKE_MODULE_CONFIG
+ ${arg_QMAKE_MODULE_CONFIG}
+ )
+ qt_install(FILES "${module_pri_files}" DESTINATION mkspecs/modules)
+
+ ### fixme: cmake is missing a built-in variable for this. We want to apply it only to modules and plugins
+ # that belong to Qt.
+ qt_internal_add_link_flags_no_undefined("${target}")
+
+ set(interface_includes
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
+ "$<BUILD_INTERFACE:${module_include_dir}/${PROJECT_VERSION}>"
+ "$<BUILD_INTERFACE:${module_include_dir}/${PROJECT_VERSION}/${module}>"
+ )
+
+ if(NOT arg_NO_MODULE_HEADERS)
+ list(APPEND interface_includes
+ "$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}>"
+ "$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}/${module}>"
+ )
+ endif()
+
+ target_include_directories("${target_private}" INTERFACE
+ ${interface_includes}
+ )
+
+ if(NOT ${arg_DISABLE_TOOLS_EXPORT})
+ qt_export_tools(${target})
+ endif()
+endfunction()
+
+function(qt_export_tools module_name)
+ # If no tools were defined belonging to this module, don't create a config and targets file.
+ # Guards against the case when doing a cross-build and the function is called manually and not
+ # by add_qt_module.
+
+ if(NOT "${module_name}" IN_LIST QT_KNOWN_MODULES_WITH_TOOLS OR CMAKE_CROSSCOMPILING)
+ return()
+ endif()
+
+ # The tools target name. For example: CoreTools
+ set(target "${module_name}Tools")
+
+ set(path_suffix "${INSTALL_CMAKE_NAMESPACE}${target}")
+ qt_path_join(config_build_dir ${QT_CONFIG_BUILD_DIR} ${path_suffix})
+ qt_path_join(config_install_dir ${QT_CONFIG_INSTALL_DIR} ${path_suffix})
+
+ # Add the extra cmake statements to make the tool targets global, so it doesn't matter where
+ # find_package is called.
+ # Also assemble a list of tool targets to expose in the config file for informational purposes.
+ set(extra_cmake_statements "")
+ set(tool_targets "")
+ foreach(tool_name ${QT_KNOWN_MODULE_${module_name}_TOOLS})
+ set(extra_cmake_statements "${extra_cmake_statements}
+if (NOT QT_NO_CREATE_TARGETS)
+ get_property(is_global TARGET ${INSTALL_CMAKE_NAMESPACE}::${tool_name} PROPERTY IMPORTED_GLOBAL)
+ if(NOT is_global)
+ set_property(TARGET ${INSTALL_CMAKE_NAMESPACE}::${tool_name} PROPERTY IMPORTED_GLOBAL TRUE)
+ endif()
+endif()
+")
+ list(APPEND tool_targets "${QT_CMAKE_EXPORT_NAMESPACE}::${tool_name}")
+ endforeach()
+
+ string(APPEND extra_cmake_statements
+"set(${QT_CMAKE_EXPORT_NAMESPACE}${module_name}Tools_TARGETS \"${tool_targets}\")")
+
+ configure_package_config_file(
+ "${QT_CMAKE_DIR}/QtModuleToolsConfig.cmake.in"
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ INSTALL_DESTINATION "${config_install_dir}"
+ )
+ write_basic_package_version_file(
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+ )
+
+ qt_install(FILES
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
+ DESTINATION "${config_install_dir}"
+ COMPONENT Devel
+ )
+
+ set(export_name "${INSTALL_CMAKE_NAMESPACE}${target}Targets")
+ qt_install(EXPORT "${export_name}"
+ NAMESPACE "${QT_CMAKE_EXPORT_NAMESPACE}::"
+ DESTINATION "${config_install_dir}")
+
+
+ qt_internal_export_modern_cmake_config_targets_file(TARGETS ${QT_KNOWN_MODULE_${module_name}_TOOLS}
+ EXPORT_NAME_PREFIX ${INSTALL_CMAKE_NAMESPACE}${target}
+ CONFIG_INSTALL_DIR ${config_install_dir})
+endfunction()
+
+function(qt_internal_check_directory_or_type name dir type default result_var)
+ if ("x${dir}" STREQUAL x)
+ if("x${type}" STREQUAL x)
+ message(FATAL_ERROR "add_qt_plugin called without setting either TYPE or ${name}.")
+ endif()
+ set(${result_var} "${default}" PARENT_SCOPE)
+ else()
+ set(${result_var} "${dir}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+# Utility function to find the module to which a plug-in belongs.
+# This will set the QT_MODULE target property on the plug-in - e.g. "Gui", "Sql"...
+function(qt_get_module_for_plugin target target_type)
+ foreach(qt_module ${QT_KNOWN_MODULES})
+ get_target_property(plugin_types "${qt_module}" MODULE_PLUGIN_TYPES)
+ if(plugin_types)
+ foreach(plugin_type ${plugin_types})
+ if("${target_type}" STREQUAL "${plugin_type}")
+ set_target_properties("${target}" PROPERTIES QT_MODULE "${qt_module}")
+ return()
+ endif()
+ endforeach()
+ endif()
+ endforeach()
+ message(AUTHOR_WARNING "The plug-in '${target}' does not belong to any Qt module.")
+endfunction()
+
+
+# Collection of add_qt_plugin arguments so they can be shared across different
+# plugin type wrappers
+set(__add_qt_plugin_optional_args
+ "STATIC;EXCEPTIONS"
+)
+set(__add_qt_plugin_single_args
+ "TYPE;CLASS_NAME;OUTPUT_DIRECTORY;INSTALL_DIRECTORY;ARCHIVE_INSTALL_DIRECTORY;QML_TARGET_PATH"
+)
+set(__add_qt_plugin_multi_args
+ "${__default_private_args};${__default_public_args};DEFAULT_IF"
+)
+# This is the main entry point for defining Qt plugins.
+# A CMake target is created with the given target. The TYPE parameter is needed to place the
+# plugin into the correct plugins/ sub-directory.
+function(add_qt_plugin target)
+ qt_internal_module_info(module "${target}")
+
+ qt_internal_set_qt_known_plugins("${QT_KNOWN_PLUGINS}" "${target}")
+
+ qt_parse_all_arguments(arg "add_qt_plugin"
+ "${__add_qt_plugin_optional_args}"
+ "${__add_qt_plugin_single_args}"
+ "${__add_qt_plugin_multi_args}"
+ "${ARGN}"
+ )
+
+ set(output_directory_default "${QT_BUILD_DIR}/${INSTALL_PLUGINSDIR}/${arg_TYPE}")
+ set(install_directory_default "${INSTALL_PLUGINSDIR}/${arg_TYPE}")
+ set(archive_install_directory_default "${INSTALL_LIBDIR}/${arg_TYPE}")
+
+ if (arg_QML_TARGET_PATH)
+ set(target_path "${arg_QML_TARGET_PATH}")
+ set(output_directory_default "${QT_BUILD_DIR}/${INSTALL_QMLDIR}/${target_path}")
+ set(install_directory_default "${INSTALL_QMLDIR}/${target_path}")
+ set(archive_install_directory_default "${INSTALL_QMLDIR}/${target_path}")
+ endif()
+
+ if ("x${arg_CLASS_NAME}" STREQUAL "x" AND NOT "${arg_TYPE}" STREQUAL "qml_plugin")
+ message(AUTHOR_WARNING "add_qt_plugin called without setting CLASS_NAME.")
+ endif()
+
+ qt_internal_check_directory_or_type(OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}" "${arg_TYPE}"
+ "${output_directory_default}" output_directory)
+ qt_internal_check_directory_or_type(INSTALL_DIRECTORY "${arg_INSTALL_DIRECTORY}" "${arg_TYPE}"
+ "${install_directory_default}" install_directory)
+ qt_internal_check_directory_or_type(ARCHIVE_INSTALL_DIRECTORY
+ "${arg_ARCHIVE_INSTALL_DIRECTORY}" "${arg_TYPE}"
+ "${archive_install_directory_default}" archive_install_directory)
+
+ if(arg_STATIC OR NOT BUILD_SHARED_LIBS)
+ add_library("${target}" STATIC)
+ else()
+ add_library("${target}" MODULE)
+ if(APPLE)
+ # CMake defaults to using .so extensions for loadable modules, aka plugins,
+ # but Qt plugins are actually suffixed with .dylib.
+ set_property(TARGET "${target}" PROPERTY SUFFIX ".dylib")
+ endif()
+ endif()
+ qt_internal_add_target_aliases("${target}")
+
+ set_target_properties("${target}" PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${output_directory}"
+ RUNTIME_OUTPUT_DIRECTORY "${output_directory}"
+ ARCHIVE_OUTPUT_DIRECTORY "${output_directory}"
+ QT_PLUGIN_CLASS_NAME "${arg_CLASS_NAME}")
+
+ qt_internal_library_deprecation_level(deprecation_define)
+
+ qt_autogen_tools_initial_setup(${target})
+
+ set(static_plugin_define "")
+ if (arg_STATIC OR NOT QT_BUILD_SHARED_LIBS)
+ set(static_plugin_define "QT_STATICPLUGIN")
+ endif()
+
+ # Save the Qt module in the plug-in's properties
+ if(NOT arg_TYPE STREQUAL "qml_plugin")
+ qt_get_module_for_plugin("${target}" "${arg_TYPE}")
+ get_target_property(qt_module "${target}" QT_MODULE)
+ endif()
+
+ # Add the plug-in to the list of plug-ins of this module
+ if(TARGET "${qt_module}")
+ set_property(TARGET "${qt_module}" APPEND PROPERTY QT_PLUGINS "${target}")
+ endif()
+
+ set(_default_plugin 1)
+ if (DEFINED arg_DEFAULT_IF)
+ if (NOT ${arg_DEFAULT_IF})
+ set(_default_plugin 0)
+ endif()
+ endif()
+
+ set_property(TARGET "${target}" PROPERTY QT_DEFAULT_PLUGIN "${_default_plugin}")
+ set_property(TARGET "${target}" APPEND PROPERTY EXPORT_PROPERTIES "QT_PLUGIN_CLASS_NAME;QT_MODULE;QT_DEFAULT_PLUGIN")
+
+ set(private_includes
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ # For the syncqt headers
+ "$<BUILD_INTERFACE:${module_repo_include_dir}>"
+ ${arg_INCLUDE_DIRECTORIES}
+ )
+
+ set(public_includes
+ ${arg_PUBLIC_INCLUDE_DIRECTORIES}
+ )
+
+ extend_target("${target}"
+ SOURCES ${arg_SOURCES}
+ INCLUDE_DIRECTORIES
+ ${private_includes}
+ PUBLIC_INCLUDE_DIRECTORIES
+ ${public_includes}
+ LIBRARIES ${arg_LIBRARIES} Qt::PlatformPluginInternal
+ PUBLIC_LIBRARIES ${arg_PUBLIC_LIBRARIES}
+ DEFINES
+ ${arg_DEFINES}
+ QT_DEPRECATED_WARNINGS
+ "${deprecation_define}"
+ "${static_plugin_define}"
+ QT_PLUGIN
+ PUBLIC_DEFINES
+ QT_${module_define}_LIB
+ ${arg_PUBLIC_DEFINES}
+ FEATURE_DEPENDENCIES ${arg_FEATURE_DEPENDENCIES}
+ DBUS_ADAPTOR_SOURCES "${arg_DBUS_ADAPTOR_SOURCES}"
+ DBUS_ADAPTOR_FLAGS "${arg_DBUS_ADAPTOR_FLAGS}"
+ DBUS_INTERFACE_SOURCES "${arg_DBUS_INTERFACE_SOURCES}"
+ DBUS_INTERFACE_FLAGS "${arg_DBUS_INTERFACE_FLAGS}"
+ COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
+ PUBLIC_COMPILE_OPTIONS ${arg_PUBLIC_COMPILE_OPTIONS}
+ LINK_OPTIONS ${arg_LINK_OPTIONS}
+ PUBLIC_LINK_OPTIONS ${arg_PUBLIC_LINK_OPTIONS}
+ MOC_OPTIONS ${arg_MOC_OPTIONS}
+ ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
+ DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
+ )
+ if(NOT ${arg_EXCEPTIONS})
+ qt_internal_set_no_exceptions_flags("${target}")
+ endif()
+
+
+ set(qt_libs_private "")
+ foreach(it ${QT_KNOWN_MODULES})
+ list(FIND arg_LIBRARIES "Qt::${it}Private" pos)
+ if(pos GREATER -1)
+ list(APPEND qt_libs_private "Qt::${it}Private")
+ endif()
+ endforeach()
+
+ qt_register_target_dependencies("${target}" "${arg_PUBLIC_LIBRARIES}" "${qt_libs_private}")
+
+ # Handle creation of cmake files for consumers of find_package().
+ # If we are part of a Qt module, the plugin cmake files are installed as part of that module.
+ if(qt_module)
+ set(path_suffix "${INSTALL_CMAKE_NAMESPACE}${qt_module}")
+ else()
+ set(path_suffix "${INSTALL_CMAKE_NAMESPACE}${target}")
+ endif()
+
+ qt_path_join(config_build_dir ${QT_CONFIG_BUILD_DIR} ${path_suffix})
+ qt_path_join(config_install_dir ${QT_CONFIG_INSTALL_DIR} ${path_suffix})
+
+ configure_package_config_file(
+ "${QT_CMAKE_DIR}/QtPluginConfig.cmake.in"
+ "${config_build_dir}/${target}Config.cmake"
+ INSTALL_DESTINATION "${config_install_dir}"
+ )
+ write_basic_package_version_file(
+ "${config_build_dir}/${target}ConfigVersion.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+ )
+
+ qt_install(FILES
+ "${config_build_dir}/${target}Config.cmake"
+ "${config_build_dir}/${target}ConfigVersion.cmake"
+ DESTINATION "${config_install_dir}"
+ COMPONENT Devel
+ )
+
+ set(export_name "${target}Targets")
+ qt_install(TARGETS "${target}"
+ EXPORT ${export_name}
+ RUNTIME DESTINATION "${install_directory}"
+ LIBRARY DESTINATION "${install_directory}"
+ ARCHIVE DESTINATION "${archive_install_directory}"
+ )
+ qt_install(EXPORT ${export_name}
+ NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE}::
+ DESTINATION "${config_install_dir}"
+ )
+
+ ### fixme: cmake is missing a built-in variable for this. We want to apply it only to modules and plugins
+ # that belong to Qt.
+ qt_internal_add_link_flags_no_undefined("${target}")
+
+ qt_internal_add_linker_version_script(${target})
+endfunction()
+
+# Generate custom ${target}_qmltypes target for Qml Plugins
+function(qt_add_qmltypes_target target)
+
+ # Do nothing when cross compiling
+ if (CMAKE_CROSSCOMPILING)
+ return()
+ endif()
+
+ qt_parse_all_arguments(arg "qt_generate_qmltypes"
+ ""
+ "TARGET_PATH;IMPORT_VERSION;IMPORT_NAME;QML_PLUGINDUMP_DEPENDENCIES"
+ ""
+ ${ARGN})
+
+ # scan repos for qml repositories
+ foreach(repo IN LISTS QT_REPOS)
+ if (IS_DIRECTORY "${repo}/qml")
+ list(APPEND import_paths "${repo}/qml")
+ endif()
+ endforeach()
+ list(REMOVE_DUPLICATES import_paths)
+ if (UNIX)
+ list(JOIN import_paths ":" import_paths_env)
+ else()
+ list(JOIN import_paths "\;" import_paths_env)
+ endif()
+
+ if(NOT arg_IMPORT_NAME)
+ string(REGEX REPLACE "\\.\\d+$" "" import_name ${arg_TARGET_PATH})
+ else()
+ set(import_name ${arg_IMPORT_NAME})
+ endif()
+
+ if(NOT arg_IMPORT_VERSION)
+ message(FATAL_ERROR "Import version parameter was not specified. Specify the import version using the IMPORT_VERSION.")
+ endif()
+
+ get_target_property(source_dir ${target} SOURCE_DIR)
+
+ # qml1_target check is no longer required
+ set(qmltypes_command_args "-nonrelocatable")
+ if (NOT arg_QML_PLUGINDUMP_DEPENDENCIES AND EXISTS "${source_dir}/dependencies.json")
+ list(APPEND qmltypes_command_args "-dependencies" "${source_dir}/dependencies.json")
+ elseif(arg_QML_PLUGINDUMP_DEPENDENCIES)
+ list(APPEND qmltypes_command_args "-dependencies" "${arg_QML_PLUGINDUMP_DEPENDENCIES}")
+ endif()
+
+ string(REPLACE "/" "." import_name_arg ${import_name})
+
+ list(APPEND qmltypes_command_args "${import_name_arg}" "${arg_IMPORT_VERSION}")
+
+ set(qml_plugindump_target ${QT_CMAKE_EXPORT_NAMESPACE}::qmlplugindump)
+
+ # Manually set dependency on plugindump target since CMake will not add
+ # this rule because it's not the main executable argument to the COMMAND
+ # parameter.
+ add_custom_target(
+ "${target}_qmltypes"
+ DEPENDS ${qml_plugindump_target}
+ COMMAND ${CMAKE_COMMAND} -E env "QML2_IMPORTPATH=${import_paths_env}"
+ $<TARGET_FILE:${qml_plugindump_target}> ${qmltypes_command_args} > "${source_dir}/plugins.qmltypes"
+ )
+endfunction()
+
+# Create a custom target that will ensure all js and qml files are processed
+# by the qmlcachegen tool during build. The generated jsc/qmlc files will
+# also be added to list of files to be installed.
+#
+# TARGET_PATH: QML target path
+# QML_FILES: List of QML Files
+#
+# Note: This will only run on non static builds.
+#
+function(add_qmlcachegen_target target)
+ if (NOT QT_BUILD_SHARED_LIBS)
+ # Do nothing for static builds since the QML files are embedded into
+ # the executable.
+ return()
+ endif()
+
+ if (NOT TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen)
+ message(FATAL_ERROR "Could not locate qmlcachegen tool. \
+Please add QmlTools to your find_package command."
+ )
+ endif()
+
+ qt_parse_all_arguments(arg "add_qmlcachegen_target"
+ "" "TARGET_PATH" "QML_FILES" ${ARGN}
+ )
+
+ set(cache_dir "${QT_BUILD_DIR}/${INSTALL_QMLDIR}/${arg_TARGET_PATH}")
+
+ foreach(qml_file IN LISTS arg_QML_FILES)
+ if("${qml_file}" MATCHES "\.m?js$" OR "${qml_file}" MATCHES "\.qml$")
+ if(NOT IS_ABSOLUTE ${qml_file})
+ get_filename_component(qml_file ${qml_file} ABSOLUTE)
+ endif()
+ file(RELATIVE_PATH qmlc_file "${CMAKE_CURRENT_SOURCE_DIR}" "${qml_file}")
+ set(qmlc_file "${cache_dir}/${qmlc_file}c")
+ list(APPEND qmlc_files ${qmlc_file})
+ add_custom_command(OUTPUT "${qmlc_file}"
+ DEPENDS
+ ${qml_file}
+ COMMAND
+ ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen -o ${qmlc_file} ${qml_file}
+ COMMENT
+ "Generating QML Cache for ${qml_file}"
+ )
+ endif()
+ endforeach()
+
+ if(qmlc_files)
+ set(qmlcachegen_target "${target}_qmlcachegen")
+ # Add custom target which depends on all the qmlc files and then add
+ # that target as a dependency of ${target}. This will guarantee
+ # that the qmlc file get generated.
+ add_custom_target(${qmlcachegen_target}
+ DEPENDS ${qmlc_files}
+ )
+
+ add_dependencies(${target} ${qmlcachegen_target})
+
+ if (QT_WILL_INSTALL)
+ # Only install on non-prefix builds, since the file does not exist
+ # at configuration time. Furthermore, the cached qml files are
+ # generated in the destination location for non-prefix builds.
+ qt_copy_or_install(
+ FILES ${qmlc_files}
+ DESTINATION ${INSTALL_QMLDIR}/${arg_TARGET_PATH}
+ )
+ endif()
+ endif()
+
+endfunction()
+
+function(qt_install_qml_files target)
+
+ qt_parse_all_arguments(arg "qt_install_qml_files"
+ "" "" "FILES" ${ARGN}
+ )
+
+ if (NOT arg_FILES)
+ message(FATAL_ERROR "No files specified for qt_install_qml_files. Please specify them using the FILES parameter.")
+ endif()
+
+ get_target_property(target_path ${target} QT_QML_MODULE_TARGET_PATH)
+ if (NOT target_path)
+ message(FATAL_ERROR "Target ${target} is not a qml module.")
+ endif()
+
+ qt_path_join(qml_module_install_dir ${QT_INSTALL_DIR} "${INSTALL_QMLDIR}/${target_path}")
+ qt_copy_or_install(FILES ${arg_FILES}
+ DESTINATION ${qml_module_install_dir}
+ )
+
+endfunction()
+
+# This function creates a CMake target for qml modules. It will also make
+# sure that if no C++ source are present, that qml files show up in the project
+# in an IDE. Finally, it will also create a custom ${target}_qmltypes which
+# can be used to generate the respective plugin.qmltypes file.
+#
+# CPP_PLUGIN: Whether this qml module has any c++ source files.
+# URI: Module's uri.
+# TARGET_PATH: Expected installation path for the Qml Module. Equivalent
+# to the module's URI where '.' is replaced with '/'. Use this to override the
+# default substitution pattern.
+# VERSION: Version of the qml module
+# QML_PLUGINDUMP_DEPENDENCIES: Path to a dependencies.json file to be consumed
+# with the ${target}_qmltypes target (optional)
+#
+function(add_qml_module target)
+
+ set(qml_module_optional_args
+ CPP_PLUGIN
+ )
+
+ set(qml_module_single_args
+ URI
+ TARGET_PATH
+ VERSION
+ QML_PLUGINDUMP_DEPENDENCIES
+ )
+
+ qt_parse_all_arguments(arg "add_qml_module"
+ "${__add_qt_plugin_optional_args};${qml_module_optional_args}"
+ "${__add_qt_plugin_single_args};${qml_module_single_args}"
+ "${__add_qt_plugin_multi_args}" ${ARGN})
+
+ if (NOT arg_URI)
+ message(FATAL_ERROR "add_qml_module called without specifying the module's uri. Please specify one using the URI parameter.")
+ endif()
+
+ set(target_path ${arg_TARGET_PATH})
+
+ if (NOT arg_VERSION)
+ message(FATAL_ERROR "add_qml_module called without specifying the module's import version. Please specify one using the VERSION parameter.")
+ endif()
+
+ if (NOT arg_TARGET_PATH)
+ string(REPLACE "." "/" arg_TARGET_PATH ${arg_URI})
+ endif()
+
+ qt_remove_args(plugin_args
+ ARGS_TO_REMOVE
+ ${target}
+ ${qml_module_multi_args}
+ ${qml_module_single_args}
+ ALL_ARGS
+ ${__add_qt_plugin_optional_args}
+ ${__add_qt_plugin_single_args}
+ ${qml_module_single_args}
+ ${__add_qt_plugin_multi_args}
+ ${qml_module_multi_args}
+ ARGS
+ ${ARGV}
+ )
+
+ # If we have no sources, but qml files, create a custom target so the
+ # qml file will be visibile in an IDE.
+ if (NOT arg_CPP_PLUGIN)
+ add_custom_target(${target}
+ SOURCES ${arg_QML_FILES}
+ )
+ else()
+ add_qt_plugin(${target}
+ TYPE
+ qml_plugin
+ QML_TARGET_PATH
+ "${arg_TARGET_PATH}"
+ ${plugin_args}
+ )
+ endif()
+
+ # Set target properties
+ set_target_properties(${target}
+ PROPERTIES
+ QT_QML_MODULE_TARGET_PATH ${arg_TARGET_PATH}
+ QT_QML_MODULE_URI ${arg_URI}
+ QT_RESOURCE_PREFIX "/qt-project.org/imports/${arg_TARGET_PATH}"
+ QT_QML_MODULE_VERSION ${arg_VERSION}
+ )
+
+ qt_add_qmltypes_target(${target}
+ TARGET_PATH "${arg_TARGET_PATH}"
+ IMPORT_VERSION "${arg_VERSION}"
+ IMPORT_NAME "${arg_URI}"
+ QML_PLUGINDUMP_DEPENDENCIES "${arg_QML_PLUGINDUMP_DEPENDENCIES}")
+
+ qt_path_join(qml_module_install_dir ${QT_INSTALL_DIR} "${INSTALL_QMLDIR}/${arg_TARGET_PATH}")
+ set(plugin_types "${CMAKE_CURRENT_SOURCE_DIR}/plugins.qmltypes")
+ if (EXISTS ${plugin_types})
+ qt_copy_or_install(FILES ${plugin_types}
+ DESTINATION "${qml_module_install_dir}"
+ )
+
+ if(QT_WILL_INSTALL)
+ # plugin.qmltypes when present should also be copied to the
+ # cmake binary dir when doing prefix builds
+ file(COPY ${plugin_types}
+ DESTINATION "${QT_BUILD_DIR}/${INSTALL_QMLDIR}/${arg_TARGET_PATH}"
+ )
+ endif()
+ endif()
+
+ if (NOT QT_BUILD_SHARED_LIBS)
+ # only embed qmldir on static builds. Some qml modules may request
+ # their qml files to be embedded into their binary
+ string(REPLACE "." "_" qmldir_resource_name ${arg_TARGET_PATH})
+ string(REPLACE "/" "_" qmldir_resource_name ${qmldir_resource_name})
+ set(qmldir_resource_name "${qmldir_resource_name}_qmldir")
+ add_qt_resource(${target} ${uri_target}
+ FILES "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
+ )
+ endif()
+
+ qt_copy_or_install(
+ FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
+ DESTINATION
+ "${qml_module_install_dir}"
+ )
+
+ if(QT_WILL_INSTALL)
+ # qmldir should also be copied to the cmake binary dir when doing
+ # prefix builds
+ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
+ DESTINATION "${QT_BUILD_DIR}/${INSTALL_QMLDIR}/${arg_TARGET_PATH}"
+ )
+ endif()
+
+endfunction()
+
+# Collection of add_qt_executable arguments so they can be shared across add_qt_executable
+# and add_qt_test_helper.
+set(__add_qt_executable_optional_args
+ "GUI;BOOTSTRAP;NO_QT;NO_INSTALL;EXCEPTIONS"
+)
+set(__add_qt_executable_single_args
+ "OUTPUT_DIRECTORY;INSTALL_DIRECTORY"
+)
+set(__add_qt_executable_multi_args
+ "EXE_FLAGS;${__default_private_args};${__default_public_args}"
+)
+
+# This function creates a CMake target for a generic console or GUI binary.
+# Please consider to use a more specific version target like the one created
+# by add_qt_test or add_qt_tool below.
+function(add_qt_executable name)
+ qt_parse_all_arguments(arg "add_qt_executable"
+ "${__add_qt_executable_optional_args}"
+ "${__add_qt_executable_single_args}"
+ "${__add_qt_executable_multi_args}"
+ ${ARGN})
+
+ if ("x${arg_OUTPUT_DIRECTORY}" STREQUAL "x")
+ set(arg_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${INSTALL_BINDIR}")
+ endif()
+
+ get_filename_component(arg_OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}"
+ ABSOLUTE BASE_DIR "${CMAKE_BINARY_DIR}")
+
+ if ("x${arg_INSTALL_DIRECTORY}" STREQUAL "x")
+ set(arg_INSTALL_DIRECTORY "${INSTALL_BINDIR}")
+ endif()
+
+ add_executable("${name}" ${arg_EXE_FLAGS})
+
+ qt_autogen_tools_initial_setup(${name})
+
+ set(extra_libraries "")
+ if(NOT arg_BOOTSTRAP AND NOT arg_NO_QT)
+ set(extra_libraries "Qt::Core")
+ endif()
+
+ set(private_includes
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ ${arg_INCLUDE_DIRECTORIES}
+ )
+
+ extend_target("${name}"
+ SOURCES ${arg_SOURCES}
+ INCLUDE_DIRECTORIES ${private_includes}
+ DEFINES ${arg_DEFINES}
+ LIBRARIES ${arg_LIBRARIES}
+ PUBLIC_LIBRARIES ${extra_libraries} ${arg_PUBLIC_LIBRARIES}
+ DBUS_ADAPTOR_SOURCES "${arg_DBUS_ADAPTOR_SOURCES}"
+ DBUS_ADAPTOR_FLAGS "${arg_DBUS_ADAPTOR_FLAGS}"
+ DBUS_INTERFACE_SOURCES "${arg_DBUS_INTERFACE_SOURCES}"
+ DBUS_INTERFACE_FLAGS "${arg_DBUS_INTERFACE_FLAGS}"
+ COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
+ LINK_OPTIONS ${arg_LINK_OPTIONS}
+ MOC_OPTIONS ${arg_MOC_OPTIONS}
+ ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
+ DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
+ )
+ set_target_properties("${name}" PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}"
+ WIN32_EXECUTABLE "${arg_GUI}"
+ MACOSX_BUNDLE "${arg_GUI}"
+ )
+ if(NOT ${arg_EXCEPTIONS})
+ qt_internal_set_no_exceptions_flags("${name}")
+ endif()
+
+
+ if(NOT arg_NO_INSTALL)
+ qt_install(TARGETS "${name}"
+ RUNTIME DESTINATION "${arg_INSTALL_DIRECTORY}"
+ BUNDLE DESTINATION "${arg_INSTALL_DIRECTORY}")
+ endif()
+endfunction()
+
+
+# This function creates a CMake test target with the specified name for use with CTest.
+function(add_qt_test name)
+ qt_parse_all_arguments(arg "add_qt_test"
+ "RUN_SERIAL;EXCEPTIONS;GUI;QMLTEST"
+ "QML_IMPORTPATH" "TESTDATA;${__default_private_args};${__default_public_args}" ${ARGN})
+ set(path "${CMAKE_CURRENT_BINARY_DIR}")
+
+ if (${arg_EXCEPTIONS})
+ set(exceptions_text "EXCEPTIONS")
+ endif()
+
+ if (${arg_GUI})
+ set(gui_text "GUI")
+ endif()
+
+ # Handle cases where we have a qml test without source files
+ if (arg_SOURCES)
+ set(private_includes
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ "$<BUILD_INTERFACE:${QT_BUILD_DIR}/include>"
+ ${arg_INCLUDE_DIRECTORIES}
+ )
+
+ add_qt_executable("${name}"
+ ${exceptions_text}
+ ${gui_text}
+ NO_INSTALL
+ OUTPUT_DIRECTORY "${path}"
+ SOURCES "${arg_SOURCES}"
+ INCLUDE_DIRECTORIES
+ ${private_includes}
+ DEFINES
+ QT_TESTCASE_BUILDDIR="${CMAKE_CURRENT_BINARY_DIR}"
+ QT_TESTCASE_SOURCEDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ ${arg_DEFINES}
+ PUBLIC_LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::Core ${QT_CMAKE_EXPORT_NAMESPACE}::Test ${arg_PUBLIC_LIBRARIES}
+ LIBRARIES ${arg_LIBRARIES}
+ COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
+ LINK_OPTIONS ${arg_LINK_OPTIONS}
+ MOC_OPTIONS ${arg_MOC_OPTIONS}
+ ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
+ DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
+ )
+
+ # Tests should not be bundles on macOS even if arg_GUI is true, because some tests make
+ # assumptions about the location of helper processes, and those paths would be different
+ # if a test is built as a bundle.
+ set_property(TARGET "${name}" PROPERTY MACOSX_BUNDLE FALSE)
+
+ # QMLTest specifics
+
+ extend_target("${name}" CONDITION arg_QMLTEST
+ PUBLIC_LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::QuickTest
+ )
+
+ extend_target("${name}" CONDITION arg_QMLTEST AND NOT ANDROID
+ DEFINES
+ QUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ )
+
+ extend_target("${name}" CONDITION arg_QMLTEST AND ANDROID
+ DEFINES
+ QUICK_TEST_SOURCE_DIR=":/"
+ )
+ endif()
+
+ if (arg_QML_IMPORTPATH)
+ set(extra_test_args "-import" "${arg_QML_IMPORTPATH}")
+ endif()
+
+ # Generate a label in the form tests/auto/foo/bar/tst_baz
+ # and use it also for XML output
+ file(RELATIVE_PATH label "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${name}")
+
+ if(arg_QMLTEST AND NOT arg_SOURCES)
+ set(test_working_dir "${CMAKE_CURRENT_SOURCE_DIR}")
+ set(test_executable ${QT_CMAKE_EXPORT_NAMESPACE}::qmltestrunner)
+ else()
+ set(test_working_dir "${CMAKE_CURRENT_BINARY_DIR}")
+ set(test_executable "${name}")
+ endif()
+
+ add_test(NAME "${name}" COMMAND ${test_executable} ${extra_test_args} -o ${name}.xml,xml -o -,txt WORKING_DIRECTORY "${test_working_dir}")
+ set_tests_properties("${name}" PROPERTIES RUN_SERIAL "${arg_RUN_SERIAL}" LABELS "${label}")
+ set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "PATH=${path}${QT_PATH_SEPARATOR}${CMAKE_CURRENT_BINARY_DIR}${QT_PATH_SEPARATOR}$ENV{PATH}")
+
+ # Add the install prefix to list of plugin paths when doing a prefix build
+ if(NOT QT_INSTALL_DIR)
+ list(APPEND plugin_paths "${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINSDIR}")
+ endif()
+ #TODO: Collect all paths from known repositories when performing a super
+ # build.
+ list(APPEND plugin_paths "${PROJECT_BINARY_DIR}/${INSTALL_PLUGINSDIR}")
+ list(JOIN plugin_paths "${QT_PATH_SEPARATOR}" plugin_paths_joined)
+ set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "QT_PLUGIN_PATH=${plugin_paths_joined}")
+
+ if(ANDROID OR IOS OR WINRT)
+ set(builtin_testdata TRUE)
+ endif()
+
+ if(builtin_testdata)
+ target_compile_definitions("${name}" PRIVATE BUILTIN_TESTDATA)
+
+ foreach(testdata IN LISTS arg_TESTDATA)
+ list(APPEND builtin_files ${testdata})
+ endforeach()
+
+ set(blacklist_path "BLACKLIST")
+ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${blacklist_path}")
+ list(APPEND builtin_files ${blacklist_path})
+ endif()
+
+ list(REMOVE_DUPLICATES builtin_files)
+
+ if (builtin_files)
+ add_qt_resource(${name} "testdata"
+ FILES ${builtin_files}
+ BASE ${CMAKE_CURRENT_SOURCE_DIR})
+ endif()
+ else()
+ # Install test data
+ file(RELATIVE_PATH relative_path_to_test_project
+ "${QT_TOP_LEVEL_SOURCE_DIR}"
+ "${CMAKE_CURRENT_SOURCE_DIR}")
+ qt_path_join(testdata_install_dir ${QT_INSTALL_DIR}
+ "${relative_path_to_test_project}")
+ foreach(testdata IN LISTS arg_TESTDATA)
+ set(testdata "${CMAKE_CURRENT_SOURCE_DIR}/${testdata}")
+ if (IS_DIRECTORY "${testdata}")
+ qt_copy_or_install(
+ DIRECTORY "${testdata}"
+ DESTINATION "${testdata_install_dir}")
+ else()
+ qt_copy_or_install(
+ FILES "${testdata}"
+ DESTINATION "${testdata_install_dir}")
+ endif()
+ endforeach()
+ endif()
+
+endfunction()
+
+
+# This function creates an executable for use as a helper program with tests. Some
+# tests launch separate programs to test certain input/output behavior.
+# Specify OVERRIDE_OUTPUT_DIRECTORY if you dont' want to place the helper in the parent directory,
+# in which case you should specify OUTPUT_DIRECTORY "/foo/bar" manually.
+function(add_qt_test_helper name)
+
+ set(add_qt_test_helper_optional_args
+ "OVERRIDE_OUTPUT_DIRECTORY"
+ )
+
+ qt_parse_all_arguments(arg "add_qt_test_helper"
+ "${add_qt_test_helper_optional_args};${__add_qt_executable_optional_args}"
+ "${__add_qt_executable_single_args}"
+ "${__add_qt_executable_multi_args}"
+ ${ARGN})
+
+ qt_remove_args(forward_args
+ ARGS_TO_REMOVE
+ "${name}"
+ ${add_qt_test_helper_optional_args}
+ ALL_ARGS
+ ${add_qt_test_helper_optional_args}
+ ${__add_qt_executable_optional_args}
+ ${__add_qt_executable_single_args}
+ ${__add_qt_executable_multi_args}
+ ARGS
+ ${ARGV}
+ )
+
+ set(extra_args_to_pass)
+ if(NOT arg_OVERRIDE_OUTPUT_DIRECTORY)
+ set(extra_args_to_pass OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/..")
+ endif()
+
+ add_qt_executable("${name}" NO_INSTALL ${extra_args_to_pass} ${forward_args})
+endfunction()
+
+# Sets QT_WILL_BUILD_TOOLS if tools will be built.
+function(qt_check_if_tools_will_be_built)
+ set(will_build_tools NOT CMAKE_CROSSCOMPILING AND NOT QT_FORCE_FIND_TOOLS)
+ set(QT_WILL_BUILD_TOOLS ${will_build_tools} CACHE INTERNAL "Are tools going to be built" FORCE)
+endfunction()
+
+# This function is used to define a "Qt tool", such as moc, uic or rcc.
+# The BOOTSTRAP option allows building it as standalone program, otherwise
+# it will be linked against QtCore.
+function(add_qt_tool name)
+ qt_parse_all_arguments(arg "add_qt_tool" "BOOTSTRAP;NO_QT;NO_INSTALL" "TOOLS_TARGET"
+ "${__default_private_args}" ${ARGN})
+
+ # Handle case when a tool does not belong to a module and it can't be built either (like
+ # during a cross-compile).
+ if(NOT arg_TOOLS_TARGET AND NOT QT_WILL_BUILD_TOOLS)
+ message(FATAL_ERROR "The tool \"${name}\" has not been assigned to a module via"
+ " TOOLS_TARGET (so it can't be found) and it can't be built"
+ " (QT_WILL_BUILD_TOOLS is ${QT_WILL_BUILD_TOOLS}).")
+ endif()
+
+ set(full_name "${QT_CMAKE_EXPORT_NAMESPACE}::${name}")
+ if(TARGET ${full_name})
+ get_property(path TARGET ${full_name} PROPERTY LOCATION)
+ message(STATUS "Tool '${full_name}' was found at ${path}.")
+ return()
+ endif()
+
+ if(arg_TOOLS_TARGET AND NOT QT_WILL_BUILD_TOOLS)
+ set(tools_package_name "Qt6${arg_TOOLS_TARGET}Tools")
+ message(STATUS "Searching for tool '${full_name}' in package ${tools_package_name}.")
+
+ # Only search in path provided by QT_HOST_PATH. We need to do it with CMAKE_PREFIX_PATH
+ # instead of PATHS option, because any find_dependency call inside a Tools package would
+ # not get the proper prefix when using PATHS.
+ set(BACKUP_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH})
+ set(CMAKE_PREFIX_PATH "${QT_HOST_PATH}")
+
+ # Search both with sysroots prepended as well as in the host system. When cross compiling
+ # the mode_package might be set to ONLY only, and the Qt6 tools packages are actually
+ # in the host system.
+ set(BACKUP_CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ${CMAKE_FIND_ROOT_PATH_MODE_PACKAGE})
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE "BOTH")
+ set(BACKUP_CMAKE_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}")
+ set(CMAKE_SIZEOF_VOID_P "")
+ find_package(
+ ${tools_package_name}
+ ${PROJECT_VERSION}
+ NO_PACKAGE_ROOT_PATH
+ NO_CMAKE_ENVIRONMENT_PATH
+ NO_SYSTEM_ENVIRONMENT_PATH
+ NO_CMAKE_PACKAGE_REGISTRY
+ NO_CMAKE_SYSTEM_PATH
+ NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)
+ set(CMAKE_SIZEOF_VOID_P "${BACKUP_CMAKE_SIZEOF_VOID_P}")
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE "${BACKUP_CMAKE_FIND_ROOT_PATH_MODE_PACKAGE}")
+ set(CMAKE_PREFIX_PATH "${BACKUP_CMAKE_PREFIX_PATH}")
+
+ if(${${tools_package_name}_FOUND} AND TARGET ${full_name})
+ # Even if the tool is already visible, make sure that our modules remain associated
+ # with the tools.
+ qt_internal_append_known_modules_with_tools("${arg_TOOLS_TARGET}")
+ get_property(path TARGET ${full_name} PROPERTY LOCATION)
+ message(STATUS "${full_name} was found at ${path} using package ${tools_package_name}.")
+ return()
+ endif()
+ endif()
+
+ if(NOT QT_WILL_BUILD_TOOLS)
+ message(FATAL_ERROR "The tool \"${full_name}\" was not found in the "
+ "${tools_package_name} package. "
+ "Package found: ${${tools_package_name}_FOUND}")
+ else()
+ message(STATUS "Tool '${full_name}' will be built from source.")
+ endif()
+
+ set(disable_autogen_tools "${arg_DISABLE_AUTOGEN_TOOLS}")
+ if (arg_NO_QT)
+ # FIXME: Remove NO_QT again once qmake can use a "normal" Qt!
+ if (arg_BOOTSTRAP)
+ message(FATAL_ERROR "Tool can not be NO_QT and BOOTSTRAP at the same time!")
+ endif()
+ set(corelib "")
+ else()
+ if (arg_BOOTSTRAP)
+ set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Bootstrap)
+ list(APPEND disable_autogen_tools "uic" "moc" "rcc")
+ else()
+ set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Core)
+ endif()
+ endif()
+
+ set(bootstrap "")
+ if(arg_BOOTSTRAP)
+ set(bootstrap BOOTSTRAP)
+ endif()
+
+ set(no_qt "")
+ if(arg_NO_QT)
+ set(no_qt NO_QT)
+ endif()
+
+ set(no_install "")
+ if(arg_NO_INSTALL)
+ set(no_install NO_INSTALL)
+ endif()
+
+ add_qt_executable("${name}" OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ ${bootstrap}
+ ${no_qt}
+ ${no_install}
+ SOURCES ${arg_SOURCES}
+ INCLUDE_DIRECTORIES
+ ${arg_INCLUDE_DIRECTORIES}
+ DEFINES ${arg_DEFINES}
+ PUBLIC_LIBRARIES ${corelib}
+ LIBRARIES ${arg_LIBRARIES} Qt::PlatformToolInternal
+ COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
+ LINK_OPTIONS ${arg_LINK_OPTIONS}
+ MOC_OPTIONS ${arg_MOC_OPTIONS}
+ DISABLE_AUTOGEN_TOOLS ${disable_autogen_tools}
+ )
+ qt_internal_add_target_aliases("${name}")
+
+ set_target_properties("${name}" PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY_RELEASE "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ )
+
+ if(NOT arg_NO_INSTALL AND arg_TOOLS_TARGET)
+ # Assign a tool to an export set, and mark the module to which the tool belongs.
+ qt_internal_append_known_modules_with_tools("${arg_TOOLS_TARGET}")
+
+ # Also append the tool to the module list.
+ qt_internal_append_known_module_tool("${arg_TOOLS_TARGET}" "${name}")
+
+ qt_install(TARGETS "${name}"
+ EXPORT "${INSTALL_CMAKE_NAMESPACE}${arg_TOOLS_TARGET}ToolsTargets"
+ DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS})
+ endif()
+endfunction()
+
+
+
+function(qt_create_tracepoints name tracePointsFile)
+ #### TODO
+ string(TOLOWER "${name}" name)
+
+ file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/qt${name}_tracepoints_p.h" CONTENT
+ "#include <private/qtrace_p.h>")
+endfunction()
+
+function(qt_get_relative_resource_path_for_file output_alias file)
+ get_property(alias SOURCE ${file} PROPERTY QT_RESOURCE_ALIAS)
+ if (NOT alias)
+ set(alias "${file}")
+ endif()
+ set(${output_alias} ${alias} PARENT_SCOPE)
+endfunction()
+
+# Inspect all files passed to a call to add_qt_resource. If there are any
+# files present, invoke the quick compiler and return the remaining resource
+# files that have not been prossed in REMAING_RESOURCES as well as the new
+# name for the resource in OUTPUT_RESOURCE_NAME.
+function(qt_quick_compiler_process_resources target resource_name)
+
+ qt_parse_all_arguments(arg "qt_qtuick_compiler_process_resources"
+ "" "PREFIX;OUTPUT_REMAINING_RESOURCES;OUTPUT_RESOURCE_NAME" "FILES" ${ARGN}
+ )
+
+ set(qml_files)
+ set(resource_files)
+ set(retained_files)
+ # scan for qml files
+ foreach(file IN LISTS arg_FILES)
+ # check whether this resource should not be processed by the qt quick
+ # compiler
+ get_source_file_property(skip_compiler_check ${file} QT_SKIP_QUICKCOMPILER)
+ get_source_file_property(retain_compiler_check ${file} QT_RETAIN_QUICKCOMPILER)
+ if (skip_compiler_check)
+ list(APPEND resource_files ${file})
+ continue()
+ endif()
+
+ if (${file} MATCHES "\.js$"
+ OR ${file} MATCHES "\.mjs$"
+ OR ${file} MATCHES "\.qml$")
+ list(APPEND qml_files ${file})
+ if (retain_compiler_check)
+ list(APPEND retained_files ${file})
+ list(APPEND resource_files ${file})
+ endif()
+ else()
+ list(APPEND resource_files ${file})
+ endif()
+ endforeach()
+ if (NOT TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen AND qml_files)
+ message(WARNING "add_qt_resource: Qml files were detected but the qmlcachgen target is not defined. Consider adding QmlTools to your find_package command.")
+ endif()
+
+ set(retained_resource_paths)
+ if (TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen AND qml_files)
+ # Enable qt quick compiler support
+ set(qml_resource_file "${CMAKE_CURRENT_BINARY_DIR}/${resource_name}.qrc")
+ if (resource_files)
+ set(chained_resource_name "${resource_name}_qmlcache")
+ endif()
+
+ foreach(file IN LISTS qml_files)
+ get_filename_component(file_absolute ${file} ABSOLUTE)
+ file(RELATIVE_PATH file_relative ${CMAKE_CURRENT_SOURCE_DIR} ${file_absolute})
+ qt_get_relative_resource_path_for_file(file_resource_path ${file})
+ if (arg_PREFIX STREQUAL "/")
+ # TO_CMAKE_PATH does not clean up cases such as //Foo
+ set(file_resource_path "/${file_resource_path}")
+ else()
+ set(file_resource_path "${arg_PREFIX}/${file_resource_path}")
+ endif()
+ if (file IN_LIST retained_files)
+ list(APPEND retained_resource_paths ${file_resource_path})
+ endif()
+ file(TO_CMAKE_PATH ${file_resource_path} file_resource_path)
+ list(APPEND file_resource_paths ${file_resource_path})
+ string(REGEX REPLACE "\.js$" "_js" compiled_file ${file_relative})
+ string(REGEX REPLACE "\.mjs$" "_mjs" compiled_file ${compiled_file})
+ string(REGEX REPLACE "\.qml$" "_qml" compiled_file ${compiled_file})
+ set(compiled_file "${CMAKE_CURRENT_BINARY_DIR}/qmlcache/${resource_name}/${compiled_file}.cpp")
+ add_custom_command(
+ OUTPUT ${compiled_file}
+ DEPENDS ${file_absolute}
+ COMMAND
+ ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen
+ --resource-path ${file_resource_path}
+ -o ${compiled_file}
+ ${file_absolute}
+ )
+ target_sources(${target} PRIVATE ${compiled_file})
+ endforeach()
+
+ set(qmlcache_loader_list "${CMAKE_CURRENT_BINARY_DIR}/qmlcache/${resource_name}/qml_loader_file_list.rsp")
+ file(GENERATE
+ OUTPUT ${qmlcache_loader_list}
+ CONTENT "$<JOIN:${file_resource_paths},\n>"
+ )
+
+ set(qmlcache_loader_file "${CMAKE_CURRENT_BINARY_DIR}/qmlcache/${resource_name}/qmlcache_loader.cpp")
+ set(resource_name_arg "${resource_name}.qrc")
+ if (chained_resource_name)
+ set(resource_name_arg "${resource_name_arg}=${chained_resource_name}")
+ endif()
+
+ if (retained_resource_paths)
+ set(retained_loader_list "${CMAKE_CURRENT_BINARY_DIR}/qmlcache/${resource_name}/retained_file_list.rsp")
+ file(GENERATE
+ OUTPUT ${retained_loader_list}
+ CONTENT "$<JOIN:${retained_resource_paths},\n>"
+ )
+ set(retained_args "--retain" "@${retained_loader_list}")
+ endif()
+
+ add_custom_command(
+ OUTPUT ${qmlcache_loader_file}
+ DEPENDS ${qmlcache_loader_list}
+ COMMAND
+ ${QT_CMAKE_EXPORT_NAMESPACE}::qmlcachegen
+ ${retained_args}
+ --resource-name "${resource_name_arg}"
+ -o ${qmlcache_loader_file}
+ "@${qmlcache_loader_list}"
+ )
+
+ qt_propagate_generated_resource(${target} ${resource_name} ${qmlcache_loader_file})
+
+ if (resource_files)
+ set(resource_name ${chained_resource_name})
+ endif()
+ else()
+ set(resource_files ${arg_FILES})
+ endif()
+
+ set(${arg_OUTPUT_REMAINING_RESOURCES} ${resource_files} PARENT_SCOPE)
+ set(${arg_OUTPUT_RESOURCE_NAME} ${resource_name} PARENT_SCOPE)
+
+endfunction()
+
+
+function(qt_propagate_generated_resource target resource_name generated_source_code)
+ get_target_property(type ${target} TYPE)
+ if(type STREQUAL STATIC_LIBRARY)
+ set(resource_target "${target}_resources_${resourceName}")
+ add_library("${resource_target}" OBJECT "${generated_source_code}")
+ qt_internal_add_target_aliases("${resource_target}")
+ qt_install(TARGETS "${resource_target}"
+ EXPORT "${INSTALL_CMAKE_NAMESPACE}${target}Targets"
+ DESTINATION ${INSTALL_LIBDIR}
+ )
+ target_link_libraries(${target} INTERFACE "$<TARGET_OBJECTS:${INSTALL_CMAKE_NAMESPACE}::${resource_target}>")
+ else()
+ target_sources(${target} PRIVATE ${generated_source_code})
+ endif()
+endfunction()
+
+function(add_qt_resource target resourceName)
+ # Don't try to add resources when cross compiling, and the target is actually a host target
+ # (like a tool).
+ qt_is_imported_target("${target}" is_imported)
+ if(is_imported)
+ return()
+ endif()
+
+ qt_parse_all_arguments(rcc "add_qt_resource" "" "PREFIX;LANG;BASE" "FILES" ${ARGN})
+
+ string(REPLACE "/" "_" resourceName ${resourceName})
+ string(REPLACE "." "_" resourceName ${resourceName})
+
+ # Apply base to all files
+ if (rcc_BASE)
+ foreach(file IN LISTS rcc_FILES)
+ set(resource_file "${rcc_BASE}/${file}")
+ qt_get_relative_resource_path_for_file(alias ${resource_file})
+ # Handle case where resources were generated from a directory
+ # different than the one where the main .pro file resides.
+ # Unless otherwise specified, we should use the original file path
+ # as alias.
+ if (alias STREQUAL resource_file)
+ set_source_files_properties(${resource_file} PROPERTIES QT_RESOURCE_ALIAS ${file})
+ endif()
+ file(TO_CMAKE_PATH ${resource_file} resource_file)
+ list(APPEND resource_files ${resource_file})
+ endforeach()
+ else()
+ set(resource_files ${rcc_FILES})
+ endif()
+
+ if(NOT rcc_PREFIX)
+ get_target_property(rcc_PREFIX ${target} QT_RESOURCE_PREFIX)
+ if (NOT rcc_PREFIX)
+ message(FATAL_ERROR "add_qt_resource() was called without a PREFIX and the target does not provide QT_RESOURCE_PREFIX. Please either add a PREFIX or make the target ${target} provide a default.")
+ endif()
+ endif()
+
+ # Apply quick compiler pass
+ qt_quick_compiler_process_resources(${target} ${resourceName}
+ FILES ${resource_files}
+ PREFIX ${rcc_PREFIX}
+ OUTPUT_REMAINING_RESOURCES resources
+ OUTPUT_RESOURCE_NAME newResourceName
+ )
+
+ if (NOT resources)
+ return()
+ endif()
+ set(generatedResourceFile "${CMAKE_CURRENT_BINARY_DIR}/generated_${newResourceName}.qrc")
+ set(generatedSourceCode "${CMAKE_CURRENT_BINARY_DIR}/qrc_${newResourceName}.cpp")
+
+ # Generate .qrc file:
+
+ # <RCC><qresource ...>
+ set(qrcContents "<RCC>\n <qresource")
+ if (rcc_PREFIX)
+ string(APPEND qrcContents " prefix=\"${rcc_PREFIX}\"")
+ endif()
+ if (rcc_LANG)
+ string(APPEND qrcContents " lang=\"${rcc_LANG}\"")
+ endif()
+ string(APPEND qrcContents ">\n")
+
+ foreach(file IN LISTS resources)
+ qt_get_relative_resource_path_for_file(file_resource_path ${file})
+
+ if (NOT IS_ABSOLUTE ${file})
+ set(file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+ endif()
+
+ ### FIXME: escape file paths to be XML conform
+ # <file ...>...</file>
+ string(APPEND qrcContents " <file alias=\"${file_resource_path}\">")
+ string(APPEND qrcContents "${file}</file>\n")
+ list(APPEND files "${file}")
+ endforeach()
+
+ # </qresource></RCC>
+ string(APPEND qrcContents " </qresource>\n</RCC>\n")
+
+ file(GENERATE OUTPUT "${generatedResourceFile}" CONTENT "${qrcContents}")
+
+ # Process .qrc file:
+ add_custom_command(OUTPUT "${generatedSourceCode}"
+ COMMAND "${QT_CMAKE_EXPORT_NAMESPACE}::rcc"
+ ARGS --name "${newResourceName}"
+ --output "${generatedSourceCode}" "${generatedResourceFile}"
+ DEPENDS ${resources} ${generatedResourceFile}
+ COMMENT "RCC ${newResourceName}"
+ VERBATIM)
+
+ get_target_property(type "${target}" TYPE)
+ # Only do this if newResourceName is the same as resourceName, since
+ # the resource will be chainloaded by the qt quickcompiler
+ # qml cache loader
+ if(newResourceName STREQUAL resourceName)
+ qt_propagate_generated_resource(${target} ${resourceName} "${generatedSourceCode}")
+ else()
+ target_sources(${target} PRIVATE "${generatedSourceCode}")
+ endif()
+endfunction()
+
+
+# Handle files that need special SIMD-related flags.
+# This creates an object library and makes target link
+# to it (privately).
+function(add_qt_simd_part target)
+ qt_parse_all_arguments(arg "add_qt_simd_part" "" ""
+ "NAME;SIMD;${__default_private_args};COMPILE_FLAGS" ${ARGN})
+ if ("x${arg_SIMD}" STREQUAL x)
+ message(FATAL_ERROR "add_qt_simd_part needs a SIMD type to be set.")
+ endif()
+
+ set(condition "QT_FEATURE_${arg_SIMD}")
+ if("${arg_SIMD}" STREQUAL arch_haswell)
+ set(condition "TEST_subarch_avx2 AND TEST_subarch_bmi AND TEST_subarch_bmi2 AND TEST_subarch_f16c AND TEST_subarch_fma AND TEST_subarch_lzcnt AND TEST_subarch_popcnt")
+ elseif("${arg_SIMD}" STREQUAL avx512common)
+ set(condition "TEST_subarch_avx512cd")
+ elseif("${arg_SIMD}" STREQUAL avx512core)
+ set(condition "TEST_subarch_avx512cd AND TEST_subarch_avx512bw AND TEST_subarch_avx512dq AND TEST_subarch_avx512vl")
+ endif()
+
+ set(name "${arg_NAME}")
+ if("x${name}" STREQUAL x)
+ set(name "${target}_simd_${arg_SIMD}")
+ endif()
+
+ qt_evaluate_config_expression(result ${condition})
+ if(${result})
+ if(QT_CMAKE_DEBUG_EXTEND_TARGET)
+ message("add_qt_simd_part(${target} SIMD ${arg_SIMD} ...): Evaluated")
+ endif()
+ string(TOUPPER "QT_CFLAGS_${arg_SIMD}" simd_flags)
+
+ add_library("${name}" OBJECT)
+ target_sources("${name}" PRIVATE ${arg_SOURCES})
+ target_include_directories("${name}" PRIVATE
+ ${arg_INCLUDE_DIRECTORIES}
+ $<TARGET_PROPERTY:${target},INCLUDE_DIRECTORIES>)
+ target_compile_options("${name}" PRIVATE
+ ${${simd_flags}}
+ ${arg_COMPILE_FLAGS}
+ $<TARGET_PROPERTY:${target},COMPILE_OPTIONS>)
+ target_compile_definitions("${name}" PRIVATE
+ $<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>)
+
+ target_link_libraries("${target}" PRIVATE "${name}")
+
+ if(NOT BUILD_SHARED_LIBS)
+ qt_install(
+ TARGETS ${name}
+ EXPORT "${INSTALL_CMAKE_NAMESPACE}Targets"
+ )
+ endif()
+ else()
+ if(QT_CMAKE_DEBUG_EXTEND_TARGET)
+ message("add_qt_simd_part(${target} SIMD ${arg_SIMD} ...): Skipped")
+ endif()
+ endif()
+endfunction()
+
+# From Qt6CoreMacros
+# Function used to create the names of output files preserving relative dirs
+function(qt_make_output_file infile prefix suffix source_dir binary_dir result)
+ get_filename_component(outfilename "${infile}" NAME_WE)
+
+ set(base_dir "${source_dir}")
+ string(FIND "${infile}" "${binary_dir}/" in_binary)
+ if (in_binary EQUAL 0)
+ set(base_dir "${binary_dir}")
+ endif()
+
+ get_filename_component(abs_infile "${infile}" ABSOLUTE BASE_DIR "${base_dir}")
+ file(RELATIVE_PATH rel_infile "${base_dir}" "${abs_infile}")
+ string(REPLACE "../" "__/" mapped_infile "${rel_infile}")
+
+ get_filename_component(abs_mapped_infile "${mapped_infile}" ABSOLUTE BASE_DIR "${binary_dir}")
+ get_filename_component(outpath "${abs_mapped_infile}" PATH)
+
+ file(MAKE_DIRECTORY "${outpath}")
+ set("${result}" "${outpath}/${prefix}${outfilename}${suffix}" PARENT_SCOPE)
+endfunction()
+
+
+# Complete manual moc invocation with full control.
+# Use AUTOMOC whenever possible.
+function(qt_manual_moc result)
+ cmake_parse_arguments(arg "" "" "FLAGS" ${ARGN})
+ set(moc_files)
+ foreach(infile ${arg_UNPARSED_ARGUMENTS})
+ qt_make_output_file("${infile}" "moc_" ".cpp"
+ "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" outfile)
+ list(APPEND moc_files "${outfile}")
+
+ set(moc_parameters_file "${outfile}_parameters$<$<BOOL:$<CONFIGURATION>>:_$<CONFIGURATION>>")
+ set(moc_parameters ${arg_FLAGS} -o "${outfile}" "${infile}")
+ string (REPLACE ";" "\n" moc_parameters "${moc_parameters}")
+
+ file(GENERATE OUTPUT "${moc_parameters_file}" CONTENT "${moc_parameters}\n")
+
+ add_custom_command(OUTPUT "${outfile}"
+ COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::moc "@${moc_parameters_file}"
+ DEPENDS "${infile}" ${moc_depends} ${QT_CMAKE_EXPORT_NAMESPACE}::moc
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM)
+ endforeach()
+ set("${result}" ${moc_files} PARENT_SCOPE)
+endfunction()
+
+
+# helper to set up a qdbusxml2cpp rule
+function(qt_create_qdbusxml2cpp_command target infile)
+ qt_parse_all_arguments(arg "qt_create_qdbusxml2cpp_command" "ADAPTOR;INTERFACE" "BASENAME" "FLAGS" ${ARGN})
+ if((arg_ADAPTOR AND arg_INTERFACE) OR (NOT arg_ADAPTOR AND NOT arg_INTERFACE))
+ message(FATAL_ERROR "qt_create_dbusxml2cpp_command needs either ADAPTOR or INTERFACE.")
+ endif()
+
+ set(option "-a")
+ set(type "adaptor")
+ if (arg_INTERFACE)
+ set(option "-p")
+ set(type "interface")
+ endif()
+
+ if ("${arg_BASENAME}" STREQUAL "")
+ get_filename_component(file_dir "${infile}" DIRECTORY)
+ get_filename_component(file_name "${infile}" NAME_WLE)
+ get_filename_component(file_ext "${infile}" LAST_EXT)
+
+ if("${file_ext}" STREQUAL ".xml")
+ else()
+ message(FATAL_ERROR "DBUS ${type} input file is not xml.")
+ endif()
+
+ # use last part of io.qt.something.xml!
+ get_filename_component(file_ext "${file_name}" LAST_EXT)
+ if("x${file_ext}" STREQUAL "x")
+ else()
+ string(SUBSTRING "${file_ext}" 1 -1 file_name) # cut of leading '.'
+ endif()
+
+ string(TOLOWER "${file_name}" file_name)
+ set(file_name "${file_name}_${type}")
+ else()
+ set(file_name ${arg_BASENAME})
+ endif()
+
+ # Use absolute file path for the source file and set the current working directory to the
+ # current binary directory, because setting an absolute path for the header:source combo option
+ # does not work. Splitting on ":" breaks inside the dbus tool when running on Windows
+ # due to ":" being contained in the drive path (e.g C:\foo.h:C:\foo.cpp).
+ get_filename_component(absolute_in_file_path "${infile}" ABSOLUTE)
+
+ set(header_file "${file_name}.h")
+ set(source_file "${file_name}.cpp")
+
+ add_custom_command(OUTPUT "${header_file}" "${source_file}"
+ COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp ${arg_FLAGS} "${option}"
+ "${header_file}:${source_file}" "${absolute_in_file_path}"
+ DEPENDS "${absolute_in_file_path}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+ VERBATIM)
+
+ target_sources("${target}" PRIVATE "${header_file}" "${source_file}")
+endfunction()
+
+function(qt_compute_injection_forwarding_header target)
+ qt_parse_all_arguments(arg "qt_compute_injection_forwarding_header"
+ "PRIVATE" "SOURCE;OUT_VAR" "" ${ARGN})
+ qt_internal_module_info(module "${target}")
+ get_filename_component(file_name "${arg_SOURCE}" NAME)
+
+ set(source_absolute_path "${CMAKE_CURRENT_BINARY_DIR}/${arg_SOURCE}")
+ file(RELATIVE_PATH relpath "${CMAKE_BINARY_DIR}" "${source_absolute_path}")
+
+ if (arg_PRIVATE)
+ set(fwd "${PROJECT_VERSION}/${module}/private/${file_name}")
+ else()
+ set(fwd "${file_name}")
+ endif()
+
+ string(APPEND ${arg_OUT_VAR} " ${relpath}:${fwd}")
+ set(${arg_OUT_VAR} ${${arg_OUT_VAR}} PARENT_SCOPE)
+endfunction()
+
+
+function(add_qt_docs qdocFile)
+ # TODO
+endfunction()
+
+macro(qt_find_package)
+ # Get the target names we expect to be provided by the package.
+ set(options CONFIG NO_MODULE MODULE REQUIRED)
+ set(oneValueArgs)
+ set(multiValueArgs PROVIDED_TARGETS COMPONENTS)
+ cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ # Get the version if specified.
+ set(package_version "")
+ if(${ARGC} GREATER_EQUAL 2)
+ if(${ARGV1} MATCHES "^[0-9\.]+$")
+ set(package_version "${ARGV1}")
+ endif()
+ endif()
+
+ if(arg_COMPONENTS)
+ # Re-append components to forward them.
+ list(APPEND arg_UNPARSED_ARGUMENTS "COMPONENTS;${arg_COMPONENTS}")
+ endif()
+
+ if(NOT (arg_CONFIG OR arg_NO_MODULE OR arg_MODULE))
+ # Try to find a config package first in quiet mode
+ set(config_package_arg ${arg_UNPARSED_ARGUMENTS})
+ list(APPEND config_package_arg "CONFIG;QUIET")
+ find_package(${config_package_arg})
+
+ # Double check that in config mode the targets become visible. Sometimes
+ # only the module mode creates the targets. For example with vcpkg, the sqlite
+ # package provides sqlite3-config.cmake, which offers multi-config targets but
+ # in their own way. CMake has FindSQLite3.cmake and with the original
+ # qt_find_package(SQLite3) call it is our intention to use the cmake package
+ # in module mode.
+ if (${ARGV0}_FOUND AND arg_PROVIDED_TARGETS)
+ unset(any_target_found)
+ foreach(expected_target ${arg_PROVIDED_TARGETS})
+ if (TARGET ${expected_target})
+ set(any_target_found TRUE)
+ break()
+ endif()
+ endforeach()
+ if(NOT any_target_found)
+ unset(${ARGV0}_FOUND)
+ endif()
+ endif()
+ endif()
+
+ # Ensure the options are back in the original unparsed arguments
+ foreach(opt IN LISTS options)
+ if(arg_${opt})
+ list(APPEND arg_UNPARSED_ARGUMENTS ${opt})
+ endif()
+ endforeach()
+
+ if (NOT ${ARGV0}_FOUND)
+ # Call original function without our custom arguments.
+ find_package(${arg_UNPARSED_ARGUMENTS})
+ endif()
+
+ if(${ARGV0}_FOUND AND arg_PROVIDED_TARGETS)
+ # If package was found, associate each target with its package name. This will be used
+ # later when creating Config files for Qt libraries, to generate correct find_dependency()
+ # calls. Also make the provided targets global, so that the properties can be read in
+ # all scopes.
+ foreach(qt_find_package_target_name ${arg_PROVIDED_TARGETS})
+ if(TARGET ${qt_find_package_target_name})
+ # Allow usage of aliased targets by setting properties on the actual target
+ get_target_property(aliased_target ${qt_find_package_target_name} ALIASED_TARGET)
+ if(aliased_target)
+ set(qt_find_package_target_name ${aliased_target})
+ endif()
+
+ set_target_properties(${qt_find_package_target_name}
+ PROPERTIES INTERFACE_QT_PACKAGE_NAME ${ARGV0})
+ if(package_version)
+ set_target_properties(${qt_find_package_target_name}
+ PROPERTIES INTERFACE_QT_PACKAGE_VERSION ${ARGV1})
+ endif()
+
+ if(arg_COMPONENTS)
+ string(REPLACE ";" " " components_as_string "${arg_COMPONENTS}")
+ set_property(TARGET ${qt_find_package_target_name}
+ PROPERTY INTERFACE_QT_PACKAGE_COMPONENTS ${components_as_string})
+ endif()
+
+ get_property(is_global TARGET ${qt_find_package_target_name} PROPERTY
+ IMPORTED_GLOBAL)
+ if(NOT is_global)
+ set_property(TARGET ${qt_find_package_target_name} PROPERTY
+ IMPORTED_GLOBAL TRUE)
+ endif()
+ endif()
+
+ endforeach()
+ endif()
+endmacro()
+
+# Creates a simple export set for the various Find* dependencies
+# which are needed when creating a static build of Qt.
+# This introduces a custom target property: INTERFACE_QT_EXPORTED_LIBRARY
+# This target property indicates that Qt modules / plugins using this 3rd party library
+# must add it to their list of dependencies when creating their own ${qtmodule}Config.cmake
+function(qt_install_static_target_export target)
+ if(BUILD_SHARED_LIBS)
+ return()
+ endif()
+
+ qt_parse_all_arguments(arg "qt_install_3rdparty_config_files" "" "EXPORT" "" ${ARGN})
+ # TODO mark EXPORT as required
+
+ set_target_properties(${target}
+ PROPERTIES
+ INTERFACE_QT_EXPORTED_LIBRARY 1)
+
+ qt_path_join(config_install_dir ${QT_CONFIG_INSTALL_DIR} ${arg_EXPORT})
+
+ set(export_name "${arg_EXPORT}Targets")
+ qt_install(
+ TARGETS ${target}
+ EXPORT ${export_name}
+ LIBRARY DESTINATION ${INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${INSTALL_LIBDIR})
+
+ qt_install(
+ EXPORT ${export_name}
+ DESTINATION "${config_install_dir}"
+ )
+endfunction()
+
+# Create a set of ${target}Config.cmake and ${target}Version.cmake for a
+# third-party library so that it can be found by client code linking statically.
+function(qt_install_3rdparty_config_files target)
+ if(BUILD_SHARED_LIBS)
+ return()
+ endif()
+
+ qt_parse_all_arguments(arg "qt_install_3rdparty_config_files" "" "EXPORT" "PACKAGES;ADDITIONAL_FILES" ${ARGN})
+ # TODO mark EXPORT as required
+
+ set(3RDPARTY_ADDITIONAL_SETUP_CODE)
+ foreach(package ${arg_PACKAGES})
+ list(APPEND 3RDPARTY_ADDITIONAL_SETUP_CODE "find_package(${package})\n")
+ endforeach()
+
+ set(path_suffix "${arg_EXPORT}")
+ qt_path_join(config_build_dir ${QT_CONFIG_BUILD_DIR} ${path_suffix})
+ qt_path_join(config_install_dir ${QT_CONFIG_INSTALL_DIR} ${path_suffix})
+
+ configure_package_config_file(
+ "${PROJECT_SOURCE_DIR}/cmake/3rdpartyConfig.cmake.in"
+ "${config_build_dir}/${target}Config.cmake"
+ INSTALL_DESTINATION "${config_install_dir}"
+ )
+
+ write_basic_package_version_file(
+ "${config_build_dir}/${target}ConfigVersion.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+ )
+
+ qt_install(FILES
+ "${config_build_dir}/${target}Config.cmake"
+ "${config_build_dir}/${target}ConfigVersion.cmake"
+ ${arg_ADDITIONAL_FILES}
+ DESTINATION "${config_install_dir}"
+ COMPONENT Devel
+ )
+endfunction()
+
+# Call this function in 3rdparty find modules that ought to be installed alongside
+# Qt modules and must be found when linking statically.
+function(qt_install_3rdparty_library target)
+ qt_install_static_target_export(${target} EXPORT ${target})
+ qt_install_3rdparty_config_files(${target} EXPORT ${target} ${ARGN})
+endfunction()
+
+macro(qt_find_apple_system_frameworks)
+ if(APPLE)
+ find_library(FWAppKit AppKit)
+ find_library(FWApplicationServices ApplicationServices)
+ find_library(FWCarbon Carbon)
+ find_library(FWCoreFoundation CoreFoundation)
+ find_library(FWCoreServices CoreServices)
+ find_library(FWCoreVideo CoreVideo)
+ find_library(FWcups cups)
+ find_library(FWDiskArbitration DiskArbitration)
+ find_library(FWFoundation Foundation)
+ find_library(FWIOKit IOKit)
+ find_library(FWIOSurface IOSurface)
+ find_library(FWImageIO ImageIO)
+ find_library(FWMetal Metal)
+ find_library(FWMobileCoreServices MobileCoreServices)
+ find_library(FWQuartzCore QuartzCore)
+ find_library(FWSecurity Security)
+ find_library(FWSystemConfiguration SystemConfiguration)
+ find_library(FWUIKit UIKit)
+ find_library(FWWatchKit WatchKit)
+ endif()
+endmacro()
+
+# Match the pattern 'regex' in 'input_line', replace the match with 'replacement'
+# and set that result in 'out_var' in the parent scope.
+function(qt_regex_match_and_get input_line regex replacement out_var)
+ string(REGEX MATCH "${regex}" match "${input_line}")
+ if(match)
+ string(REGEX REPLACE "${regex}" "${replacement}" match "${input_line}")
+ string(STRIP ${match} match)
+ set(${out_var} "${match}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+# Match 'regex' in a list of lines. When found, set the value to 'out_var' and break early.
+function(qt_qlalr_find_option_in_list input_list regex out_var)
+ foreach(line ${input_list})
+ qt_regex_match_and_get("${line}" "${regex}" "\\1" option)
+ if(option)
+ string(TOLOWER ${option} option)
+ set(${out_var} "${option}" PARENT_SCOPE)
+ return()
+ endif()
+ endforeach()
+ message(FATAL_ERROR "qt_qlalr_find_option_in_list: Could not extract ${out_var}")
+endfunction()
+
+# Generate a few output files using qlalr, and assign those to 'consuming_target'.
+# 'input_file_list' is a list of 'foo.g' file paths.
+# 'flags' are extra flags to be passed to qlalr.
+function(qt_process_qlalr input_file_list consuming_target flags)
+ foreach(input_file ${input_file_list})
+ file(STRINGS ${input_file} input_file_lines)
+ qt_qlalr_find_option_in_list("${input_file_lines}" "^%parser(.+)" "parser")
+ qt_qlalr_find_option_in_list("${input_file_lines}" "^%decl(.+)" "decl")
+ qt_qlalr_find_option_in_list("${input_file_lines}" "^%impl(.+)" "impl")
+ get_filename_component(base_file_name ${input_file} NAME_WE)
+
+ set(cpp_file "${parser}.cpp")
+ set(private_file "${parser}_p.h")
+ set(decl_file "${decl}")
+ set(impl_file "${impl}")
+ add_custom_command(
+ OUTPUT ${cpp_file} ${private_file} ${decl_file} ${impl_file}
+ COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qlalr ${flags} ${input_file}
+ MAIN_DEPENDENCY ${input_file}
+ )
+ target_sources(${consuming_target} PRIVATE ${cpp_file} ${impl_file})
+ endforeach()
+endfunction()
+
+macro(qt_add_string_to_qconfig_cpp str)
+ string(LENGTH "${str}" length)
+ string(APPEND QT_CONFIG_STRS " \"${str}\\0\"\n")
+ string(APPEND QT_CONFIG_STR_OFFSETS " ${QT_CONFIG_STR_OFFSET},\n")
+ math(EXPR QT_CONFIG_STR_OFFSET "${QT_CONFIG_STR_OFFSET}+${length}+1")
+endmacro()
+
+function(qt_generate_qconfig_cpp)
+ set(QT_CONFIG_STR_OFFSET "0")
+ set(QT_CONFIG_STR_OFFSETS "")
+ set(QT_CONFIG_STRS "")
+
+ # Start first part.
+ qt_add_string_to_qconfig_cpp("doc")
+ qt_add_string_to_qconfig_cpp("include")
+ qt_add_string_to_qconfig_cpp("lib")
+ qt_add_string_to_qconfig_cpp("libexec")
+ qt_add_string_to_qconfig_cpp("bin")
+ qt_add_string_to_qconfig_cpp("plugins")
+ qt_add_string_to_qconfig_cpp("imports")
+ qt_add_string_to_qconfig_cpp("qml")
+ qt_add_string_to_qconfig_cpp(".")
+ qt_add_string_to_qconfig_cpp(".")
+ qt_add_string_to_qconfig_cpp("translations")
+ qt_add_string_to_qconfig_cpp("examples")
+ qt_add_string_to_qconfig_cpp("tests")
+
+ # Save first part.
+ set(QT_CONFIG_STR_OFFSETS_FIRST "${QT_CONFIG_STR_OFFSETS}")
+ set(QT_CONFIG_STRS_FIRST "${QT_CONFIG_STRS}")
+
+ # Start second part.
+ set(QT_CONFIG_STR_OFFSETS "")
+ set(QT_CONFIG_STRS "")
+
+ qt_add_string_to_qconfig_cpp("")
+ qt_add_string_to_qconfig_cpp("false")
+ qt_add_string_to_qconfig_cpp("bin")
+ qt_add_string_to_qconfig_cpp("lib")
+ qt_add_string_to_qconfig_cpp(".")
+ qt_add_string_to_qconfig_cpp("${QT_QMAKE_TARGET_MKSPEC}")
+ qt_add_string_to_qconfig_cpp("${QT_QMAKE_HOST_MKSPEC}")
+
+ # Save second part.
+ set(QT_CONFIG_STR_OFFSETS_SECOND "${QT_CONFIG_STR_OFFSETS}")
+ set(QT_CONFIG_STRS_SECOND "${QT_CONFIG_STRS}")
+
+ configure_file(global/qconfig.cpp.in global/qconfig.cpp @ONLY)
+endfunction()
diff --git a/cmake/QtBuildInternals/QtBuildInternalsAndroid.cmake b/cmake/QtBuildInternals/QtBuildInternalsAndroid.cmake
new file mode 100644
index 0000000000..4677c9dcae
--- /dev/null
+++ b/cmake/QtBuildInternals/QtBuildInternalsAndroid.cmake
@@ -0,0 +1,206 @@
+#
+# Android specific functions/macros/properties required for building Qt Modules
+#
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_MODULE_INSTALL_DIR
+ BRIEF_DOCS
+ "Recorded install location for a Qt Module."
+ FULL_DOCS
+ "Recorded install location for a Qt Module. Used by qt_android_dependencies()."
+)
+
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_JAR_DEPENDENCIES
+ BRIEF_DOCS
+ "Qt Module Jar dependencies list."
+ FULL_DOCS
+ "Qt Module Jar dependencies list."
+)
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_BUNDLED_JAR_DEPENDENCIES
+ BRIEF_DOCS
+ "Qt Module Jars that should be bundled with it during packing."
+ FULL_DOCS
+ "Qt Module Jars that should be bundled with it during packing."
+)
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_LIB_DEPENDENCIES
+ BRIEF_DOCS
+ "Qt Module C++ libraries that should be bundled with it during packing."
+ FULL_DOCS
+ "Qt Module C++ libraries that should be bundled with it during packing."
+)
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_LIB_DEPENDENCY_REPLACEMENTS
+ BRIEF_DOCS
+ "Qt Module C++ libraries that can replace libraries declared with the QT_ANDROID_LIB_DEPENDENCIES property."
+ FULL_DOCS
+ "Qt Module C++ libraries that can replace libraries declared with the QT_ANDROID_LIB_DEPENDENCIES property."
+)
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_BUNDLED_FILES
+ BRIEF_DOCS
+ "Qt Module files that need to be bundled during packing."
+ FULL_DOCS
+ "Qt Module files that need to be bundled during packing."
+)
+
+define_property(TARGET
+ PROPERTY
+ QT_ANDROID_PERMISSIONS
+ BRIEF_DOCS
+ "Qt Module android permission list."
+ FULL_DOCS
+ "Qt Module android permission list."
+)
+# Generate Qt Module -android-dependencies.xml required by the
+# androiddeploytoolqt to successfully copy all the plugins and other dependent
+# items into tha APK
+function(qt_android_dependencies target)
+
+ get_target_property(arg_JAR_DEPENDENCIES ${target} QT_ANDROID_JAR_DEPENDENCIES)
+ get_target_property(arg_BUNDLED_JAR_DEPENDENCIES ${target} QT_ANDROID_BUNDLED_JAR_DEPENDENCIES)
+ get_target_property(arg_LIB_DEPENDENCIES ${target} QT_ANDROID_LIB_DEPENDENCIES)
+ get_target_property(arg_LIB_DEPENDENCY_REPLACEMENTS ${target} QT_ANDROID_LIB_DEPENDENCY_REPLACEMENTS)
+ get_target_property(arg_PERMISSIONS ${target} QT_ANDROID_PERMISSIONS)
+ get_target_property(module_plugins ${target} MODULE_PLUGIN_TYPES)
+
+ if ((NOT module_plugins)
+ AND (NOT arg_JAR_DEPENDENCIES)
+ AND (NOT arg_LIB_DEPENDENCY_REPLACEMENTS)
+ AND (NOT arg_LIB_DEPENDENCIES)
+ AND (NOT arg_BUNDLED_JAR_DEPENDENCIES)
+ AND (NOT arg_PERMISSIONS))
+ # None of the values were set, so there's nothing to do
+ return()
+ endif()
+
+
+ get_target_property(target_output_name ${target} OUTPUT_NAME)
+ if (NOT target_output_name)
+ set(target_name ${target})
+ else()
+ set(target_name ${target_output_name})
+ endif()
+
+ # mimic qmake's section and string splitting from
+ # mkspecs/feature/qt_android_deps.prf
+ macro(section string delimiter first second)
+ string(FIND ${string} ${delimiter} delimiter_location)
+ if (NOT ${delimiter_location} EQUAL -1)
+ string(SUBSTRING ${string} 0 ${delimiter_location} ${first})
+ math(EXPR delimiter_location "${delimiter_location} + 1")
+ string(SUBSTRING ${string} ${delimiter_location} -1 ${second})
+ else()
+ set(${first} ${string})
+ set(${second} "")
+ endif()
+ endmacro()
+
+ get_target_property(target_bin_dir ${target} BINARY_DIR)
+ set(dependency_file "${target_bin_dir}/${target_name}-android-dependencies.xml")
+
+ file(WRITE ${dependency_file} "<rules><dependencies>\n")
+ file(APPEND ${dependency_file} "<lib name=\"${target_name}\"><depends>\n")
+
+ # Jar Dependencies
+ if(arg_JAR_DEPENDENCIES)
+ foreach(jar_dependency IN LISTS arg_JAR_DEPENDENCIES)
+ section(${jar_dependency} ":" jar_file init_class)
+ if (init_class)
+ set(init_class "initClass=\"${init_class}\"")
+ endif()
+ file(TO_NATIVE_PATH ${jar_file} jar_file_native)
+ file(APPEND ${dependency_file} "<jar file=\"${jar_file_native}\" ${init_class} />\n")
+ endforeach()
+ endif()
+
+ # Bundled Jar Dependencies
+ if(arg_BUNDLED_JAR_DEPENDENCIES)
+ foreach(jar_bundle IN LISTS arg_BUNDLED_JAR_DEPENDENCIES)
+ section(${jar_bundle} ":" bundle_file init_calss)
+ if (init_class)
+ set(init_class "initClass=\"${init_class}\"")
+ endif()
+ file(TO_NATIVE_PATH ${jar_bundle} jar_bundle_native)
+ file(APPEND ${dependency_file} "<jar bundling=\"1\" file=\"${jar_bundle_native}\" ${init_class} />\n")
+ endforeach()
+ endif()
+
+ # Lib Dependencies
+ if(arg_LIB_DEPENDENCIES)
+ foreach(lib IN LISTS arg_LIB_DEPENDENCIES)
+ section(${lib} ":" lib_file lib_extends)
+ if (lib_extends)
+ set(lib_extends "extends=\"${lib_extends}\"")
+ endif()
+ file(TO_NATIVE_PATH ${lib_file} lib_file_native)
+ file(APPEND ${dependency_file} "<lib file=\"${lib_file_native}\" ${lib_extends} />\n")
+ endforeach()
+ endif()
+
+ # Lib Dependencies Replacements
+ if(arg_LIB_DEPENDENCY_REPLACEMENTS)
+ foreach(lib IN LISTS arg_LIB_DEPENDENCY_REPLACEMENTS)
+ section(${lib} ":" lib_file lib_replacement)
+ if (lib_replacement)
+ file(TO_NATIVE_PATH ${lib_replacement} lib_replacement_native)
+ set(lib_replacement "replaces=\"${lib_replacement_native}\"")
+ endif()
+ file(TO_NATIVE_PATH ${lib_file} lib_file_native)
+ file(APPEND ${dependency_file} "<lib file=\"${lib_file_native}\" ${lib_replacement} />\n")
+ endforeach()
+ endif()
+
+
+ # Bundled files
+ if(arg_BUNDLED_FILES)
+ foreach(file IN LISTS arg_BUNDLED_FILES)
+ file(TO_NATIVE_PATH ${lib_file} file_native)
+ file(APPEND ${dependency_file} "<bundled file=\"${file_native}\" />\n")
+ endforeach()
+ endif()
+
+ # Module plugins
+ if(module_plugins)
+ foreach(plugin IN LISTS module_plugins)
+ file(APPEND ${dependency_file} "<bundled file=\"plugins/${plugin}\" />\n")
+ endforeach()
+ endif()
+
+ # Android Permissions
+ if(arg_PERMISSIONS)
+ foreach(permission IN LISTS arg_PERMISSIONS)
+ file(APPEND ${dependency_file} "<permission name=\"${permission}\" />\n")
+ endforeach()
+ endif()
+
+ file(APPEND ${dependency_file} "</depends></lib>")
+ file(APPEND ${dependency_file} "</dependencies></rules>\n")
+
+ get_target_property(target_install_dir ${target} QT_ANDROID_MODULE_INSTALL_DIR)
+ if (NOT target_install_dir)
+ message(SEND_ERROR "qt_android_dependencies: Tar