From 5e2bd8090dfacfa577a0406bc0e845fc306f806a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= Date: Fri, 30 May 2025 18:59:39 +0200 Subject: [PATCH 1/5] [cmake] Initial CMake support --- .gitignore | 4 ++++ CMakeLists.txt | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 CMakeLists.txt diff --git a/.gitignore b/.gitignore index 3bcdda1..10e6bdc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ moc_* qrc_* imagewriter .tmp/ + +# build directory +build/ + # Compiled Object files *.slo *.lo diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6be7455 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.19) +project(Imagewriter VERSION 1.10 LANGUAGES CXX) + +find_package(Qt6 REQUIRED + COMPONENTS DBus Gui Widgets) + +qt_standard_project_setup(REQUIRES 6.2) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvisibility=hidden -fvisibility-inlines-hidden") + +qt_add_executable(imagewriter + main.cpp + MainWindow.cpp + PlatformHal.cpp + PlatformUdisks.cpp + Platform.cpp + PlatformUdisks2.cpp + udisks2_interface.cpp + udisks2_mountpoints_interface.cpp + imagewriter.qrc +) + +target_compile_definitions(imagewriter PUBLIC "APP_VERSION=\"${CMAKE_PROJECT_VERSION}\"") +target_compile_definitions(imagewriter PUBLIC USEUDISKS2) + +target_link_libraries(imagewriter + PRIVATE Qt6::DBus Qt6::Gui Qt6::Widgets) From df184548b223c38077eaa0178f356e674b9eeb52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= Date: Sat, 31 May 2025 16:35:39 +0200 Subject: [PATCH 2/5] [qmake] Emit warning message that qmake support is deprecated --- imagewriter.pro | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/imagewriter.pro b/imagewriter.pro index c3b98cc..fa57e94 100644 --- a/imagewriter.pro +++ b/imagewriter.pro @@ -1,6 +1,6 @@ -# ##################################################################### -# Automatically generated by qmake (2.01a) Thu Oct 23 14:13:58 2008 -# ##################################################################### +# print deprecation warning +message("qmake support is deprecated and will be removed in future release. Use CMake instead.") + unix:isEmpty(PREFIX):PREFIX = /usr/local TEMPLATE = app TARGET = imagewriter From 986f747dd25a5f9702bf46e8cbf38f3547deddf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= Date: Sat, 31 May 2025 19:55:55 +0200 Subject: [PATCH 3/5] [cmake] Support both Qt6 and Qt5 --- CMakeLists.txt | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6be7455..f29dd75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,32 @@ cmake_minimum_required(VERSION 3.19) project(Imagewriter VERSION 1.10 LANGUAGES CXX) -find_package(Qt6 REQUIRED +# try to find Qt6 +find_package(Qt6 6.2 COMPONENTS DBus Gui Widgets) - -qt_standard_project_setup(REQUIRES 6.2) +if (Qt6_FOUND) + message(STATUS "Using Qt6") + qt_standard_project_setup() +else() + # try to fall back to Qt5 + find_package(Qt5 5.15 + COMPONENTS DBus Gui Widgets) + if (Qt5_FOUND) + message(STATUS "Using Qt5") + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTORCC ON) + set(CMAKE_AUTOUIC ON) + else() + message(FATAL_ERROR "Qt6 and Qt5 not found") + endif() +endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvisibility=hidden -fvisibility-inlines-hidden") -qt_add_executable(imagewriter +add_executable(imagewriter main.cpp MainWindow.cpp PlatformHal.cpp @@ -27,4 +42,4 @@ target_compile_definitions(imagewriter PUBLIC "APP_VERSION=\"${CMAKE_PROJECT_VER target_compile_definitions(imagewriter PUBLIC USEUDISKS2) target_link_libraries(imagewriter - PRIVATE Qt6::DBus Qt6::Gui Qt6::Widgets) + PRIVATE Qt::DBus Qt::Gui Qt::Widgets) From 3f40156aeaa9b760aeb90f948eed39d3b75a3cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= Date: Sun, 8 Jun 2025 23:59:15 +0200 Subject: [PATCH 4/5] [cmake] Add handling of HAL library --- CMakeLists.txt | 19 +++++++++++++++++-- README.md | 12 ++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f29dd75..6d73612 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,8 +38,23 @@ add_executable(imagewriter imagewriter.qrc ) +include(FindPackageHandleStandardArgs) +if(USEHAL) + # try to find HAL + find_path(HAL_INCLUDE_DIR NAMES hal/libhal.h) + find_library(HAL_LIBRARY NAMES hal) + find_package_handle_standard_args(HAL REQUIRED_VARS HAL_INCLUDE_DIR HAL_LIBRARY) + target_compile_definitions(imagewriter PUBLIC USEHAL) +elseif(USEUDISKS) + target_compile_definitions(imagewriter PUBLIC USEUDISKS) +else() # default to USEUDISKS2 + target_compile_definitions(imagewriter PUBLIC USEUDISKS2) +endif() + target_compile_definitions(imagewriter PUBLIC "APP_VERSION=\"${CMAKE_PROJECT_VERSION}\"") -target_compile_definitions(imagewriter PUBLIC USEUDISKS2) target_link_libraries(imagewriter - PRIVATE Qt::DBus Qt::Gui Qt::Widgets) + PRIVATE Qt::DBus Qt::Gui Qt::Widgets ${HAL_LIBRARY}) + +target_include_directories(imagewriter + PRIVATE HAL_INCLUDE_DIR UDISKS_INCLUDE_DIR UDISKS2_INCLUDE_DIR) diff --git a/README.md b/README.md index 33ef4c2..b598068 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,26 @@ In order to compile, run % qmake DEFINES=USEHAL imagewriter.pro +or + + % cmake -DUSEHAL=ON .. + ** udisks1 ** % qmake DEFINES=USEUDISKS imagewriter.pro +or + + % cmake -DUSEUDISKS=ON .. + ** udisks2 ** % qmake DEFINES=USEUDISKS2 imagewriter.pro +or + + % cmake -DUSEUDISKS2=ON .. + Failing to specify the define will likely not work out. Then run From 320919b694ef33392971acbfd1dc47a70b14e449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= Date: Mon, 9 Jun 2025 16:47:27 +0200 Subject: [PATCH 5/5] [cmake] Add installation --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d73612..091c970 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,3 +58,11 @@ target_link_libraries(imagewriter target_include_directories(imagewriter PRIVATE HAL_INCLUDE_DIR UDISKS_INCLUDE_DIR UDISKS2_INCLUDE_DIR) + +# install +include(GNUInstallDirs) +install(TARGETS imagewriter + RUNTIME + RESOURCE imagewriter.qrc) +install(DIRECTORY icons DESTINATION "${DATAROOTDIR}/icons/hicolor/") +install(FILES imagewriter.1 DESTINATION ${mandir})