Skip to content

Commit cf84ace

Browse files
committed
fix: enable xz easy encoder in compat smoke
1 parent 309e379 commit cf84ace

3 files changed

Lines changed: 281 additions & 1 deletion

File tree

pkgs/c/compat.xz.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ package = {
7979
"-DHAVE_DECODER_SPARC=1",
8080
"-DHAVE_DECODER_RISCV=1",
8181
"-DHAVE_LZIP_DECODER=1",
82+
"-DHAVE_MF_HC3=1",
83+
"-DHAVE_MF_HC4=1",
84+
"-DHAVE_MF_BT2=1",
85+
"-DHAVE_MF_BT3=1",
86+
"-DHAVE_MF_BT4=1",
8287
},
8388
sources = {
8489
"*/src/common/tuklib_physmem.c",

tests/smoke_compat_archive.sh

Lines changed: 152 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ if [[ -z "$MCPP_BIN" || ! -x "$MCPP_BIN" ]]; then
1414
fi
1515

1616
TMP="$(mktemp -d)"
17-
trap 'rm -rf "$TMP"' EXIT
17+
if [[ "${MCPP_INDEX_KEEP_SMOKE_TMP:-0}" == "1" ]]; then
18+
echo "KEEP: $TMP"
19+
else
20+
trap 'rm -rf "$TMP"' EXIT
21+
fi
1822
SMOKE_CACHE_DIR="${MCPP_INDEX_SMOKE_CACHE_DIR:-}"
1923
SMOKE_XPKGS_DIR="${MCPP_INDEX_SMOKE_XPKGS_DIR:-}"
2024

@@ -102,6 +106,153 @@ int main() {
102106
}
103107
EOF
104108

109+
"$MCPP_BIN" build
110+
"$MCPP_BIN" run
111+
112+
mkdir -p "$TMP/compat-compression-standalone-smoke/src"
113+
cd "$TMP/compat-compression-standalone-smoke"
114+
cat > mcpp.toml <<EOF
115+
[package]
116+
name = "compat-compression-standalone-smoke"
117+
version = "0.1.0"
118+
119+
[toolchain]
120+
default = "gcc@16.1.0"
121+
122+
[indices]
123+
compat = { path = "$ROOT" }
124+
125+
[dependencies.compat]
126+
zlib = "1.3.2"
127+
bzip2 = "1.0.8"
128+
lz4 = "1.10.0"
129+
xz = "5.8.3"
130+
zstd = "1.5.7"
131+
132+
[targets.compat-compression-standalone-smoke]
133+
kind = "bin"
134+
main = "src/main.cpp"
135+
EOF
136+
137+
if [[ -n "$SMOKE_CACHE_DIR" && -d "$SMOKE_CACHE_DIR" ]]; then
138+
mkdir -p .mcpp/.xlings/data/runtimedir
139+
find "$SMOKE_CACHE_DIR" -maxdepth 1 -type f \
140+
\( -name '*.tar.gz' -o -name '*.tar.xz' -o -name '*.zip' \) \
141+
-exec cp -f {} .mcpp/.xlings/data/runtimedir/ \;
142+
fi
143+
144+
cat > src/main.cpp <<'EOF'
145+
#include <bzlib.h>
146+
#include <lz4.h>
147+
#include <lzma.h>
148+
#include <zlib.h>
149+
#include <zstd.h>
150+
151+
#include <cstdint>
152+
#include <cstring>
153+
#include <limits>
154+
#include <vector>
155+
156+
static bool same_bytes(const void* actual, size_t actual_size,
157+
const void* expected, size_t expected_size) {
158+
return actual_size == expected_size &&
159+
std::memcmp(actual, expected, expected_size) == 0;
160+
}
161+
162+
int main() {
163+
const uint8_t input[] = "mcpp compat compression smoke";
164+
const size_t input_size = sizeof(input) - 1;
165+
166+
uint8_t zlib_compressed[256] = {};
167+
uLongf zlib_compressed_size = sizeof(zlib_compressed);
168+
if (compress2(zlib_compressed, &zlib_compressed_size, input,
169+
static_cast<uLong>(input_size), Z_BEST_SPEED) != Z_OK) {
170+
return 1;
171+
}
172+
uint8_t zlib_output[sizeof(input)] = {};
173+
uLongf zlib_output_size = input_size;
174+
if (uncompress(zlib_output, &zlib_output_size, zlib_compressed,
175+
zlib_compressed_size) != Z_OK ||
176+
!same_bytes(zlib_output, zlib_output_size, input, input_size)) {
177+
return 2;
178+
}
179+
180+
char bzip2_compressed[256] = {};
181+
unsigned int bzip2_compressed_size = sizeof(bzip2_compressed);
182+
if (BZ2_bzBuffToBuffCompress(
183+
bzip2_compressed, &bzip2_compressed_size,
184+
const_cast<char*>(reinterpret_cast<const char*>(input)),
185+
static_cast<unsigned int>(input_size), 1, 0, 30) != BZ_OK) {
186+
return 3;
187+
}
188+
char bzip2_output[sizeof(input)] = {};
189+
unsigned int bzip2_output_size = input_size;
190+
if (BZ2_bzBuffToBuffDecompress(bzip2_output, &bzip2_output_size,
191+
bzip2_compressed, bzip2_compressed_size,
192+
0, 0) != BZ_OK ||
193+
!same_bytes(bzip2_output, bzip2_output_size, input, input_size)) {
194+
return 4;
195+
}
196+
197+
char lz4_compressed[256] = {};
198+
const int lz4_compressed_size =
199+
LZ4_compress_default(reinterpret_cast<const char*>(input),
200+
lz4_compressed, static_cast<int>(input_size),
201+
sizeof(lz4_compressed));
202+
if (lz4_compressed_size <= 0) {
203+
return 5;
204+
}
205+
char lz4_output[sizeof(input)] = {};
206+
const int lz4_output_size =
207+
LZ4_decompress_safe(lz4_compressed, lz4_output, lz4_compressed_size,
208+
sizeof(lz4_output));
209+
if (lz4_output_size < 0 ||
210+
!same_bytes(lz4_output, static_cast<size_t>(lz4_output_size), input,
211+
input_size)) {
212+
return 6;
213+
}
214+
215+
std::vector<char> zstd_compressed(ZSTD_compressBound(input_size));
216+
const size_t zstd_compressed_size =
217+
ZSTD_compress(zstd_compressed.data(), zstd_compressed.size(), input,
218+
input_size, 1);
219+
if (ZSTD_isError(zstd_compressed_size)) {
220+
return 7;
221+
}
222+
std::vector<char> zstd_output(input_size);
223+
const size_t zstd_output_size =
224+
ZSTD_decompress(zstd_output.data(), zstd_output.size(),
225+
zstd_compressed.data(), zstd_compressed_size);
226+
if (ZSTD_isError(zstd_output_size) ||
227+
!same_bytes(zstd_output.data(), zstd_output_size, input, input_size)) {
228+
return 8;
229+
}
230+
231+
std::vector<uint8_t> xz_compressed(lzma_stream_buffer_bound(input_size));
232+
size_t xz_compressed_pos = 0;
233+
if (lzma_easy_buffer_encode(0, LZMA_CHECK_CRC64, nullptr, input,
234+
input_size, xz_compressed.data(),
235+
&xz_compressed_pos,
236+
xz_compressed.size()) != LZMA_OK) {
237+
return 9;
238+
}
239+
uint64_t xz_memlimit = std::numeric_limits<uint64_t>::max();
240+
size_t xz_input_pos = 0;
241+
size_t xz_output_pos = 0;
242+
std::vector<uint8_t> xz_output(input_size);
243+
if (lzma_stream_buffer_decode(&xz_memlimit, 0, nullptr,
244+
xz_compressed.data(), &xz_input_pos,
245+
xz_compressed_pos, xz_output.data(),
246+
&xz_output_pos, xz_output.size()) !=
247+
LZMA_OK ||
248+
!same_bytes(xz_output.data(), xz_output_pos, input, input_size)) {
249+
return 10;
250+
}
251+
252+
return 0;
253+
}
254+
EOF
255+
105256
"$MCPP_BIN" build
106257
"$MCPP_BIN" run
107258
echo "OK"

tests/smoke_compat_portable.sh

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,130 @@ EOF
235235
"$MCPP_BIN_POSIX" build
236236
"$MCPP_BIN_POSIX" run
237237

238+
make_project "compat-portable-compression-smoke"
239+
cat >> mcpp.toml <<'EOF'
240+
241+
[dependencies.compat]
242+
zlib = "1.3.2"
243+
bzip2 = "1.0.8"
244+
lz4 = "1.10.0"
245+
xz = "5.8.3"
246+
zstd = "1.5.7"
247+
EOF
248+
cat > src/main.cpp <<'EOF'
249+
#include <bzlib.h>
250+
#include <lz4.h>
251+
#include <lzma.h>
252+
#include <zlib.h>
253+
#include <zstd.h>
254+
255+
#include <cstdint>
256+
#include <cstring>
257+
#include <limits>
258+
#include <vector>
259+
260+
static bool same_bytes(const void* actual, size_t actual_size,
261+
const void* expected, size_t expected_size) {
262+
return actual_size == expected_size &&
263+
std::memcmp(actual, expected, expected_size) == 0;
264+
}
265+
266+
int main() {
267+
const uint8_t input[] = "mcpp compat compression smoke";
268+
const size_t input_size = sizeof(input) - 1;
269+
270+
uint8_t zlib_compressed[256] = {};
271+
uLongf zlib_compressed_size = sizeof(zlib_compressed);
272+
if (compress2(zlib_compressed, &zlib_compressed_size, input,
273+
static_cast<uLong>(input_size), Z_BEST_SPEED) != Z_OK) {
274+
return 1;
275+
}
276+
uint8_t zlib_output[sizeof(input)] = {};
277+
uLongf zlib_output_size = input_size;
278+
if (uncompress(zlib_output, &zlib_output_size, zlib_compressed,
279+
zlib_compressed_size) != Z_OK ||
280+
!same_bytes(zlib_output, zlib_output_size, input, input_size)) {
281+
return 2;
282+
}
283+
284+
char bzip2_compressed[256] = {};
285+
unsigned int bzip2_compressed_size = sizeof(bzip2_compressed);
286+
if (BZ2_bzBuffToBuffCompress(
287+
bzip2_compressed, &bzip2_compressed_size,
288+
const_cast<char*>(reinterpret_cast<const char*>(input)),
289+
static_cast<unsigned int>(input_size), 1, 0, 30) != BZ_OK) {
290+
return 3;
291+
}
292+
char bzip2_output[sizeof(input)] = {};
293+
unsigned int bzip2_output_size = input_size;
294+
if (BZ2_bzBuffToBuffDecompress(bzip2_output, &bzip2_output_size,
295+
bzip2_compressed, bzip2_compressed_size,
296+
0, 0) != BZ_OK ||
297+
!same_bytes(bzip2_output, bzip2_output_size, input, input_size)) {
298+
return 4;
299+
}
300+
301+
char lz4_compressed[256] = {};
302+
const int lz4_compressed_size =
303+
LZ4_compress_default(reinterpret_cast<const char*>(input),
304+
lz4_compressed, static_cast<int>(input_size),
305+
sizeof(lz4_compressed));
306+
if (lz4_compressed_size <= 0) {
307+
return 5;
308+
}
309+
char lz4_output[sizeof(input)] = {};
310+
const int lz4_output_size =
311+
LZ4_decompress_safe(lz4_compressed, lz4_output, lz4_compressed_size,
312+
sizeof(lz4_output));
313+
if (lz4_output_size < 0 ||
314+
!same_bytes(lz4_output, static_cast<size_t>(lz4_output_size), input,
315+
input_size)) {
316+
return 6;
317+
}
318+
319+
std::vector<char> zstd_compressed(ZSTD_compressBound(input_size));
320+
const size_t zstd_compressed_size =
321+
ZSTD_compress(zstd_compressed.data(), zstd_compressed.size(), input,
322+
input_size, 1);
323+
if (ZSTD_isError(zstd_compressed_size)) {
324+
return 7;
325+
}
326+
std::vector<char> zstd_output(input_size);
327+
const size_t zstd_output_size =
328+
ZSTD_decompress(zstd_output.data(), zstd_output.size(),
329+
zstd_compressed.data(), zstd_compressed_size);
330+
if (ZSTD_isError(zstd_output_size) ||
331+
!same_bytes(zstd_output.data(), zstd_output_size, input, input_size)) {
332+
return 8;
333+
}
334+
335+
std::vector<uint8_t> xz_compressed(lzma_stream_buffer_bound(input_size));
336+
size_t xz_compressed_pos = 0;
337+
if (lzma_easy_buffer_encode(0, LZMA_CHECK_CRC64, nullptr, input,
338+
input_size, xz_compressed.data(),
339+
&xz_compressed_pos,
340+
xz_compressed.size()) != LZMA_OK) {
341+
return 9;
342+
}
343+
uint64_t xz_memlimit = std::numeric_limits<uint64_t>::max();
344+
size_t xz_input_pos = 0;
345+
size_t xz_output_pos = 0;
346+
std::vector<uint8_t> xz_output(input_size);
347+
if (lzma_stream_buffer_decode(&xz_memlimit, 0, nullptr,
348+
xz_compressed.data(), &xz_input_pos,
349+
xz_compressed_pos, xz_output.data(),
350+
&xz_output_pos, xz_output.size()) !=
351+
LZMA_OK ||
352+
!same_bytes(xz_output.data(), xz_output_pos, input, input_size)) {
353+
return 10;
354+
}
355+
356+
return 0;
357+
}
358+
EOF
359+
"$MCPP_BIN_POSIX" build
360+
"$MCPP_BIN_POSIX" run
361+
238362
make_project "compat-portable-imgui-glfw-smoke"
239363
cat >> mcpp.toml <<'EOF'
240364

0 commit comments

Comments
 (0)