From 42e19dcb6b7c07460f05aa1d4586d5c76236c6d0 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi 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( ptr ); + v.setValue( QSharedPointer(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)