Skip to content

Commit

Permalink
Merge pull request #35 from hasselmm/improvement/update-for-qt6.8
Browse files Browse the repository at this point in the history
Update for Qt 6.8
  • Loading branch information
hasselmm authored Oct 7, 2024
2 parents f1b7ab3 + dcd3037 commit 5ae15e7
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 93 deletions.
189 changes: 103 additions & 86 deletions .github/workflows/integration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,111 +3,130 @@ on: [push]

jobs:
build:
runs-on: ${{matrix.configuration.os}}
runs-on: ${{matrix.runner || 'ubuntu-latest' }}

strategy:
fail-fast: false

matrix:
qt-version: ['5.15.2', '6.5.3']
configuration:
- id: windows-msvc
os: windows-2022

- id: windows-mingw
os: windows-2022
arch-qt5: win64_mingw81
arch-qt6: win64_mingw
cmake-flags: [
'-DCMAKE_C_COMPILER:FILEPATH=$env:IQTA_TOOLS/mingw1120_64/bin/gcc.exe',
'-DCMAKE_CXX_COMPILER:FILEPATH=$env:IQTA_TOOLS/mingw1120_64/bin/g++.exe',
'-DCMAKE_MAKE_PROGRAM:FILEPATH=$env:IQTA_TOOLS/Ninja/ninja.exe',
'-GNinja',
]
tools: 'tools_mingw90 tools_ninja'
version: ['5.15.2', '6.5.3', '6.8.0']
platform: ['android', 'linux', 'ios', 'macos', 'mingw', 'msvc']

- id: linux
os: ubuntu-22.04
cmake-flags: [
'-GNinja',
]
include:

- id: android
os: ubuntu-22.04
target: android
arch-qt5: android
arch-qt6: android_arm64_v8a
cmake-flags-qt5: [
'-DANDROID_ABI:STRING=armeabi-v7a',
'-DANDROID_NDK:PATH=$ANDROID_NDK_ROOT',
'-DANDROID_SDK:PATH=$ANDROID_SDK_ROOT',
'-DANDROID_PLATFORM:STRING=android-21',
'-DANDROID_STL:STRING=c++_shared',
'-DANDROID_USE_LEGACY_TOOLCHAIN_FILE:BOOL=OFF',
'-DCMAKE_FIND_ROOT_PATH:PATH=$Qt5_DIR',
'-DCMAKE_PREFIX_PATH:STRING=$Qt5_DIR',
'-GNinja', '--toolchain', '$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake',
]
cmake-flags-qt6: [
# ----------------------------------------------------------------------- select platform specific Github runner

- platform: android
runner: ubuntu-latest
- platform: linux
runner: ubuntu-latest

- platform: ios
runner: macos-latest
- platform: macos
runner: macos-latest

- platform: mingw
runner: windows-latest
- platform: msvc
runner: windows-latest

# --------------------------------------------------------------------------- select platform specific Qt target

- platform: android
target: android
- platform: ios
target: ios

# --------------------------------------------------------------------- select platform specific Qt architecture

- platform: android
arch: android_arm64_v8a
- platform: android
version: '5.15.2'
arch: android

- platform: ios
arch: ios

- platform: mingw
arch: win64_mingw
- platform: mingw
version: '5.15.2'
arch: win64_mingw81

- platform: msvc
arch: win64_msvc2019_64
- platform: msvc
version: '6.8.0'
arch: win64_msvc2022_64

# ------------------------------------------------------------------------- select platform specific CMake flags

- platform: android
cmake-flags: [
'-DANDROID_ABI:STRING=arm64-v8a',
'-DANDROID_PLATFORM:STRING=android-23',
'-DANDROID_SDK_ROOT:PATH=$ANDROID_SDK_ROOT',
'-DANDROID_NDK:PATH=$ANDROID_NDK_ROOT',
'-DANDROID_STL:STRING=c++_shared',
'-DANDROID_USE_LEGACY_TOOLCHAIN_FILE:BOOL=OFF',
'-DCMAKE_FIND_ROOT_PATH:PATH=$Qt6_DIR',
'-DCMAKE_PREFIX_PATH:STRING=$Qt6_DIR',
'-DQT_HOST_PATH=$Qt6_HOSTDIR',
'-DQT_HOST_PATH:PATH=$QT_ROOT_DIR/../gcc_64',
'-DQT_NO_GLOBAL_APK_TARGET_PART_OF_ALL:BOOL=ON',
'-GNinja', '--toolchain', '$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake',
]

- id: macos
os: macos-12

- id: ios
os: macos-12
target: ios
- platform: ios
cmake-flags: [
'-DCMAKE_FIND_ROOT_PATH:PATH=$Qt5_DIR$Qt6_DIR',
'-DCMAKE_PREFIX_PATH:STRING=$Qt5_DIR$Qt6_DIR',
'-DCMAKE_SYSTEM_NAME:STRING=iOS',
'-DQT_HOST_PATH=$Qt6_HOSTDIR',
'-DQT_HOST_PATH:PATH=$QT_ROOT_DIR/../macos',
'-GXcode',
]

steps:
- uses: actions/checkout@v4
- platform: macos
version: '5.15.2'
cmake-flags: [
'-DCMAKE_OSX_ARCHITECTURES=x86_64',
]

- name: Install host Qt for cross-compiling
id: install-host-qt
uses: jurplel/install-qt-action@v3
if: (startsWith(matrix.qt-version, '6.')
&& (matrix.configuration.target || 'desktop') != 'desktop')
with:
version: ${{matrix.qt-version}}
target: 'desktop'
cache: true
- platform: linux
cmake-flags: [
'-GNinja'
]

- name: Store location of host Qt
if: steps.install-host-qt.outcome == 'success'
run: echo "Qt6_HOSTDIR=${Qt6_DIR}" >> $GITHUB_ENV
- platform: mingw
cmake-flags: [
'-DCMAKE_C_COMPILER:FILEPATH=$env:IQTA_TOOLS/mingw1310_64/bin/gcc.exe',
'-DCMAKE_CXX_COMPILER:FILEPATH=$env:IQTA_TOOLS/mingw1310_64/bin/g++.exe',
'-DCMAKE_MAKE_PROGRAM:FILEPATH=$env:IQTA_TOOLS/Ninja/ninja.exe',
'-GNinja',
]

# ------------------------------------------------------------------------- select platform specific CMake tools

- platform: mingw
tools: 'tools_mingw1310 tools_ninja'

# ------------------------------------------------------------------------ select platform specific package name

- package: Qt6
- version: '5.15.2'
package: Qt5

steps:
- uses: actions/checkout@v4

- name: Install Qt
uses: jurplel/install-qt-action@v3
uses: jurplel/install-qt-action@v4
with:
version: ${{matrix.qt-version}}
target: ${{matrix.configuration.target || 'desktop'}}
arch: ${{startsWith(matrix.qt-version, '5.')
&& matrix.configuration.arch-qt5
|| matrix.configuration.arch-qt6
|| matrix.configuration.arch
|| ''}}
tools: ${{matrix.configuration.tools || ''}}
cache: true
version: ${{ matrix.version }}
target: ${{ matrix.target || 'desktop' }}
tools: ${{ matrix.tools || '' }}
arch: ${{ matrix.arch }}
cache: true

- name: Install Ninja
if: matrix.configuration.os == 'ubuntu-22.04'
if: startsWith(matrix.runner, 'ubuntu-')
run: |
sudo apt-get install ninja-build
Expand All @@ -118,16 +137,14 @@ jobs:
- name: Configure
working-directory: ${{runner.workspace}}/build
run: cmake ${{github.workspace}}
-DCMAKE_BUILD_TYPE:STRING=Release
${{join(startsWith(matrix.qt-version, '5.')
&& matrix.configuration.cmake-flags-qt5
|| matrix.configuration.cmake-flags-qt6
|| matrix.configuration.cmake-flags,
' ')}}
-DCMAKE_BUILD_TYPE:STRING=Release
-DQT_DIR:PATH=$QT_ROOT_DIR/lib/cmake/${{matrix.package}}
-DCMAKE_FIND_ROOT_PATH:PATH=$QT_ROOT_DIR
${{ join(matrix.cmake-flags, ' ') }}

- uses: actions/upload-artifact@v4
with:
name: cmake-qt${{matrix.qt-version}}-${{matrix.configuration.id}}
name: cmake-qt${{matrix.version}}-${{matrix.platform}}
path: |
${{runner.workspace}}/build/CMakeCache.txt
${{runner.workspace}}/build/CMakeFiles/CMakeOutput.log
Expand All @@ -137,14 +154,14 @@ jobs:
run: cmake --build . --config Release

- name: Test
if: (matrix.configuration.target || 'desktop') == 'desktop'
if: (matrix.target || 'desktop') == 'desktop'
working-directory: ${{runner.workspace}}/build
run: |
ctest -C Release --verbose
- uses: actions/upload-artifact@v4
if: (matrix.configuration.target || 'desktop') == 'desktop'
if: (matrix.target || 'desktop') == 'desktop'
with:
name: ctest-qt${{matrix.qt-version}}-${{matrix.configuration.id}}
name: ctest-qt${{matrix.version}}-${{matrix.platform}}
path: |
${{runner.workspace}}/build/Testing/Temporary/LastTest.log
11 changes: 7 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,18 +69,21 @@ endif()

message(STATUS "Using Qt ${Qt_VERSION} from ${Qt_DIR}")

if (TARGET Qt::ZlibPrivate AND NOT ANDROID) # ----------------------------- figure out today's name of Qt's bundled zlib
add_library(QncZlib INTERFACE) # ------------------------------------------ figure out today's name of Qt's bundled zlib
add_library(Qnc::Zlib ALIAS QncZlib)

if (TARGET Qt::ZlibPrivate AND NOT ANDROID)
# Qt::ZlibPrivate only provides headers, but no linkable symbols for Android
message(STATUS "Using Qt::ZlibPrivate")
add_library(QtNetworkCrumbs::Zlib ALIAS Qt::ZlibPrivate)
target_link_libraries(QncZlib INTERFACE Qt::ZlibPrivate)
else()
find_package(WrapZLIB QUIET)

if (WrapZLIB_FOUND)
add_library(QtNetworkCrumbs::Zlib ALIAS WrapZLIB::WrapZLIB)
target_link_libraries(QncZlib INTERFACE WrapZLIB::WrapZLIB)
else()
find_package(ZLIB REQUIRED)
add_library(QtNetworkCrumbs::Zlib ALIAS ZLIB::ZLIB)
target_link_libraries(QncZlib INTERFACE ZLIB::ZLIB)
endif()
endif()

Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ This are some tiny networking toys for [Qt][qt-opensource] based applications, w
* [A minimal SSDP resolver](#a-minimal-ssdp-resolver)
* [A declarative XML parser](#a-declarative-xml-parser)

This library is tested to work with [Qt][qt-opensource] 5.15, 6.5 and 6.8
on Android, iOS, Linux, macOS and Windows.

### A minimal mDNS-SD resolver

[DNS Service Discovery][DNS-SD], also known as "DNS-SD" and "Bonjour", is an efficient method to discover
Expand Down
2 changes: 1 addition & 1 deletion http/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ target_link_libraries(QncHttp PUBLIC Qnc::Core)

if (NOT IOS) # FIXME Figure out code signing on Github
qnc_add_executable(HttpCompressingServer TYPE tool compressingserver.cpp)
target_link_libraries(HttpCompressingServer PUBLIC Qt::Network QtNetworkCrumbs::Zlib)
target_link_libraries(HttpCompressingServer PUBLIC Qt::Network Qnc::Zlib)
endif()
11 changes: 9 additions & 2 deletions tests/auto/qnctestsupport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,22 @@ bool initialize()
return compare_helper(success, "Compared numbers are not the same",
toString(t1), toString(t2), actual, expected, file, line);

#else // QT_VERSION_MAJOR >= 6
#elif QT_VERSION < QT_VERSION_CHECK(6, 8, 0)

return reportResult(success,
[t1] { return toString(t1); },
[t2] { return toString(t2); },
actual, expected, ComparisonOperation::Equal,
file, line);

#endif // QT_VERSION_MAJOR >= 6
#else // QT_VERSION >= 6.8

const auto toString = &Internal::genericToString<long double>;

return reportResult(success, std::addressof(t1), std::addressof(t2), toString, toString,
actual, expected, ComparisonOperation::Equal, file, line);

#endif // QT_VERSION >= 6.8
}

QDebug operator<<(QDebug debug, long double value)
Expand Down

0 comments on commit 5ae15e7

Please sign in to comment.