Skip to content

Commit

Permalink
Merge pull request #18 from hasselmm/bugfix/various-boy-scouting-fixes
Browse files Browse the repository at this point in the history
Various boy scouting fixes
  • Loading branch information
hasselmm authored Sep 9, 2024
2 parents 6f79537 + 53e9366 commit bb394e3
Show file tree
Hide file tree
Showing 12 changed files with 318 additions and 227 deletions.
43 changes: 30 additions & 13 deletions .github/workflows/integration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
fail-fast: false

matrix:
qt-version: ['5.15.2', '6.5.1']
qt-version: ['5.15.2', '6.5.3']
configuration:
- id: windows-msvc
os: windows-2022
Expand All @@ -35,19 +35,31 @@ jobs:
- id: android
os: ubuntu-22.04
target: android
cmake-flags: [
'-DCMAKE_SYSTEM_NAME:STRING=Android',
'-DCMAKE_SYSTEM_VERSION:STRING=21',
'-DCMAKE_ANDROID_ARCH_ABI:STRING=armeabi-v7a',
'-DCMAKE_ANDROID_STL:STRING=c++_shared',
'-DCMAKE_ANDROID_SDK:PATH=$ANDROID_SDK_ROOT',
'-DCMAKE_ANDROID_NDK:PATH=$ANDROID_NDK_ROOT',
'-DCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja',
'-DCMAKE_FIND_ROOT_PATH:PATH=$Qt5_DIR$Qt6_DIR',
'-DCMAKE_PREFIX_PATH:STRING=$Qt5_DIR$Qt6_DIR',
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: [
'-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',
'-GNinja',
'-DQT_NO_GLOBAL_APK_TARGET_PART_OF_ALL:BOOL=ON',
'-GNinja', '--toolchain', '$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake',
]

- id: macos
Expand Down Expand Up @@ -105,7 +117,12 @@ jobs:
- name: Configure
working-directory: ${{runner.workspace}}/build
run: cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE:STRING=Release ${{join(matrix.configuration.cmake-flags, ' ')}}
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,
' ')}}

- uses: actions/upload-artifact@v3
with:
Expand Down
38 changes: 37 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU|Clang)
-Werror=switch -Werror=uninitialized -Werror=unused)
endif()

set(QNC_COMPILE_DEFINITIONS
-DQT_DISABLE_DEPRECATED_BEFORE=0x050f00
-DQT_NO_CAST_FROM_ASCII=1
-DQT_NO_URL_CAST_FROM_STRING=1)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
Expand All @@ -21,8 +26,8 @@ find_package(Qt6 QUIET COMPONENTS Core NO_SYSTEM_ENVIRONMENT_PATH)
if (Qt6_FOUND)
find_package(Qt6 REQUIRED COMPONENTS Network Test)
find_package(Qt6 QUIET COMPONENTS Zlib)
set(Qt_DIR ${QT6_INSTALL_PREFIX})
set(Qt_VERSION ${Qt6_VERSION})
set(Qt_DIR ${Qt6_DIR})
else()
find_package(Qt5 5.15 REQUIRED COMPONENTS Network Test)
find_package(Qt5 QUIET COMPONENTS Zlib)
Expand All @@ -47,6 +52,37 @@ else()
endif()
endif()

function(qnc_add_library NAME)
if (COMMAND qt_add_executable)
qt_add_library("${NAME}" ${ARGN})
else()
add_library("${NAME}" ${ARGN})
endif()

target_include_directories("${NAME}" PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions("${NAME}" PRIVATE ${QNC_COMPILE_DEFINITIONS})
target_compile_options ("${NAME}" PRIVATE ${QNC_COMPILE_OPTIONS})
endfunction()

function(qnc_add_executable NAME)
cmake_parse_arguments(EXECUTABLE "" "TYPE" "" ${ARGN})

if (COMMAND qt_add_executable)
qt_add_executable("${NAME}" ${EXECUTABLE_UNPARSED_ARGUMENTS})
else()
add_executable("${NAME}" ${EXECUTABLE_UNPARSED_ARGUMENTS})
endif()

target_compile_definitions("${NAME}" PRIVATE ${QNC_COMPILE_DEFINITIONS})
target_compile_options ("${NAME}" PRIVATE ${QNC_COMPILE_OPTIONS})

set_target_properties(
"${NAME}" PROPERTIES
MACOSX_BUNDLE "de.taschenorakel.qnc.${NAME}"
XCODE_PRODUCT_TYPE "com.apple.product-type.bundle.${EXECUTABLE_TYPE}"
)
endfunction()

add_custom_target(metadata SOURCES LICENSE README.md)

add_subdirectory(.github)
Expand Down
9 changes: 1 addition & 8 deletions http/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
if (NOT IOS) # FIXME Figure out code signing on Github
add_executable(HttpCompressingServer compressingserver.cpp)
target_compile_options(HttpCompressingServer PRIVATE ${QNC_COMPILE_OPTIONS})
qnc_add_executable(HttpCompressingServer TYPE tool compressingserver.cpp)
target_link_libraries(HttpCompressingServer PUBLIC Qt::Network QtNetworkCrumbs::Zlib)

set_target_properties(
HttpCompressingServer PROPERTIES
MACOSX_BUNDLE "de.taschenorakel.qnc.HttpCompressingServer"
XCODE_PRODUCT_TYPE "com.apple.product-type.bundle.unit-test"
)
endif()
21 changes: 3 additions & 18 deletions mdns/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,20 @@
add_library(
qnc_add_library(
MDNSResolver STATIC
mdnsmessage.cpp
mdnsmessage.h
mdnsresolver.cpp
mdnsresolver.h
)

target_include_directories(MDNSResolver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(MDNSResolver PRIVATE ${QNC_COMPILE_OPTIONS})
target_link_libraries(MDNSResolver PUBLIC QtNetworkCrumbs)

target_compile_definitions(
MDNSResolver PRIVATE
-DQT_DISABLE_DEPRECATED_BEFORE=0x050f00
-DQT_NO_CAST_FROM_ASCII=1
-DQT_NO_URL_CAST_FROM_STRING=1
)

if (NOT IOS) # FIXME Figure out code signing on Github
add_executable(MDNSResolverDemo mdnsresolverdemo.cpp)
qnc_add_executable(MDNSResolverDemo TYPE tool mdnsresolverdemo.cpp)
target_link_libraries(MDNSResolverDemo PRIVATE MDNSResolver)

set_target_properties(
MDNSResolverDemo PROPERTIES
MACOSX_BUNDLE "de.taschenorakel.qnc.MDNSResolverDemo"
XCODE_PRODUCT_TYPE "com.apple.product-type.bundle.unit-test"
)
endif()

#if (WIN32)
# add_executable(WinDNSTest windnstest.cpp)
# target_compile_definitions(WinDNSTest PRIVATE -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP)
# qnc_add_executable(WinDNSTest TYPE tool windnstest.cpp)
# target_link_libraries(WinDNSTest dnsapi.lib)
#endif()
8 changes: 4 additions & 4 deletions mdns/mdnsmessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ QDebug operator<<(QDebug debug, const qnc::mdns::Label &label)

QDebug operator<<(QDebug debug, const qnc::mdns::Message &message)
{
const auto saver = QDebugStateSaver{debug};
const auto _ = QDebugStateSaver{debug};

if (debug.verbosity() >= QDebug::DefaultVerbosity)
debug.nospace() << message.staticMetaObject.className();
Expand Down Expand Up @@ -428,7 +428,7 @@ QDebug operator<<(QDebug debug, const qnc::mdns::Name &name)

QDebug operator<<(QDebug debug, const qnc::mdns::Question &question)
{
const auto saver = QDebugStateSaver{debug};
const auto _ = QDebugStateSaver{debug};

if (debug.verbosity() >= QDebug::DefaultVerbosity)
debug.nospace() << question.staticMetaObject.className();
Expand All @@ -448,7 +448,7 @@ QDebug operator<<(QDebug debug, const qnc::mdns::Question &question)

QDebug operator<<(QDebug debug, const qnc::mdns::Resource &resource)
{
const auto saver = QDebugStateSaver{debug};
const auto _ = QDebugStateSaver{debug};

if (debug.verbosity() >= QDebug::DefaultVerbosity)
debug.nospace() << resource.staticMetaObject.className();
Expand Down Expand Up @@ -497,7 +497,7 @@ QDebug operator<<(QDebug debug, const qnc::mdns::Resource &resource)

QDebug operator<<(QDebug debug, const qnc::mdns::ServiceRecord &service)
{
const auto saver = QDebugStateSaver{debug};
const auto _ = QDebugStateSaver{debug};

if (debug.verbosity() >= QDebug::DefaultVerbosity)
debug.nospace() << service.staticMetaObject.className();
Expand Down
18 changes: 9 additions & 9 deletions mdns/mdnsresolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,28 +162,28 @@ QString Resolver::domain() const
return m_domain;
}

void Resolver::setInterval(std::chrono::milliseconds ms)
void Resolver::setScanInterval(std::chrono::milliseconds ms)
{
if (intervalAsDuration() != ms) {
if (scanIntervalAsDuration() != ms) {
m_timer->setInterval(ms);
emit intervalChanged(interval());
emit scanIntervalChanged(scanInterval());
}
}

void Resolver::setInterval(int ms)
void Resolver::setScanInterval(int ms)
{
if (interval() != ms) {
if (scanInterval() != ms) {
m_timer->setInterval(ms);
emit intervalChanged(interval());
emit scanIntervalChanged(scanInterval());
}
}

std::chrono::milliseconds Resolver::intervalAsDuration() const
std::chrono::milliseconds Resolver::scanIntervalAsDuration() const
{
return m_timer->intervalAsDuration();
}

int Resolver::interval() const
int Resolver::scanInterval() const
{
return m_timer->interval();
}
Expand Down Expand Up @@ -358,7 +358,7 @@ void Resolver::onTimeout()

QDebug operator<<(QDebug debug, const qnc::mdns::ServiceDescription &service)
{
const auto saver = QDebugStateSaver{debug};
const auto _ = QDebugStateSaver{debug};

if (debug.verbosity() >= QDebug::DefaultVerbosity)
debug.nospace() << service.staticMetaObject.className();
Expand Down
12 changes: 6 additions & 6 deletions mdns/mdnsresolver.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,28 +47,28 @@ class Resolver : public QObject
{
Q_OBJECT
Q_PROPERTY(QString domain READ domain WRITE setDomain NOTIFY domainChanged FINAL)
Q_PROPERTY(int interval READ interval WRITE setInterval NOTIFY intervalChanged FINAL)
Q_PROPERTY(int scanInterval READ scanInterval WRITE setScanInterval NOTIFY scanIntervalChanged FINAL)

public:
explicit Resolver(QObject *parent = {});

QString domain() const;

int interval() const;
std::chrono::milliseconds intervalAsDuration() const;
void setInterval(std::chrono::milliseconds ms);
int scanInterval() const;
std::chrono::milliseconds scanIntervalAsDuration() const;
void setScanInterval(std::chrono::milliseconds ms);

public slots:
void setDomain(QString domain);
void setInterval(int ms);
void setScanInterval(int ms);

bool lookupHostNames(QStringList hostNames);
bool lookupServices(QStringList serviceTypes);
bool lookup(qnc::mdns::Message query);

signals:
void domainChanged(QString domain);
void intervalChanged(int interval);
void scanIntervalChanged(int interval);

void hostNameResolved(QString hostname, QList<QHostAddress> addresses);
void serviceResolved(qnc::mdns::ServiceDescription service);
Expand Down
24 changes: 24 additions & 0 deletions mdns/mdnsresolverdemo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
#include "qncliterals.h"

// Qt headers
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QDebug>
#include <QHostAddress>
#include <QLoggingCategory>
#include <QTimer>

namespace qnc::mdns::demo {
namespace {
Expand All @@ -25,6 +27,28 @@ class ResolverDemo : public QCoreApplication

int run()
{
const auto timeout = QCommandLineOption{{"t"_L1, "timeout"_L1},
tr("Timeout after which to quit"), tr("SECONDS")};

auto commandLine = QCommandLineParser{};
commandLine.addOption(timeout);
commandLine.addHelpOption();
commandLine.process(arguments());

if (commandLine.isSet(timeout)) {
auto isNumber = false;
const auto &value = commandLine.value(timeout);
const auto seconds = value.toFloat(&isNumber);

if (!isNumber) {
qCWarning(lcDemo, "Not a number: %ls", qUtf16Printable(value));
return EXIT_FAILURE;
}

const auto milliseconds = std::chrono::milliseconds{qRound(seconds * 1000)};
QTimer::singleShot(milliseconds, this, &ResolverDemo::quit);
}

const auto resolver = new Resolver{this};

connect(resolver, &Resolver::hostNameResolved,
Expand Down
12 changes: 1 addition & 11 deletions qnc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,7 @@
add_library(
qnc_add_library(
QtNetworkCrumbs STATIC
qncliterals.h
qncliterals.cpp
)

target_include_directories(QtNetworkCrumbs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(QtNetworkCrumbs PRIVATE ${QNC_COMPILE_OPTIONS})
target_link_libraries(QtNetworkCrumbs PUBLIC Qt::Network)

target_compile_definitions(
QtNetworkCrumbs PRIVATE
-DQT_DISABLE_DEPRECATED_BEFORE=0x050f00
-DQT_NO_CAST_FROM_ASCII=1
-DQT_NO_URL_CAST_FROM_STRING=1
)

26 changes: 14 additions & 12 deletions tests/auto/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
if (MINGW)
get_filename_component(CXX_RUNTIME_BINDIR ${CMAKE_CXX_COMPILER} DIRECTORY)
configure_file(test-runner.cmd.in test-runner.cmd NEWLINE_STYLE WIN32)
set(TEST_RUNNER ${CMAKE_CURRENT_BINARY_DIR}/test-runner.cmd)
set(TEST_RUNNER "${CMAKE_CURRENT_BINARY_DIR}/test-runner.cmd")
else()
unset(TEST_RUNNER)
endif()

function(add_testcase NAME)
add_executable(${NAME} ${NAME}.cpp)
target_compile_options(${NAME} PRIVATE ${QNC_COMPILE_OPTIONS})
target_link_libraries(${NAME} PRIVATE MDNSResolver Qt::Test)
function(add_testcase SOURCE_FILENAME) # [SOURCES...]
cmake_parse_arguments(TESTCASE "" "NAME" "LIBRARIES;SOURCES" ${ARGN})

set_target_properties(
${NAME} PROPERTIES
MACOSX_BUNDLE "de.taschenorakel.qnc.${NAME}"
XCODE_PRODUCT_TYPE "com.apple.product-type.bundle.unit-test")
if (NOT TESTCASE_NAME)
cmake_path(GET SOURCE_FILENAME STEM TESTCASE_NAME)
endif()

add_test(NAME ${NAME} COMMAND ${TEST_RUNNER} $<TARGET_FILE:${NAME}>)
list(PREPEND TESTCASE_SOURCES "${SOURCE_FILENAME}")
list(APPEND TESTCASE_SOURCES ${TESTCASE_UNPARSED_ARGUMENTS})

qnc_add_executable("${TESTCASE_NAME}" TYPE "unit-test" ${TESTCASE_SOURCES})
target_link_libraries("${TESTCASE_NAME}" PRIVATE Qt::Test ${TESTCASE_LIBRARIES})
add_test(NAME "${TESTCASE_NAME}" COMMAND ${TEST_RUNNER} "$<TARGET_FILE:${TESTCASE_NAME}>")
endfunction()

add_testcase(tst_mdnsmessages)
add_testcase(tst_mdnsresolver)
add_testcase(tst_mdnsmessages.cpp LIBRARIES MDNSResolver)
add_testcase(tst_mdnsresolver.cpp LIBRARIES MDNSResolver)
Loading

0 comments on commit bb394e3

Please sign in to comment.