Add Qt 6 build support

The Core5Compat module is still required for QTextCodec and some
difficult remaining QRegExp -> QRegularExpression migrations.
This commit is contained in:
Tobias Junghans 2021-05-10 09:52:45 +02:00 committed by Albert Astals Cid
parent 0c3db8a062
commit 2c3992f075
21 changed files with 145 additions and 36 deletions

View File

@ -19,6 +19,7 @@ if(POLICY CMP0042)
cmake_policy(SET CMP0042 OLD)
endif()
option(QT6 "Build with Qt 6" OFF)
option(BUILD_TESTS "Create test" ON)
option(BUILD_TOOLS "Compile mozcerts and qcatool" ON)
set(BUILD_PLUGINS "auto" CACHE STRING "Plugins for building (also possible values: none, all and auto)")
@ -43,15 +44,27 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
# Do not automatically link Qt executables to qtmain target on Windows.
# QCA exucatables use console mode only. Not need to link against qtmain.lib.
set(Qt5_NO_LINK_QTMAIN ON)
find_package(Qt5 5.9 REQUIRED Core)
if(QT6)
message(STATUS "Building Qt 6 version")
find_package(Qt6 COMPONENTS Core Test Core5Compat REQUIRED)
else()
message(STATUS "Building Qt 5 version")
set(Qt5_NO_LINK_QTMAIN ON)
find_package(Qt5 5.14 REQUIRED Core)
endif()
set(CMAKE_AUTOMOC ON)
include(QcaMacro)
include(GNUInstallDirs)
setup_qt5_dirs()
set(QCA_QT_PC_VERSION "Qt5Core")
set(QCA_SUFFIX "qt5")
setup_qt_dirs()
if(QT6)
set(QCA_QT_PC_VERSION "Qt6Core")
set(QCA_SUFFIX "qt6")
else()
set(QCA_QT_PC_VERSION "Qt5Core")
set(QCA_SUFFIX "qt5")
endif()
# QCA can be shared but plugins will be static
# if Qt is static.
@ -341,9 +354,11 @@ set( qca_HEADERS ${private_HEADERS} ${public_HEADERS} )
include_directories("${qca_INCLUDEDIR}/QtCrypto")
configure_file("crypto.prf.cmake" "${CMAKE_BINARY_DIR}/mkspecs/features/crypto.prf" @ONLY)
if(NOT DEVELOPER_MODE)
install(FILES "${CMAKE_BINARY_DIR}/mkspecs/features/crypto.prf" DESTINATION "${QCA_FEATURE_INSTALL_DIR}")
if(NOT QT6)
configure_file("crypto.prf.cmake" "${CMAKE_BINARY_DIR}/mkspecs/features/crypto.prf" @ONLY)
if(NOT DEVELOPER_MODE)
install(FILES "${CMAKE_BINARY_DIR}/mkspecs/features/crypto.prf" DESTINATION "${QCA_FEATURE_INSTALL_DIR}")
endif()
endif()
configure_file(man/qcatool.1 "${CMAKE_BINARY_DIR}/share/man/man1/${QCA_TOOL_NAME}.1" COPYONLY)
@ -455,8 +470,13 @@ if(NOT DEVELOPER_MODE)
if(NOT QCA_SUFFIX)
message("${ESCAPE}[31mYou don't have QCA_SUFFIX set. Please note that the recommended way of")
message("building Qt5 version of qca for Linux distributions is to set")
message("QCA_SUFFIX to qt5 (-DQCA_SUFFIX=qt5).")
if(QT6)
message("building Qt6 version of qca for Linux distributions is to set")
message("QCA_SUFFIX to qt6 (-DQCA_SUFFIX=qt6).")
else()
message("building Qt5 version of qca for Linux distributions is to set")
message("QCA_SUFFIX to qt5 (-DQCA_SUFFIX=qt5).")
endif()
message("${ESCAPE}[0m")
endif()
endif()

View File

@ -1,6 +1,10 @@
MACRO(SETUP_QT5_DIRS)
GET_TARGET_PROPERTY(QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} LOCATION)
MACRO(SETUP_QT_DIRS)
if(QT6)
GET_TARGET_PROPERTY(QMAKE_EXECUTABLE Qt6::qmake LOCATION)
else()
GET_TARGET_PROPERTY(QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} LOCATION)
endif()
EXEC_PROGRAM( ${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_LIBS" OUTPUT_VARIABLE QT_LIBRARY_DIR )
EXEC_PROGRAM( ${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_PREFIX" OUTPUT_VARIABLE QT_PREFIX_DIR )
EXEC_PROGRAM( ${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_PLUGINS" OUTPUT_VARIABLE QT_PLUGINS_DIR )
@ -10,7 +14,7 @@ MACRO(SETUP_QT5_DIRS)
EXEC_PROGRAM( ${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_DATA" OUTPUT_VARIABLE QT_DATA_DIR )
EXEC_PROGRAM( ${QMAKE_EXECUTABLE} ARGS "-query QT_HOST_DATA" OUTPUT_VARIABLE QT_ARCHDATA_DIR )
SET( QT_MKSPECS_DIR "${QT_ARCHDATA_DIR}/mkspecs" )
ENDMACRO(SETUP_QT5_DIRS)
ENDMACRO(SETUP_QT_DIRS)
macro(set_enabled_plugin PLUGIN ENABLED)
# To nice looks
@ -50,7 +54,11 @@ endmacro(target_link_qca_libraries)
# it used to build unittests
macro(target_link_qca_test_libraries TARGET)
target_link_qca_libraries(${TARGET})
target_link_libraries(${TARGET} Qt5::Test)
if(QT6)
target_link_libraries(${TARGET} Qt6::Test)
else()
target_link_libraries(${TARGET} Qt5::Test)
endif()
endmacro(target_link_qca_test_libraries)
# it used to build unittests

View File

@ -1,5 +1,9 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
find_package(Qt5 REQUIRED Network)
if(QT6)
find_package(Qt6 REQUIRED Network)
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
find_package(Qt5 REQUIRED Network)
endif()
add_subdirectory(aes-cmac)
add_subdirectory(base64test)
add_subdirectory(certtest)

View File

@ -3,4 +3,8 @@ set(saslclient_bin_SRCS saslclient.cpp)
add_executable(saslclient ${saslclient_bin_SRCS})
target_link_qca_libraries(saslclient)
target_link_libraries(saslclient Qt5::Network)
if(QT6)
target_link_libraries(saslclient Qt6::Network)
else()
target_link_libraries(saslclient Qt5::Network)
endif()

View File

@ -3,4 +3,8 @@ set(saslserver_bin_SRCS saslserver.cpp)
add_executable(saslserver ${saslserver_bin_SRCS})
target_link_qca_libraries(saslserver)
target_link_libraries(saslserver Qt5::Network)
if(QT6)
target_link_libraries(saslserver Qt6::Network)
else()
target_link_libraries(saslserver Qt5::Network)
endif()

View File

@ -3,4 +3,8 @@ set(sslservtest_bin_SRCS sslservtest.cpp)
add_executable(sslservtest ${sslservtest_bin_SRCS})
target_link_qca_libraries(sslservtest)
target_link_libraries(sslservtest Qt5::Network)
if(QT6)
target_link_libraries(sslservtest Qt6::Network)
else()
target_link_libraries(sslservtest Qt5::Network)
endif()

View File

@ -3,4 +3,8 @@ set(ssltest_bin_SRCS ssltest.cpp)
add_executable(ssltest ${ssltest_bin_SRCS})
target_link_qca_libraries(ssltest)
target_link_libraries(ssltest Qt5::Network)
if(QT6)
target_link_libraries(ssltest Qt6::Network)
else()
target_link_libraries(ssltest Qt5::Network)
endif()

View File

@ -1,4 +1,8 @@
add_executable(tlssocket tlssocket.cpp main.cpp)
target_link_qca_libraries(tlssocket)
target_link_libraries(tlssocket Qt5::Network)
if(QT6)
target_link_libraries(tlssocket Qt6::Network)
else()
target_link_libraries(tlssocket Qt5::Network)
endif()

View File

@ -15,7 +15,11 @@ if(BOTAN_FOUND)
set_property(TARGET qca-botan PROPERTY SUFFIX ".dylib")
endif()
target_link_libraries(qca-botan Qt5::Core ${QCA_LIB_NAME} PkgConfig::BOTAN)
if(QT6)
target_link_libraries(qca-botan Qt6::Core ${QCA_LIB_NAME} PkgConfig::BOTAN)
else()
target_link_libraries(qca-botan Qt5::Core ${QCA_LIB_NAME} PkgConfig::BOTAN)
endif()
if(NOT DEVELOPER_MODE)
install(TARGETS qca-botan

View File

@ -15,7 +15,11 @@ if(SASL2_FOUND)
set_property(TARGET qca-cyrus-sasl PROPERTY SUFFIX ".dylib")
endif()
target_link_libraries(qca-cyrus-sasl Qt5::Core ${QCA_LIB_NAME} ${SASL2_LIBRARIES})
if(QT6)
target_link_libraries(qca-cyrus-sasl Qt6::Core ${QCA_LIB_NAME} ${SASL2_LIBRARIES})
else()
target_link_libraries(qca-cyrus-sasl Qt5::Core ${QCA_LIB_NAME} ${SASL2_LIBRARIES})
endif()
if(NOT DEVELOPER_MODE)
install(TARGETS qca-cyrus-sasl

View File

@ -25,7 +25,11 @@ if(LIBGCRYPT_FOUND)
set_property(TARGET qca-gcrypt PROPERTY SUFFIX ".dylib")
endif()
target_link_libraries(qca-gcrypt Qt5::Core ${QCA_LIB_NAME} ${LIBGCRYPT_LIBRARIES})
if(QT6)
target_link_libraries(qca-gcrypt Qt6::Core ${QCA_LIB_NAME} ${LIBGCRYPT_LIBRARIES})
else()
target_link_libraries(qca-gcrypt Qt5::Core ${QCA_LIB_NAME} ${LIBGCRYPT_LIBRARIES})
endif()
if(NOT DEVELOPER_MODE)
install(TARGETS qca-gcrypt

View File

@ -42,7 +42,11 @@ if(APPLE AND ${PLUGIN_TYPE} STREQUAL "MODULE")
endif()
include_directories(gpgproc)
target_link_libraries(qca-gnupg Qt5::Core ${QCA_LIB_NAME})
if(QT6)
target_link_libraries(qca-gnupg Qt6::Core ${QCA_LIB_NAME})
else()
target_link_libraries(qca-gnupg Qt5::Core ${QCA_LIB_NAME})
endif()
if (WIN32)
target_link_libraries(qca-gnupg advapi32)

View File

@ -11,7 +11,12 @@ endif()
add_definitions(${LOGGERH_DEFINITIONS})
include_directories(${LOGGERH_INCLUDE_DIR})
target_link_libraries(qca-logger Qt5::Core)
if(QT6)
target_link_libraries(qca-logger Qt6::Core)
else()
target_link_libraries(qca-logger Qt5::Core)
endif()
target_link_libraries(qca-logger ${QCA_LIB_NAME})
if(NOT DEVELOPER_MODE)

View File

@ -10,7 +10,11 @@ if(NSS_FOUND)
set(QCA_NSS_SOURCES qca-nss.cpp)
add_library(qca-nss ${PLUGIN_TYPE} ${QCA_NSS_SOURCES})
target_link_libraries(qca-nss Qt5::Core ${QCA_LIB_NAME} PkgConfig::NSS)
if(QT6)
target_link_libraries(qca-nss Qt6::Core ${QCA_LIB_NAME} PkgConfig::NSS)
else()
target_link_libraries(qca-nss Qt5::Core ${QCA_LIB_NAME} PkgConfig::NSS)
endif()
if(APPLE AND ${PLUGIN_TYPE} STREQUAL "MODULE")
set_property(TARGET qca-nss PROPERTY SUFFIX ".dylib")

View File

@ -55,7 +55,11 @@ if(OPENSSL_FOUND)
set_property(TARGET qca-ossl PROPERTY SUFFIX ".dylib")
endif()
target_link_libraries(qca-ossl Qt5::Core)
if(QT6)
target_link_libraries(qca-ossl Qt6::Core)
else()
target_link_libraries(qca-ossl Qt5::Core)
endif()
target_link_libraries(qca-ossl ${QCA_LIB_NAME})
target_link_libraries(qca-ossl OpenSSL::SSL OpenSSL::Crypto)

View File

@ -20,7 +20,11 @@ if(OPENSSL_FOUND AND PKCS11H_FOUND)
add_definitions(${PKCS11H_CFLAGS_OTHER})
include_directories(${PKCS11H_INCLUDE_DIRS})
target_link_libraries(qca-pkcs11 Qt5::Core)
if(QT6)
target_link_libraries(qca-pkcs11 Qt6::Core)
else()
target_link_libraries(qca-pkcs11 Qt5::Core)
endif()
target_link_libraries(qca-pkcs11 ${QCA_LIB_NAME})
target_link_libraries(qca-pkcs11 ${PKCS11H_LDFLAGS})
if (WIN32)

View File

@ -11,7 +11,11 @@ endif()
add_definitions(${SOFTSTOREH_DEFINITIONS})
include_directories(${SOFTSTOREH_INCLUDE_DIR})
target_link_libraries(qca-softstore Qt5::Core)
if(QT6)
target_link_libraries(qca-softstore Qt6::Core)
else()
target_link_libraries(qca-softstore Qt5::Core)
endif()
target_link_libraries(qca-softstore ${QCA_LIB_NAME})
if(NOT DEVELOPER_MODE)

View File

@ -5,7 +5,11 @@ IF (WIN32)
ADD_LIBRARY (qca-wincrypto MODULE ${QCA_WINCRYPTO_SOURCES})
# use win32 includes
TARGET_LINK_LIBRARIES (qca-wincrypto Qt5::core)
if(QT6)
target_link_libraries(qca-wincrypto Qt6::Core)
else()
target_link_libraries(qca-wincrypto Qt5::Core)
endif()
TARGET_LINK_LIBRARIES (qca-wincrypto ${QCA_LIB_NAME})
TARGET_LINK_LIBRARIES (qca-wincrypto advapi32)

View File

@ -124,7 +124,11 @@ ENDIF(WIN32)
SET( SOURCES ${SOURCES} ${botan_SOURCES})
add_library(${QCA_LIB_NAME} ${SOURCES} ${public_HEADERS})
TARGET_LINK_LIBRARIES(${QCA_LIB_NAME} Qt5::Core)
if(QT6)
target_link_libraries(${QCA_LIB_NAME} Qt6::Core Qt6::Core5Compat)
else()
target_link_libraries(${QCA_LIB_NAME} Qt5::Core)
endif()
if(WIN32)
TARGET_LINK_LIBRARIES(${QCA_LIB_NAME} crypt32 ws2_32)

View File

@ -1,8 +1,12 @@
ENABLE_TESTING()
find_package(Qt5 REQUIRED Test)
if(QT6)
find_package(Qt6 REQUIRED Test)
else()
find_package(Qt5 REQUIRED Test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
endif()
# QTEST_MAIN is using QApplication when QT_GUI_LIB is defined
remove_definitions(-DQT_GUI_LIB)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
add_subdirectory(base64unittest)
add_subdirectory(bigintunittest)

View File

@ -1,4 +1,8 @@
find_package(Qt5 REQUIRED Network)
if(QT6)
find_package(Qt6 COMPONENTS Network REQUIRED)
else()
find_package(Qt5 REQUIRED Network)
endif()
ENABLE_TESTING()
@ -7,7 +11,11 @@ set(veloxunittest_bin_SRCS veloxunittest.cpp)
add_executable(veloxunittest ${veloxunittest_bin_SRCS} )
target_link_qca_test_libraries(veloxunittest)
target_link_libraries(veloxunittest Qt5::Network)
if(QT6)
target_link_libraries(veloxunittest Qt6::Network)
else()
target_link_libraries(veloxunittest Qt5::Network)
endif()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/root.crt ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/root.crt COPYONLY)