Skip to content

Commit d6a7876

Browse files
LZMA library error: Corrupted input data
1 parent 5c70aeb commit d6a7876

2 files changed

Lines changed: 58 additions & 61 deletions

File tree

src/CMakeLists.txt

Lines changed: 54 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -66,64 +66,56 @@ set(BUILD_SHARED_LIBS OFF)
6666

6767
include(FetchContent)
6868

69-
# LZMA Dependencies - TRUE Raspberry Pi Imager approach with FetchContent xz
70-
if(WIN32)
71-
# Windows: Use FetchContent xz exactly like real Raspberry Pi Imager
72-
message(STATUS "Using FetchContent XZ/LZMA library on Windows (Raspberry Pi Imager style)")
73-
set(LIBLZMA_VERSION "5.4.6")
74-
FetchContent_Declare(xz
75-
GIT_REPOSITORY https://github.com/tukaani-project/xz.git
76-
GIT_TAG v${LIBLZMA_VERSION}
77-
${USE_OVERRIDE_FIND_PACKAGE}
78-
)
79-
set(XZ_MICROLZMA_DECODER OFF CACHE BOOL "" FORCE)
80-
set(XZ_MICROLZMA_ENCODER OFF CACHE BOOL "" FORCE)
81-
set(XZ_LZIP_DECODER OFF CACHE BOOL "" FORCE)
82-
set(XZ_ENABLE_SANDBOX OFF CACHE BOOL "" FORCE)
83-
set(XZ_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
84-
set(XZ_ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE)
85-
set(XZ_DECODERS lzma1 lzma2 delta)
86-
set(XZ_ENCODERS lzma1 lzma2 delta)
87-
set(CREATE_LZMA_SYMLINKS OFF CACHE BOOL "" FORCE)
88-
set(CREATE_XZ_SYMLINKS OFF CACHE BOOL "" FORCE)
89-
90-
FetchContent_GetProperties(xz)
91-
if(NOT xz_POPULATED)
92-
FetchContent_Populate(xz)
93-
add_subdirectory(${xz_SOURCE_DIR} ${xz_BINARY_DIR} EXCLUDE_FROM_ALL)
94-
endif()
95-
96-
# Clean up cache variables
97-
unset(XZ_MICROLZMA_DECODER)
98-
unset(XZ_MICROLZMA_ENCODER)
99-
unset(XZ_LZIP_DECODER)
100-
unset(XZ_ENABLE_SANDBOX)
101-
unset(XZ_BUILD_SHARED_LIBS)
102-
unset(XZ_ENABLE_DOXYGEN)
103-
unset(CREATE_LZMA_SYMLINKS)
104-
unset(CREATE_XZ_SYMLINKS)
105-
106-
# Set LZMA variables exactly like Raspberry Pi Imager
107-
set(LIBLZMA_FOUND true CACHE BOOL "" FORCE)
108-
set(LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE)
109-
set(LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE)
110-
set(LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE)
111-
set(LIBLZMA_LIBRARIES ${xz_BINARY_DIR}/liblzma.a CACHE FILEPATH "" FORCE)
112-
set(LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "" FORCE)
113-
set(LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "" FORCE)
114-
set(LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "" FORCE)
115-
116-
# Create namespace target
117-
if(TARGET liblzma AND NOT TARGET LibLZMA::LibLZMA)
118-
add_library(LibLZMA::LibLZMA ALIAS liblzma)
119-
endif()
120-
else()
121-
# macOS/Linux: Use system LZMA
122-
message(STATUS "Using system LZMA library")
123-
find_package(LibLZMA REQUIRED)
124-
if(LIBLZMA_FOUND AND TARGET LibLZMA::LibLZMA)
125-
set(EXTRALIBS ${EXTRALIBS} LibLZMA::LibLZMA)
126-
endif()
69+
# Bundled liblzma - EXACT Raspberry Pi Imager approach
70+
set(LIBLZMA_VERSION "5.8.1")
71+
FetchContent_Declare(xz
72+
GIT_REPOSITORY https://github.com/tukaani-project/xz.git
73+
GIT_TAG v${LIBLZMA_VERSION}
74+
${USE_OVERRIDE_FIND_PACKAGE}
75+
)
76+
set(XZ_MICROLZMA_DECODER OFF CACHE BOOL "" FORCE)
77+
set(XZ_MICROLZMA_ENCODER OFF CACHE BOOL "" FORCE)
78+
set(XZ_LZIP_DECODER OFF CACHE BOOL "" FORCE)
79+
set(XZ_ENABLE_SANDBOX OFF CACHE BOOL "" FORCE)
80+
set(XZ_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
81+
set(XZ_ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE)
82+
set(XZ_DECODERS
83+
lzma1
84+
lzma2
85+
delta
86+
)
87+
set(XZ_ENCODERS
88+
lzma1
89+
lzma2
90+
delta
91+
)
92+
set(CREATE_LZMA_SYMLINKS OFF CACHE BOOL "" FORCE)
93+
set(CREATE_XZ_SYMLINKS OFF CACHE BOOL "" FORCE)
94+
FetchContent_GetProperties(xz)
95+
if(NOT xz_POPULATED)
96+
FetchContent_Populate(xz)
97+
add_subdirectory(${xz_SOURCE_DIR} ${xz_BINARY_DIR} EXCLUDE_FROM_ALL)
98+
endif()
99+
unset(XZ_MICROLZMA_DECODER)
100+
unset(XZ_MICROLZMA_ENCODER)
101+
unset(XZ_LZIP_DECODER)
102+
unset(XZ_ENABLE_SANDBOX)
103+
unset(XZ_BUILD_SHARED_LIBS)
104+
unset(XZ_ENABLE_DOXYGEN)
105+
unset(CREATE_LZMA_SYMLINKS)
106+
unset(CREATE_XZ_SYMLINKS)
107+
set(LIBLZMA_FOUND true CACHE BOOL "" FORCE)
108+
set(LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE)
109+
set(LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE)
110+
set(LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE)
111+
set(LIBLZMA_LIBRARIES ${xz_BINARY_DIR}/liblzma.a CACHE FILEPATH "" FORCE)
112+
set(LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "" FORCE)
113+
set(LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "" FORCE)
114+
set(LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "" FORCE)
115+
116+
# Create namespace target for modern CMake compatibility
117+
if(TARGET liblzma AND NOT TARGET LibLZMA::LibLZMA)
118+
add_library(LibLZMA::LibLZMA ALIAS liblzma)
127119
endif()
128120

129121
# Bundled zstd
@@ -239,7 +231,7 @@ set(ARCHIVE_BUILD_STATIC_LIBS ON CACHE BOOL "")
239231
set(ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "")
240232
set(ENABLE_ZSTD ON CACHE BOOL "")
241233
set(ENABLE_LZMA ON CACHE BOOL "")
242-
# libarchive will find our LZMA via the variables set above
234+
# Enable LZMA for libarchive - variables are set above with FORCE
243235
set(POSIX_REGEX_LIB "libc" CACHE STRING "Regex library for libarchive")
244236
set(LIBARCHIVE_VERSION "3.8.1")
245237

@@ -259,8 +251,9 @@ endif()
259251
if (TARGET archive_static AND TARGET ZLIB::ZLIB)
260252
add_dependencies(archive_static ZLIB::ZLIB)
261253
endif()
262-
if (TARGET archive_static AND TARGET cmliblzma)
263-
add_dependencies(archive_static cmliblzma)
254+
# Ensure libarchive is built after liblzma
255+
if (TARGET archive_static AND TARGET liblzma)
256+
add_dependencies(archive_static liblzma)
264257
endif()
265258

266259
unset(POSIX_REGEX_LIB)

src/dependencies/cmliblzma/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND
199199
CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
200200
# Disable the old GNU compiler optimizer.
201201
SET_PROPERTY(TARGET cmliblzma PROPERTY COMPILE_FLAGS "-O0")
202+
ELSEIF(CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
203+
# For Debug builds with modern compilers, use conservative optimization
204+
# to avoid potential LZMA decoding issues
205+
SET_PROPERTY(TARGET cmliblzma PROPERTY COMPILE_FLAGS "-O1 -fno-omit-frame-pointer")
202206
ENDIF()
203207

204208
INSTALL(FILES COPYING DESTINATION ${CMAKE_DOC_DIR}/cmliblzma)

0 commit comments

Comments
 (0)