@@ -29,8 +29,7 @@ endif()
2929
3030set (CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "Which macOS architectures to build for" )
3131
32- # Disable system LZMA detection globally - we use only bundled LZMA
33- set (CMAKE_DISABLE_FIND_PACKAGE_LibLZMA ON CACHE BOOL "Disable system LZMA detection" FORCE )
32+ # We use bundled LZMA on Windows/Linux, system LZMA on macOS
3433
3534project (OpenHDImageWriter LANGUAGES CXX C )
3635set (IMAGER_VERSION_MAJOR 2)
@@ -67,57 +66,35 @@ set(BUILD_SHARED_LIBS OFF)
6766
6867include (FetchContent )
6968
70- # Bundled liblzma - use stable version to avoid "Corrupted input data" errors
71- set (LIBLZMA_VERSION "5.4.6" )
72- FetchContent_Declare (xz
73- GIT_REPOSITORY https://github.com/tukaani-project/xz.git
74- GIT_TAG v${LIBLZMA_VERSION}
75- ${USE_OVERRIDE_FIND_PACKAGE}
76- )
77- set (XZ_MICROLZMA_DECODER OFF CACHE BOOL "" FORCE )
78- set (XZ_MICROLZMA_ENCODER OFF CACHE BOOL "" FORCE )
79- set (XZ_LZIP_DECODER OFF CACHE BOOL "" FORCE )
80- set (XZ_ENABLE_SANDBOX OFF CACHE BOOL "" FORCE )
81- set (XZ_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE )
82- set (XZ_ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE )
83- set (XZ_NLS OFF CACHE BOOL "" FORCE )
84- set (XZ_DECODERS
85- lzma1
86- lzma2
87- delta
88- )
89- set (XZ_ENCODERS
90- lzma1
91- lzma2
92- delta
93- )
94- set (CREATE_LZMA_SYMLINKS OFF CACHE BOOL "" FORCE )
95- set (CREATE_XZ_SYMLINKS OFF CACHE BOOL "" FORCE )
96- FetchContent_MakeAvailable (xz)
69+ # LZMA Dependencies - Raspberry Pi Imager approach with vendored dependencies
70+ # Try system LZMA first, fallback to bundled stable version
71+ find_package (LibLZMA )
9772
98- # Create modern namespace target for liblzma
99- if (TARGET liblzma AND NOT TARGET LibLZMA::liblzma)
100- add_library (LibLZMA::liblzma ALIAS liblzma )
73+ if (NOT LIBLZMA_FOUND OR NOT APPLE )
74+ # Use bundled cmliblzma - proven stable implementation like Raspberry Pi Imager
75+ message (STATUS "Using bundled LZMA library (cmliblzma)" )
76+ add_subdirectory (dependencies/cmliblzma )
77+
78+ # Set up LZMA variables for our bundled version
79+ set (LIBLZMA_HAS_AUTO_DECODER 1)
80+ set (LIBLZMA_HAS_EASY_ENCODER 1)
81+ set (LIBLZMA_HAS_LZMA_PRESET 1)
82+ set (LIBLZMA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /dependencies/cmliblzma/liblzma/api)
83+ set (LIBLZMA_LIBRARY cmliblzma)
84+ set (LIBLZMA_LIBRARIES cmliblzma)
85+
86+ # Create namespace target for consistency
87+ if (TARGET cmliblzma AND NOT TARGET LibLZMA::LibLZMA)
88+ add_library (LibLZMA::LibLZMA ALIAS cmliblzma )
89+ endif ()
90+ else ()
91+ # System LZMA found and we're on macOS - use it
92+ message (STATUS "Using system LZMA library" )
93+ if (TARGET LibLZMA::LibLZMA)
94+ set (EXTRALIBS ${EXTRALIBS} LibLZMA::LibLZMA)
95+ endif ()
10196endif ()
10297
103- unset (XZ_MICROLZMA_DECODER)
104- unset (XZ_MICROLZMA_ENCODER)
105- unset (XZ_LZIP_DECODER)
106- unset (XZ_ENABLE_SANDBOX)
107- unset (XZ_BUILD_SHARED_LIBS)
108- unset (XZ_ENABLE_DOXYGEN)
109- unset (CREATE_LZMA_SYMLINKS)
110- unset (CREATE_XZ_SYMLINKS)
111- # Set LZMA variables for compatibility (avoid FORCE unless necessary)
112- set (LIBLZMA_FOUND true CACHE BOOL "LZMA library found" )
113- set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include directory" )
114- set (LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include directories" )
115- set (LIBLZMA_LIBRARY liblzma CACHE STRING "LZMA library target" )
116- set (LIBLZMA_LIBRARIES liblzma CACHE STRING "LZMA libraries" )
117- set (LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "LZMA has auto decoder" )
118- set (LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "LZMA has easy encoder" )
119- set (LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "LZMA has preset" )
120-
12198# Bundled zstd
12299set (ZSTD_VERSION "1.5.7" )
123100FetchContent_Declare (zstd
@@ -231,14 +208,11 @@ set(ARCHIVE_BUILD_STATIC_LIBS ON CACHE BOOL "")
231208set (ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "" )
232209set (ENABLE_ZSTD ON CACHE BOOL "" )
233210set (ENABLE_LZMA ON CACHE BOOL "" )
234- # Point libarchive to our bundled LZMA - prevent finding system LZMA
235- # Disable all external LZMA detection to force use of our bundled version
236- set (CMAKE_DISABLE_FIND_PACKAGE_LibLZMA ON CACHE BOOL "Disable system LZMA detection" FORCE )
211+ # Point libarchive to our bundled LZMA (cmliblzma)
237212set (LIBLZMA_FOUND true CACHE BOOL "Force LibArchive to use our bundled LZMA" FORCE )
238- set (LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR} /src/liblzma/api CACHE PATH "LZMA include for libarchive" FORCE )
239- set (LIBLZMA_LIBRARY liblzma CACHE STRING "LZMA library for libarchive" FORCE )
240- set (LIBLZMA_LIBRARIES liblzma CACHE STRING "LZMA libraries for libarchive" FORCE )
241- set (PC_LIBLZMA_FOUND false CACHE BOOL "Disable pkg-config LZMA" FORCE )
213+ set (LIBLZMA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /dependencies/cmliblzma/liblzma/api CACHE PATH "LZMA include for libarchive" FORCE )
214+ set (LIBLZMA_LIBRARY cmliblzma CACHE STRING "LZMA library for libarchive" FORCE )
215+ set (LIBLZMA_LIBRARIES cmliblzma CACHE STRING "LZMA libraries for libarchive" FORCE )
242216set (POSIX_REGEX_LIB "libc" CACHE STRING "Regex library for libarchive" )
243217set (LIBARCHIVE_VERSION "3.8.1" )
244218
@@ -258,8 +232,8 @@ endif()
258232if (TARGET archive_static AND TARGET ZLIB::ZLIB)
259233 add_dependencies (archive_static ZLIB::ZLIB )
260234endif ()
261- if (TARGET archive_static AND TARGET liblzma )
262- add_dependencies (archive_static liblzma )
235+ if (TARGET archive_static AND TARGET cmliblzma )
236+ add_dependencies (archive_static cmliblzma )
263237endif ()
264238
265239unset (POSIX_REGEX_LIB)
@@ -792,7 +766,7 @@ if(WIN32)
792766 CURL::libcurl_static
793767 LibArchive::archive_static
794768 zstd::libzstd_static
795- LibLZMA::liblzma
769+ LibLZMA::LibLZMA
796770 ${ZLIB_LINK_TARGET}
797771 ${ATOMIC_LIBRARY}
798772 ${EXTRALIBS}
@@ -807,7 +781,7 @@ else()
807781 CURL::libcurl_static
808782 LibArchive::archive_static
809783 zstd::libzstd_static
810- LibLZMA::liblzma
784+ LibLZMA::LibLZMA
811785 ${ZLIB_LINK_TARGET}
812786 ${ATOMIC_LIBRARY}
813787 ${EXTRALIBS}
@@ -819,7 +793,7 @@ else()
819793 CURL::libcurl_static
820794 LibArchive::archive_static
821795 zstd::libzstd_static
822- LibLZMA::liblzma
796+ LibLZMA::LibLZMA
823797 ${ZLIB_LINK_TARGET}
824798 ${ATOMIC_LIBRARY}
825799 ${EXTRALIBS}
0 commit comments