aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-02-08 11:32:37 +0100
committerEike Ziller <eike.ziller@qt.io>2021-02-08 11:32:37 +0100
commit8bac42bd2fdf0b94a1fb460e179b34b903a92149 (patch)
tree2c98cd97dc02c30cf22c100c5fa27c0946f1e694
parent16af59237ff7e15b7fcc999aa1b4983177fa56e1 (diff)
parent1ed2577ad0beed2f5f3f86317f47e5479175c783 (diff)
Merge remote-tracking branch 'origin/4.14'
-rw-r--r--.github/workflows/README.md2
-rw-r--r--.github/workflows/build_cmake.yml (renamed from .github/workflows/build_qmake.yml)253
-rw-r--r--CMakeLists.txt2
-rw-r--r--plugins/haskell/haskellrunconfiguration.h3
-rw-r--r--plugins/haskell/stackbuildstep.cpp4
-rw-r--r--plugins/haskell/stackbuildstep.h2
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();
};