diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-02-08 11:32:37 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-02-08 11:32:37 +0100 |
commit | 8bac42bd2fdf0b94a1fb460e179b34b903a92149 (patch) | |
tree | 2c98cd97dc02c30cf22c100c5fa27c0946f1e694 | |
parent | 16af59237ff7e15b7fcc999aa1b4983177fa56e1 (diff) | |
parent | 1ed2577ad0beed2f5f3f86317f47e5479175c783 (diff) |
Merge remote-tracking branch 'origin/4.14'
Change-Id: Ib48bc2d1644815895c8c3bac2da8c57c58b391bb
-rw-r--r-- | .github/workflows/README.md | 2 | ||||
-rw-r--r-- | .github/workflows/build_cmake.yml (renamed from .github/workflows/build_qmake.yml) | 253 | ||||
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | plugins/haskell/haskellrunconfiguration.h | 3 | ||||
-rw-r--r-- | plugins/haskell/stackbuildstep.cpp | 4 | ||||
-rw-r--r-- | plugins/haskell/stackbuildstep.h | 2 |
6 files changed, 131 insertions, 135 deletions
diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 8481ed1..107410c 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -1,6 +1,6 @@ # GitHub Actions & Workflows -The `build_qmake.yml` in this directory adds a [GitHub action][1] and workflow that builds +The `build_cmake.yml` in this directory adds a [GitHub action][1] and workflow that builds your plugin anytime you push commits to GitHub on Windows, Linux and macOS. The build artifacts can be downloaded from GitHub and be installed into an existing Qt Creator diff --git a/.github/workflows/build_qmake.yml b/.github/workflows/build_cmake.yml index 980341f..416ad2e 100644 --- a/.github/workflows/build_qmake.yml +++ b/.github/workflows/build_cmake.yml @@ -3,11 +3,12 @@ name: QMake Build Matrix on: [push] env: - QT_VERSION: 5.14.2 - QT_CREATOR_VERSION: 4.13.0-beta1 - QT_CREATOR_SNAPSHOT: latest - PLUGIN_PRO: haskell.pro PLUGIN_NAME: Haskell + QT_VERSION: 5.15.2 + QT_CREATOR_VERSION: 4.14.0 + QT_CREATOR_SNAPSHOT: NO + CMAKE_VERSION: 3.18.3 + NINJA_VERSION: 1.10.1 jobs: build: @@ -17,83 +18,114 @@ jobs: matrix: config: - { - name: "Windows Latest x64", artifact: "Windows-x64.zip", + name: "Windows Latest MSVC", artifact: "Windows-x64", os: windows-latest, - environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat" + cc: "cl", cxx: "cl", + environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", } - { - name: "Windows Latest x86", artifact: "Windows-x86.zip", - os: windows-latest, - environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars32.bat" - } - - { - name: "Linux Latest x64", artifact: "Linux-x64.zip", - os: ubuntu-latest + name: "Ubuntu Latest GCC", artifact: "Linux-x64", + os: ubuntu-latest, + cc: "gcc", cxx: "g++" } - { - name: "macOS Latest x64", artifact: "macOS-x64.zip", - os: macos-latest + name: "macOS Latest Clang", artifact: "macOS-x64", + os: macos-latest, + cc: "clang", cxx: "clang++" } steps: - uses: actions/checkout@v1 - - name: Installing system libs + - name: Download Ninja and CMake + shell: cmake -P {0} + run: | + set(cmake_version "$ENV{CMAKE_VERSION}") + set(ninja_version "$ENV{NINJA_VERSION}") + + if ("${{ runner.os }}" STREQUAL "Windows") + set(ninja_suffix "win.zip") + set(cmake_suffix "win64-x64.zip") + set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(ninja_suffix "linux.zip") + set(cmake_suffix "Linux-x86_64.tar.gz") + set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") + elseif ("${{ runner.os }}" STREQUAL "macOS") + set(ninja_suffix "mac.zip") + set(cmake_suffix "Darwin-x86_64.tar.gz") + set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") + endif() + + set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") + file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) + + set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") + file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) + + # Add to PATH environment variable + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) + set(path_separator ":") + if ("${{ runner.os }}" STREQUAL "Windows") + set(path_separator ";") + endif() + file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${cmake_dir}") + + if (NOT "${{ runner.os }}" STREQUAL "Windows") + execute_process( + COMMAND chmod +x ninja + COMMAND chmod +x ${cmake_dir}/cmake + ) + endif() + + - name: Install system libs shell: cmake -P {0} run: | if ("${{ runner.os }}" STREQUAL "Linux") execute_process( + COMMAND sudo apt update + ) + execute_process( COMMAND sudo apt install libgl1-mesa-dev + RESULT_VARIABLE result ) - endif() - if ("${{ runner.os }}" STREQUAL "Windows") - # get JOM - file(DOWNLOAD "https://download.qt.io/official_releases/jom/jom.zip" ./jom.zip SHOW_PROGRESS) - file(MAKE_DIRECTORY ./jom) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../jom.zip WORKING_DIRECTORY ./jom) + if (NOT result EQUAL 0) + message(FATAL_ERROR "Failed to install dependencies") + endif() endif() - name: Download Qt id: qt shell: cmake -P {0} run: | - set(qt_version $ENV{QT_VERSION}) + set(qt_version "$ENV{QT_VERSION}") string(REPLACE "." "" qt_version_dotless "${qt_version}") if ("${{ runner.os }}" STREQUAL "Windows") set(url_os "windows_x86") - if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") - set(qt_package_name "qt.qt5.${qt_version_dotless}.win64_msvc2017_64") - set(qt_dir_prefix "${qt_version}/msvc2017_64") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(qt_package_name "qt.qt5.${qt_version_dotless}.win32_msvc2017") - set(qt_dir_prefix "${qt_version}/msvc2017") - else() - endif() + set(qt_package_arch_suffix "win64_msvc2019_64") + set(qt_dir_prefix "${qt_version}/msvc2019_64") + set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86_64") elseif ("${{ runner.os }}" STREQUAL "Linux") set(url_os "linux_x64") - set(qt_package_name "qt.qt5.${qt_version_dotless}.gcc_64") + set(qt_package_arch_suffix "gcc_64") set(qt_dir_prefix "${qt_version}/gcc_64") + set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") elseif ("${{ runner.os }}" STREQUAL "macOS") set(url_os "mac_x64") - set(qt_package_name "qt.qt5.${qt_version_dotless}.clang_64") + set(qt_package_arch_suffix "clang_64") set(qt_dir_prefix "${qt_version}/clang_64") + set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") endif() set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt5_${qt_version_dotless}") file(DOWNLOAD "${qt_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) file(READ ./Updates.xml updates_xml) - string(REGEX MATCH "<Name>${qt_package_name}.*<Version>([0-9+-.]+)</Version>.*<DownloadableArchives>qtbase([a-zA-Z0-9_-]+).7z" - updates_xml_output "${updates_xml}") - set(package_version ${CMAKE_MATCH_1}) - set(package_suffix ${CMAKE_MATCH_2}) - string(REPLACE "-debug-symbols" "" package_suffix "${package_suffix}") - - # Workaround for CMake's greedy regex - if ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - string(REPLACE "X86_64" "X86" package_suffix "${package_suffix}") - endif() + string(REGEX MATCH "<Name>qt.qt5.*<Version>([0-9+-.]+)</Version>" updates_xml_output "${updates_xml}") + set(qt_package_version ${CMAKE_MATCH_1}) file(MAKE_DIRECTORY qt5) @@ -101,20 +133,27 @@ jobs: file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir) message("::set-output name=qt_dir::${qt_dir}") - foreach(package qtbase qtdeclarative qttools qtsvg) - file(DOWNLOAD - "${qt_base_url}/${qt_package_name}/${package_version}${package}${package_suffix}.7z" ./${package}.7z - SHOW_PROGRESS + message("Downloading Qt to ${qt_dir}") + function(downloadAndExtract url archive) + message("Downloading ${url}") + file(DOWNLOAD "${url}" ./${archive} SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt5) + endfunction() + + foreach(package qtbase qtdeclarative) + downloadAndExtract( + "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" + ${package}.7z ) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qt5) endforeach() - file(READ "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" qtconfig) - string(REPLACE "Enterprise" "OpenSource" qtconfig "${qtconfig}") - string(REPLACE "licheck.exe" "" qtconfig "${qtconfig}") - string(REPLACE "licheck64" "" qtconfig "${qtconfig}") - string(REPLACE "licheck_mac" "" qtconfig "${qtconfig}") - file(WRITE "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" "${qtconfig}") + # uic depends on libicu56.so + if ("${{ runner.os }}" STREQUAL "Linux") + downloadAndExtract( + "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" + icu.7z + ) + endif() - name: Download Qt Creator id: qt_creator @@ -129,29 +168,21 @@ jobs: endif() if ("${{ runner.os }}" STREQUAL "Windows") - set(qtc_output_directory "target/lib/qtcreator/plugins") - set(qtc_binary_name "$ENV{PLUGIN_NAME}4.dll") - if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") - set(qtc_platform "windows_x64") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(qtc_platform "windows_x86") - endif() + set(qtc_platform "windows_x64") elseif ("${{ runner.os }}" STREQUAL "Linux") - set(qtc_output_directory "target/lib/qtcreator/plugins") - set(qtc_binary_name "lib$ENV{PLUGIN_NAME}.so") set(qtc_platform "linux_x64") elseif ("${{ runner.os }}" STREQUAL "macOS") - set(qtc_output_directory "target/PlugIns") - set(qtc_binary_name "lib$ENV{PLUGIN_NAME}.dylib") set(qtc_platform "mac_x64") endif() + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtc_dir) # Save the path for other steps - message("::set-output name=qtc_binary_name::${qtc_binary_name}") - message("::set-output name=qtc_output_directory::${qtc_output_directory}") + message("::set-output name=qtc_dir::${qtc_dir}") file(MAKE_DIRECTORY qtcreator) + message("Downloading Qt Creator from ${qtc_base_url}/${qtc_platform}") + foreach(package qtcreator qtcreator_dev) file(DOWNLOAD "${qtc_base_url}/${qtc_platform}/${package}.7z" ./${package}.7z SHOW_PROGRESS) @@ -159,9 +190,13 @@ jobs: ${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qtcreator) endforeach() - - name: Configure + - name: Build shell: cmake -P {0} run: | + set(ENV{CC} ${{ matrix.config.cc }}) + set(ENV{CXX} ${{ matrix.config.cxx }}) + set(ENV{MACOSX_DEPLOYMENT_TARGET} "10.13") + if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") execute_process( COMMAND "${{ matrix.config.environment_script }}" && set @@ -171,72 +206,36 @@ jobs: foreach(line IN LISTS output_lines) if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - - # Set for other steps - message("::set-env name=${CMAKE_MATCH_1}::${CMAKE_MATCH_2}") endif() endforeach() endif() - if ("${{ runner.os }}" STREQUAL "macOS") - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator/Qt Creator.app" qtcreator_build) - else() - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtcreator_build) - endif() - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtcreator_source) - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/target" target_path) + set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") execute_process( - COMMAND ${{ steps.qt.outputs.qt_dir }}/bin/qmake - $ENV{PLUGIN_PRO} - CONFIG+=release - IDE_SOURCE_TREE="${qtcreator_source}" - IDE_BUILD_TREE="${qtcreator_build}" - IDE_OUTPUT_PATH="${target_path}" + COMMAND python + -u + ${{ steps.qt_creator.outputs.qtc_dir }}/scripts/build_plugin.py + --name "$ENV{PLUGIN_NAME}-$ENV{QT_CREATOR_VERSION}-${{ matrix.config.artifact }}" + --src . + --build build + --qt-path "${{ steps.qt.outputs.qt_dir }}" + --qtc-path "${{ steps.qt_creator.outputs.qtc_dir }}" + --output-path "$ENV{GITHUB_WORKSPACE}" RESULT_VARIABLE result ) if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") + string(REGEX MATCH "FAILED:.*$" error_message "${output}") + string(REPLACE "\n" "%0A" error_message "${error_message}") + message("::error::${error_message}") + message(FATAL_ERROR "Build failed") endif() - - name: Build - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Windows") - set(ENV{PATH} "${{ steps.qt.outputs.qt_dir }}/bin/;$ENV{PATH}") - else() - set(ENV{PATH} "${{ steps.qt.outputs.qt_dir }}/bin/:$ENV{PATH}") - set(ENV{LD_LIBRARY_PATH} "qtcreator/lib/Qt/lib:$ENV{LD_LIBRARY_PATH}") - endif() - - include(ProcessorCount) - ProcessorCount(N) - - set(make_program make -j ${N}) - if ("${{ runner.os }}" STREQUAL "Windows") - set(make_program "jom/jom") - endif() - - execute_process( - COMMAND ${make_program} - RESULT_VARIABLE result - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-$ENV{QT_CREATOR_VERSION}-${{ matrix.config.artifact }}" artifact) - - execute_process(COMMAND - ${CMAKE_COMMAND} -E tar cvf ${artifact} --format=zip "${{ steps.qt_creator.outputs.qtc_binary_name }}" - WORKING_DIRECTORY "${{ steps.qt_creator.outputs.qtc_output_directory }}" - ) - - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v2 id: upload_artifact with: - path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} - name: ${{ env.PLUGIN_NAME}}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} + path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z + name: ${{ env.PLUGIN_NAME}}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z release: if: contains(github.ref, 'tags/v') @@ -273,19 +272,15 @@ jobs: matrix: config: - { - name: "Windows Latest x64", artifact: "Windows-x64.zip", - os: ubuntu-latest - } - - { - name: "Windows Latest x86", artifact: "Windows-x86.zip", + name: "Windows Latest x64", artifact: "Windows-x64.7z", os: ubuntu-latest } - { - name: "Linux Latest x64", artifact: "Linux-x64.zip", + name: "Linux Latest x64", artifact: "Linux-x64.7z", os: ubuntu-latest } - { - name: "macOS Latest x64", artifact: "macOS-x64.zip", + name: "macOS Latest x64", artifact: "macOS-x64.7z", os: macos-latest } needs: release @@ -316,4 +311,4 @@ jobs: upload_url: ${{ steps.set_upload_url.outputs.upload_url }} asset_path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} asset_name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} - asset_content_type: application/zip + asset_content_type: application/x-7z-compressed diff --git a/CMakeLists.txt b/CMakeLists.txt index 450017f..929b3aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.9) +cmake_minimum_required(VERSION 3.10) project(Haskell) diff --git a/plugins/haskell/haskellrunconfiguration.h b/plugins/haskell/haskellrunconfiguration.h index 445aa3a..a3da33a 100644 --- a/plugins/haskell/haskellrunconfiguration.h +++ b/plugins/haskell/haskellrunconfiguration.h @@ -29,6 +29,7 @@ #include <projectexplorer/runconfigurationaspects.h> #include <projectexplorer/runcontrol.h> +#include <utils/aspects.h> namespace Haskell { namespace Internal { @@ -57,7 +58,7 @@ private: {ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE}}; }; -class HaskellExecutableAspect : public ProjectExplorer::BaseStringAspect +class HaskellExecutableAspect : public Utils::StringAspect { Q_OBJECT diff --git a/plugins/haskell/stackbuildstep.cpp b/plugins/haskell/stackbuildstep.cpp index a1552d6..26c3006 100644 --- a/plugins/haskell/stackbuildstep.cpp +++ b/plugins/haskell/stackbuildstep.cpp @@ -68,9 +68,9 @@ StackBuildStep::StackBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id connect(buildConfiguration(), &BuildConfiguration::environmentChanged, this, updateEnvironment); } -BuildStepConfigWidget *StackBuildStep::createConfigWidget() +QWidget *StackBuildStep::createConfigWidget() { - return new BuildStepConfigWidget(this); + return new QWidget; } QString StackBuildStep::trDisplayName() diff --git a/plugins/haskell/stackbuildstep.h b/plugins/haskell/stackbuildstep.h index 4ef55ff..98938f5 100644 --- a/plugins/haskell/stackbuildstep.h +++ b/plugins/haskell/stackbuildstep.h @@ -37,7 +37,7 @@ class StackBuildStep : public ProjectExplorer::AbstractProcessStep public: StackBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id); - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; static QString trDisplayName(); }; |