Commit Graph

12 Commits

Author SHA1 Message Date
Iikka Eklund
95cc652e1a Conan: Fix build_type usage in the build recipe
Currently e.g. -debug-and-release builds are "broken" as it only
produces release binaries on Windows. There are other inconsistencies
also how the recipe deals with various release and debug related options
and how those map the Conan's 'build_type'.

Pick-to: 6.2 6.2.1
Change-Id: I47fa4c1592eefa1b5a1f144691ee33675753e5fb
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2021-11-04 00:12:15 +03:00
Iikka Eklund
623e396e88 Change package_revision_mode() to recipe_revision_mode()
The package_revision_mode() is too strict for Qt CI.
This mode includes artifacts checksum in package_id which is
problematic in Qt CI re-runs (re-run flaky build) which contain
different build timestamps (cmake) which end up in library
files -> different package_id.

The effect was that Conan/Conan server is unable to re-use correct
binaries and re-builds (re-staged) dependencies.

Pick-to: 6.2 6.2.1
Change-Id: Id54af7455b948c8d68b7206d524f1d0fcfb7b568
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-10-25 15:47:46 +03:00
Iikka Eklund
be3df082bc Conan: Do not use f-strings
Conan supports Python3.5 which does not support f-strings yet.

Pick-to: 6.2
Change-Id: Ie4b64e3baff7da64b80db71f4f0ea4172ddc61fb
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-10-15 11:09:38 +03:00
Iikka Eklund
acaf38cfe4 Conan: Use recipe revision mode for 'python_requires'
By default Conan uses 'minor_mode' policy for 'python_requires'
dependencies. This causes updates in 'qt-conan-common' package not to
land into users when invoking e.g. "$conan instal .. --update".

Fix this by enforcing recipe revision mode so any changes to
'qt-conan-common' recipe is received by the clients when updating
packages.

Pick-to: 6.2
Change-Id: I225965aa76c39552bd4adc93d7e68e0ae0b38d56
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-09-23 17:57:04 +03:00
Iikka Eklund
66b1b80642 Conan: Fix invalid options for package_id checksum
The android specific options were plain wrong:
  - android_sdk_path -> android_sdk
  - android_ndk_path -> android_ndk

These reflect the Qt configure options.

Pick-to: 6.2
Change-Id: I0b9283b6603aff8243208216baffe263d37b6541
Reviewed-by: Matti Paaso <matti.paaso@qt.io>
2021-09-21 10:41:01 +03:00
Iikka Eklund
9cd87a778d Conan: Exclude 'headersclean' option from package_id
This option should not affect the binary compatibility thus it should
not be part of the package_id of the created Conan package.

Pick-to: 6.2
Change-Id: I6d09cc3933cd28c306ef011bb26346a0993ffcd3
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2021-09-21 10:41:01 +03:00
Iikka Eklund
d96fe5e753 Conan: Filter cmake_args that should not be included in package_id
The qtbase Conan recipe has 'cmake_args_qtbase" option to pass cmake
arguments. Some of the cmake arguments should not be included in the
package_id checksum of the Conan package. Filter these out when
generating the package_id.

Examples:
  - -DCMAKE_C_COMPILER_LAUNCHER=sccache
  - -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
  - -DFEATURE_headersclean=..
  - -DPostgreSQL_ROOT=..

Those arguments which are specific to Qt CI build environment are
filtered out. This makes the pre-built Conan binary packages more
usable for the end users because Conan would enforce a build
from sources if the checksum(s) would not match.

Pick-to: 6.2
Task-number: QTBUG-96230
Change-Id: I076a57427614fdf4bf9138402e247d63f1ce15d9
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-09-21 10:41:01 +03:00
Iikka Eklund
83752fcd2b Conan: Rename 'extra_cmake_args' Conan option as 'cmake_args_qtbase'
It turns out that we need to support two ways to pass cmake args as
Conan options. Those that are meant for qtbase only,
like "-DCMAKE_TOOLCHAIN_FILE={{.Env.ANDROID_NDK_ROOT}}", and those
that are meant for leaf modules only.

Rename the current 'extra_cmake_args' Conan recipe option as
'cmake_args_qtbase' to make it clear these cmake args are passed
to qtbase build only.

The leaf modules will be using 'cmake_args_leaf_module' as the
Conan option name.

Pick-to: 6.2
Change-Id: I456b8b07da5684f386cac668a5cd3e2509c733ac
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-08-30 05:51:36 +00:00
Iikka Eklund
122a45cd73 Conan: recipe cleanups
- Fix license reference in the recipe.
- Fix line lengths exceeding 100 characters.
- Code formatting changes as suggested by 'black' tool.
- Remove superfluous Path() usage.
- Improve Qt version parsing from file.

Pick-to: 6.2
Change-Id: Ie0534a1d4fb7b2c1dc697117bd4cb2d4ceda0622
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-08-30 05:51:12 +00:00
Iikka Eklund
74fb78b4cd Conan: simplify Conan recipe
The qt-conan-common package contains shared functionality
for recipes that should be used:
 - environment wrap during the build()
 - package_info() is generic for all recipes

Move the _build() out from the class so that it is usable for
the callback from qt-conan-common package.

Simplify how the Qt module version and prerelease tag is
read from .cmake.conf and how the file is being referenced.
As the .cmake.conf is included in the "exports" it will
be always present next to the recipe:
  - in .git source tree
  - in Conan cache

Pick-to: 6.2
Change-Id: I4bbd683f7b49151620397e0b7f4272929a93c060
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-06-21 15:19:16 +03:00
Iikka Eklund
08448a5f48 Conan: Read status flag from .cmake.conf
The status information (alpha1, beta2, rc3, ...) needs to be part of
the Conan package reference.

As Conan supports semantic versioning the best place to put the status
is to append it to the version string:

qtbase/6.2.0-alpha1@qt/everywhere
qtbase/6.2.0-beta2@qt/everywhere
qtbase/6.2.0-rc3@qt/everywhere
qtbase/6.2.0@qt/everywhere

Other Conan packages declaring a dependency can use e.g. syntax:

  # notice the asterix character after version
  self.requires(f"qtbase/[<=<version>, include_prerelease=True}]@..)

This way the status information is not in the Conan channel part and
downstream consumers of the Conan package does not need to update
the dependency (Conan reference string) every time the version changes.

Put the status information next to Qt version string in .cmake.cache.

Task-number: QTBUG-94385
Pick-to: 6.2
Change-Id: Ib277f99ea1e87253b93f59e463bd6c7dd8b3203e
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-06-21 15:19:16 +03:00
Iikka Eklund
13c8db52a2 Add conanfile.py to support builds with Conan package manager
Initial version of the conanfile.py to support builds with Conan
package manager. Tested with Linux, macOS and Windows desktop
builds first.

Use 'scm' revision_mode so that the revision matches with the git
commit id.

The recipe uses Qt's configure(.bat) and cmake directly,
'conans.CMake' utility tool is not used.

Load options dynamically based on configure(.bat) features:
- configure(.bat) -write-options-for-conan <output file>
  - Expose all usable configure(.bat) options as Conan options
- We want to query configure(.bat) for available options and
  features to avoid duplicating these in multiple places
- The available configure(.bat) option names are formatted to
  suit as dictionary keys in Conan 'options'

The recipe writes 'configure_options.json' and
'configure_features.txt' which are exported as part of the
conan package. This is done only once during the 'conan export'
i.e. when the initial Conan package is being created.
The recipe will reference these files in later phases when needed.

The recipe translates the Qt configure options and features as
Conan options and default_options. When the build is invoked
('conan install') the recipe translates the Conan options back
to suitable Qt configure options which are then passed to
configure(.bat).

Additional cmake flags can be passed via 'extra_cmake_args' option:

  $conan install ... -o extra_cmake_args="-DFOO=bar -DFOO2=bar2"

Remove those options from 'package_id' that point to local environment
like installation paths. These are most probably different on end user
machines making it impossible to re-use the pre-built binaries by Qt CI
as the path values would become of the 'package_id' checksum.

Task-number: QTBUG-92031
Change-Id: I4e47d116fdef6a5daa23aba22bac2b2d74d12c6e
Reviewed-by: Toni Saario <toni.saario@qt.io>
2021-05-24 14:24:34 +03:00