@@ -39,8 +39,7 @@ set(IMAGER_VERSION_MINOR 0)
3939set (IMAGER_VERSION_PATCH 6)
4040set (IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR} .${IMAGER_VERSION_MINOR} .${IMAGER_VERSION_PATCH} " )
4141set (IMAGER_VERSION_CSV "${IMAGER_VERSION_MAJOR} ,${IMAGER_VERSION_MINOR} ,${IMAGER_VERSION_PATCH} ,0" )
42- add_definitions (-DIMAGER_VERSION_STR= "${IMAGER_VERSION_STR} " )
43- add_definitions (-DIMAGER_VERSION_CSV=${IMAGER_VERSION_CSV} )
42+ # Version definitions will be added to target later
4443set (CMAKE_INCLUDE_CURRENT_DIR ON )
4544
4645set (CMAKE_CXX_STANDARD 20)
@@ -95,11 +94,7 @@ set(XZ_ENCODERS
9594)
9695set (CREATE_LZMA_SYMLINKS OFF CACHE BOOL "" FORCE )
9796set (CREATE_XZ_SYMLINKS OFF CACHE BOOL "" FORCE )
98- FetchContent_GetProperties (xz)
99- if (NOT xz_POPULATED)
100- FetchContent_Populate (xz)
101- add_subdirectory (${xz_SOURCE_DIR} ${xz_BINARY_DIR} EXCLUDE_FROM_ALL )
102- endif ()
97+ FetchContent_MakeAvailable (xz)
10398unset (XZ_MICROLZMA_DECODER)
10499unset (XZ_MICROLZMA_ENCODER)
105100unset (XZ_LZIP_DECODER)
@@ -108,14 +103,15 @@ unset(XZ_BUILD_SHARED_LIBS)
108103unset (XZ_ENABLE_DOXYGEN)
109104unset (CREATE_LZMA_SYMLINKS)
110105unset (CREATE_XZ_SYMLINKS)
111- set (LIBLZMA_FOUND true CACHE BOOL "" FORCE )
112- set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "" FORCE )
113- set (LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "" FORCE )
114- set (LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE )
115- set (LIBLZMA_LIBRARIES ${xz_BINARY_DIR} /liblzma.a CACHE FILEPATH "" FORCE )
116- set (LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "" FORCE )
117- set (LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "" FORCE )
118- set (LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "" FORCE )
106+ # Set LZMA variables for compatibility (avoid FORCE unless necessary)
107+ set (LIBLZMA_FOUND true CACHE BOOL "LZMA library found" )
108+ set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include directory" )
109+ set (LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include directories" )
110+ set (LIBLZMA_LIBRARY liblzma CACHE STRING "LZMA library target" )
111+ set (LIBLZMA_LIBRARIES liblzma CACHE STRING "LZMA libraries" )
112+ set (LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "LZMA has auto decoder" )
113+ set (LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "LZMA has easy encoder" )
114+ set (LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "LZMA has preset" )
119115
120116# Bundled zstd
121117set (ZSTD_VERSION "1.5.7" )
@@ -130,25 +126,22 @@ set(ZSTD_BUILD_SHARED OFF CACHE BOOL "" FORCE)
130126set (ZSTD_BUILD_STATIC ON CACHE BOOL "" FORCE )
131127set (ZSTD_BUILD_TESTS OFF CACHE BOOL "" FORCE )
132128set (ZSTD_BUILD_DICTBUILDER OFF CACHE BOOL "" FORCE )
133- FetchContent_GetProperties (zstd)
134- if (NOT zstd_POPULATED)
135- FetchContent_Populate (zstd)
136- add_subdirectory (${zstd_SOURCE_DIR} /build/cmake ${zstd_BINARY_DIR} EXCLUDE_FROM_ALL )
137- endif ()
129+ FetchContent_MakeAvailable (zstd)
138130unset (ZSTD_BUILD_PROGRAMS)
139131unset (ZSTD_BUILD_SHARED)
140132unset (ZSTD_BUILD_STATIC)
141133unset (ZSTD_BUILD_TESTS)
142134unset (ZSTD_BUILD_DICTBUILDER)
143- set (ZSTD_FOUND true CACHE BOOL "" FORCE )
144- set (Zstd_VERSION ${ZSTD_VERSION} CACHE STRING "" FORCE )
145- set (Zstd_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "" FORCE )
146- set (ZSTD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "" FORCE )
147- set (Zstd_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "" FORCE )
148- set (ZSTD_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "" FORCE )
149- set (Zstd_LIBRARIES libzstd_static CACHE FILEPATH "" FORCE )
150- set (ZSTD_LIBRARIES libzstd_static CACHE FILEPATH "" FORCE )
151- set (ZSTD_LIBRARY ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-build/lib/libzstd.a CACHE FILEPATH "" FORCE )
135+ # Set ZSTD variables for compatibility
136+ set (ZSTD_FOUND true CACHE BOOL "ZSTD library found" )
137+ set (Zstd_VERSION ${ZSTD_VERSION} CACHE STRING "ZSTD version" )
138+ set (Zstd_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "ZSTD include directory" )
139+ set (ZSTD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "ZSTD include directory" )
140+ set (Zstd_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "ZSTD include directories" )
141+ set (ZSTD_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} /_deps/zstd-src/lib CACHE PATH "ZSTD include directories" )
142+ set (Zstd_LIBRARIES libzstd_static CACHE STRING "ZSTD libraries" )
143+ set (ZSTD_LIBRARIES libzstd_static CACHE STRING "ZSTD libraries" )
144+ set (ZSTD_LIBRARY libzstd_static CACHE STRING "ZSTD library target" )
152145
153146if (NOT APPLE )
154147 # Bundled zlib (Windows/Linux only)
@@ -173,16 +166,15 @@ if (NOT APPLE)
173166 unset (ZLIB_BUILD_STATIC)
174167 unset (ZLIB_BUILD_TESTS)
175168 unset (SKIP_INSTALL_ALL)
176- set (ZLIB_USE_STATIC_LIBS ON CACHE BOOL "" FORCE )
177- set (ZLIB_ROOT ${zlib_SOURCE_DIR} CACHE PATH "" FORCE )
169+ set (ZLIB_USE_STATIC_LIBS ON CACHE BOOL "Use static ZLIB" )
170+ set (ZLIB_ROOT ${zlib_SOURCE_DIR} CACHE PATH "ZLIB root directory" )
178171
179- # Create proper ZLIB::ZLIB alias target instead of IMPORTED target
180- # This avoids hardcoded paths and lets CMake handle dependencies automatically
181- set (ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} CACHE PATH "" FORCE )
182- set (ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ;${zlib_BINARY_DIR} CACHE PATH "" FORCE )
183- set (ZLIB_FOUND TRUE CACHE BOOL "" FORCE )
184- set (ZLIB_LIBRARY zlibstatic CACHE STRING "" FORCE )
185- set (ZLIB_LIBRARIES zlibstatic CACHE STRING "" FORCE )
172+ # Set ZLIB variables for compatibility
173+ set (ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} CACHE PATH "ZLIB include directory" )
174+ set (ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ;${zlib_BINARY_DIR} CACHE PATH "ZLIB include directories" )
175+ set (ZLIB_FOUND TRUE CACHE BOOL "ZLIB library found" )
176+ set (ZLIB_LIBRARY zlibstatic CACHE STRING "ZLIB library target" )
177+ set (ZLIB_LIBRARIES zlibstatic CACHE STRING "ZLIB libraries" )
186178
187179 # Create ZLIB::ZLIB alias target pointing to the actual zlibstatic target
188180 # This lets CMake handle the actual library path and build dependencies automatically
@@ -233,9 +225,9 @@ set(ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "")
233225set (ENABLE_ZSTD ON CACHE BOOL "" )
234226set (ENABLE_LZMA ON CACHE BOOL "" )
235227# Point libarchive to our bundled LZMA
236- set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "" FORCE )
237- set (LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE )
238- set (POSIX_REGEX_LIB "libc" CACHE STRING "" FORCE )
228+ set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include for libarchive" )
229+ set (LIBLZMA_LIBRARY liblzma CACHE STRING "LZMA library for libarchive" )
230+ set (POSIX_REGEX_LIB "libc" CACHE STRING "Regex library for libarchive" )
239231set (LIBARCHIVE_VERSION "3.8.1" )
240232
241233FetchContent_Declare (libarchive
@@ -278,10 +270,11 @@ unset(ENABLE_CAT)
278270unset (ARCHIVE_BUILD_SHARED_LIBS)
279271unset (ENABLE_ZSTD)
280272unset (ENABLE_LZMA)
281- set (LibArchive_FOUND true CACHE BOOL "" FORCE )
282- set (LibArchive_LIBRARIES archive_static CACHE FILEPATH "" FORCE )
283- set (LibArchive_INCLUDE_DIR ${libarchive_SOURCE_DIR} /libarchive CACHE PATH "" FORCE )
284- set (LibArchive_INCLUDE_DIRS ${libarchive_SOURCE_DIR} /libarchive CACHE PATH "" FORCE )
273+ # Set LibArchive variables for compatibility
274+ set (LibArchive_FOUND true CACHE BOOL "LibArchive library found" )
275+ set (LibArchive_LIBRARIES archive_static CACHE STRING "LibArchive libraries" )
276+ set (LibArchive_INCLUDE_DIR ${libarchive_SOURCE_DIR} /libarchive CACHE PATH "LibArchive include directory" )
277+ set (LibArchive_INCLUDE_DIRS ${libarchive_SOURCE_DIR} /libarchive CACHE PATH "LibArchive include directories" )
285278
286279# Bundled libcurl
287280set (CURL_VERSION "8.14.1" )
@@ -427,10 +420,11 @@ unset(CURL_USE_SCHANNEL)
427420unset (CURL_DEFAULT_SSL_BACKEND)
428421unset (CURL_USE_GNUTLS)
429422
430- set (CURL_FOUND true CACHE BOOL "" FORCE )
431- set (CURL_LIBRARIES libcurl_static CACHE FILEPATH "" FORCE )
432- set (CURL_INCLUDE_DIR ${curl_SOURCE_DIR} /include CACHE PATH "" FORCE )
433- set (CURL_INCLUDE_DIRS ${curl_SOURCE_DIR} /include CACHE PATH "" FORCE )
423+ # Set CURL variables for compatibility
424+ set (CURL_FOUND true CACHE BOOL "CURL library found" )
425+ set (CURL_LIBRARIES libcurl_static CACHE STRING "CURL libraries" )
426+ set (CURL_INCLUDE_DIR ${curl_SOURCE_DIR} /include CACHE PATH "CURL include directory" )
427+ set (CURL_INCLUDE_DIRS ${curl_SOURCE_DIR} /include CACHE PATH "CURL include directories" )
434428
435429# Adding headers explicity so they are displayed in Qt Creator
436430set (HEADERS config.h imagewriter.h networkaccessmanagerfactory.h nan.h drivelistitem.h drivelistmodel.h drivelistmodelpollthread.h driveformatthread.h powersaveblocker.h cli.h
@@ -458,7 +452,7 @@ elseif (UNIX)
458452 )
459453 set (EXTRALIBS ${EXTRALIBS} GnuTLS::GnuTLS)
460454 set (DEPENDENCIES "" )
461- add_definitions ( -DHAVE_GNUTLS )
455+ # Platform definitions will be added after target creation
462456elseif (WIN32 )
463457 set (PLATFORM_SOURCES
464458 acceleratedcryptographichash.cpp
@@ -471,11 +465,10 @@ elseif (WIN32)
471465 windows/openhdimagewriter.rc
472466 )
473467 set (EXTRALIBS setupapi wlanapi)
474- add_definitions (-DHAVE_WINCRYPT )
475- add_definitions (-D_CRT_SECURE_NO_WARNINGS )
468+ # Platform definitions will be added after target creation
476469endif ()
477470
478- include_directories ( BEFORE . )
471+ # Include directories handled via target properties
479472
480473# Test if we need libatomic
481474include (CheckCXXSourceCompiles )
@@ -496,7 +489,7 @@ if (NOT atomicbuiltin)
496489 endif ()
497490endif ()
498491
499- include_directories ( BEFORE . )
492+ # Include directories handled via target properties
500493
501494# Test if we need libatomic
502495include (CheckCXXSourceCompiles )
@@ -561,6 +554,39 @@ set_property(TARGET ${PROJECT_NAME} PROPERTY AUTOMOC ON)
561554set_property (TARGET ${PROJECT_NAME} PROPERTY AUTORCC ON )
562555set_property (TARGET ${PROJECT_NAME} PROPERTY AUTOUIC ON )
563556
557+ # Target-based compile definitions (modern CMake best practice)
558+ target_compile_definitions (${PROJECT_NAME} PRIVATE
559+ IMAGER_VERSION_STR= "${IMAGER_VERSION_STR} "
560+ IMAGER_VERSION_CSV=${IMAGER_VERSION_CSV}
561+ $<$<BOOL :${ENABLE_TELEMETRY} >:TELEMETRY_ENABLED_DEFAULT =true >
562+ $<$<NOT :$<BOOL :${ENABLE_TELEMETRY} >>:TELEMETRY_ENABLED_DEFAULT =false >
563+ $<$<BOOL :${ENABLE_CHECK_VERSION} >:CHECK_VERSION_DEFAULT =true >
564+ $<$<NOT :$<BOOL :${ENABLE_CHECK_VERSION} >>:CHECK_VERSION_DEFAULT =false >
565+ )
566+
567+ # Platform-specific definitions
568+ if (UNIX AND NOT APPLE )
569+ target_compile_definitions (${PROJECT_NAME} PRIVATE HAVE_GNUTLS )
570+ elseif (WIN32 )
571+ target_compile_definitions (${PROJECT_NAME} PRIVATE
572+ HAVE_WINCRYPT
573+ _CRT_SECURE_NO_WARNINGS
574+ WINVER=0x0A00
575+ _WIN32_WINNT=0x0A00
576+ NTDDI_VERSION=0x0A000000
577+ )
578+ endif ()
579+
580+ # Target-based include directories (modern CMake best practice)
581+ target_include_directories (${PROJECT_NAME} PRIVATE
582+ ${CMAKE_CURRENT_SOURCE_DIR}
583+ ${CURL_INCLUDE_DIR}
584+ ${LibArchive_INCLUDE_DIR}
585+ ${LIBLZMA_INCLUDE_DIRS}
586+ ${ZLIB_INCLUDE_DIRS}
587+ ${ZSTD_INCLUDE_DIR}
588+ )
589+
564590# Create lupdate target (after executable target is created)
565591qt_add_lupdate (${PROJECT_NAME}
566592 TS_FILES ${TRANSLATIONS}
@@ -578,17 +604,7 @@ qt_add_lupdate(${PROJECT_NAME}
578604# message(STATUS "LTO not supported: <${ipoerror}>")
579605# endif()
580606
581- if (ENABLE_TELEMETRY)
582- add_definitions (-DTELEMETRY_ENABLED_DEFAULT=true )
583- else ()
584- add_definitions (-DTELEMETRY_ENABLED_DEFAULT=false )
585- endif ()
586-
587- if (ENABLE_CHECK_VERSION)
588- add_definitions (-DCHECK_VERSION_DEFAULT=true )
589- else ()
590- add_definitions (-DCHECK_VERSION_DEFAULT=false )
591- endif ()
607+ # Feature definitions will be added to target after creation
592608
593609qt_policy (SET QTP0001 NEW )
594610
@@ -626,8 +642,7 @@ qt_add_qml_module(${PROJECT_NAME}
626642
627643# Because dependencies are typically not available by default on Windows, build bundled code
628644if (WIN32 )
629- # Target Windows 10, in line with Qt6 requirements
630- add_definitions (-DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DNTDDI_VERSION=0x0A000000 )
645+ # Target Windows 10, in line with Qt6 requirements (definitions added to target)
631646
632647 # Strip debug symbols
633648 add_custom_command (TARGET ${PROJECT_NAME}
@@ -725,7 +740,7 @@ endif()
725740if (TARGET ZLIB::ZLIB)
726741 add_dependencies (${PROJECT_NAME} ZLIB::ZLIB )
727742endif ()
728- include_directories ( ${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LIBLZMA_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIR} )
743+ # Include directories will be set via target properties
729744
730745# Set up ZLIB library variable for linking
731746if (TARGET ZLIB::ZLIB)
0 commit comments