From 352bc6cdc3ecf3cda91165e07fe21088c86482ac Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 18:26:42 +0100 Subject: [PATCH 1/8] fix: fix windows build, update qt dependency --- .github/workflows/build.yml | 132 ++----------------- .github/workflows/release.yml | 194 ++-------------------------- .github/workflows/workflow-base.yml | 168 ++++++++++++++++++++++++ CMakeLists.txt | 49 ++++++- Owon1041.png | Bin 0 -> 45392 bytes Owon1041.rc | 1 + 6 files changed, 236 insertions(+), 308 deletions(-) create mode 100644 .github/workflows/workflow-base.yml create mode 100644 Owon1041.png create mode 100644 Owon1041.rc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f705b32..25cf330 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,127 +9,11 @@ on: jobs: build: - name: Build on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-22.04, macos-latest, windows-latest ] - build_type: [ Release ] - include: - - os: windows-latest - generator: "Visual Studio 17 2022" - - os: ubuntu-22.04 - generator: "Unix Makefiles" - - os: macos-latest - generator: "Unix Makefiles" - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # Install Qt for all platforms - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - version: '6.5.0' - host: ${{ matrix.os == 'windows-latest' && 'windows' || matrix.os == 'macos-latest' && 'mac' || 'linux' }} - target: 'desktop' - arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2019_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} - modules: 'qtserialport' - setup-python: true - - # Install additional Linux dependencies if needed - - name: Install additional Linux dependencies - if: matrix.os == 'ubuntu-22.04' - run: | - sudo apt-get update - sudo apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 - - # macOS code signing setup - - name: Import Code-Signing Certificates - if: matrix.os == 'macos-latest' - uses: Apple-Actions/import-codesign-certs@v2 - with: - p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} - p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ github.run_id }} - - - name: Configure CMake - run: > - cmake -B ${{github.workspace}}/build - -G "${{matrix.generator}}" - -DCMAKE_BUILD_TYPE=${{matrix.build_type}} - -DCMAKE_PREFIX_PATH=${{env.Qt6_DIR}} - ${{ matrix.os == 'macos-latest' && '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' || '' }} - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} - - # After the build step but before code signing, add: - - name: Deploy and Sign Qt dependencies - if: matrix.os == 'macos-latest' - run: | - echo "Deploying and signing Qt frameworks to app bundle" - macdeployqt "${{github.workspace}}/build/Owon1041.app" -always-overwrite -verbose=2 -sign-for-notarization="Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" - - # macOS code signing - - name: Sign the macOS application - if: matrix.os == 'macos-latest' - run: | - echo "Signing with Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" - /usr/bin/codesign --force --options runtime --sign "Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" --verbose "${{github.workspace}}/build/Owon1041.app" - - # macOS notarization (optional but recommended) - - name: Notarize the macOS application - if: matrix.os == 'macos-latest' - env: - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - run: | - # Create a ZIP archive of the app - ditto -c -k --keepParent "${{github.workspace}}/build/owon1041.app" "${{github.workspace}}/build/owon1041.zip" - - # Notarize the app - xcrun notarytool submit "${{github.workspace}}/build/owon1041.zip" \ - --apple-id "$APPLE_ID" \ - --password "$APPLE_ID_PASSWORD" \ - --team-id "${{ vars.APPLE_TEAM_ID }}" \ - --wait - - # Staple the notarization ticket - xcrun stapler staple "${{github.workspace}}/build/owon1041.app" - - - name: Upload Windows artifacts - if: matrix.os == 'windows-latest' - uses: actions/upload-artifact@v4 - with: - name: windows-build - path: ${{github.workspace}}/build/Release/owon1041.exe - if-no-files-found: error - - - name: Upload macOS artifacts - if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v4 - with: - name: macos-build - path: ${{github.workspace}}/build/owon1041.app - if-no-files-found: error - - # For Linux - - name: Debug build output - if: matrix.os == 'ubuntu-22.04' - run: | - echo "Listing build directory contents:" - ls -la ${{github.workspace}}/build/ - echo "Finding executable by name:" - find ${{github.workspace}}/build -name "Owon*" -type f -executable - - - name: Upload Linux artifacts - if: matrix.os == 'ubuntu-22.04' - uses: actions/upload-artifact@v4 - with: - name: linux-build - path: ${{github.workspace}}/build/Owon1041 - if-no-files-found: error \ No newline at end of file + uses: ./.github/workflows/workflow-base.yml + with: + artifact_name_prefix: build-artifacts + secrets: + APPLE_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fdbd4a9..c287c3c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,207 +3,37 @@ name: Create Release on: push: tags: - - 'v*.*.*' # Will trigger on tags like v1.0.0, v2.1.3, etc. + - 'v*.*.*' jobs: build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-22.04, macos-latest, windows-latest] - build_type: [ Release ] - include: - - os: windows-latest - generator: "Visual Studio 17 2022" - - os: ubuntu-22.04 - generator: "Unix Makefiles" - - os: macos-latest - generator: "Unix Makefiles" - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # Extract version from tag - - name: Extract version from tag - id: get_version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - shell: bash - - # Install Qt for all platforms - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - version: '6.5.0' - host: ${{ matrix.os == 'windows-latest' && 'windows' || matrix.os == 'macos-latest' && 'mac' || 'linux' }} - target: 'desktop' - arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2019_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} - modules: 'qtserialport' - setup-python: true - - # Install additional Linux dependencies if needed - - name: Install additional Linux dependencies - if: matrix.os == 'ubuntu-22.04' - run: | - sudo apt-get update - sudo apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 - - # macOS code signing setup - - name: Import Code-Signing Certificates - if: matrix.os == 'macos-latest' - uses: Apple-Actions/import-codesign-certs@v2 - with: - p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} - p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ github.run_id }} - - - name: Configure CMake - run: > - cmake -B ${{github.workspace}}/build - -G "${{matrix.generator}}" - -DCMAKE_BUILD_TYPE=${{matrix.build_type}} - -DCMAKE_PREFIX_PATH=${{env.Qt6_DIR}} - ${{ matrix.os == 'macos-latest' && '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' || '' }} - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} - - # Deploy and sign Qt components in one step (preferred method) - - name: Deploy and Sign Qt dependencies - if: matrix.os == 'macos-latest' - run: | - echo "Deploying and signing Qt frameworks to app bundle" - echo "Qt directory: $Qt6_DIR" - ls -la "${{github.workspace}}/build/" - - # Fix case sensitivity issue if needed - if [ -d "${{github.workspace}}/build/owon1041.app" ] && [ ! -d "${{github.workspace}}/build/Owon1041.app" ]; then - echo "Renaming app bundle for consistency" - mv "${{github.workspace}}/build/owon1041.app" "${{github.workspace}}/build/Owon1041.app" - fi - - # Deploy and sign - macdeployqt "${{github.workspace}}/build/Owon1041.app" -always-overwrite -verbose=3 -sign-for-notarization="Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" - - # Verify deployment - echo "Verifying deployment:" - ls -la "${{github.workspace}}/build/Owon1041.app/Contents/Frameworks/" - ls -la "${{github.workspace}}/build/Owon1041.app/Contents/PlugIns/" - otool -L "${{github.workspace}}/build/Owon1041.app/Contents/MacOS/Owon1041" - - # If the one-step approach above fails, uncomment this block: - # - name: Sign individual components manually - # if: matrix.os == 'macos-latest' - # run: | - # echo "Signing all Qt frameworks and plugins in the app bundle" - # # Sign frameworks - # find "${{github.workspace}}/build/Owon1041.app/Contents/Frameworks" -type f -name "*.framework" -o -name "*.dylib" | while read -r file; do - # echo "Signing $file" - # /usr/bin/codesign --force --options runtime --sign "Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" --verbose "$file" - # done - # - # # Sign plugins - # find "${{github.workspace}}/build/Owon1041.app/Contents/PlugIns" -type f -name "*.dylib" | while read -r file; do - # echo "Signing $file" - # /usr/bin/codesign --force --options runtime --sign "Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" --verbose "$file" - # done - # - # # Then sign the main app bundle - # - name: Sign the macOS application - # if: matrix.os == 'macos-latest' - # run: | - # echo "Signing with Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" - # /usr/bin/codesign --force --options runtime --sign "Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}" --verbose "${{github.workspace}}/build/Owon1041.app" - - # macOS notarization - - name: Notarize the macOS application - if: matrix.os == 'macos-latest' - env: - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - run: | - # Create a ZIP archive of the app - ditto -c -k --keepParent "${{github.workspace}}/build/Owon1041.app" "${{github.workspace}}/build/Owon1041.zip" - - # Notarize the app - xcrun notarytool submit "${{github.workspace}}/build/Owon1041.zip" \ - --apple-id "$APPLE_ID" \ - --password "$APPLE_ID_PASSWORD" \ - --team-id "${{ vars.APPLE_TEAM_ID }}" \ - --wait - - # Staple the notarization ticket - xcrun stapler staple "${{github.workspace}}/build/Owon1041.app" - - # Create release packages - - name: Create macOS package - if: matrix.os == 'macos-latest' - run: | - # Create a DMG - hdiutil create -volname "Owon1041" -srcfolder "${{github.workspace}}/build/Owon1041.app" -ov -format UDZO "${{github.workspace}}/build/Owon1041-${{ steps.get_version.outputs.VERSION }}.dmg" - - - name: Create Windows installer - if: matrix.os == 'windows-latest' - run: | - # Fix case sensitivity if needed - if (Test-Path "${{github.workspace}}\build\Release\owon1041.exe" -PathType Leaf) { - echo "Using lowercase executable name" - 7z a -tzip "${{github.workspace}}\build\Owon1041-${{ steps.get_version.outputs.VERSION }}-Windows.zip" "${{github.workspace}}\build\Release\owon1041.exe" - } else { - echo "Using uppercase executable name" - 7z a -tzip "${{github.workspace}}\build\Owon1041-${{ steps.get_version.outputs.VERSION }}-Windows.zip" "${{github.workspace}}\build\Release\Owon1041.exe" - } - - - name: Create Linux package - if: matrix.os == 'ubuntu-22.04' - run: | - # Check executable name capitalization - if [ -f "${{github.workspace}}/build/owon1041" ]; then - tar -czvf "${{github.workspace}}/build/Owon1041-${{ steps.get_version.outputs.VERSION }}-Linux.tar.gz" -C "${{github.workspace}}/build" owon1041 - else - tar -czvf "${{github.workspace}}/build/Owon1041-${{ steps.get_version.outputs.VERSION }}-Linux.tar.gz" -C "${{github.workspace}}/build" Owon1041 - fi - - # Upload artifacts - - name: Upload release artifacts - uses: actions/upload-artifact@v4 - with: - name: release-artifacts-${{ matrix.os }} - path: | - ${{ matrix.os == 'macos-latest' && github.workspace }}/build/*.dmg - ${{ matrix.os == 'windows-latest' && github.workspace }}/build/*.zip - ${{ matrix.os == 'ubuntu-22.04' && github.workspace }}/build/*.tar.gz - if-no-files-found: error + uses: ./.github/workflows/workflow-base.yml + with: + artifact_name_prefix: release-artifacts + secrets: + APPLE_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} release: needs: build runs-on: ubuntu-latest permissions: - contents: write # Add this to ensure the workflow has permission to create releases + contents: write steps: - uses: actions/checkout@v4 - # Extract version from tag - name: Extract version from tag id: get_version run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - # Download all artifacts - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - # Debug step to see what files are available - - name: List downloaded artifacts - run: | - echo "Listing all downloaded artifacts:" - find artifacts -type f | sort - - # Create release - name: Create Release - id: create_release uses: softprops/action-gh-release@v1 with: tag_name: v${{ steps.get_version.outputs.VERSION }} @@ -213,7 +43,7 @@ jobs: generate_release_notes: true files: | artifacts/**/*.dmg - artifacts/**/*.zip - artifacts/**/*.tar.gz + artifacts/**/*.msi + artifacts/**/*.deb env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml new file mode 100644 index 0000000..e18f9f9 --- /dev/null +++ b/.github/workflows/workflow-base.yml @@ -0,0 +1,168 @@ +name: Reusable Build and Package + +on: + workflow_call: + inputs: + build_type: + required: false + type: string + default: 'Release' + artifact_name_prefix: + required: false + type: string + default: 'artifacts' + secrets: + APPLE_CERTIFICATE_BASE64: + required: false + APPLE_CERTIFICATE_PASSWORD: + required: false + APPLE_ID: + required: false + APPLE_ID_PASSWORD: + required: false + +jobs: + build: + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04, debian-trixie, macos-latest, windows-latest] + include: + - os: windows-latest + generator: "Visual Studio 17 2022" + - os: ubuntu-22.04 + generator: "Unix Makefiles" + - os: debian-trixie + generator: "Unix Makefiles" + container: "debian:trixie" + - os: macos-latest + generator: "Unix Makefiles" + + container: ${{ matrix.container }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Extract version + - name: Get version + id: get_version + run: | + if [[ $GITHUB_REF == refs/tags/v* ]]; then + echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + echo "VERSION=0.0.0-PR${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT + else + echo "VERSION=0.0.0-build${{ github.run_number }}" >> $GITHUB_OUTPUT + fi + shell: bash + + # Install Qt for all platforms + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: '6.10.2' + host: ${{ matrix.os == 'windows-latest' && 'windows' || matrix.os == 'macos-latest' && 'mac' || 'linux' }} + target: 'desktop' + arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2019_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} + modules: 'qtserialport' + setup-python: true + + # Install additional Linux dependencies if needed + - name: Install additional Linux dependencies + if: runner.os == 'Linux' + run: | + if command -v sudo > /dev/null; then + sudo apt-get update + sudo apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 libicu-dev libdouble-conversion-dev libpcre2-16-0 + else + apt-get update + apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 libicu-dev libdouble-conversion-dev libpcre2-16-0 + fi + + # macOS code signing setup + - name: Import Code-Signing Certificates + if: matrix.os == 'macos-latest' && secrets.APPLE_CERTIFICATE_BASE64 != '' + uses: Apple-Actions/import-codesign-certs@v2 + with: + p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} + p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + keychain-password: ${{ github.run_id }} + + - name: Configure CMake + run: > + cmake -B ${{github.workspace}}/build + -G "${{matrix.generator}}" + -DCMAKE_BUILD_TYPE=${{inputs.build_type}} + -DCMAKE_PREFIX_PATH=${{env.Qt6_DIR}} + -DAPP_VERSION=${{ steps.get_version.outputs.VERSION }} + ${{ matrix.os == 'macos-latest' && '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' || '' }} + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{inputs.build_type}} + + # Deploy and sign Qt components (macOS) + - name: Deploy and Sign Qt dependencies + if: matrix.os == 'macos-latest' + run: | + # Fix case sensitivity issue if needed + if [ -d "${{github.workspace}}/build/owon1041.app" ] && [ ! -d "${{github.workspace}}/build/Owon1041.app" ]; then + mv "${{github.workspace}}/build/owon1041.app" "${{github.workspace}}/build/Owon1041.app" + fi + + # Deploy and sign + SIGN_ARG="" + if [[ "${{ vars.APPLE_SIGNING_ID }}" != "" ]]; then + SIGN_ARG="-sign-for-notarization=\"Developer ID Application: ${{ vars.APPLE_SIGNING_ID }}\"" + fi + + eval macdeployqt "${{github.workspace}}/build/Owon1041.app" -always-overwrite -verbose=3 $SIGN_ARG + + # macOS notarization + - name: Notarize the macOS application + if: matrix.os == 'macos-latest' && secrets.APPLE_ID != '' + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + run: | + ditto -c -k --keepParent "${{github.workspace}}/build/Owon1041.app" "${{github.workspace}}/build/Owon1041.zip" + xcrun notarytool submit "${{github.workspace}}/build/Owon1041.zip" \ + --apple-id "$APPLE_ID" \ + --password "$APPLE_ID_PASSWORD" \ + --team-id "${{ vars.APPLE_TEAM_ID }}" \ + --wait + xcrun stapler staple "${{github.workspace}}/build/Owon1041.app" + + # Create packages + - name: Create macOS package + if: matrix.os == 'macos-latest' + run: | + hdiutil create -volname "Owon1041" -srcfolder "${{github.workspace}}/build/Owon1041.app" -ov -format UDZO "${{github.workspace}}/build/Owon1041-${{ steps.get_version.outputs.VERSION }}.dmg" + + - name: Create Windows installer + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + & "$env:Qt6_DIR\bin\windeployqt.exe" --release --no-translations --no-opengl-sw --no-system-d3d-compiler "${{github.workspace}}\build\Release\Owon1041.exe" + cd build + cpack -G WIX -C ${{inputs.build_type}} + + - name: Create Linux package + if: runner.os == 'Linux' + run: | + cd build + cpack -G DEB + + # Upload artifacts + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.artifact_name_prefix }}-${{ matrix.os }} + path: | + ${{ github.workspace }}/build/*.dmg + ${{ github.workspace }}/build/*.msi + ${{ github.workspace }}/build/*.deb + if-no-files-found: error diff --git a/CMakeLists.txt b/CMakeLists.txt index 4826606..d9999c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,11 @@ cmake_minimum_required(VERSION 3.16) -project(Owon1041 VERSION 1.0.0 LANGUAGES CXX) + +# Set version from variable if provided, otherwise use default +if(APP_VERSION) + project(Owon1041 VERSION ${APP_VERSION} LANGUAGES CXX) +else() + project(Owon1041 VERSION 1.0.0 LANGUAGES CXX) +endif() # Add this near the top, after your project() declaration if(APPLE) @@ -64,6 +70,10 @@ if(APPLE) set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") set(PLATFORM_SPECIFIC_ICON_FILES ${APP_ICON_MACOSX}) +elseif(WIN32) + # Windows icon (requires a resource file) + set(APP_ICON_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/Owon1041.rc") + set(PLATFORM_SPECIFIC_ICON_FILES ${APP_ICON_WINDOWS}) elseif(UNIX AND NOT APPLE) # Linux doesn't use resource files in the executable directly set(PLATFORM_SPECIFIC_ICON_FILES "") @@ -144,4 +154,39 @@ elseif(UNIX AND NOT APPLE) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/linux/icons/scalable/owon1041.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps ) -endif() \ No newline at end of file +elseif(WIN32) + # Installation paths for Windows + include(GNUInstallDirs) + install(TARGETS Owon1041 + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) +endif() + +# CPack configuration +set(CPACK_PACKAGE_NAME "Owon1041") +set(CPACK_PACKAGE_VENDOR "MacWake") +set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OWON XDM-1041 Multimeter Interface") +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md") + +if(WIN32) + set(CPACK_GENERATOR "WIX") + set(CPACK_WIX_UPGRADE_GUID "D9A1C5B0-1234-5678-90AB-CDEF12345678") # Generate a real one if needed + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/Owon1041.ico") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "Owon1041") + # Start menu entry + set(CPACK_PACKAGE_EXECUTABLES "Owon1041" "Owon1041") + set(CPACK_CREATE_DESKTOP_LINKS "Owon1041") + set(CPACK_WIX_PROGRAM_MENU_FOLDER "Owon1041") +elseif(UNIX AND NOT APPLE) + set(CPACK_GENERATOR "DEB") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "MacWake ") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt6widgets6, libqt6serialport6, libqt6gui6, libqt6core6") + # For distinct Debian/Ubuntu packages, we might need to adjust dependencies or names in GHA + set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +endif() + +include(CPack) \ No newline at end of file diff --git a/Owon1041.png b/Owon1041.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7f4c7b80937f2b6e02ff57438986d35d618af2 GIT binary patch literal 45392 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 N&(w6D{CsQ~{6F4S+_wM# literal 0 HcmV?d00001 diff --git a/Owon1041.rc b/Owon1041.rc new file mode 100644 index 0000000..25a14ad --- /dev/null +++ b/Owon1041.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "Owon1041.ico" From 49d48d902f1025a5ffb1e0049c69deb37e406339 Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 18:32:09 +0100 Subject: [PATCH 2/8] fix: fix secrets handling after github actions config refactoring --- .github/workflows/workflow-base.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index e18f9f9..7199b69 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -41,6 +41,10 @@ jobs: generator: "Unix Makefiles" container: ${{ matrix.container }} + + env: + APPLE_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} + APPLE_ID: ${{ secrets.APPLE_ID }} steps: - uses: actions/checkout@v4 @@ -85,10 +89,10 @@ jobs: # macOS code signing setup - name: Import Code-Signing Certificates - if: matrix.os == 'macos-latest' && secrets.APPLE_CERTIFICATE_BASE64 != '' + if: matrix.os == 'macos-latest' && env.APPLE_CERTIFICATE_BASE64 != '' uses: Apple-Actions/import-codesign-certs@v2 with: - p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} + p12-file-base64: ${{ env.APPLE_CERTIFICATE_BASE64 }} p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} keychain-password: ${{ github.run_id }} @@ -123,9 +127,9 @@ jobs: # macOS notarization - name: Notarize the macOS application - if: matrix.os == 'macos-latest' && secrets.APPLE_ID != '' + if: matrix.os == 'macos-latest' && env.APPLE_ID != '' env: - APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID: ${{ env.APPLE_ID }} APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} run: | ditto -c -k --keepParent "${{github.workspace}}/build/Owon1041.app" "${{github.workspace}}/build/Owon1041.zip" From f0daeecc86f898b371c57759ad6f9407bb679a9d Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 18:38:54 +0100 Subject: [PATCH 3/8] fix: fix build problems after github actions config refactoring --- .github/workflows/workflow-base.yml | 4 ++-- CMakeLists.txt | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index 7199b69..1b52846 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -68,10 +68,10 @@ jobs: - name: Install Qt uses: jurplel/install-qt-action@v3 with: - version: '6.10.2' + version: '6.8.2' host: ${{ matrix.os == 'windows-latest' && 'windows' || matrix.os == 'macos-latest' && 'mac' || 'linux' }} target: 'desktop' - arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2019_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} + arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2022_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} modules: 'qtserialport' setup-python: true diff --git a/CMakeLists.txt b/CMakeLists.txt index d9999c9..47265f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,19 @@ cmake_minimum_required(VERSION 3.16) # Set version from variable if provided, otherwise use default if(APP_VERSION) - project(Owon1041 VERSION ${APP_VERSION} LANGUAGES CXX) + # CMake project() VERSION must be numeric (major.minor.patch[.tweak]) + # Extract the numeric part (e.g., 0.0.0 from 0.0.0-PR6) + string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" APP_VERSION_NUMERIC "${APP_VERSION}") + if(APP_VERSION_NUMERIC) + project(Owon1041 VERSION ${APP_VERSION_NUMERIC} LANGUAGES CXX) + else() + project(Owon1041 VERSION 1.0.0 LANGUAGES CXX) + endif() + # Keep the full version for later use (packaging, etc.) + set(FULL_APP_VERSION ${APP_VERSION}) else() project(Owon1041 VERSION 1.0.0 LANGUAGES CXX) + set(FULL_APP_VERSION "1.0.0") endif() # Add this near the top, after your project() declaration @@ -30,6 +40,7 @@ set(QT_COMMON_PATHS "/usr/local/opt/qt@6" "/usr/local/opt/qt6" "/usr/local/qt6" + "C:/Qt/6.8.2/msvc2022_64" "C:/Qt/6.5.0/msvc2019_64" "C:/Qt/6.5.0/mingw_64" ) @@ -165,9 +176,7 @@ endif() # CPack configuration set(CPACK_PACKAGE_NAME "Owon1041") set(CPACK_PACKAGE_VENDOR "MacWake") -set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(CPACK_PACKAGE_VERSION "${FULL_APP_VERSION}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OWON XDM-1041 Multimeter Interface") set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md") From ff68ad6c1245f88f7e6d92e7dd3cf01dce2e5574 Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 18:49:22 +0100 Subject: [PATCH 4/8] fix: fix more build problems, mostly related to differing qt package versions for each os --- .github/workflows/workflow-base.yml | 47 +++++++++++++++++++++------- Owon1041.ico | Bin 0 -> 31696 bytes 2 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 Owon1041.ico diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index 1b52846..1a28805 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -24,22 +24,26 @@ on: jobs: build: name: Build on ${{ matrix.os }} - runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ubuntu-22.04, debian-trixie, macos-latest, windows-latest] + os: [ubuntu-22.04, macos-latest, windows-latest, debian-trixie] include: - os: windows-latest + runner: windows-latest generator: "Visual Studio 17 2022" - os: ubuntu-22.04 + runner: ubuntu-22.04 generator: "Unix Makefiles" - os: debian-trixie + runner: ubuntu-latest generator: "Unix Makefiles" container: "debian:trixie" - os: macos-latest + runner: macos-latest generator: "Unix Makefiles" + runs-on: ${{ matrix.runner }} container: ${{ matrix.container }} env: @@ -64,27 +68,48 @@ jobs: fi shell: bash - # Install Qt for all platforms - - name: Install Qt + # Install Qt for Windows and macOS + - name: Install Qt (Win/Mac) + if: runner.os != 'Linux' uses: jurplel/install-qt-action@v3 with: version: '6.8.2' - host: ${{ matrix.os == 'windows-latest' && 'windows' || matrix.os == 'macos-latest' && 'mac' || 'linux' }} + host: ${{ matrix.os == 'windows-latest' && 'windows' || 'mac' }} target: 'desktop' - arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2022_64' || matrix.os == 'macos-latest' && 'clang_64' || 'gcc_64' }} + arch: ${{ matrix.os == 'windows-latest' && 'win64_msvc2022_64' || 'clang_64' }} modules: 'qtserialport' setup-python: true - # Install additional Linux dependencies if needed - - name: Install additional Linux dependencies + # Install Linux dependencies including Qt + - name: Install Linux dependencies if: runner.os == 'Linux' run: | if command -v sudo > /dev/null; then sudo apt-get update - sudo apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 libicu-dev libdouble-conversion-dev libpcre2-16-0 + sudo apt-get install -y \ + qt6-base-dev \ + libqt6serialport6-dev \ + libgl1-mesa-dev \ + libxkbcommon-x11-0 \ + libicu-dev \ + libdouble-conversion-dev \ + libpcre2-16-0 \ + build-essential \ + cmake \ + ninja-build else apt-get update - apt-get install -y libgl1-mesa-dev libxkbcommon-x11-0 libicu-dev libdouble-conversion-dev libpcre2-16-0 + apt-get install -y \ + qt6-base-dev \ + libqt6serialport6-dev \ + libgl1-mesa-dev \ + libxkbcommon-x11-0 \ + libicu-dev \ + libdouble-conversion-dev \ + libpcre2-16-0 \ + build-essential \ + cmake \ + ninja-build fi # macOS code signing setup @@ -101,7 +126,7 @@ jobs: cmake -B ${{github.workspace}}/build -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{inputs.build_type}} - -DCMAKE_PREFIX_PATH=${{env.Qt6_DIR}} + -DCMAKE_PREFIX_PATH=${{runner.os == 'Linux' && '/usr/lib/x86_64-linux-gnu/cmake/Qt6' || env.Qt6_DIR}} -DAPP_VERSION=${{ steps.get_version.outputs.VERSION }} ${{ matrix.os == 'macos-latest' && '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' || '' }} diff --git a/Owon1041.ico b/Owon1041.ico new file mode 100644 index 0000000000000000000000000000000000000000..9af80c4be88f8b53947769e32dfd91bd187a7ec0 GIT binary patch literal 31696 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 literal 0 HcmV?d00001 From e86f2814125eebac1fbe265d678a609d76897e4e Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 19:15:14 +0100 Subject: [PATCH 5/8] fix: fix ubuntu and debian builds --- .github/workflows/workflow-base.yml | 9 +++++++-- CMakeLists.txt | 10 ++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index 1a28805..eb25398 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -84,11 +84,16 @@ jobs: - name: Install Linux dependencies if: runner.os == 'Linux' run: | + QT_SERIALPORT="libqt6serialport6-dev" + if [[ "${{ matrix.os }}" == "debian-trixie" ]]; then + QT_SERIALPORT="libqt6serialport-dev" + fi + if command -v sudo > /dev/null; then sudo apt-get update sudo apt-get install -y \ qt6-base-dev \ - libqt6serialport6-dev \ + $QT_SERIALPORT \ libgl1-mesa-dev \ libxkbcommon-x11-0 \ libicu-dev \ @@ -101,7 +106,7 @@ jobs: apt-get update apt-get install -y \ qt6-base-dev \ - libqt6serialport6-dev \ + $QT_SERIALPORT \ libgl1-mesa-dev \ libxkbcommon-x11-0 \ libicu-dev \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 47265f6..1b27014 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,10 +161,12 @@ elseif(UNIX AND NOT APPLE) DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps ) - # Install SVG icon - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/linux/icons/scalable/owon1041.svg - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps - ) + # Install SVG icon (if exists) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/linux/icons/scalable/owon1041.svg") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/linux/icons/scalable/owon1041.svg + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps + ) + endif() elseif(WIN32) # Installation paths for Windows include(GNUInstallDirs) From ec126491383af9f1350262d6050f2deb300107c8 Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 19:56:49 +0100 Subject: [PATCH 6/8] fix: fix debian build? --- .github/workflows/workflow-base.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index eb25398..0b5bac1 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -86,7 +86,7 @@ jobs: run: | QT_SERIALPORT="libqt6serialport6-dev" if [[ "${{ matrix.os }}" == "debian-trixie" ]]; then - QT_SERIALPORT="libqt6serialport-dev" + QT_SERIALPORT="qt6-serialport-dev" fi if command -v sudo > /dev/null; then From 1962446b16823b596c519fa72b4e3f5cd8141e67 Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 20:02:10 +0100 Subject: [PATCH 7/8] fix: fix debian build - fix shell syntax error --- .github/workflows/workflow-base.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index 0b5bac1..205c4a9 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -83,6 +83,7 @@ jobs: # Install Linux dependencies including Qt - name: Install Linux dependencies if: runner.os == 'Linux' + shell: bash run: | QT_SERIALPORT="libqt6serialport6-dev" if [[ "${{ matrix.os }}" == "debian-trixie" ]]; then From 772039a40147e62efdf2e85b1e95748e47b2839f Mon Sep 17 00:00:00 2001 From: Thomas Lamy Date: Sun, 1 Mar 2026 20:04:43 +0100 Subject: [PATCH 8/8] fix: fix debian build --- .github/workflows/workflow-base.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/workflow-base.yml b/.github/workflows/workflow-base.yml index 205c4a9..04ab08e 100644 --- a/.github/workflows/workflow-base.yml +++ b/.github/workflows/workflow-base.yml @@ -182,13 +182,13 @@ jobs: shell: pwsh run: | & "$env:Qt6_DIR\bin\windeployqt.exe" --release --no-translations --no-opengl-sw --no-system-d3d-compiler "${{github.workspace}}\build\Release\Owon1041.exe" - cd build + cd ${{github.workspace}}/build cpack -G WIX -C ${{inputs.build_type}} - name: Create Linux package if: runner.os == 'Linux' run: | - cd build + cd ${{github.workspace}}/build cpack -G DEB # Upload artifacts