aboutsummaryrefslogtreecommitdiffstats
path: root/build_scripts/main.py
Commit message (Collapse)AuthorAgeFilesLines
* Make quiet builds really quietAlexandru Croitor2018-12-071-9/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The change does a couple of things: - Sets the distutils / setuptools --verbose option to 0 - Sets the distutils / setuptools --quiet option to 1 - The options above end up calling distutils.log.set_verbosity(0) - Passes the QUIET_BUILD cmake option from setup.py to every CMake invocation, when --quiet is passed to setup.py - Sets the CMAKE_INSTALL_MESSAGE variable to silence messages regarding installation of files - Sets the CMAKE_RULE_MESSAGES variable to disable progress report in makefiles when building each source file - Overrides the CMake message function, not to display STATUS / info / untyped messages (still displays warnings and errors) - Changes the build / install elapsed time messages to always be printed even in quiet mode - Reverts the previously introduced set_quiet function in utils, because log.set_verbosity() now takes care of silencing those messages As a result, there's a lot less clutter when doing a quiet build. Warnings, errors and shiboken output is still displayed. Change-Id: Ie05c593ce7dc0aa04554c2d2859ce655233ddb9f Reviewed-by: Christian Tismer <tismer@stackless.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Build scripts: Add support for ninjaFriedemann Kleint2018-11-271-15/+16
| | | | | | | | | ninja will be recommended build tool/CMake generator for Qt due to its speed. Streamline the option parsing code and add it. Adapt the test runner to find the ctest command in the ninja build file. Change-Id: I61dd6fd4fb26a50af21432e10e7da86123240e0f Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Build scripts: Print elapsed timeFriedemann Kleint2018-11-221-5/+8
| | | | | Change-Id: Ifdacba5202c573192b57a834df510776597ccf61 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Build scripts: Implement --quietFriedemann Kleint2018-11-211-5/+9
| | | | | | | | | Add a _verbose setting to the utils module and set it depending on option --quiet. Depending on this, suppress the messages about copying files, shortening the build log by over 1000 lines. Change-Id: I3f9abce3b145d43c4fe615f624ca4e2769a269f8 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Build scripts: Fix warnings about invalid escape sequencesFriedemann Kleint2018-10-301-1/+1
| | | | | | | | | | | Fix: setup.py:243: DeprecationWarning: invalid escape sequence \O """ build_scripts\main.py:143: DeprecationWarning: invalid escape sequence \d pattern = "Programming Language :: Python :: (\d+)\.(\d+)" Change-Id: Id9574077d6ad82a5a6852d8c6e02e931f8a079de Reviewed-by: Christian Tismer <tismer@stackless.com>
* Allow building shiboken2 and PySide2 as separate wheelsAlexandru Croitor2018-10-121-196/+191
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Actually this creates 3 wheel packages: - shiboken2 (the python module and libshiboken shared library) - shiboken2-generator (contains the generator executable, libclang and dependent Qt libraries) - PySide2 (the PySide2 modules and Qt shared libraries, and tools like rcc, uic) Calling the setup.py script will not do the actual build now (in the sense of calling CMake, make, etc.). Instead it will spawn new processes (via subprocess.call) calling the same setup.py script, but with different arguments. These "sub-invocations" will do the actual building. Thus, the "top-level invocation" will decide which packages to build and delegate that to the "sub-invocations" of setup.py. A new optional command line argument is introduced called "--build-type" which defaults to "all", and can also be set to "shiboken2", "shiboken2-generator" and "pyside2". A user can choose which packages to build using this option. The "top-level invocation" uses this option to decide how many "sub-invocations" to execute. A new command line argument called "--internal-build-type" takes the same values as the one above. It defines which package will actually be built in the new spawned "sub-invocation" process. The "top-level invocation" sets this automatically for each "sub-invocation" depending on the value of "--build-type". This option is also useful for developers that may want to debug the python building code in the "sub-invocation". Developers can set this manually via the command line, and thus avoid the process spawning indirection. A new class Config is introduced to facilitate storage of the various state needed for building a single package. A new class SetupRunner is introduced that takes care of the "--build-type" and "--internal-build-type" argument handling and delegation of "sub-invocations". A new class Options is introduced to 'hopefully', in the future, streamline the mess of option handling that we currently have. setup.py now is now simplified to mostly just call SetupRunner.run_setup(). Certain refactorings were done to facilitate further clean-up of the build code, the current code is definitely not the end all be all. Various other changes that were needed to implement the wheel separation: - a new cmake_helpers directory is added to share common cmake code between packages. - the custom popenasync.py file is removed in favor of using subprocess.call in as many places as possible, and thus avoid 10 different functions for process creation. - Manifest.in is removed, because copying to the setuptools build dir is now done directly by prepare_packages functions. - because prepare_packages copies directly to the setuptools build dir, avoiding the pyside_package dir, we do less copying of big Qt files now. - versioning of PySide2 and shiboken2 packages is now separate. shiboken2 and shiboken2-generator share the same versions for now though. - shiboken2 is now listed as a required package for PySide2, to facilitate pip requirements.txt dependencies. - coin_build_instructions currently needs to install an unreleased version of wheel, due to a bug that breaks installation of generated wheel files. - added separate command line options to pyside2_config.py for shiboken2-module and shiboken2-generator. - adapted samplebinding and scriptableapplication projects due to shiboken being a separate package. - adapted pyside2-tool and shiboken2-tool python scripts for setup tools entry points. - made some optimizations not to invoke cmake for shiboken2-generator when doing a top-level "all" build. - fixed unnecessary rpaths not to be included on Linux (mainly the Qt rpaths). Task-nubmer: PYSIDE-749 Change-Id: I0336043955624c1d12ed254802c442608cced5fb Reviewed-by: Christian Tismer <tismer@stackless.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Revert "setup.py: parallel build by default"Friedemann Kleint2018-09-201-5/+1
| | | | | | | | | The default is not compatible with certain Linux accelerations. This reverts commit 99bfe460b85ccb3562e10f12972852233870e649. Change-Id: I8b6a2854adc40d6b9949a8d92f0b521a94940ba4 Reviewed-by: Christian Tismer <tismer@stackless.com>
* setup.py: parallel build by defaultAleksandr Mezin2018-09-181-1/+5
| | | | | | | | | | | | | If '--jobs' option is not specified and environment variable isn't set, set it to the number of logical CPUs if possible. I'm adding the option almost every time I run 'setup.py', and probably other people do it too. So maybe it's a good idea to enable parallel build by default. I don't know why anyone would want a non-parallel build, but it's still possible with '--jobs=1'. Change-Id: Id593b7d472588d33f01c52a21afa1a08eacb04a6 Reviewed-by: Christian Tismer <tismer@stackless.com>
* shiboken: Fix naming of shipped libclangFriedemann Kleint2018-08-241-2/+15
| | | | | | | | | | | | Determine the library name by resolving just one symlink so that the name containing only the major version is used as target name (libclang.so.6 instead of libclang.so.6.0 obtained by completelely resolving the symlinks). Task-number: PYSIDE-756 Change-Id: If70f292b2f1d0002d2d944fb019838ea4a623882 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Christian Tismer <tismer@stackless.com>
* Build script/Linux: Use installed patchelf if presentFriedemann Kleint2018-07-241-3/+9
| | | | | | | | | | Add path search helper and use installed patchelf instead of building the contained source. Task-number: PYSIDE-740 Change-Id: I8043aa58ff9ebc4884eee9f15745865f10bb30fe Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Christian Tismer <tismer@stackless.com>
* Extract Qt Win dependencies to be included in wheelsSimo Fält2018-06-251-0/+3
| | | | | | Task-number: PYSIDE-696 Change-Id: I20a4f80acceee5c056217a6c92e3b494ec34020d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix pyside2-rcc to work on macOS during build processAlexandru Croitor2018-06-221-1/+1
| | | | | | | | | | | | | | | | | When preparing the PySide2 package during a build, regenerate_qt_resources is used on the copied examples to regenerate the qt resource files for Python3. This uses the pyside2-rcc tool. The problem was that it failed to find the Qt libraries, due to missing a rpath entry. Fix the problem as it is done for shiboken currently, by embedding the qt rpath value at build time. This get rids of a bunch of error messages during the build. Change-Id: I65459bf42818bdac0c6487c6fdd58bf5270d150e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Associate Coin snapshot builds with Coin integration IDsAlexandru Croitor2018-06-221-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change adds a new setup.py option called --package-timestamp which allows setting the "dev" part of the version number of a snapshot package. It also modifies coin_build_instructions.py to set the package timestamp to the value of the Coin integration ID. This has a couple of benefits: 1) We can look up the build and test logs of a specific package on testresults.qt.io. This can also be looked up for non-snapshot builds, the "timestamp = Coin integration ID" can also be found in the generated __init__.py file. 2) All the different platform packages within one integration will have the same timestamp, which allows pinning snapshot packages inside a pipenv Pipfile. 3) It's easier to figure out which packages were built as part of the same Coin integration. Task-number: PYSIDE-680 Change-Id: Idb2f2d2313cee213a5d742f88b60315a4e505250 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Add bindings for QtWebEngine (aka Quick)Alexandru Croitor2018-06-071-1/+2
| | | | | | | | | | | There is only one method we really need, QtWebEngine::initialize() which is used for all Qt Quick based WebEngine applications. Otherwise you get a warning upon startup of a Qt Quick WebEngine application, and this might lead to undefined behavior. Task-number: PYSIDE-688 Change-Id: I7de2bbb58c49cb2a41b0e13ffc9de6a3161f3960 Reviewed-by: Christian Tismer <tismer@stackless.com>
* Error out when using --jobs=x with nmake on WindowsAlexandru Croitor2018-06-061-0/+3
| | | | | Change-Id: I6b5f974b15398e0926425b1eae24ee1a4813f48d Reviewed-by: Christian Tismer <tismer@stackless.com>
* Fix minor get_package_version issueAlexandru Croitor2018-05-311-1/+1
| | | | | | | | | The function didn't check the value of pre_release_version_type when printing the version. Change-Id: I29db3f40e6fa8c397432433aa285b30f15b8e3ca Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Don't pass -DFORCE_LIMITED_API=yes from setup.py unless asked forAlexandru Croitor2018-05-311-2/+4
| | | | | | | | | | | | | | | | | | | It was weird seeing "-DFORCE_LIMITED_API=yes" being passed from setup.py to CMake when "--limited-api" is not included on the command line, and then seeing "-DFORCE_LIMITED_API=yes" with Python 2 builds. It gives the impression that maybe it could work with Python 2. Instead, don't pass "FORCE_LIMITED_API=yes" from setup.py by default (but still pass it if it's present on the command line), and instead default to "yes" within the CMake project themselves. In the end nothing changes, limited API builds will still be default, but at least it's not as confusing to see the "-DFORCE_LIMITED_API=yes" lines for Python 2 builds in the CI log. Change-Id: I08c863394dd148d88bec324a6cab35459d75303a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Adjust wheel names when building with limited apiAlexandru Croitor2018-05-311-38/+22
| | | | | | | | | | | | | Wheel has poor support for naming wheel packages that were built with limited API enabled. We need to override some of bdist_wheel's methods to generate a correct name and correct metadata. Move the pyside_bdist_wheel class into a separate file, and implement the necessary logic. Change-Id: I23d814cbb794052fb18a1e018f7b767c60945254 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* PEP 384-squash: Implement PEP 384Christian Tismer2018-05-301-0/+8
| | | | | | | | | | This is the condensed checkin of 18 commits which created the implementation of PEP 384. Task-number: PYSIDE-560 Change-Id: I834c659af4c2b55b268f8e8dc4cfa53f02502409 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Format python files to use PEP8Cristian Maureira-Fredes2018-05-231-63/+63
| | | | | | | Change-Id: I8dc16c10565da8f93ba5cb7cace004f8eaf52236 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Christian Tismer <tismer@stackless.com>
* Add option --skip-modulesCristian Maureira-Fredes2018-05-151-0/+9
| | | | | | | | | | | | Allow the user to skip a set of modules when building the module. An example of using this option: --skip-modules=WebEngineCore,WebEngineWidgets,Multimedia Change-Id: I4b7a25acd60d068a886c1e716ddb7b226814b96f Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* build_scripts/main.py: Fix EngrishAlexandru Croitor2018-05-081-2/+2
| | | | | Change-Id: I794e0b094c7be96853c9c5024ede49ea54731506 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Make sure copied libclang file has write permissionsAlexandru Croitor2018-05-081-1/+6
| | | | | | | | | | | | | | When doing a standalone rebuild on macOS, if the libclang library copied over has no write permissions set, the install procedure will fail with permission denied error. Make sure to make the file owner writable, so that any subsequent rebuilds don't cause a failure. Change-Id: I54bb3f6e8bd8db7f8ed2de17892fcedec09b6c32 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
* Fix copying of libclang for standalone buildsAlexandru Croitor2018-05-081-15/+9
| | | | | | | | | | Instead of copying a multitude of symlinks, resolve the path and copy just the libclang library which CMake detected, and thus linked against for the shiboken executable. Change-Id: I02887eb4027d29255a32127fb39aff7a1d127f57 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Add option to skip docs generationCristian Maureira-Fredes2018-05-071-11/+15
| | | | | | | Adding option to avoid building the documentation. Change-Id: Ia5595e6686c6e7d31e94818c1efb28238a3fbfc7 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Change license from all the filesCristian Maureira-Fredes2018-05-031-1/+1
| | | | | | | | | | | | | | | | | Removing the word 'project' from all the headers, and changing the PySide reference from the examples to Qt for Python: The following line was used inside the source/ and build_scripts/ directory: for i in $(grep -r "the Qt for Python project" * |grep -v "pyside2-tools" | awk '{print $1}' | sed 's/:.*//g');do sed -i 's/the\ Qt\ for\ Python\ project/Qt\ for\ Python/g' $i;done and the following line was used inside the examples/ directory: for i in $(grep -r "of the PySide" * |grep -v "pyside2-tools" | awk '{print $1}' | sed 's/:.*//g');do sed -i 's/of\ the\ PySide/of\ the\ Qt\ for\ Python/g' $i;done Change-Id: Ic480714686ad62ac4d81c670f87f1c2033d4ffa1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Split and move various setup.py parts into different filesAlexandru Croitor2018-04-301-0/+1300
This is an initial effort to clean up setup.py. A new directory called build_scripts contains most of the logic for building, leaving setup.py as an entry point. The build_scripts directory contains the usual qtinfo, utils, and the setup.py content has been split into main.py and platform specific files under platforms subfolder. The testrunner script has been modified to find the new location of the utils module. Task-number: PYSIDE-558 Change-Id: I3e041d5116ca5c3f96c789317303b65a7b1bbd70 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>