From 42e19dcb6b7c07460f05aa1d4586d5c76236c6d0 Mon Sep 17 00:00:00 2001
From: Tuomas Nurmi <tuomas@norsumanageri.org>
Date: Mon, 8 Jul 2024 17:03:32 +0300
Subject: [PATCH] Minimal changes to make Qt6 compilation possible

Untested. Compiles, with a bunch of deprecation warnings.
There's likely room for improvement all around.
---
 CMakeLists.txt       | 24 +++++++++---------------
 libmygpo-qt.pc.in    |  1 -
 src/CMakeLists.txt   |  4 ++--
 src/DeviceList.cpp   |  2 +-
 tests/CMakeLists.txt | 12 +++++++++---
 5 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8a79ddc..920e841 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,10 +5,10 @@ project( libmygpo-qt )
 set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII" )
 
-option(BUILD_WITH_QT4 "Build libmygpo-qt with Qt4" OFF)
+option(BUILD_WITH_QT6 "Build libmygpo-qt with Qt6" OFF)
 option(MYGPO_BUILD_TESTS "Build all unit tests" ON)
 
-if( NOT BUILD_WITH_QT4 )
+if( NOT BUILD_WITH_QT6 )
     if( MYGPO_BUILD_TESTS )
         find_package(Qt5 REQUIRED COMPONENTS Core Network Test CONFIG)
     else()
@@ -23,27 +23,21 @@ if( NOT BUILD_WITH_QT4 )
     # pkg-config names of QtCore and QtNetwork are Qt5Core and Qt5Network for
     # Qt5
     set(MYGPO_QT_MAJOR_VERSION "5")
-    set(MYGPO_QT4_QJSON_DEP "")
 else()
-    message(STATUS "Could not find Qt5, searching for Qt4 instead...")
-    message(STATUS "Qt4 Support is deprecated, building with Qt4 is no longer officially supported")
+    message(STATUS "Could not find Qt5, searching for Qt6 instead...")
     if( MYGPO_BUILD_TESTS )
-        find_package( Qt4 COMPONENTS QtCore QtNetwork QtTest REQUIRED )
+        find_package( Qt6 COMPONENTS Core Network Test REQUIRED )
     else( MYGPO_BUILD_TESTS )
-        find_package( Qt4 COMPONENTS QtCore QtNetwork REQUIRED )
+        find_package( Qt6 COMPONENTS Core Network REQUIRED )
     endif()
-    set( QT_DONT_USE_QTGUI TRUE )
-    include( ${QT_USE_FILE} )
+    set(MYGPO_QT_VERSION_SUFFIX 6)
 
     macro(qt_wrap_cpp)
-        qt4_wrap_cpp(${ARGN})
+        qt6_wrap_cpp(${ARGN})
     endmacro()
 
-    set(MYGPO_QT_MAJOR_VERSION "")
-    set(MYGPO_QT4_QJSON_DEP "Requires.private: QJson")
+    set(MYGPO_QT_MAJOR_VERSION "6")
 
-    # QJson is only required for Qt4
-    find_package(QJSON REQUIRED)
 endif()
 
 # Don't use absolute path in Mygpo-qtTargets-$buildType.cmake
@@ -51,7 +45,7 @@ endif()
 # set(QT_USE_IMPORTED_TARGETS TRUE)
 
 set( MYGPO_QT_VERSION_MAJOR "1" )
-set( MYGPO_QT_VERSION_MINOR "1" )
+set( MYGPO_QT_VERSION_MINOR "2" )
 set( MYGPO_QT_VERSION_PATCH "0" )
 set( MYGPO_QT_VERSION "${MYGPO_QT_VERSION_MAJOR}.${MYGPO_QT_VERSION_MINOR}.${MYGPO_QT_VERSION_PATCH}" )
 
diff --git a/libmygpo-qt.pc.in b/libmygpo-qt.pc.in
index 8403e48..520bd52 100644
--- a/libmygpo-qt.pc.in
+++ b/libmygpo-qt.pc.in
@@ -8,6 +8,5 @@ Description: libmygpo-qt is a C++/Qt Library that wraps the gpodder.net WebAPI
 URL: http://wiki.gpodder.org/wiki/Libmygpo-qt
 Version: @MYGPO_QT_VERSION@
 Requires: Qt@MYGPO_QT_MAJOR_VERSION@Core Qt@MYGPO_QT_MAJOR_VERSION@Network
-@MYGPO_QT4_QJSON_DEP@
 Libs: -L${libdir} -lmygpo-qt@MYGPO_QT_VERSION_SUFFIX@
 Cflags: -I${includedir}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 253e81e..9d1989c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -81,10 +81,10 @@ add_library( ${MYGPO_QT_TARGET_NAME} SHARED ${LIBMYGPO_QT_SRC} ${LIBMYGPO_QT_MOC
 
 set_target_properties( ${MYGPO_QT_TARGET_NAME} PROPERTIES VERSION ${MYGPO_QT_VERSION} SOVERSION ${MYGPO_QT_SONAME} DEFINE_SYMBOL MYGPO_MAKEDLL)
 
-if( NOT BUILD_WITH_QT4 )
+if( NOT BUILD_WITH_QT6 )
     target_link_libraries( ${MYGPO_QT_TARGET_NAME} Qt5::Core Qt5::Network)
 else()
-    target_link_libraries( ${MYGPO_QT_TARGET_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QJSON_LIBRARIES})
+    target_link_libraries( ${MYGPO_QT_TARGET_NAME} Qt6::Core Qt6::Network)
 endif()
 
 install( TARGETS ${MYGPO_QT_TARGET_NAME} EXPORT ${MYGPO_QT_TARGET_NAME}Export DESTINATION ${LIB_INSTALL_DIR} )
diff --git a/src/DeviceList.cpp b/src/DeviceList.cpp
index e972318..92e29cc 100644
--- a/src/DeviceList.cpp
+++ b/src/DeviceList.cpp
@@ -64,7 +64,7 @@ bool DeviceListPrivate::parse( const QVariant& data )
         DevicePtr ptr( new Device( var, this ) );
         m_devicesList.append( ptr );
         QVariant v;
-        v.setValue<DevicePtr>( ptr );
+        v.setValue<DevicePtr>( QSharedPointer<mygpo::Device>(ptr) );
         devList.append( v );
     }
     m_devices = devList;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 4f77158..ce63689 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -11,14 +11,18 @@ include_directories( ${QJSON_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CU
 
 # UrlBuilder library
 add_library( UrlBuilder ${TESTOBJECTS_SRCDIR}/UrlBuilder.cpp ${TESTOBJECTS_SRCDIR}/Config.cpp )
-if( NOT BUILD_WITH_QT4 )
+if( NOT BUILD_WITH_QT6 )
     target_link_libraries( UrlBuilder Qt5::Core )
+else()
+    target_link_libraries( UrlBuilder Qt6::Core )
 endif()
 # JSONCreator library
 QT_WRAP_CPP(LIBMYGPO_QT_MOC_SRC ${TESTOBJECTS_SRCDIR}/EpisodeAction.h ${TESTOBJECTS_SRCDIR}/EpisodeAction_p.h )
 add_library( JsonCreator ${TESTOBJECTS_SRCDIR}/JsonCreator.cpp ${TESTOBJECTS_SRCDIR}/EpisodeAction.cpp ${TESTOBJECTS_SRCDIR}/qjsonwrapper/Json.cpp ${LIBMYGPO_QT_MOC_SRC})
-if( NOT BUILD_WITH_QT4 )
+if( NOT BUILD_WITH_QT6 )
     target_link_libraries( JsonCreator Qt5::Core Qt5::Network )
+else()
+    target_link_libraries( JsonCreator Qt6::Core Qt6::Network )
 endif()
 
 set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
@@ -29,8 +33,10 @@ macro(add_libmygpo_test _source)
     add_executable(${_name} ${_source} ${${_name}_MOC_SRC})
     target_link_libraries(${_name} ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTNETWORK_LIBRARY})
     add_test(${_name}-test ${EXECUTABLE_OUTPUT_PATH}/${_name})
-    if( NOT BUILD_WITH_QT4 )
+    if( NOT BUILD_WITH_QT6 )
         target_link_libraries(${_name} Qt5::Network Qt5::Test)
+    else()
+        target_link_libraries(${_name} Qt6::Network Qt6::Test)
     endif()
 endmacro(add_libmygpo_test)
 
