Skip to content

Commit bc09a7b

Browse files
Implement Raspberry Pi Imager approach: bundled LZMA dependencies
- Replace FetchContent xz with bundled cmliblzma (like rpi-imager 1.9+) - Use proven stable LZMA implementation instead of bleeding-edge Git versions - System LZMA first on macOS, bundled fallback on Windows/Linux - Point libarchive to use bundled cmliblzma for consistency - Create LibLZMA::LibLZMA namespace target for modern CMake - Add reference-next-branch to .gitignore for comparison - Should fix 'Corrupted input data' LZMA errors definitively This follows the same vendored dependencies approach as Raspberry Pi Imager 1.9+ which solved identical LZMA compatibility issues.
1 parent 24c5523 commit bc09a7b

2 files changed

Lines changed: 41 additions & 66 deletions

File tree

.gitignore

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CMakeCache.txt
77
/src/build
88
/openssl111
99
/buildlogs
10+
/reference-next-branch
1011

1112
# Claude Code related files
1213
CLAUDE.md
@@ -64,7 +65,7 @@ ui_*.h
6465
.Trashes
6566
ehthumbs.db
6667
Thumbs.db
67-
rpi-imager_reference/
68-
.vscode/
69-
.qtcreator/
70-
.claude/
68+
rpi-imager_reference/
69+
.vscode/
70+
.qtcreator/
71+
.claude/

src/CMakeLists.txt

Lines changed: 36 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ endif()
2929

3030
set(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

3534
project(OpenHDImageWriter LANGUAGES CXX C)
3635
set(IMAGER_VERSION_MAJOR 2)
@@ -67,57 +66,35 @@ set(BUILD_SHARED_LIBS OFF)
6766

6867
include(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()
10196
endif()
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
12299
set(ZSTD_VERSION "1.5.7")
123100
FetchContent_Declare(zstd
@@ -231,14 +208,11 @@ set(ARCHIVE_BUILD_STATIC_LIBS ON CACHE BOOL "")
231208
set(ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "")
232209
set(ENABLE_ZSTD ON CACHE BOOL "")
233210
set(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)
237212
set(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)
242216
set(POSIX_REGEX_LIB "libc" CACHE STRING "Regex library for libarchive")
243217
set(LIBARCHIVE_VERSION "3.8.1")
244218

@@ -258,8 +232,8 @@ endif()
258232
if (TARGET archive_static AND TARGET ZLIB::ZLIB)
259233
add_dependencies(archive_static ZLIB::ZLIB)
260234
endif()
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)
263237
endif()
264238

265239
unset(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

Comments
 (0)