From 1543060ffb459d631a3c5670c4fc553843b16e53 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 11 Nov 2020 15:11:33 +0100 Subject: Change Qt Creator plugin wizard to CMake Doesn't make sense to put more qmake-based projects out there for Qt Creator, so exchange the qmake version completely. Also adds a README.md, which explains how to build and run a plugin, since plugins no longer are built directly into a Qt Creator build (which is a good thing). Since we do not yet have a way to specify detailed build settings from a wizard, keep the hack that the project file has a hardcoded path to the Qt Creator development package. That way developers can at least directly build the new plugin without fiddling with build settings. Fixes: QTCREATORBUG-24073 Change-Id: If6650d9e3c393ee9ac2a358923dfb072ec510850 Reviewed-by: Cristian Adam --- .../wizards/qtcreatorplugin/CMakeLists.txt | 32 +++ .../templates/wizards/qtcreatorplugin/README.md | 35 +++ .../qtcreatorplugin/github_workflows_README.md | 2 +- .../github_workflows_build_cmake.yml | 314 +++++++++++++++++++++ .../github_workflows_build_qmake.yml | 314 --------------------- .../templates/wizards/qtcreatorplugin/myplugin.pro | 53 ---- .../templates/wizards/qtcreatorplugin/wizard.json | 51 +--- 7 files changed, 392 insertions(+), 409 deletions(-) create mode 100644 share/qtcreator/templates/wizards/qtcreatorplugin/CMakeLists.txt create mode 100644 share/qtcreator/templates/wizards/qtcreatorplugin/README.md create mode 100644 share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml delete mode 100644 share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_qmake.yml delete mode 100644 share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.pro diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/CMakeLists.txt b/share/qtcreator/templates/wizards/qtcreatorplugin/CMakeLists.txt new file mode 100644 index 0000000000..214dcfc221 --- /dev/null +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 3.9) + +# Remove when sharing with others. +list(APPEND CMAKE_PREFIX_PATH "%{QtCreatorBuild}") + +project(%{PluginName}) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_CXX_STANDARD 17) + +find_package(QtCreator COMPONENTS Core REQUIRED) +find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) +set(QtX Qt${QT_VERSION_MAJOR}) + +add_qtc_plugin(%{PluginName} + PLUGIN_DEPENDS + QtCreator::Core + DEPENDS + ${QtX}::Widgets + QtCreator::ExtensionSystem + QtCreator::Utils + SOURCES + .github/workflows/build_cmake.yml + .github/workflows/README.md + README.md + %{SrcFileName} + %{HdrFileName} + %{GlobalHdrFileName} + %{ConstantsHdrFileName} +) diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/README.md b/share/qtcreator/templates/wizards/qtcreatorplugin/README.md new file mode 100644 index 0000000000..bdd9b8a67d --- /dev/null +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/README.md @@ -0,0 +1,35 @@ +# %{PluginName} + +## How to Build + +Create a build directory and run + + cmake -DCMAKE_PREFIX_PATH= -DCMAKE_BUILD_TYPE=RelWithDebInfo + cmake --build . + +where `` is the relative or absolute path to a Qt Creator build directory, or to +a combined binary and development package, and `` is the relative or absolute +path to this plugin directory. + +## How to Run + +Run a compatible Qt Creator with the additional command line argument + + -pluginpath + +where `` is the path to the resulting plugin library in the build directory +(`/lib/qtcreator/plugins` on Windows and Linux, +`/Qt Creator.app/Contents/PlugIns` on macOS). + +You might want to add `-temporarycleansettings` (or `-tcs`) to ensure that the opened Qt Creator +instance cannot mess with your user-global Qt Creator settings. + +When building and running the plugin from Qt Creator, you can use + + -pluginpath "%{buildDir}/lib/qtcreator/plugins" -tcs + +on Windows and Linux, or + + -pluginpath "%{buildDir}/Qt Creator.app/Contents/PlugIns" -tcs + +for the `Command line arguments` field in the run settings. diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_README.md b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_README.md index 8481ed15ae..107410c6ec 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_README.md +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/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/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml new file mode 100644 index 0000000000..bd5571b1d0 --- /dev/null +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml @@ -0,0 +1,314 @@ +name: Build plugin + +on: [push] + +env: + PLUGIN_NAME: %{PluginName} + QT_VERSION: %{JS: Util.qtVersion()} + QT_CREATOR_VERSION: %{JS: Util.qtCreatorVersion()} + QT_CREATOR_SNAPSHOT: NO + CMAKE_VERSION: 3.18.3 + NINJA_VERSION: 1.10.1 + +jobs: + build: + name: ${{ matrix.config.name }} + runs-on: ${{ matrix.config.os }} + strategy: + matrix: + config: + - { + name: "Windows Latest MSVC", artifact: "Windows-x64", + os: windows-latest, + cc: "cl", cxx: "cl", + environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", + } + - { + name: "Ubuntu Latest GCC", artifact: "Linux-x64", + os: ubuntu-latest, + cc: "gcc", cxx: "g++" + } + - { + name: "macOS Latest Clang", artifact: "macOS-x64", + os: macos-latest, + cc: "clang", cxx: "clang++" + } + + steps: + - uses: actions/checkout@v1 + + - 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 + ) + 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}") + + string(REPLACE "." "" qt_version_dotless "${qt_version}") + if ("${{ runner.os }}" STREQUAL "Windows") + set(url_os "windows_x86") + 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_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_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 "qt.qt5.*([0-9+-.]+)" updates_xml_output "${updates_xml}") + set(qt_package_version ${CMAKE_MATCH_1}) + + file(MAKE_DIRECTORY qt5) + + # Save the path for other steps + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir) + message("::set-output name=qt_dir::${qt_dir}") + + 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 + ) + endforeach() + + # 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 + shell: cmake -P {0} + run: | + string(REGEX MATCH "([0-9]+.[0-9]+).[0-9]+" outvar "$ENV{QT_CREATOR_VERSION}") + + set(qtc_base_url "https://download.qt.io/official_releases/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source") + set(qtc_snapshot "$ENV{QT_CREATOR_SNAPSHOT}") + if (qtc_snapshot) + set(qtc_base_url "https://download.qt.io/snapshots/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source/${qtc_snapshot}") + endif() + + if ("${{ runner.os }}" STREQUAL "Windows") + set(qtc_platform "windows_x64") + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(qtc_platform "linux_x64") + elseif ("${{ runner.os }}" STREQUAL "macOS") + 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_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) + execute_process(COMMAND + ${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qtcreator) + endforeach() + + - 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 + OUTPUT_FILE environment_script_output.txt + ) + file(STRINGS environment_script_output.txt output_lines) + foreach(line IN LISTS output_lines) + if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") + set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") + endif() + endforeach() + endif() + + set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") + + execute_process( + 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) + 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() + + - uses: actions/upload-artifact@v2 + id: upload_artifact + with: + 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') + runs-on: ubuntu-latest + needs: build + + steps: + - name: Create Release + id: create_release + uses: actions/create-release@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + + - name: Store Release url + run: | + echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url + + - uses: actions/upload-artifact@v1 + with: + path: ./upload_url + name: upload_url + + publish: + if: contains(github.ref, 'tags/v') + + name: ${{ matrix.config.name }} + runs-on: ${{ matrix.config.os }} + strategy: + matrix: + config: + - { + name: "Windows Latest x64", artifact: "Windows-x64.7z", + os: ubuntu-latest + } + - { + name: "Linux Latest x64", artifact: "Linux-x64.7z", + os: ubuntu-latest + } + - { + name: "macOS Latest x64", artifact: "macOS-x64.7z", + os: macos-latest + } + needs: release + + steps: + - name: Download artifact + uses: actions/download-artifact@v1 + with: + name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} + path: ./ + + - name: Download URL + uses: actions/download-artifact@v1 + with: + name: upload_url + path: ./ + - id: set_upload_url + run: | + upload_url=`cat ./upload_url` + echo ::set-output name=upload_url::$upload_url + + - name: Upload to Release + id: upload_to_release + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + 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/x-7z-compressed diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_qmake.yml b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_qmake.yml deleted file mode 100644 index 5326dfeb9d..0000000000 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_qmake.yml +++ /dev/null @@ -1,314 +0,0 @@ -name: Build plugin - -on: [push] - -env: - QT_VERSION: %{JS: Util.qtVersion()} - QT_CREATOR_VERSION: %{JS: Util.qtCreatorVersion()} - QT_CREATOR_SNAPSHOT: NO - PLUGIN_PRO: %{ProFile} - PLUGIN_NAME: %{PluginName} - -jobs: - build: - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - matrix: - config: - - { - name: "Windows Latest x64", artifact: "Windows-x64.zip", - os: windows-latest, - 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: "macOS Latest x64", artifact: "macOS-x64.zip", - os: macos-latest - } - - steps: - - uses: actions/checkout@v1 - - - name: Installing system libs - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Linux") - execute_process( - COMMAND sudo apt install libgl1-mesa-dev - ) - elseif ("${{ 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) - endif() - - - name: Download Qt - id: qt - shell: cmake -P {0} - run: | - 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_msvc2019_64") - set(qt_dir_prefix "${qt_version}/msvc2019_64") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(qt_package_name "qt.qt5.${qt_version_dotless}.win32_msvc2019") - set(qt_dir_prefix "${qt_version}/msvc2019") - else() - endif() - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(url_os "linux_x64") - set(qt_package_name "qt.qt5.${qt_version_dotless}.gcc_64") - set(qt_dir_prefix "${qt_version}/gcc_64") - elseif ("${{ runner.os }}" STREQUAL "macOS") - set(url_os "mac_x64") - set(qt_package_name "qt.qt5.${qt_version_dotless}.clang_64") - set(qt_dir_prefix "${qt_version}/clang_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 "${qt_package_name}.*([0-9+-.]+).*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() - - file(MAKE_DIRECTORY qt5) - - # Save the path for other steps - 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 - ) - 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}") - - - name: Download Qt Creator - id: qt_creator - shell: cmake -P {0} - run: | - string(REGEX MATCH "([0-9]+.[0-9]+).[0-9]+" outvar "$ENV{QT_CREATOR_VERSION}") - - set(qtc_base_url "https://download.qt.io/official_releases/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source") - set(qtc_snapshot "$ENV{QT_CREATOR_SNAPSHOT}") - if (qtc_snapshot) - set(qtc_base_url "https://download.qt.io/snapshots/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source/${qtc_snapshot}") - endif() - - if ("${{ runner.os }}" STREQUAL "Windows") - set(qtc_output_directory "qtcreator/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() - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(qtc_output_directory "qtcreator/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 "qtcreator/bin/Qt Creator.app/Contents/PlugIns") - set(qtc_binary_name "lib$ENV{PLUGIN_NAME}.dylib") - set(qtc_platform "mac_x64") - endif() - - # 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}") - - file(MAKE_DIRECTORY qtcreator) - - foreach(package qtcreator qtcreator_dev) - file(DOWNLOAD - "${qtc_base_url}/${qtc_platform}/${package}.7z" ./${package}.7z SHOW_PROGRESS) - execute_process(COMMAND - ${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qtcreator) - endforeach() - - if ("${{ runner.os }}" STREQUAL "macOS") - execute_process( - COMMAND ${CMAKE_COMMAND} -E make_directory qtcreator/bin - COMMAND ${CMAKE_COMMAND} -E create_symlink - "$ENV{GITHUB_WORKSPACE}/qtcreator/Qt Creator.app" - "$ENV{GITHUB_WORKSPACE}/qtcreator/bin/Qt Creator.app" - ) - endif() - - - name: Build - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") - execute_process( - COMMAND "${{ matrix.config.environment_script }}" && set - OUTPUT_FILE environment_script_output.txt - ) - file(STRINGS environment_script_output.txt output_lines) - foreach(line IN LISTS output_lines) - if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") - set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - endif() - endforeach() - endif() - - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtcreator_dir) - - execute_process( - COMMAND ${{ steps.qt.outputs.qt_dir }}/bin/qmake - $ENV{PLUGIN_PRO} - CONFIG+=release - IDE_SOURCE_TREE="${qtcreator_dir}" - IDE_BUILD_TREE="${qtcreator_dir}" - RESULT_VARIABLE result - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - - 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 - 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 }} - - release: - if: contains(github.ref, 'tags/v') - runs-on: ubuntu-latest - needs: build - - steps: - - name: Create Release - id: create_release - uses: actions/create-release@v1.0.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: false - prerelease: false - - - name: Store Release url - run: | - echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url - - - uses: actions/upload-artifact@v1 - with: - path: ./upload_url - name: upload_url - - publish: - if: contains(github.ref, 'tags/v') - - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - matrix: - config: - - { - name: "Windows Latest x64", artifact: "Windows-x64.zip", - os: ubuntu-latest - } - - { - name: "Windows Latest x86", artifact: "Windows-x86.zip", - os: ubuntu-latest - } - - { - name: "Linux Latest x64", artifact: "Linux-x64.zip", - os: ubuntu-latest - } - - { - name: "macOS Latest x64", artifact: "macOS-x64.zip", - os: macos-latest - } - needs: release - - steps: - - name: Download artifact - uses: actions/download-artifact@v1 - with: - name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} - path: ./ - - - name: Download URL - uses: actions/download-artifact@v1 - with: - name: upload_url - path: ./ - - id: set_upload_url - run: | - upload_url=`cat ./upload_url` - echo ::set-output name=upload_url::$upload_url - - - name: Upload to Release - id: upload_to_release - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - 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 diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.pro b/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.pro deleted file mode 100644 index 34eed0aeea..0000000000 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.pro +++ /dev/null @@ -1,53 +0,0 @@ -DEFINES += %{LibraryDefine} - -# %{PluginName} files - -SOURCES += \\ - %{SrcFileName} - -HEADERS += \\ - %{HdrFileName} \\ - %{GlobalHdrFileName} \\ - %{ConstantsHdrFileName} - -DISTFILES += \\ - .github/workflows/build_qmake.yml \\ - .github/workflows/README.md - -# Qt Creator linking - -## Either set the IDE_SOURCE_TREE when running qmake, -## or set the QTC_SOURCE environment variable, to override the default setting -isEmpty(IDE_SOURCE_TREE): IDE_SOURCE_TREE = $$(QTC_SOURCE) -isEmpty(IDE_SOURCE_TREE): IDE_SOURCE_TREE = "%{QtCreatorSources}" - -## Either set the IDE_BUILD_TREE when running qmake, -## or set the QTC_BUILD environment variable, to override the default setting -isEmpty(IDE_BUILD_TREE): IDE_BUILD_TREE = $$(QTC_BUILD) -isEmpty(IDE_BUILD_TREE): IDE_BUILD_TREE = "%{QtCreatorBuild}" - -## uncomment to build plugin into user config directory -## /plugins/ -## where is e.g. -## "%LOCALAPPDATA%\QtProject\qtcreator" on Windows Vista and later -## "$XDG_DATA_HOME/data/QtProject/qtcreator" or "~/.local/share/data/QtProject/qtcreator" on Linux -## "~/Library/Application Support/QtProject/Qt Creator" on OS X -%{DestDir}USE_USER_DESTDIR = yes - -###### If the plugin can be depended upon by other plugins, this code needs to be outsourced to -###### _dependencies.pri, where is the name of the directory containing the -###### plugin's sources. - -QTC_PLUGIN_NAME = %{PluginName} -QTC_LIB_DEPENDS += \\ - # nothing here at this time - -QTC_PLUGIN_DEPENDS += \\ - coreplugin - -QTC_PLUGIN_RECOMMENDS += \\ - # optional plugin dependencies. nothing here at this time - -###### End _dependencies.pri contents ###### - -include($$IDE_SOURCE_TREE/src/qtcreatorplugin.pri) diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json index 443fa25c25..6a629f0d05 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json @@ -8,13 +8,12 @@ "trDisplayCategory": "Library", "icon": "qtcreatorplugin.png", "featuresRequired": [ "QtSupport.Wizards.FeatureQt", "QtSupport.Wizards.FeatureDesktop" ], - "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0}", + "enabled": "%{JS: value('Plugins').indexOf('CMakeProjectManager') >= 0}", "options": [ - { "key": "ProjectFile", "value": "%{ProFile}" }, + { "key": "ProjectFile", "value": "%{ProjectDirectory}/CMakeLists.txt" }, { "key": "PluginNameLower", "value": "%{JS: value('PluginName').toLowerCase()}"}, - { "key": "ProFile", "value": "%{JS: Util.fileName(value('PluginNameLower'), 'pro')}" }, { "key": "PluginJsonFile", "value": "%{JS: Util.fileName(value('PluginName'), 'json.in')}" }, { "key": "LibraryDefine", "value": "%{JS: Cpp.headerGuard(value('PluginName')) + '_LIBRARY'}" }, { "key": "LibraryExport", "value": "%{JS: Cpp.headerGuard(value('PluginName')) + '_EXPORT'}" }, @@ -115,17 +114,6 @@ "trText": "https://www.%{JS: encodeURIComponent(value('VendorName').toLowerCase())}.com" } }, - { - "name": "QtCreatorSources", - "persistenceKey": "QtCreatorSources", - "trDisplayName": "Qt Creator sources:", - "mandatory": true, - "type": "PathChooser", - "data": - { - "kind": "existingDirectory" - } - }, { "name": "QtCreatorBuild", "persistenceKey": "QtCreatorBuild", @@ -136,27 +124,6 @@ { "kind": "existingDirectory" } - }, - { - "name": "DestDir", - "persistenceKey": "QtCreatorPluginDestDir", - "trDisplayName": "Deploy into:", - "type": "ComboBox", - "data": - { - "index": 0, - "items": - [ - { - "trKey": "Qt Creator Build", - "value": "# " - }, - { - "trKey": "Local User Settings", - "value": "" - } - ] - } } ] }, @@ -185,13 +152,16 @@ "data": [ { - "source": "myplugin.pro", - "target": "%{ProFile}", + "source": "CMakeLists.txt", "openAsProject": true }, { - "source": "github_workflows_build_qmake.yml", - "target": ".github/workflows/build_qmake.yml" + "source": "README.md", + "openInEditor": true + }, + { + "source": "github_workflows_build_cmake.yml", + "target": ".github/workflows/build_cmake.yml" }, { "source": "github_workflows_README.md", @@ -199,8 +169,7 @@ }, { "source": "myplugin.cpp", - "target": "%{SrcFileName}", - "openInEditor": true + "target": "%{SrcFileName}" }, { "source": "myplugin.h", -- cgit v1.2.1