diff --git a/CMakeLists.txt b/CMakeLists.txt index f8eee01e..643613d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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() diff --git a/cmake/modules/QcaMacro.cmake b/cmake/modules/QcaMacro.cmake index 5d86e472..80af6e84 100644 --- a/cmake/modules/QcaMacro.cmake +++ b/cmake/modules/QcaMacro.cmake @@ -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 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a8b16041..026d2c3d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -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) diff --git a/examples/saslclient/CMakeLists.txt b/examples/saslclient/CMakeLists.txt index 958a242f..90ca336d 100644 --- a/examples/saslclient/CMakeLists.txt +++ b/examples/saslclient/CMakeLists.txt @@ -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() diff --git a/examples/saslserver/CMakeLists.txt b/examples/saslserver/CMakeLists.txt index f4e871d5..cdc32f64 100644 --- a/examples/saslserver/CMakeLists.txt +++ b/examples/saslserver/CMakeLists.txt @@ -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() diff --git a/examples/sslservtest/CMakeLists.txt b/examples/sslservtest/CMakeLists.txt index a65b5484..43dc667e 100644 --- a/examples/sslservtest/CMakeLists.txt +++ b/examples/sslservtest/CMakeLists.txt @@ -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() diff --git a/examples/ssltest/CMakeLists.txt b/examples/ssltest/CMakeLists.txt index c3fececa..ddce01fc 100644 --- a/examples/ssltest/CMakeLists.txt +++ b/examples/ssltest/CMakeLists.txt @@ -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() diff --git a/examples/tlssocket/CMakeLists.txt b/examples/tlssocket/CMakeLists.txt index e3f40220..2e856a30 100644 --- a/examples/tlssocket/CMakeLists.txt +++ b/examples/tlssocket/CMakeLists.txt @@ -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() diff --git a/plugins/qca-botan/CMakeLists.txt b/plugins/qca-botan/CMakeLists.txt index d6837d0d..0777fe17 100644 --- a/plugins/qca-botan/CMakeLists.txt +++ b/plugins/qca-botan/CMakeLists.txt @@ -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 diff --git a/plugins/qca-cyrus-sasl/CMakeLists.txt b/plugins/qca-cyrus-sasl/CMakeLists.txt index 160af7c8..efa7ecab 100644 --- a/plugins/qca-cyrus-sasl/CMakeLists.txt +++ b/plugins/qca-cyrus-sasl/CMakeLists.txt @@ -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 diff --git a/plugins/qca-gcrypt/CMakeLists.txt b/plugins/qca-gcrypt/CMakeLists.txt index f01e8c2a..b17f5c57 100644 --- a/plugins/qca-gcrypt/CMakeLists.txt +++ b/plugins/qca-gcrypt/CMakeLists.txt @@ -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 diff --git a/plugins/qca-gnupg/CMakeLists.txt b/plugins/qca-gnupg/CMakeLists.txt index cbe33b6f..74dcb785 100644 --- a/plugins/qca-gnupg/CMakeLists.txt +++ b/plugins/qca-gnupg/CMakeLists.txt @@ -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) diff --git a/plugins/qca-logger/CMakeLists.txt b/plugins/qca-logger/CMakeLists.txt index 9f8b4349..c635ed91 100644 --- a/plugins/qca-logger/CMakeLists.txt +++ b/plugins/qca-logger/CMakeLists.txt @@ -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) diff --git a/plugins/qca-nss/CMakeLists.txt b/plugins/qca-nss/CMakeLists.txt index 533d09c1..f2e5577a 100644 --- a/plugins/qca-nss/CMakeLists.txt +++ b/plugins/qca-nss/CMakeLists.txt @@ -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") diff --git a/plugins/qca-ossl/CMakeLists.txt b/plugins/qca-ossl/CMakeLists.txt index efffbb5d..4eb265a5 100644 --- a/plugins/qca-ossl/CMakeLists.txt +++ b/plugins/qca-ossl/CMakeLists.txt @@ -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) diff --git a/plugins/qca-pkcs11/CMakeLists.txt b/plugins/qca-pkcs11/CMakeLists.txt index 51758a77..1a8212d8 100644 --- a/plugins/qca-pkcs11/CMakeLists.txt +++ b/plugins/qca-pkcs11/CMakeLists.txt @@ -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) diff --git a/plugins/qca-softstore/CMakeLists.txt b/plugins/qca-softstore/CMakeLists.txt index 0896801e..426b534e 100644 --- a/plugins/qca-softstore/CMakeLists.txt +++ b/plugins/qca-softstore/CMakeLists.txt @@ -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) diff --git a/plugins/qca-wincrypto/CMakeLists.txt b/plugins/qca-wincrypto/CMakeLists.txt index 150cfd05..d56c3b63 100644 --- a/plugins/qca-wincrypto/CMakeLists.txt +++ b/plugins/qca-wincrypto/CMakeLists.txt @@ -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) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1c24a885..7d49bd95 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index a511e483..f882ecde 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -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) diff --git a/unittest/velox/CMakeLists.txt b/unittest/velox/CMakeLists.txt index f555bb77..2dbba95e 100644 --- a/unittest/velox/CMakeLists.txt +++ b/unittest/velox/CMakeLists.txt @@ -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)