set(COPYRIGHT_YEAR "2025")
set(COPYRIGHT_HOLDERS "The Monero Project")
-cmake_policy(SET CMP0074 NEW)
+# Policies for better dependency finding
+cmake_policy(SET CMP0074 NEW) # find_package() uses <PackageName>_ROOT variables
if(POLICY CMP0148)
- cmake_policy(SET CMP0148 OLD)
+ cmake_policy(SET CMP0148 OLD) # Python modules
endif()
# Configurable options
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MINGW_FLAG} ${CXX_SECURITY_FLAGS} ${ANTI_AV_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LD_SECURITY_FLAGS} ${STATIC_FLAGS}")
+# Ensure src sees all flags
add_subdirectory(src)
configure_file("${CMAKE_SOURCE_DIR}/contrib/installers/windows/setup.nsi.in" "${CMAKE_SOURCE_DIR}/contrib/installers/windows/setup.nsi" @ONLY)
Network
Svg
WebSockets
- SvgWidgets
)
+# Qt6 has SvgWidgets separate, Qt5 includes it in Svg
+set(QT6_COMPONENTS ${QT_COMPONENTS} SvgWidgets)
+
if (WITH_SCANNER)
list(APPEND QT_COMPONENTS
Multimedia
MultimediaWidgets)
+ list(APPEND QT6_COMPONENTS Multimedia MultimediaWidgets)
endif()
-IF (UNIX AND NOT APPLE)
- list(APPEND QT_COMPONENTS WaylandClient)
+if (UNIX AND NOT APPLE)
+ list(APPEND QT6_COMPONENTS WaylandClient)
endif()
-find_package(Qt6 REQUIRED COMPONENTS ${QT_COMPONENTS})
+# 1. Try to find complete Qt 6 (Quietly)
+find_package(Qt6 COMPONENTS ${QT6_COMPONENTS} QUIET)
+
+if (Qt6_FOUND)
+ message(STATUS "Qt 6 found! Building with Qt ${Qt6_VERSION}")
+ set(QT_MAJOR_VERSION 6)
+ set(QT_NAMESPACE "Qt6")
+else()
+ # 2. Fallback to Qt 5
+ message(STATUS "Qt 6 not found (or missing modules). Falling back to Qt 5...")
+ set(QT_MAJOR_VERSION 5)
+ set(QT_NAMESPACE "Qt5")
+ find_package(Qt5 REQUIRED COMPONENTS ${QT_COMPONENTS})
+endif()
if (CHECK_UPDATES)
add_subdirectory(openpgp)
endif()
-qt_add_resources(RESOURCES assets.qrc assets_tor.qrc assets_docs.qrc)
+if (QT_MAJOR_VERSION EQUAL 6)
+ qt_add_resources(RESOURCES assets.qrc assets_tor.qrc assets_docs.qrc)
+else()
+ qt5_add_resources(RESOURCES assets.qrc assets_tor.qrc assets_docs.qrc)
+endif()
# Compile source files (.h/.cpp)
file(GLOB SOURCE_FILES
${Boost_LIBRARIES}
${OPENSSL_LIBRARIES}
${EXTRA_LIBRARIES}
- Qt::Core
- Qt::Widgets
- Qt::Gui
- Qt::Network
- Qt::Svg
- Qt::WebSockets
- Qt::SvgWidgets
+ ${QT_NAMESPACE}::Core
+ ${QT_NAMESPACE}::Widgets
+ ${QT_NAMESPACE}::Gui
+ ${QT_NAMESPACE}::Network
+ ${QT_NAMESPACE}::Svg
+ ${QT_NAMESPACE}::WebSockets
Threads::Threads
${QRENCODE_LIBRARY}
${POLYSEED_LIBRARY}
${ZLIB_LIBRARIES}
)
+# Qt6 separates SvgWidgets; Qt5 bundles it. Link explicitly if Qt6.
+if (QT_MAJOR_VERSION EQUAL 6)
+ target_link_libraries(feather PRIVATE Qt6::SvgWidgets)
+endif()
+
if(CHECK_UPDATES)
target_link_libraries(feather PRIVATE openpgp)
endif()
endif()
target_link_libraries(feather PRIVATE
- Qt::Multimedia
- Qt::MultimediaWidgets
+ ${QT_NAMESPACE}::Multimedia
+ ${QT_NAMESPACE}::MultimediaWidgets
${ZXING_LIBRARIES}
${BCUR_LIBRARY}
)
endif()
if(UNIX AND NOT APPLE)
- target_link_libraries(feather PRIVATE Qt::WaylandClient)
+ if (QT_MAJOR_VERSION EQUAL 6)
+ target_link_libraries(feather PRIVATE Qt6::WaylandClient)
+ endif()
endif()
-if(STATIC AND APPLE)
+if(STATIC AND APPLE AND QT_MAJOR_VERSION EQUAL 6)
target_link_libraries(feather PRIVATE Qt6::QDarwinCameraPermissionPlugin)
endif()
-if(STATIC AND UNIX AND NOT APPLE)
+if(STATIC AND UNIX AND NOT APPLE AND QT_MAJOR_VERSION EQUAL 6)
target_link_libraries(feather PRIVATE Qt6::QComposePlatformInputContextPlugin)
target_link_libraries(feather PRIVATE Qt6::QWaylandIntegrationPlugin)
endif()
file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/feather.app/Contents/Resources/" )
endif()
-qt_finalize_executable(feather)
+if (COMMAND qt_finalize_executable)
+ qt_finalize_executable(feather)
+endif()