diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2022-02-15 13:59:33 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2022-03-17 17:14:36 +0100 |
commit | 440438092bc6276399cbb1bd9425227898221587 (patch) | |
tree | 633d48a4d3921720e1574dd71eb2682e57547a80 | |
parent | b3ec373e2fa21fa7ece42d09ec7fe42726ac2f1a (diff) |
coin: Use configure and qt-configure-module in instructions
We want to use configure and qt-configure-module when building in
Coin, rather than pure cmake and qt-cmake.
There are a few benefits:
- CI tests the scripts, making sure we don't introduce regressions
- CI uses the same scripts that we mention in our documentation for
developers to use
- The platform configurations become a bit less verbose and easier to
read due to less shouty-case CMake options
To ensure a more gradual porting, Coin will only use the new
instructions if the 'UseConfigure' feature is set on a platform
configuration in qt5.git. This allows going back to the old
instructions in case if something isn't working properly.
Due the opt-in, we need to support both old and new instructions in
the implementation.
The change strives to remove as much duplicate code as possible,
by moving it into common includes.
The README.md is updated to mention the overview of how the different
environment variables are used.
There are a few important things to point out.
1) Because during the porting we have to allow mixing of the old style
and new style, platform configs have to separate CMake-style options
from configure-style options in different environment variables.
Otherwise the instructions wouldn't be able to create a valid
configure call, where all CMake-style options have to go at the end
after a double dash --.
After all platform configs are ported to the new style, it should be
possible to combine all the options in a single environment variable
if that is desired, but it will require another round of porting to
remove all the '-D' prefixes in CMake-style options, and just use
regular variable assignment which configure supports.
e.g. -DQT_BUILD_EXAMPLES=ON becomes QT_BUILD_EXAMPLES=ON, which can be
mixed in-between configure-style args.
2) Configure is more strict in that it doesn't allow passing
unknown options. Due to that, we can't pass non-qtbase configure
options via NON_QTBASE_CONFIGURE_ARGS. qt-configure-module would
error out in the repos where the configure option is unknown.
Because we don't have a Coin configure variable for each repo,
we circumvent the issue by continuing to pass CMake-style options via
NON_QTBASE_CMAKE_ARGS instead, which does not do validation checks.
In the future, we could introduce a configure flag that disables
the validation checks.
Pick-to: 6.2 6.3
Task-number: QTQAINFRA-4357
Task-number: QTQAINFRA-4815
Change-Id: I72d8ba0b3a543b42982e22ae8d6566c0e885c446
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Toni Saario <toni.saario@qt.io>
19 files changed, 327 insertions, 122 deletions
diff --git a/coin/instructions/README.md b/coin/instructions/README.md index aaefe3696f..f366642395 100644 --- a/coin/instructions/README.md +++ b/coin/instructions/README.md @@ -18,3 +18,61 @@ the ability to build and run tests for ``qemu`` cross-compiling configurations. * ``coin_module_test_template_v3`` changed the run test instructions to not ignore the exit code and thus enforce that tests pass in the CI. + +# Environment variable description and usage + +The following environment variables are used in Coin instructions when building Qt, tests, etc: + +`CONFIGURE_ARGS` - contains platform-specific ``configure-style`` arguments + (e.g. `-shared`), that will be passed to a qtbase configure call +`CMAKE_ARGS` - contains platform-specific ``CMake-style`` arguments + (e.g. `-DOPENSSL_ROOT_DIR=Foo`) that will be passed to a qtbase + configure call +`NON_QTBASE_CONFIGURE_ARGS` - contains platform-specific ``configure-style`` arguments + that will be passed to a non-qtbase qt-configure-module call +`NON_QTBASE_CMAKE_ARGS` - contains platform-specific ``CMake-style`` arguments + that will be passed to a non-qtbase qt-configure-module call +`COMMON_CMAKE_ARGS` - platform-independent ``CMake-style`` args set in + `prepare_building_env.yaml` that apply to qtbase configurations + only. +`COMMON_NON_QTBASE_CMAKE_ARGS` - platform-independent ``CMake-style`` args set in + `prepare_building_env.yaml` that apply to + configuration of repos other than qtbase +`COMMON_TEST_CMAKE_ARGS` - platform-independent ``CMake-style`` args set in + `prepare_building_env.yaml` that apply to configuration of + all standalone tests + +All of the above apply to host builds only. + +There is a a set of environment variables that apply to target builds when cross-compiling which +mirror the ones above. They are: + +`TARGET_CONFIGURE_ARGS` +`TARGET_CMAKE_ARGS` +`NON_QTBASE_TARGET_CONFIGURE_ARGS` +`NON_QTBASE_TARGET_CMAKE_ARGS` + +`COMMON_TARGET_CMAKE_ARGS` +`COMMON_NON_QTBASE_TARGET_CMAKE_ARGS` +`COMMON_TARGET_TEST_CMAKE_ARGS` + +Currently, there are no common ``configure-style`` variables for configuring +repos or tests, only ``CMake-style` ones. + + +`COIN_CMAKE_ARGS` contains the final set of cmake args that is passed to +`configure` / `qt-configure-module`, it is built up from the variables above + any additional values added +by custom instructions, like specification of `CMAKE_INSTALL_PREFIX` etc. + +`INSTALL_DIR_SUFFIX` is used to append either `/host` or `/target` suffixes to install paths in +instructions when cross-building. + +`CONFIGURE_EXECUTABLE` contains a platform-specific path to `configure` / `qt-configure-module` +or `cmake`/ `qt-cmake` depending on whether `UseConfigure` feature is enabled. + +`CONFIGURE_ENV_PREFIX` contains the value of either `ENV_PREFIX` or `TARGET_ENV_PREFIX` depending on +whether it's a cross-build configure call. The values are used when configuring and building, to ensure +that things like compilers are found correctly. + +We use `unixPathSeparators` to pass an install prefix with forward slashes even on Windows, +to avoid escaping issues when using configure. diff --git a/coin/instructions/call_cmake.yaml b/coin/instructions/call_configure_module.yaml index 96227c1f6a..e3b28503aa 100644 --- a/coin/instructions/call_cmake.yaml +++ b/coin/instructions/call_configure_module.yaml @@ -1,7 +1,8 @@ type: Group instructions: + - !include "{{qt/qtbase}}/prepare_configure_module_executable.yaml" - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} {{.InstallDir}}\\bin\\qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} {{.Env.CONFIGURE_EXECUTABLE}} {{.SourceDir}} {{.Env.COIN_CONFIGURE_ARGS}} -- {{.Env.COIN_CMAKE_ARGS}}" executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution maxTimeInSeconds: 6000 maxTimeBetweenOutput: 1200 @@ -9,10 +10,10 @@ instructions: Failed to call cmake. enable_if: condition: property - property: host.os - equals_value: Windows + property: features + contains_value: UseConfigure - type: ExecuteCommand - command: "{{.InstallDir}}/bin/qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} {{.Env.CONFIGURE_EXECUTABLE}} {{.SourceDir}} {{.Env.COIN_CONFIGURE_ARGS}} {{.Env.COIN_CMAKE_ARGS}}" executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution maxTimeInSeconds: 6000 maxTimeBetweenOutput: 1200 @@ -20,5 +21,5 @@ instructions: Failed to call cmake. disable_if: condition: property - property: host.os - equals_value: Windows + property: features + contains_value: UseConfigure diff --git a/coin/instructions/call_configure_qtbase.yaml b/coin/instructions/call_configure_qtbase.yaml new file mode 100644 index 0000000000..c08d7151ca --- /dev/null +++ b/coin/instructions/call_configure_qtbase.yaml @@ -0,0 +1,27 @@ +type: Group +instructions: + - !include "{{qt/qtbase}}/prepare_configure_executable.yaml" + - type: ExecuteCommand + # There is no SourceDir on purpose, because configure is called directly from qtbase, + # so the script knows it's own source dir. + command: "{{.Env.CONFIGURE_ENV_PREFIX}} {{.Env.CONFIGURE_EXECUTABLE}} {{.Env.COIN_CONFIGURE_ARGS}} -- {{.Env.COIN_CMAKE_ARGS}}" + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 6000 + maxTimeBetweenOutput: 1200 + userMessageOnFailure: > + Failed to call cmake. + enable_if: + condition: property + property: features + contains_value: UseConfigure + - type: ExecuteCommand + command: "{{.Env.CONFIGURE_ENV_PREFIX}} {{.Env.CONFIGURE_EXECUTABLE}} {{.SourceDir}} {{.Env.COIN_CONFIGURE_ARGS}} {{.Env.COIN_CMAKE_ARGS}}" + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 6000 + maxTimeBetweenOutput: 1200 + userMessageOnFailure: > + Failed to call cmake. + disable_if: + condition: property + property: features + contains_value: UseConfigure diff --git a/coin/instructions/call_host_cmake.yaml b/coin/instructions/call_host_cmake.yaml deleted file mode 100644 index 4182f9b622..0000000000 --- a/coin/instructions/call_host_cmake.yaml +++ /dev/null @@ -1,24 +0,0 @@ -type: Group -instructions: - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} {{.InstallDir}}\\host\\bin\\qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - enable_if: - condition: property - property: host.os - equals_value: Windows - - type: ExecuteCommand - command: "{{.InstallDir}}/host/bin/qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - disable_if: - condition: property - property: host.os - equals_value: Windows diff --git a/coin/instructions/call_target_cmake.yaml b/coin/instructions/call_target_cmake.yaml deleted file mode 100644 index e8dc7f3f97..0000000000 --- a/coin/instructions/call_target_cmake.yaml +++ /dev/null @@ -1,24 +0,0 @@ -type: Group -instructions: - - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} {{.InstallDir}}\\target\\bin\\qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - enable_if: - condition: property - property: host.os - equals_value: Windows - - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} {{.InstallDir}}/target/bin/qt-cmake-private {{.Env.COIN_CMAKE_ARGS}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - disable_if: - condition: property - property: host.os - equals_value: Windows diff --git a/coin/instructions/cmake_build_and_upload_test_artifacts_host.yaml b/coin/instructions/cmake_build_and_upload_test_artifacts_host.yaml index 847d095da9..3592ac4270 100644 --- a/coin/instructions/cmake_build_and_upload_test_artifacts_host.yaml +++ b/coin/instructions/cmake_build_and_upload_test_artifacts_host.yaml @@ -10,7 +10,7 @@ instructions: variableValue: "{{.InstallDir}}" - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - variableValue: "{{.Env.TEST_CONFIGURE_ARGS}}" + variableValue: "{{.Env.COMMON_TEST_CMAKE_ARGS}}" - !include "{{qt/qtbase}}/cmake_build_and_upload_test_artifacts.yaml" disable_if: condition: property diff --git a/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml b/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml index b34d408f4a..8c3dfe14e1 100644 --- a/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml +++ b/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml @@ -21,7 +21,7 @@ instructions: equals_value: Windows - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - variableValue: "{{.Env.TARGET_TEST_CONFIGURE_ARGS}}" + variableValue: "{{.Env.COMMON_TARGET_TEST_CMAKE_ARGS}}" - !include "{{qt/qtbase}}/cmake_build_and_upload_test_artifacts.yaml" disable_if: condition: property diff --git a/coin/instructions/cmake_cross_compilation_module_build_instructions.yaml b/coin/instructions/cmake_cross_compilation_module_build_instructions.yaml index 5e4f95f501..2cf98b5ea2 100644 --- a/coin/instructions/cmake_cross_compilation_module_build_instructions.yaml +++ b/coin/instructions/cmake_cross_compilation_module_build_instructions.yaml @@ -30,13 +30,21 @@ instructions: directory: "{{.SourceDir}}/build/host" - type: ChangeDirectory directory: "{{.BuildDir}}" + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.NON_QTBASE_CONFIGURE_ARGS}}" - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - # The lack of space between the non qtbase configure args and the rest of the args is important! - variableValue: "{{.Env.NON_QTBASE_CONFIGURE_ARGS}} {{.SourceDir}}" - - !include "{{qt/qtbase}}/call_host_cmake.yaml" + variableValue: "{{.Env.NON_QTBASE_CMAKE_ARGS}} {{.Env.COMMON_NON_QTBASE_CMAKE_ARGS}}" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/prepare_install_dir_suffix_host.yaml" + - !include "{{qt/qtbase}}/call_configure_module.yaml" + - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: "{{.Env.CMAKE_BUILD_TIMEOUT}}" maxTimeBetweenOutput: "{{.Env.CMAKE_BUILD_OUTPUT_TIMEOUT}}" userMessageOnFailure: > @@ -60,13 +68,21 @@ instructions: directory: "{{.SourceDir}}/build/target" - type: ChangeDirectory directory: "{{.BuildDir}}" + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.NON_QTBASE_TARGET_CONFIGURE_ARGS}}" - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - # The lack of space between the non qtbase configure args and the rest of the args is important! - variableValue: "{{.Env.NON_QTBASE_TARGET_CONFIGURE_ARGS}} {{.SourceDir}}" - - !include "{{qt/qtbase}}/call_target_cmake.yaml" + variableValue: "{{.Env.NON_QTBASE_TARGET_CMAKE_ARGS}} {{.Env.COMMON_NON_QTBASE_TARGET_CMAKE_ARGS}}" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.TARGET_ENV_PREFIX}}" + - !include "{{qt/qtbase}}/prepare_install_dir_suffix_target.yaml" + - !include "{{qt/qtbase}}/call_configure_module.yaml" + - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: "{{.Env.CMAKE_BUILD_TIMEOUT}}" maxTimeBetweenOutput: "{{.Env.CMAKE_BUILD_OUTPUT_TIMEOUT}}" userMessageOnFailure: > diff --git a/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml b/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml index 6736d7b514..05e687604c 100644 --- a/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml +++ b/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml @@ -16,15 +16,21 @@ instructions: directory: "{{.SourceDir}}/build/host" - type: ChangeDirectory directory: "{{.BuildDir}}" + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.CONFIGURE_ARGS}}" + - type: EnvironmentVariable + variableName: COIN_CMAKE_ARGS + # Use unix separators even on Windows, to avoid escaping issues the in configure script. + variableValue: "{{.Env.CMAKE_ARGS}} {{.Env.COMMON_CMAKE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{unixPathSeparators .InstallDir}}/host" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_qtbase.yaml" + - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}}/host {{.SourceDir}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: 6000 maxTimeBetweenOutput: 4800 userMessageOnFailure: > @@ -48,29 +54,36 @@ instructions: directory: "{{.SourceDir}}/build/target" - type: ChangeDirectory directory: "{{.BuildDir}}" + - type: AppendToEnvironmentVariable - variableName: TARGET_CONFIGURE_ARGS + variableName: TARGET_CMAKE_ARGS variableValue: " -DQT_HOST_PATH={{.AgentWorkingDir}}/install" disable_if: condition: property property: platformDependency equals_value: null - type: AppendToEnvironmentVariable - variableName: TARGET_CONFIGURE_ARGS + variableName: TARGET_CMAKE_ARGS variableValue: " -DQT_HOST_PATH={{.InstallDir}}/host" enable_if: condition: property property: platformDependency equals_value: null + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.TARGET_CONFIGURE_ARGS}}" + - type: EnvironmentVariable + variableName: COIN_CMAKE_ARGS + # Use unix separators even on Windows, to avoid escaping issues in the configure script. + variableValue: "{{.Env.TARGET_CMAKE_ARGS}} {{.Env.COMMON_TARGET_CMAKE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{unixPathSeparators .InstallDir}}/target" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.TARGET_ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_qtbase.yaml" + - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} cmake {{.Env.TARGET_CONFIGURE_ARGS}} -DCMAKE_STAGING_PREFIX:PATH={{.InstallDir}}/target {{.SourceDir}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: 6000 maxTimeBetweenOutput: 4800 userMessageOnFailure: > diff --git a/coin/instructions/cmake_module_build_instructions.yaml b/coin/instructions/cmake_module_build_instructions.yaml index 33d4893c9e..de3bbab030 100644 --- a/coin/instructions/cmake_module_build_instructions.yaml +++ b/coin/instructions/cmake_module_build_instructions.yaml @@ -6,11 +6,18 @@ instructions: directory: "{{.SourceDir}}" - type: ChangeDirectory directory: "{{.BuildDir}}" + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.NON_QTBASE_CONFIGURE_ARGS}}" - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - # The lack of space between the non qtbase configure args and the rest of the args is important! - variableValue: "{{.Env.NON_QTBASE_CONFIGURE_ARGS}} {{.SourceDir}}" - - !include "{{qt/qtbase}}/call_cmake.yaml" + variableValue: "{{.Env.NON_QTBASE_CMAKE_ARGS}} {{.Env.COMMON_NON_QTBASE_CMAKE_ARGS}}" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_module.yaml" + - type: EnvironmentVariable variableName: CMAKE_BUILD_TIMEOUT variableValue: "6000" @@ -26,7 +33,7 @@ instructions: env_var: CMAKE_BUILD_OUTPUT_TIMEOUT equals_value: null - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: "{{.Env.CMAKE_BUILD_TIMEOUT}}" maxTimeBetweenOutput: "{{.Env.CMAKE_BUILD_OUTPUT_TIMEOUT}}" userMessageOnFailure: > diff --git a/coin/instructions/cmake_qtbase_build_instructions.yaml b/coin/instructions/cmake_qtbase_build_instructions.yaml index 7fc93522cc..10509eac43 100644 --- a/coin/instructions/cmake_qtbase_build_instructions.yaml +++ b/coin/instructions/cmake_qtbase_build_instructions.yaml @@ -6,15 +6,21 @@ instructions: directory: "{{.SourceDir}}" - type: ChangeDirectory directory: "{{.BuildDir}}" + + - type: EnvironmentVariable + variableName: COIN_CONFIGURE_ARGS + variableValue: "{{.Env.CONFIGURE_ARGS}}" + - type: EnvironmentVariable + variableName: COIN_CMAKE_ARGS + # Use unix separators even on Windows, to avoid escaping issues in the configure script. + variableValue: "{{.Env.CMAKE_ARGS}} {{.Env.COMMON_CMAKE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{unixPathSeparators .InstallDir}}" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_qtbase.yaml" + - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}} {{.SourceDir}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" + command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake --build . --parallel -v" maxTimeInSeconds: 6000 maxTimeBetweenOutput: 1200 userMessageOnFailure: > diff --git a/coin/instructions/coin_module_test_docs.yaml b/coin/instructions/coin_module_test_docs.yaml index f42b6ae08f..b2ae01677e 100644 --- a/coin/instructions/coin_module_test_docs.yaml +++ b/coin/instructions/coin_module_test_docs.yaml @@ -14,10 +14,15 @@ instructions: command: "cp -rfs /opt/qt-doctools/. {{.InstallDir}}" userMessageOnFailure: > Failed to create links to provisioned binaries. + - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS - variableValue: "-DQT_BUILD_TESTS=OFF {{.SourceDir}}" - - !include "{{qt/qtbase}}/call_cmake.yaml" + variableValue: "-DQT_BUILD_TESTS=OFF" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_module.yaml" + - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --build . --target generate_docs -v" ignoreExitCode: false diff --git a/coin/instructions/coin_qtbase_test_docs.yaml b/coin/instructions/coin_qtbase_test_docs.yaml index 824d8c5677..2498f9b393 100644 --- a/coin/instructions/coin_qtbase_test_docs.yaml +++ b/coin/instructions/coin_qtbase_test_docs.yaml @@ -14,13 +14,16 @@ instructions: command: "cp -rfs /opt/qt-doctools/. {{.InstallDir}}" userMessageOnFailure: > Failed to create links to provisioned binaries. - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}} -DQT_BUILD_TESTS=OFF {{.SourceDir}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. + + - type: EnvironmentVariable + variableName: COIN_CMAKE_ARGS + # Use unix separators even on Windows, to avoid escaping issues in the configure script. + variableValue: "-DQT_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX:PATH={{unixPathSeparators .InstallDir}}" + - type: EnvironmentVariable + variableName: CONFIGURE_ENV_PREFIX + variableValue: "{{.Env.ENV_PREFIX}}" + - !include "{{qt/qtbase}}/call_configure_qtbase.yaml" + - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --build . --target generate_docs -v" ignoreExitCode: false diff --git a/coin/instructions/prepare_building_env.yaml b/coin/instructions/prepare_building_env.yaml index d8243e7a12..00c0de1869 100644 --- a/coin/instructions/prepare_building_env.yaml +++ b/coin/instructions/prepare_building_env.yaml @@ -28,14 +28,14 @@ instructions: - type: Group instructions: - type: PrependToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: "-DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc " enable_if: condition: property property: host.compiler contains_value: ICC - type: PrependToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: "-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ " enable_if: condition: or @@ -47,14 +47,14 @@ instructions: property: host.compiler contains_value: Mingw - type: PrependToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: "-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe " enable_if: condition: property property: host.compiler contains_value: MSVC - type: PrependToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: "-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ " enable_if: condition: property @@ -64,10 +64,10 @@ instructions: condition: and conditions: - condition: runtime - env_var: CONFIGURE_ARGS + env_var: COMMON_CMAKE_ARGS contains_value: "-DCMAKE_C_COMPILER=" - condition: runtime - env_var: CONFIGURE_ARGS + env_var: COMMON_CMAKE_ARGS contains_value: "-DCMAKE_CXX_COMPILER=" @@ -345,7 +345,7 @@ instructions: - type: Group instructions: - type: AppendToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: " -DWARNINGS_ARE_ERRORS=ON" enable_if: condition: property @@ -355,46 +355,46 @@ instructions: - type: Group instructions: - type: AppendToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: " -DQT_BUILD_TESTS=OFF -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" - type: AppendToEnvironmentVariable - variableName: NON_QTBASE_CONFIGURE_ARGS + variableName: COMMON_NON_QTBASE_CMAKE_ARGS variableValue: " -DQT_BUILD_TESTS=OFF -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" - type: AppendToEnvironmentVariable - variableName: TEST_CONFIGURE_ARGS + variableName: COMMON_TEST_CMAKE_ARGS variableValue: " -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" - type: AppendToEnvironmentVariable - variableName: TARGET_CONFIGURE_ARGS + variableName: COMMON_TARGET_CMAKE_ARGS variableValue: " -DQT_BUILD_TESTS=OFF -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" - type: AppendToEnvironmentVariable - variableName: NON_QTBASE_TARGET_CONFIGURE_ARGS + variableName: COMMON_NON_QTBASE_TARGET_CMAKE_ARGS variableValue: " -DQT_BUILD_TESTS=OFF -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" - type: AppendToEnvironmentVariable - variableName: TARGET_TEST_CONFIGURE_ARGS + variableName: COMMON_TARGET_TEST_CMAKE_ARGS variableValue: " -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_MESSAGE_LOG_LEVEL=STATUS" # Sccache - type: Group instructions: - type: AppendToEnvironmentVariable - variableName: CONFIGURE_ARGS + variableName: COMMON_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" - type: AppendToEnvironmentVariable - variableName: NON_QTBASE_CONFIGURE_ARGS + variableName: COMMON_NON_QTBASE_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" - type: AppendToEnvironmentVariable - variableName: TEST_CONFIGURE_ARGS + variableName: COMMON_TEST_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" - type: AppendToEnvironmentVariable - variableName: TARGET_CONFIGURE_ARGS + variableName: COMMON_TARGET_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" - type: AppendToEnvironmentVariable - variableName: NON_QTBASE_TARGET_CONFIGURE_ARGS + variableName: COMMON_NON_QTBASE_TARGET_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" - type: AppendToEnvironmentVariable - variableName: TARGET_TEST_CONFIGURE_ARGS + variableName: COMMON_TARGET_TEST_CMAKE_ARGS variableValue: " -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" enable_if: condition: property diff --git a/coin/instructions/prepare_configure_executable.yaml b/coin/instructions/prepare_configure_executable.yaml new file mode 100644 index 0000000000..e053028237 --- /dev/null +++ b/coin/instructions/prepare_configure_executable.yaml @@ -0,0 +1,35 @@ +# Call either cmake or configure depending on whether the +# UseConfigure platform configuration feature is set. +# We should remove the cmake branch, once all platform configurations +# are ported to use configure. +type: Group +instructions: + - type: Group + enable_if: + condition: property + property: features + contains_value: UseConfigure + instructions: + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.SourceDir}}/configure" + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.SourceDir}}\\configure.bat" + enable_if: + condition: property + property: host.os + equals_value: Windows + - type: Group + disable_if: + condition: property + property: features + contains_value: UseConfigure + instructions: + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "cmake" diff --git a/coin/instructions/prepare_configure_module_executable.yaml b/coin/instructions/prepare_configure_module_executable.yaml new file mode 100644 index 0000000000..055870e8a6 --- /dev/null +++ b/coin/instructions/prepare_configure_module_executable.yaml @@ -0,0 +1,46 @@ +# Call either qt-cmake or qt-configure-module depending on whether the +# UseConfigure platform configuration feature is set. +# We should remove the cmake branch, once all platform configurations +# are ported to use configure. +type: Group +instructions: + - type: Group + enable_if: + condition: property + property: features + contains_value: UseConfigure + instructions: + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.InstallDir}}{{.Env.INSTALL_DIR_SUFFIX}}/bin/qt-configure-module" + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.InstallDir}}{{.Env.INSTALL_DIR_SUFFIX}}\\bin\\qt-configure-module.bat" + enable_if: + condition: property + property: host.os + equals_value: Windows + - type: Group + disable_if: + condition: property + property: features + contains_value: UseConfigure + instructions: + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.InstallDir}}{{.Env.INSTALL_DIR_SUFFIX}}/bin/qt-cmake-private" + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: CONFIGURE_EXECUTABLE + variableValue: "{{.InstallDir}}{{.Env.INSTALL_DIR_SUFFIX}}\\bin\\qt-cmake-private.bat" + enable_if: + condition: property + property: host.os + equals_value: Windows diff --git a/coin/instructions/prepare_install_dir_suffix_host.yaml b/coin/instructions/prepare_install_dir_suffix_host.yaml new file mode 100644 index 0000000000..30cf77a6c1 --- /dev/null +++ b/coin/instructions/prepare_install_dir_suffix_host.yaml @@ -0,0 +1,16 @@ +type: Group +instructions: + - type: EnvironmentVariable + variableName: INSTALL_DIR_SUFFIX + variableValue: "/host" + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: INSTALL_DIR_SUFFIX + variableValue: "\\host" + enable_if: + condition: property + property: host.os + equals_value: Windows diff --git a/coin/instructions/prepare_install_dir_suffix_target.yaml b/coin/instructions/prepare_install_dir_suffix_target.yaml new file mode 100644 index 0000000000..e53519430e --- /dev/null +++ b/coin/instructions/prepare_install_dir_suffix_target.yaml @@ -0,0 +1,16 @@ +type: Group +instructions: + - type: EnvironmentVariable + variableName: INSTALL_DIR_SUFFIX + variableValue: "/target" + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: INSTALL_DIR_SUFFIX + variableValue: "\\target" + enable_if: + condition: property + property: host.os + equals_value: Windows diff --git a/coin/instructions/qmake_examples/build_qmake_examples_instructions.yaml b/coin/instructions/qmake_examples/build_qmake_examples_instructions.yaml index 7b8a6376f9..dc3417a05c 100644 --- a/coin/instructions/qmake_examples/build_qmake_examples_instructions.yaml +++ b/coin/instructions/qmake_examples/build_qmake_examples_instructions.yaml @@ -21,3 +21,7 @@ instructions: - condition: runtime env_var: COIN_CMAKE_ARGS contains_value: "QT_BUILD_EXAMPLES=ON" + # covers all cases for UseConfigure configs + - condition: runtime + env_var: COIN_CONFIGURE_ARGS + contains_value: "-make examples" |