From a09ffe6651260a11942b15ae14d1fe0b55d14813 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Fri, 20 Apr 2018 14:46:55 +0200 Subject: [PATCH 01/13] Fix cmake script --- CMakeLists.txt | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f6f0535 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,54 @@ +find_package(Qt5 COMPONENTS Core Network) +set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +add_library(QtZeroConf + qzeroconfservice.h + qzeroconfglobal.h + qzeroconfservice.cpp + qzeroconf.h +) + +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + target_sources(QtZeroConf PRIVATE + avahi-qt/qt-watch.h + avahi-qt/qt-watch_p.h + avahi-qt/qt-watch.cpp + avahiclient.cpp + ) + target_link_libraries(QtZeroConf PRIVATE libavahi) +endif() + +if(APPLE) + target_sources(QtZeroConf PRIVATE + bonjour_p.h + bonjour.cpp + ) + find_library(CoreServices CoreServices) + target_link_libraries(QtZeroConf PUBLIC ${CoreServices}) +endif() + +if(WIN32) + target_sources(QtZeroConf PRIVATE + qzeroconf.h + bonjour_p.h + bonjour.cpp + bonjour-sdk/dnssd_clientlib.c + bonjour-sdk/dnssd_clientstub.c + bonjour-sdk/dnssd_ipc.c + ) + target_link_libraries(QtZeroConf PUBLIC -lws2_32 -lwsock32) + target_compile_definitions(QtZeroConf PRIVATE + -DQT_BUILD_ZEROCONF_LIB + -DWIN32 + -D_USRDLL + -DMDNS_DEBUGMSGS=0 + -DWIN32_LEAN_AND_MEAN + -DUSE_TCP_LOOPBACK + -D_CRT_SECURE_NO_DEPRECATE + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 + -DNOT_HAVE_SA_LEN) + target_include_directories(QtZeroConf PRIVATE "${CMAKE_CURRENT_LIST_DIR}/bonjour-sdk") +endif() + +target_include_directories(QtZeroConf PUBLIC "${CMAKE_CURRENT_LIST_DIR}") +target_link_libraries(QtZeroConf PUBLIC Qt5::Core Qt5::Network) From 0a69505312e71ac9f88cf3686b5a8572cf6fc5bd Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Fri, 20 Apr 2018 17:34:26 +0200 Subject: [PATCH 02/13] Fix windows build --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6f0535..5046ba5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ if(WIN32) -DMDNS_DEBUGMSGS=0 -DWIN32_LEAN_AND_MEAN -DUSE_TCP_LOOPBACK + -D_NO_CRT_STDIO_INLINE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -DNOT_HAVE_SA_LEN) From 88d2d9475c014688c6d0e290a000d3e92450b3a8 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Fri, 20 Apr 2018 18:09:22 +0200 Subject: [PATCH 03/13] Build as a shared lib --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5046ba5..736aa44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ find_package(Qt5 COMPONENTS Core Network) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -add_library(QtZeroConf +add_library(QtZeroConf SHARED qzeroconfservice.h qzeroconfglobal.h qzeroconfservice.cpp @@ -36,7 +36,8 @@ if(WIN32) bonjour-sdk/dnssd_clientstub.c bonjour-sdk/dnssd_ipc.c ) - target_link_libraries(QtZeroConf PUBLIC -lws2_32 -lwsock32) + find_library(legacy_stdio_definitions legacy_stdio_definitions) + target_link_libraries(QtZeroConf PUBLIC ws2_32 ${legacy_stdio_definitions}) target_compile_definitions(QtZeroConf PRIVATE -DQT_BUILD_ZEROCONF_LIB -DWIN32 From ebb1958fff2398cebab4f0929e5ac73370d5edc9 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Tue, 24 Apr 2018 11:40:54 +0200 Subject: [PATCH 04/13] Build on android with cmake --- CMakeLists.txt | 63 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 736aa44..c4d3bd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,9 @@ if(APPLE) target_link_libraries(QtZeroConf PUBLIC ${CoreServices}) endif() +target_include_directories(QtZeroConf PUBLIC "${CMAKE_CURRENT_LIST_DIR}") +target_link_libraries(QtZeroConf PUBLIC Qt5::Core Qt5::Network) + if(WIN32) target_sources(QtZeroConf PRIVATE qzeroconf.h @@ -52,5 +55,61 @@ if(WIN32) target_include_directories(QtZeroConf PRIVATE "${CMAKE_CURRENT_LIST_DIR}/bonjour-sdk") endif() -target_include_directories(QtZeroConf PUBLIC "${CMAKE_CURRENT_LIST_DIR}") -target_link_libraries(QtZeroConf PUBLIC Qt5::Core Qt5::Network) + +if(ANDROID) + set(ACM "${CMAKE_CURRENT_LIST_DIR}/avahi-common") + set(ACR "${CMAKE_CURRENT_LIST_DIR}/avahi-core") + target_sources(QtZeroConf PRIVATE + qzeroconf.h + avahi-qt/qt-watch.h + avahi-qt/qt-watch_p.h + avahicore.cpp + avahi-qt/qt-watch.cpp + ${ACM}/address.c + ${ACM}/alternative.c + ${ACM}/domain.c + ${ACM}/error.c + ${ACM}/i18n.c + ${ACM}/malloc.c + ${ACM}/rlist.c + ${ACM}/simple-watch.c + ${ACM}/strlst.c + ${ACM}/thread-watch.c + ${ACM}/timeval.c + ${ACM}/utf8.c + ${ACR}/addr-util.c + ${ACR}/announce.c + ${ACR}/browse.c + ${ACR}/browse-dns-server.c + ${ACR}/browse-domain.c + ${ACR}/browse-service.c + ${ACR}/browse-service-type.c + ${ACR}/cache.c + ${ACR}/dns.c + ${ACR}/domain-util.c + ${ACR}/entry.c + ${ACR}/fdutil.c + ${ACR}/hashmap.c + ${ACR}/iface.c + ${ACR}/iface-linux.c + ${ACR}/log.c + ${ACR}/multicast-lookup.c + ${ACR}/netlink.c + ${ACR}/prioq.c + ${ACR}/probe-sched.c + ${ACR}/querier.c + ${ACR}/query-sched.c + ${ACR}/resolve-address.c + ${ACR}/resolve-host-name.c + ${ACR}/resolve-service.c + ${ACR}/response-sched.c + ${ACR}/rr.c + ${ACR}/rrlist.c + ${ACR}/server.c + ${ACR}/socket.c + ${ACR}/timeeventq.c + ${ACR}/util.c + ${ACR}/wide-area.c +) + target_compile_definitions(QtZeroConf PRIVATE HAVE_STRLCPY GETTEXT_PACKAGE HAVE_NETLINK) +endif() From a504ec17c7a64dfb04fda691d0df9282d4b44298 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Wed, 25 Apr 2018 10:58:20 +0200 Subject: [PATCH 05/13] Compile as static lib --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4d3bd5..42153e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ find_package(Qt5 COMPONENTS Core Network) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -add_library(QtZeroConf SHARED +add_library(QtZeroConf STATIC qzeroconfservice.h qzeroconfglobal.h qzeroconfservice.cpp From 351a834af7a1cac5c00bb88eabe87814fa924daa Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Wed, 25 Apr 2018 14:06:37 +0200 Subject: [PATCH 06/13] Fix windows build --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 42153e8..73b25be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ if(WIN32) find_library(legacy_stdio_definitions legacy_stdio_definitions) target_link_libraries(QtZeroConf PUBLIC ws2_32 ${legacy_stdio_definitions}) target_compile_definitions(QtZeroConf PRIVATE - -DQT_BUILD_ZEROCONF_LIB + -DQZEROCONF_STATIC -DWIN32 -D_USRDLL -DMDNS_DEBUGMSGS=0 From 10f457f2bff20bd0adcf77c26762068ab4ac2460 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Wed, 25 Apr 2018 14:51:50 +0200 Subject: [PATCH 07/13] Fix windows build --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73b25be..4190f7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ if(WIN32) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -DNOT_HAVE_SA_LEN) + target_compile_definitions(QtZeroConf PUBLIC -DQZEROCONF_STATIC) target_include_directories(QtZeroConf PRIVATE "${CMAKE_CURRENT_LIST_DIR}/bonjour-sdk") endif() From 26521fb8484e5ed4104f61a49ddefb95ad80a33d Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Wed, 4 Sep 2019 20:38:47 +0200 Subject: [PATCH 08/13] Fix build on azure --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4190f7c..e87ec47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,8 +39,7 @@ if(WIN32) bonjour-sdk/dnssd_clientstub.c bonjour-sdk/dnssd_ipc.c ) - find_library(legacy_stdio_definitions legacy_stdio_definitions) - target_link_libraries(QtZeroConf PUBLIC ws2_32 ${legacy_stdio_definitions}) + target_link_libraries(QtZeroConf PUBLIC ws2_32 "legacy_stdio_definitions.lib") target_compile_definitions(QtZeroConf PRIVATE -DQZEROCONF_STATIC -DWIN32 From fe3751ecdb4f4631606ab9d65d26da85336274c5 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Thu, 10 Sep 2020 16:05:36 +0200 Subject: [PATCH 09/13] Fix CMakeLists.txt * Add `project` * Remove hardcoded values for controlling the library type (i.e. shared or static) in favour of using `BUILD_SHARED_LIBS` and letting CMake manage the rest * Fix linker error (at least on Windows w/ MinGW) that 'legacy_stdio_definitions.lib' couldn't be found --- CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e87ec47..8496e5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,23 @@ +project(QtZeroConf) + find_package(Qt5 COMPONENTS Core Network) + set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -add_library(QtZeroConf STATIC + +add_library(QtZeroConf qzeroconfservice.h qzeroconfglobal.h qzeroconfservice.cpp qzeroconf.h ) +if(BUILD_SHARED_LIBS) + target_compile_definitions(QtZeroConf PRIVATE QT_BUILD_ZEROCONF_LIB) +else() + target_compile_definitions(QtZeroConf PUBLIC QZEROCONF_STATIC) +endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") target_sources(QtZeroConf PRIVATE avahi-qt/qt-watch.h @@ -39,9 +49,11 @@ if(WIN32) bonjour-sdk/dnssd_clientstub.c bonjour-sdk/dnssd_ipc.c ) - target_link_libraries(QtZeroConf PUBLIC ws2_32 "legacy_stdio_definitions.lib") + target_link_libraries(QtZeroConf PUBLIC ws2_32) + if(MSVC) + target_link_libraries(QtZeroConf PUBLIC "legacy_stdio_definitions.lib") + endif() target_compile_definitions(QtZeroConf PRIVATE - -DQZEROCONF_STATIC -DWIN32 -D_USRDLL -DMDNS_DEBUGMSGS=0 @@ -51,7 +63,6 @@ if(WIN32) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -DNOT_HAVE_SA_LEN) - target_compile_definitions(QtZeroConf PUBLIC -DQZEROCONF_STATIC) target_include_directories(QtZeroConf PRIVATE "${CMAKE_CURRENT_LIST_DIR}/bonjour-sdk") endif() From d630284b10090efa7937b7d7bb1cf7e867714b93 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Thu, 10 Sep 2020 16:05:36 +0200 Subject: [PATCH 10/13] Update README with CMake build instructions --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6a9c9c0..6847cd8 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,10 @@ QZeroConf can be built directly into your project if your project is [LGPL3](htt 1. Clone or download QZeroConf. If you download, unzip. 2. Enter the qtzeroconf directory, run qmake and then make. +#### Building with CMake +Use `BUILD_SHARED_LIBS` to control whether QZeroConf should be built as static (`-DBUILD_SHARED_LIBS=OFF`) or as shared (`-DBUILD_SHARED_LIBS=ON`) library. +The default is `OFF`. + ### API #### Service Publishing From a8084c9eac676eac079a250664a052c84a43e492 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Fri, 11 Sep 2020 08:27:42 +0200 Subject: [PATCH 11/13] Update CMakeLists.txt to make QtZeroConf installable and usable from other projects --- CMakeLists.txt | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8496e5f..f2fa681 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,20 @@ project(QtZeroConf) +cmake_minimum_required(VERSION 2.8.11) find_package(Qt5 COMPONENTS Core Network) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -add_library(QtZeroConf +set(PUBLIC_HEADERS qzeroconfservice.h qzeroconfglobal.h - qzeroconfservice.cpp qzeroconf.h ) +add_library(QtZeroConf + ${PUBLIC_HEADERS} + qzeroconfservice.cpp +) if(BUILD_SHARED_LIBS) target_compile_definitions(QtZeroConf PRIVATE QT_BUILD_ZEROCONF_LIB) @@ -20,11 +24,13 @@ endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") target_sources(QtZeroConf PRIVATE - avahi-qt/qt-watch.h avahi-qt/qt-watch_p.h avahi-qt/qt-watch.cpp avahiclient.cpp ) + list(APPEND ${PUBLIC_HEADERS} + avahi-qt/qt-watch.h + ) target_link_libraries(QtZeroConf PRIVATE libavahi) endif() @@ -37,18 +43,20 @@ if(APPLE) target_link_libraries(QtZeroConf PUBLIC ${CoreServices}) endif() -target_include_directories(QtZeroConf PUBLIC "${CMAKE_CURRENT_LIST_DIR}") +target_include_directories(QtZeroConf PUBLIC + $ + $ +) target_link_libraries(QtZeroConf PUBLIC Qt5::Core Qt5::Network) if(WIN32) target_sources(QtZeroConf PRIVATE - qzeroconf.h bonjour_p.h bonjour.cpp bonjour-sdk/dnssd_clientlib.c bonjour-sdk/dnssd_clientstub.c bonjour-sdk/dnssd_ipc.c - ) + ) target_link_libraries(QtZeroConf PUBLIC ws2_32) if(MSVC) target_link_libraries(QtZeroConf PUBLIC "legacy_stdio_definitions.lib") @@ -121,6 +129,18 @@ if(ANDROID) ${ACR}/timeeventq.c ${ACR}/util.c ${ACR}/wide-area.c -) + ) + list(APPEND ${PUBLIC_HEADERS} + avahi-qt/qt-watch.h + ) target_compile_definitions(QtZeroConf PRIVATE HAVE_STRLCPY GETTEXT_PACKAGE HAVE_NETLINK) endif() + +# install +set_target_properties(QtZeroConf PROPERTIES PUBLIC_HEADER + "${PUBLIC_HEADERS}" +) +install(TARGETS QtZeroConf + LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION include/QtZeroConf +) From 3fdf9dd8d839c6134e59285071ed4b3336a4f428 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Fri, 11 Sep 2020 14:01:21 +0200 Subject: [PATCH 12/13] Fix CMakeLists.txt for linux Have to link to 'avahi-client' and not 'libavahi' --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2fa681..5f757fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") list(APPEND ${PUBLIC_HEADERS} avahi-qt/qt-watch.h ) - target_link_libraries(QtZeroConf PRIVATE libavahi) + target_link_libraries(QtZeroConf PRIVATE avahi-client) endif() if(APPLE) From fe9d3cbc63fbe10cb739df5a3d2710b8854d4130 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Fri, 11 Sep 2020 09:34:23 +0200 Subject: [PATCH 13/13] Add CMake project for example --- CMakeLists.txt | 4 ++++ README.md | 3 +++ example/CMakeLists.txt | 25 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 example/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f757fb..4d9c27f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,3 +144,7 @@ install(TARGETS QtZeroConf LIBRARY DESTINATION lib PUBLIC_HEADER DESTINATION include/QtZeroConf ) + +if(BUILD_EXAMPLE) + add_subdirectory(example) +endif() diff --git a/README.md b/README.md index 6847cd8..ce5285d 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,9 @@ QZeroConf can be built directly into your project if your project is [LGPL3](htt Use `BUILD_SHARED_LIBS` to control whether QZeroConf should be built as static (`-DBUILD_SHARED_LIBS=OFF`) or as shared (`-DBUILD_SHARED_LIBS=ON`) library. The default is `OFF`. +You can also build the included example project by setting `BUILD_EXAMPLE` to `ON`. +The default for this is `OFF` + ### API #### Service Publishing diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 0000000..1216105 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,25 @@ +project(QtZeroConfExample) +cmake_minimum_required(VERSION 2.8.11) + +find_package(Qt5 COMPONENTS Gui Widgets REQUIRED) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) + +# Find QtZeroConf library if we're building standalone +if(NOT TARGET QtZeroConf) + find_package(QtZeroConf CONFIG REQUIRED) +endif() + +add_executable(QtZeroConfExample + window.h + window.cpp + main.cpp +) + +target_link_libraries(QtZeroConfExample + QtZeroConf + Qt5::Gui Qt5::Widgets +)