1
0
mirror of https://git.tukaani.org/xz.git synced 2025-12-24 22:38:43 +00:00

Compare commits

..

285 Commits

Author SHA1 Message Date
Jia Tan
49053c0a64 Bump version and soname for 5.4.5. 2023-11-01 20:26:15 +08:00
Jia Tan
84c0cfc556 Add NEWS for 5.4.5. 2023-11-01 20:26:12 +08:00
Lasse Collin
d90ed84db9 liblzma: Fix compilation of fastpos_tablegen.c.
The macro lzma_attr_visibility_hidden has to be defined to make
fastpos.h usable. The visibility attribute is irrelevant to
fastpos_tablegen.c so simply #define the macro to an empty value.

fastpos_tablegen.c is never built by the included build systems
and so the problem wasn't noticed earlier. It's just a standalone
program for generating fastpos_table.c.

Fixes: https://github.com/tukaani-project/xz/pull/69
Thanks to GitHub user Jamaika1.
2023-11-01 20:22:15 +08:00
Jia Tan
9b1268538b Build: Fix text wrapping in an output message. 2023-10-31 21:55:21 +08:00
Lasse Collin
068ee436f4 liblzma: Use lzma_always_inline in memcmplen.h. 2023-10-31 18:44:59 +08:00
Lasse Collin
6cdf0a7b79 liblzma: #define lzma_always_inline in common.h. 2023-10-31 18:44:59 +08:00
Lasse Collin
33daad3961 liblzma: Use lzma_attr_visibility_hidden on private extern declarations.
These variables are internal to liblzma and not exposed in the API.
2023-10-31 18:44:59 +08:00
Lasse Collin
6961a5ac7d liblzma: #define lzma_attr_visibility_hidden in common.h.
In ELF shared libs:

-fvisibility=hidden affects definitions of symbols but not
declarations.[*] This doesn't affect direct calls to functions
inside liblzma as a linker can replace a call to lzma_foo@plt
with a call directly to lzma_foo when -fvisibility=hidden is used.

[*] It has to be like this because otherwise every installed
    header file would need to explictly set the symbol visibility
    to default.

When accessing extern variables that aren't defined in the
same translation unit, compiler assumes that the variable has
the default visibility and thus indirection is needed. Unlike
function calls, linker cannot optimize this.

Using __attribute__((__visibility__("hidden"))) with the extern
variable declarations tells the compiler that indirection isn't
needed because the definition is in the same shared library.

About 15+ years ago, someone told me that it would be good if
the CRC tables would be defined in the same translation unit
as the C code of the CRC functions. While I understood that it
could help a tiny amount, I didn't want to change the code because
a separate translation unit for the CRC tables was needed for the
x86 assembly code anyway. But when visibility attributes are
supported, simply marking the extern declaration with the
hidden attribute will get identical result. When there are only
a few affected variables, this is trivial to do. I wish I had
understood this back then already.
2023-10-31 18:44:59 +08:00
Lasse Collin
5b9e167649 liblzma: Refer to MinGW-w64 instead of MinGW in the API headers.
MinGW (formely a MinGW.org Project, later the MinGW.OSDN Project
at <https://osdn.net/projects/mingw/>) has GCC 9.2.0 as the
most recent GCC package (released 2021-02-02). The project might
still be alive but majority of people have switched to MinGW-w64.
Thus it seems clearer to refer to MinGW-w64 in our API headers too.
Building with MinGW is likely to still work but I haven't tested it
in the recent years.
2023-10-31 18:44:59 +08:00
Lasse Collin
36fabdbe67 CMake: Use -D_FILE_OFFSET_BITS=64 if (and only if) needed.
A CMake option LARGE_FILE_SUPPORT is created if and only if
-D_FILE_OFFSET_BITS=64 affects sizeof(off_t).

This is needed on many 32-bit platforms and even with 64-bit builds
with MinGW-w64 to get support for files larger than 2 GiB.
2023-10-31 18:44:59 +08:00
Lasse Collin
989c8c354c CMake: Generate and install liblzma.pc if not using MSVC.
Autotools based build uses -pthread and thus adds it to Libs.private
in liblzma.pc. CMake doesn't use -pthread at all if pthread functions
are available in libc so Libs.private doesn't get -pthread either.
2023-10-31 18:44:59 +08:00
Lasse Collin
983f3b458d CMake: Rearrange the PACKAGE_ variables.
The windres workaround now replaces spaces with \x20 so
the package name isn't repeated.

These changes will help with creation of liblzma.pc.
2023-10-31 18:44:59 +08:00
Lasse Collin
4083c8e950 liblzma: Add Cflags.private to liblzma.pc.in for MSYS2.
It properly adds -DLZMA_API_STATIC when compiling code that
will be linked against static liblzma. Having it there on
systems other than Windows does no harm.

See: https://www.msys2.org/docs/pkgconfig/
2023-10-31 18:44:59 +08:00
Lasse Collin
661549ecb7 CMake: Create liblzma.def when building liblzma.dll with MinGW-w64. 2023-10-31 18:44:59 +08:00
Lasse Collin
0e546eb4da CMake: Change one CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_LIST_DIR.
In this case they have identical values.
2023-10-31 18:44:59 +08:00
Lasse Collin
da4d04e4d6 CMake/Windows: Fix the import library filename.
Both PREFIX and IMPORT_PERFIX have to be set to "" to get
liblzma.dll and liblzma.dll.a.
2023-10-31 18:44:59 +08:00
Lasse Collin
007558a358 CMake: Don't shadow the cache entry ENABLE_THREADS with a normal variable.
Using set(ENABLE_THREADS "posix") is confusing because it sets
a new normal variable and leaves the cache entry with the same
name unchanged. The intent wasn't to change the cache entry so
this switches to a different variable name.
2023-10-31 18:44:59 +08:00
Lasse Collin
7d01de67ee CMake: Edit threading related messages.
It's mostly to change from "thread method" to "threading method".
2023-10-31 18:44:59 +08:00
Lasse Collin
f8edcf3da6 CMake: Use FATAL_ERROR if user-supplied options aren't understood.
This way typos are caught quickly and compounding error messages
are avoided (a single typo could cause more than one error).

This keeps using SEND_ERROR when the system is lacking a feature
(like threading library or sandboxing method). This way the whole
configuration log will be generated in case someone wishes to
report a problem upstream.
2023-10-31 18:44:59 +08:00
Jia Tan
1695021e4a CMake: Add ALLOW_CLMUL_CRC option to enable/disable CLMUL.
The option is enabled by default, but will only be visible to a user
listing cache variables or using a CMake GUI application if the
immintrin.h header file is found.

This mirrors our Autotools build --disable-clmul-crc functionality.
2023-10-31 18:44:59 +08:00
Lasse Collin
5056bc5107 tuklib_integer: Revise unaligned reads and writes on strict-align archs.
In XZ Utils context this doesn't matter much because
unaligned reads and writes aren't used in hot code
when TUKLIB_FAST_UNALIGNED_ACCESS isn't #defined.
2023-10-31 18:44:59 +08:00
Lasse Collin
9e14743ee5 tuklib_integer: Add missing write64be and write64le fallback functions. 2023-10-31 18:44:59 +08:00
Jia Tan
4cc91ceb39 Build: Update visibility.m4 from Gnulib.
Updating from version 6 -> 8 from upstream. Declarations for variables
and function bodies were added to avoid unnecessary failures with
-Werror.
2023-10-31 18:44:59 +08:00
Lasse Collin
1824a6007c Update THANKS. 2023-10-31 18:44:59 +08:00
Jia Tan
8fdc71a27d CMake: Rename xz and man page symlink custom targets.
The Ninja Generator for CMake cannot have a custom target and its
BYPRODUCTS have the same name. This has prevented Ninja builds on
Unix-like systems since the xz symlinks were introduced in
80a1a8bb838842a2be343bd88ad1462c21c5e2c9.
2023-10-31 18:44:59 +08:00
Lasse Collin
38171492de CMake: Fix Windows build with Clang/LLVM 17.
llvm-windres 17.0.0 has more accurate emulation of GNU windres, so
the hack for GNU windres must now be used with llvm-windres too.

LLVM 16.0.6 has the old behavior and there likely won't be more
16.x releases. So we can simply check for >= 17.0.0.

The workaround must not be used with Clang that is acting in
MSVC mode. This checks for the known environments that need
the workaround instead of using "NOT MSVC".

See also:
2bcc0fdc58
2023-10-31 18:44:59 +08:00
Jia Tan
1bce6fe483 liblzma: Avoid compiler warning without creating extra symbol.
When the generic fast crc64 method is used, then we omit
lzma_crc64_table[][].

The C standards don't allow an empty translation unit which can be
avoided by declaring something, without exporting any symbols.
2023-10-31 18:44:59 +08:00
Lasse Collin
dce95a593e Build: Update the comment about -Werror usage in checks. 2023-10-31 18:44:59 +08:00
Lasse Collin
f3c32762ae Build: Fix underquoted AC_LANG_SOURCE.
It made no practical difference in this case.
2023-10-31 18:44:59 +08:00
Lasse Collin
7dd57f2f2c Build: Silence Autoconf warning.
There was a use of AC_COMPILE_IFELSE that didn't use
AC_LANG_SOURCE and Autoconf warned about this. The omission
had been intentional but it turned out that this didn't do
what I thought it would.

Autoconf 2.71 manual gives an impression that AC_LANG_SOURCE
inserts all #defines that have been made with AC_DEFINE so
far (confdefs.h). The idea was that omitting AC_LANG_SOURCE
would mean that only the exact code included in the
AC_COMPILE_IFELSE call would be compiled.

With C programs this is not true: the #defines get added without
AC_LANG_SOURCE too. There seems to be no neat way to avoid this.
Thus, with the C language at least, adding AC_LANG_SOURCE makes
no other difference than silencing a warning from Autoconf. The
generated "configure" remains identical. (Docs of AC_LANG_CONFTEST
say that the #defines have been inserted since Autoconf 2.63b and
that AC_COMPILE_IFELSE uses AC_LANG_CONFTEST. So the behavior is
documented if one also reads the docs of macros that one isn't
calling directly.)

Any extra code, including #defines, can cause problems for
these two tests because these tests must use -Werror.
CC=clang CFLAGS=-Weverything is the most extreme example.
It enables -Wreserved-macro-identifier which warns about
It's possible to write a test file that passes -Weverything but
it becomes impossible when Autoconf inserts confdefs.h.

So this commit adds AC_LANG_SOURCE to silence Autoconf warnings.
A different solution is needed for -Werror tests.
2023-10-31 18:44:59 +08:00
Jia Tan
edec253e41 Build: Remove Gnulib dependency from tests.
The tests do not use any Gnulib replacements so they do not need to link
libgnu.a or have /lib in the include path.
2023-10-31 18:44:59 +08:00
Jia Tan
46cb133ce7 CMake: Remove /lib from tests include path.
The tests never included anything from /lib, so this was not needed.
2023-10-31 18:44:59 +08:00
Lasse Collin
4ae13cfe0d sysdefs.h: Update the comment about __USE_MINGW_ANSI_STDIO. 2023-10-31 18:44:59 +08:00
Lasse Collin
660c8c29e5 xz: Windows: Don't (de)compress to special files like "con" or "nul".
Before this commit, the following writes "foo" to the
console and deletes the input file:

    echo foo | xz > con_xz
    xz --suffix=_xz --decompress con_xz

It cannot happen without --suffix because names like con.xz
are also special and so attempting to decompress con.xz
(or compress con to con.xz) will already fail when opening
the input file.

Similar thing is possible when compressing. The following
writes to "nul" and the input file "n" is deleted.

    echo foo | xz > n
    xz --suffix=ul n

Now xz checks if the destination is a special file before
continuing. DOS/DJGPP version had a check for this but
Windows (and OS/2) didn't.
2023-10-31 18:44:59 +08:00
Lasse Collin
b7ce6e8078 CMake: Wrap two overlong lines that are possible to wrap. 2023-10-31 18:44:59 +08:00
Lasse Collin
1595f454d5 CMake: Add a comment about threads on Cygwin. 2023-10-31 18:44:59 +08:00
Lasse Collin
5be6275f19 CMake: Bump maximum policy version to 3.27.
There are several new policies. CMP0149 may affect the Windows SDK
version that CMake will choose by default. The new behavior is more
predictable, always choosing the latest SDK version by default.

The other new policies shouldn't affect this package.
2023-10-31 18:44:58 +08:00
Lasse Collin
e515643d75 Doxygen: Add more C macro names to PREDEFINED. 2023-10-31 01:03:25 +08:00
Lasse Collin
e3478ae4f3 liblzma: Move a few __attribute__ uses in function declarations.
The API headers have many attributes but these were left
as is for now.
2023-10-31 01:03:25 +08:00
Lasse Collin
b71b8922ef xz, xzdec, lzmainfo: Use tuklib_attr_noreturn.
For compatibility with C23's [[noreturn]], tuklib_attr_noreturn
must be at the beginning of declaration (before "extern" or
"static", and even before any GNU C's __attribute__).

This commit also moves all other function attributes to
the beginning of function declarations. "extern" is kept
at the beginning of a line so the attributes are listed on
separate lines before "extern" or "static".
2023-10-31 01:03:25 +08:00
Lasse Collin
359e5c6cb1 Remove incorrect uses of __attribute__((__malloc__)).
xrealloc() is obviously incorrect, modern GCC docs even
mention realloc() as an example where this attribute
cannot be used.

liblzma's lzma_alloc() and lzma_alloc_zero() would be
correct uses most of the time but custom allocators
may use a memory pool or otherwise hold the pointer
so aliasing issues could happen in theory.

The xstrdup() case likely was correct but I removed it anyway.
Now there are no __malloc__ attributes left in the code.
The allocations aren't in hot paths so this should make
no practical difference.
2023-10-31 01:03:25 +08:00
Lasse Collin
589b4cba22 Update THANKS. 2023-10-31 01:03:25 +08:00
Lasse Collin
43728ed226 Update THANKS. 2023-10-31 01:03:25 +08:00
Lasse Collin
caf00e0988 liblzma: Mark crc64_clmul() with __attribute__((__no_sanitize_address__)).
Thanks to Agostino Sarubbo.
Fixes: https://github.com/tukaani-project/xz/issues/62
2023-10-31 01:03:25 +08:00
Jia Tan
a70e96d2da CMake: Fix time.h checks not running on second CMake run.
If CMake was configured more than once, HAVE_CLOCK_GETTIME and
HAVE_CLOCK_MONOTONIC would not be set as compile definitions. The check
for librt being needed to provide HAVE_CLOCK_GETTIME was also
simplified.
2023-10-31 01:03:25 +08:00
Jia Tan
d5275d83bd CMake: Fix unconditionally defining HAVE_CLOCK_MONOTONIC.
If HAVE_CLOCK_GETTIME was defined, then HAVE_CLOCK_MONOTONIC was always
added as a compile definition even if the check for it failed.
2023-10-31 01:03:25 +08:00
Lasse Collin
1f6e7c68fb xz: Refactor thousand separator detection and disable it on MSVC.
Now the two variations of the format strings are created with
a macro, and the whole detection code can be easily disabled
on platforms where thousand separator formatting is known to
not work (MSVC has no support, and on DJGPP 2.05 it can have
problems in some cases).
2023-10-31 01:03:25 +08:00
Lasse Collin
ef71f83973 xz: Fix a too relaxed assertion and remove uses of SSIZE_MAX.
SSIZE_MAX isn't readily available on MSVC. Removing it means
that there is one thing less to worry when porting to MSVC.
2023-10-31 01:03:25 +08:00
Jia Tan
cf8ba7c3a8 Tests: Improve invalid unpadded size check in test_lzma_index_append().
This check was extended to test the code added to fix a failing assert
in 68bda971bb8b666a009331455fcedb4e18d837a4.
2023-10-31 01:02:59 +08:00
Jia Tan
4a4180ce74 Tests: Improve comments in test_index.c. 2023-10-26 06:22:24 +08:00
Jia Tan
4b23b84b89 Update THANKS. 2023-10-26 06:22:24 +08:00
Jia Tan
773f1e8622 liblzma: Update assert in vli_ceil4().
The argument to vli_ceil4() should always guarantee the return value
is also a valid lzma_vli. Thus the highest three valid lzma_vli values
are invalid arguments. All uses of the function ensure this so the
assert is updated to match this.
2023-10-26 06:22:24 +08:00
Jia Tan
68bda971bb liblzma: Add overflow check for Unpadded size in lzma_index_append().
This was not a security bug since there was no path to overflow
UINT64_MAX in lzma_index_append() or when it calls index_file_size().
The bug was discovered by a failing assert() in vli_ceil4() when called
from index_file_size() when unpadded_sum (the sum of the compressed size
of current Stream and the unpadded_size parameter) exceeds LZMA_VLI_MAX.

Previously, the unpadded_size parameter was checked to be not greater
than UNPADDED_SIZE_MAX, but no check was done once compressed_base was
added.

This could not have caused an integer overflow in index_file_size() when
called by lzma_index_append(). The calculation for file_size breaks down
into the sum of:

- Compressed base from all previous Streams
- 2 * LZMA_STREAM_HEADER_SIZE (size of the current Streams header and
  footer)
- stream_padding (can be set by lzma_index_stream_padding())
- Compressed base from the current Stream
- Unpadded size (parameter to lzma_index_append())

The sum of everything except for Unpadded size must be less than
LZMA_VLI_MAX. This is guarenteed by overflow checks in the functions
that can set these values including lzma_index_stream_padding(),
lzma_index_append(), and lzma_index_cat(). The maximum value for
Unpadded size is enforced by lzma_index_append() to be less than or
equal UNPADDED_SIZE_MAX. Thus, the sum cannot exceed UINT64_MAX since
LZMA_VLI_MAX is half of UINT64_MAX.

Thanks to Joona Kannisto for reporting this.
2023-10-26 06:22:24 +08:00
Jia Tan
b41bb79c60 Translations: Update the Esperanto translation. 2023-10-26 06:22:24 +08:00
Jia Tan
6614e6d4bf Docs: Update INSTALL for --enable-threads method win95.
The Autotools build allows win95 threads and --enable-small together now
if the compiler supports __attribute__((__constructor__)).
2023-10-26 06:22:24 +08:00
Jia Tan
bfb623ad96 CMake: Conditionally allow win95 threads and --enable-small. 2023-10-26 06:22:24 +08:00
Jia Tan
e919ebb29a Build: Conditionally allow win95 threads and --enable-small.
When the compiler supports __attribute__((__constructor__))
mythread_once() is never used, even with --enable-small. A configuration
with win95 threads and --enable-small will compile and be thread safe so
it can be allowed.

This isn't a very common configuration since MSVC does not support
__attribute__((__constructor__)), but MINGW32 and CLANG32 environments
for MSYS2 can use win95 threads and have
__attribute__((__constructor__)) support.
2023-10-26 06:22:24 +08:00
Jamaika1
c0c0cd4a48 mythread.h: Fix typo error in Vista threads mythread_once().
The "once_" variable was accidentally referred to as just "once". This
prevented building with Vista threads when
HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR was not defined.
2023-10-26 06:22:24 +08:00
Jia Tan
d93fbefcc4 Tests: Style fixes to test_lzip_decoder.c. 2023-10-26 06:22:24 +08:00
Jia Tan
65981d8e45 Translations: Update the Chinese (simplified) translation. 2023-10-26 06:22:22 +08:00
Lasse Collin
a108ed5891 xz: Omit an empty paragraph on the man page. 2023-08-02 17:39:50 +03:00
Jia Tan
03c51c5c08 Bump version and soname for 5.4.4. 2023-08-02 20:32:20 +08:00
Jia Tan
d7fa3f1b58 Add NEWS for 5.4.4. 2023-08-02 20:30:54 +08:00
Lasse Collin
6a1093c000 build-aux/manconv.sh: Fix US-ASCII and UTF-8 output.
groff defaults to SGR escapes. Using -P-c passes -c to grotty
which restores the old behavior. Perhaps there is a better way to
get pure plain text output but this works for now.
2023-08-02 15:20:31 +03:00
Lasse Collin
f6f9f5651a Update THANKS. 2023-08-01 19:10:58 +03:00
Lasse Collin
0dd83ba876 Update THANKS. 2023-08-01 18:44:02 +03:00
ChanTsune
4170a80785 mythread.h: Disable signal functions in builds targeting Wasm + WASI.
signal.h in WASI SDK doesn't currently provide sigprocmask()
or sigset_t. liblzma doesn't need them so this change makes
liblzma and xzdec build against WASI SDK. xz doesn't build yet
and the tests don't either as tuktest needs setjmp() which
isn't (yet?) implemented in WASI SDK.

Closes: https://github.com/tukaani-project/xz/pull/57
See also: https://github.com/tukaani-project/xz/pull/56

(The original commit was edited a little by Lasse Collin.)
2023-08-01 18:44:02 +03:00
Dimitri Papadopoulos Orfanos
0db6fbe0be Docs: Fix typos found by codespell 2023-08-01 18:44:02 +03:00
Jia Tan
84a3a1f4e4 Update .gitignore. 2023-08-01 18:42:23 +03:00
Jia Tan
962b3d41e0 CMake: Conditionally allow the creation of broken symlinks.
The CMake build will try to create broken symlinks on Unix and Unix-like
platforms. Cygwin and MSYS2 are Unix-like, but may not be able to create
broken symlinks. The value of the CYGWIN or MSYS environment variables
determine if broken symlinks are valid.

The default for MSYS2 does not allow for broken symlinks, so the CMake
build has been broken for MSYS2 since commit
80a1a8bb838842a2be343bd88ad1462c21c5e2c9.
2023-08-01 18:41:42 +03:00
Jia Tan
19899340cf liblzma: Prevent an empty translation unit in Windows builds.
To workaround Automake lacking Windows resource compiler support, an
empty source file is compiled to overwrite the resource files for static
library builds. Translation units without an external declaration are
not allowed by the C standard and result in a warning when used with
-Wempty-translation-unit (Clang) or -pedantic (GCC).
2023-08-01 18:41:42 +03:00
Jia Tan
ef7fbe8393 Tests: Skip .lz files in test_files.sh if not configured.
Previously if the lzip decoder was not configured then test_files.sh
would pass the lzip tests instead of skipping them.
2023-08-01 18:41:42 +03:00
Jia Tan
e49815ba7a Tests: Add ARM64 filter test to test_compress.sh. 2023-08-01 18:41:23 +03:00
Jia Tan
db5b57b827 Translations: Update the Vietnamese translation. 2023-07-31 21:26:52 +08:00
Jia Tan
e6ba501408 Translations: Update the Croatian translation. 2023-07-31 21:25:46 +08:00
Jia Tan
82657a1f10 Translations: Update the Korean man page translations. 2023-07-31 21:25:41 +08:00
Jia Tan
fab35907d1 Translations: Update the Korean translation. 2023-07-31 21:25:36 +08:00
Jia Tan
f530fe1964 Translations: Update the Polish translation. 2023-07-31 21:25:33 +08:00
Jia Tan
10b3500cc2 Translations: Update the German man page translations. 2023-07-31 21:25:30 +08:00
Jia Tan
3d14e8a34d Translations: Update the German translation. 2023-07-31 21:25:27 +08:00
Jia Tan
bdcc180a2d Translations: Update the Chinese (simplified) translation. 2023-07-31 21:25:23 +08:00
Jia Tan
844240350d Translations: Update the Swedish translation. 2023-07-31 21:25:20 +08:00
Jia Tan
bdc7952bcf Translations: Update the Ukrainian man page translations. 2023-07-31 21:25:16 +08:00
Jia Tan
143396e070 Translations: Update the Ukrainian translation. 2023-07-31 21:25:13 +08:00
Jia Tan
1b8146d64e Translations: Update the Spanish translation. 2023-07-31 21:25:09 +08:00
Jia Tan
f947ce09d7 Translations: Update the Romanian translation. 2023-07-31 21:25:05 +08:00
Jia Tan
f681301a36 Translations: Update the Romanian man page translations. 2023-07-31 21:24:58 +08:00
Jia Tan
8bc3146c6b xz: Update man page Authors and date. 2023-07-18 23:24:02 +08:00
Jia Tan
c2905540ef xz: Slight reword in xz man page for consistency.
Changed will print => prints in xz --robot --version description to
match --robot --info-memory description.
2023-07-18 23:24:02 +08:00
Jia Tan
2600d33524 liblzma: Improve comment in string_conversion.c.
The comment used "flag" when referring to decoder options. Just
referring to them as options is more clear and consistent.
2023-07-18 23:24:02 +08:00
Jia Tan
98fc14541e liblzma: Reword lzma_str_list_filters() documentation.
Reword "options required" to "options read". The previous wording
may have suggested that the options listed were all required when
the filters are used for encoding or decoding. Now it should be
more clear that the options listed are the ones relevant for
encoding or decoding.
2023-07-18 23:21:23 +08:00
Lasse Collin
1ac79b4cba xz: Translate the second "%s: " in message.c since French needs "%s : ".
This string is used to print a filename when using "xz -v" and
stderr isn't a terminal.
2023-07-18 17:41:55 +03:00
Lasse Collin
97851be2c6 xz: Make "%s: %s" translatable because French needs "%s : %s". 2023-07-18 14:37:07 +03:00
Lasse Collin
b406828a6d liblzma: Tweak #if condition in memcmplen.h.
Maybe ICC always #defines _MSC_VER on Windows but now
it's very clear which code will get used.
2023-07-18 14:03:08 +03:00
Lasse Collin
ef4a07ad94 liblzma: Omit unnecessary parenthesis in a preprocessor directive. 2023-07-18 14:03:08 +03:00
Jia Tan
64ee0caaea liblzma: Prevent warning for MSYS2 Windows build.
In lzma_memcmplen(), the <intrin.h> header file is only included if
_MSC_VER and _M_X64 are both defined but _BitScanForward64() was
previously used if _M_X64 was defined. GCC for MSYS2 defines _M_X64 but
not _MSC_VER so _BitScanForward64() was used without including
<intrin.h>.

Now, lzma_memcmplen() will use __builtin_ctzll() for MSYS2 GCC builds as
expected.
2023-07-18 14:03:08 +03:00
Jia Tan
ba17705764 Docs: Add a new section to INSTALL for Tests.
The new Tests section describes basic information about the tests, how
to run them, and important details when cross compiling. We have had a
few questions about how to compile the tests without running them, so
hopefully this information will help others with the same question in the
future.

Fixes: https://github.com/tukaani-project/xz/issues/54
2023-07-18 13:28:51 +03:00
Jia Tan
0745b900fa Docs: Update README.
This adds an entry to "Other implementations of the .xz format" for
XZ for Java.
2023-07-18 13:28:51 +03:00
Jia Tan
c972d44103 xz: Fix typo in man page.
The Memory limit information section described three output
columns when it actually has six. This was reworded to
"multiple" to make it more future proof.
2023-07-18 13:27:46 +03:00
Jia Tan
6e21f1b4e2 Tests: Improve feature testing for skipping.
Fixed a bug where test_compress_* would all fail if arm64 or armthumb
filters were enabled for compression but arm was disabled. Since the
grep tests only checked for "define HAVE_ENCODER_ARM", this would match
on HAVE_ENCODER_ARM64 or HAVE_ENCODER_ARMTHUMB.

Now the config.h feature test requires " 1" at the end to prevent the
prefix problem. have_feature() was also updated for this even though
there were known current bugs affecting it. This is just in case future
features have a similar prefix problem.
2023-07-18 13:26:48 +03:00
Jia Tan
26c37d290c Translations: Update the Chinese (traditional) translation. 2023-07-18 13:26:48 +03:00
Jia Tan
2ec65181e2 Translations: Update the Vietnamese translation. 2023-07-18 13:26:48 +03:00
Jia Tan
c44c7e7590 Tests: Fix memory leaks in test_index.
Several tests were missing calls to lzma_index_end() to clean up the
lzma_index structs. The memory leaks were discovered by using
-fsanitize=address with GCC.
2023-07-18 13:26:48 +03:00
Jia Tan
b9499c94fc Tests: Fix memory leaks in test_block_header.
test_block_header was not properly freeing the filter options between
calls to lzma_block_header_decode(). The memory leaks were discovered by
using -fsanitize=address with GCC.
2023-07-18 13:26:48 +03:00
Jia Tan
1155471651 liblzma: Prevent uninitialzed warning in mt stream encoder.
This change only impacts the compiler warning since it was impossible
for the wait_abs struct in stream_encode_mt() to be used before it was
initialized since mythread_condtime_set() will always be called before
mythread_cond_timedwait().

Since the mythread.h code is different between the POSIX and
Windows versions, this warning was only present on Windows builds.

Thanks to Arthur S for reporting the warning and providing an initial
patch.
2023-07-18 13:20:16 +03:00
Jia Tan
62dd1c9bf0 Update THANKS. 2023-07-18 13:03:12 +03:00
Benjamin Buch
d04eb78ab3 CMake: Protects against double find_package
Boost iostream uses `find_package` in quiet mode and then again uses
`find_package` with required. This second call triggers a
`add_library cannot create imported target "LibLZMA::LibLZMA"
because another target with the same name already exists.`

This can simply be fixed by skipping the alias part on secondary
`find_package` runs.
2023-07-18 13:02:02 +03:00
Jia Tan
12ea1fb297 Translations: Update the Esperanto translation. 2023-07-18 12:59:10 +03:00
Jia Tan
a4d45c07c1 Translations: Update the Croatian translation. 2023-07-18 12:59:10 +03:00
Jia Tan
f51b7bcea6 Translations: Update the Chinese (simplified) translation. 2023-07-18 12:59:10 +03:00
Jia Tan
d5b81c19a7 Translations: Update German translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan
36860a3e30 Translations: Update the German translation. 2023-07-18 12:59:10 +03:00
Jia Tan
f05641ef0d Translations: Update the Croatian translation. 2023-07-18 12:59:10 +03:00
Jia Tan
b852f6f11d Translations: Update Korean translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan
fdcb78fb6f Translations: Update the Korean translation. 2023-07-18 12:59:10 +03:00
Jia Tan
9e39cebe3c Translations: Update the Spanish translation. 2023-07-18 12:59:10 +03:00
Jia Tan
7a578d1d82 Translations: Update the Romanian translation. 2023-07-18 12:59:10 +03:00
Jia Tan
362320fea5 Translations: Update Romanian translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan
29c5a870be Translations: Update Ukrainian translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan
5ee5757277 Translations: Update the Ukrainian translation. 2023-07-18 12:59:10 +03:00
Jia Tan
dfc257bdb2 Translations: Update the Polish translation. 2023-07-18 12:59:10 +03:00
Jia Tan
f6df4c4ab7 Translations: Update the Swedish translation. 2023-07-18 12:59:10 +03:00
Jia Tan
25da22e052 Translations: Update the Esperanto translation. 2023-07-18 12:59:09 +03:00
Jia Tan
4f57a9c991 liblzma: Adds lzma_nothrow to MicroLZMA API functions.
None of the liblzma functions may throw an exception, so this
attribute should be applied to all liblzma API functions.
2023-07-18 12:48:53 +03:00
Jia Tan
238b4e5458 Translations: Update the Croatian translation. 2023-05-04 22:23:01 +08:00
Jia Tan
0cee63c3c6 Bump version and soname for 5.4.3. 2023-05-04 22:02:29 +08:00
Jia Tan
01f937ea9a Add NEWS for 5.4.3. 2023-05-04 22:02:29 +08:00
Lasse Collin
e9b9ea9531 tuklib_integer.h: Fix a recent copypaste error in Clang detection.
Wrong line was changed in 7062348bf35c1e4cbfee00ad9fffb4a21aa6eff7.
Also, this has >= instead of == since ints larger than 32 bits would
work too even if not relevant in practice.
2023-05-03 22:55:54 +03:00
Jia Tan
be6e39a862 Update THANKS. 2023-04-25 20:19:37 +08:00
Jia Tan
9e343a46cf Windows: Include <intrin.h> when needed.
Legacy Windows did not need to #include <intrin.h> to use the MSVC
intrinsics. Newer versions likely just issue a warning, but the MSVC
documentation says to include the header file for the intrinsics we use.

GCC and Clang can "pretend" to be MSVC on Windows, so extra checks are
needed in tuklib_integer.h to only include <intrin.h> when it will is
actually needed.
2023-04-25 20:19:32 +08:00
Jia Tan
12321a9390 tuklib_integer: Use __builtin_clz() with Clang.
Clang has support for __builtin_clz(), but previously Clang would
fallback to either the MSVC intrinsic or the regular C code. This was
discovered due to a bug where a new version of Clang required the
<intrin.h> header file in order to use the MSVC intrinsics.

Thanks to Anton Kochkov for notifying us about the bug.
2023-04-25 20:19:28 +08:00
Lasse Collin
d1f0e01c39 liblzma: Update project maintainers in lzma.h.
AUTHORS was updated earlier, lzma.h was simply forgotten.
2023-04-25 20:19:21 +08:00
Jia Tan
8204c5d130 liblzma: Cleans up old commented out code. 2023-04-25 20:19:10 +08:00
Jia Tan
32980d1562 CMake: Update liblzma-config.cmake generation.
Now that the threading is configurable, the liblzma CMake package only
needs the threading library when using POSIX threads.
2023-04-25 20:18:55 +08:00
Jia Tan
023907faa9 CMake: Allows setting thread method.
The thread method is now configurable for the CMake build. It matches
the Autotools build by allowing ON (pick the best threading method),
OFF (no threading), posix, win95, and vista. If both Windows and
posix threading are both available, then ON will choose Windows
threading. Windows threading will also not use:

target_link_libraries(liblzma Threads::Threads)

since on systems like MinGW-w64 it would link the posix threads
without purpose.
2023-04-25 20:18:45 +08:00
Jia Tan
ba176d77cb CMake: Only build xzdec if decoders are enabled. 2023-04-25 20:18:31 +08:00
Jia Tan
c99d697df8 Build: Removes redundant check for LZMA1 filter support. 2023-04-25 20:18:18 +08:00
Lasse Collin
54a2fd8c85 CMake: Bump maximum policy version to 3.26.
It adds only one new policy related to FOLDERS which we don't use.
This makes it clear that the code is compatible with the policies
up to 3.26.
2023-04-25 20:18:08 +08:00
Jia Tan
622d0fdc02 CMake: Conditionally build xz list.* files if decoders are enabled. 2023-04-25 20:18:00 +08:00
Jia Tan
3e2dc523c5 CMake: Allow configuring features as cache variables.
This allows users to change the features they build either in
CMakeCache.txt or by using a CMake GUI. The sources built for
liblzma are affected by this too, so only the necessary files
will be compiled.
2023-04-25 20:17:49 +08:00
Lasse Collin
0c053f9733 Build: Add a comment that AC_PROG_CC_C99 is needed for Autoconf 2.69.
It's obsolete in Autoconf >= 2.70 and just an alias for AC_PROG_CC
but Autoconf 2.69 requires AC_PROG_CC_C99 to get a C99 compiler.
2023-03-21 14:14:35 +02:00
Lasse Collin
915d4f6058 Build: configure.ac: Use AS_IF and AS_CASE where required.
This makes no functional difference in the generated configure
(at least with the Autotools versions I have installed) but this
change might prevent future bugs like the one that was just
fixed in the commit 5a5bd7f871818029d5ccbe189f087f591258c294.
2023-03-21 14:14:35 +02:00
Lasse Collin
b848c03958 Update THANKS. 2023-03-21 14:14:35 +02:00
Lasse Collin
c775ba1602 Build: Fix --disable-threads breaking the building of shared libs.
This is broken in the releases 5.2.6 to 5.4.2. A workaround
for these releases is to pass EGREP='grep -E' as an argument
to configure in addition to --disable-threads.

The problem appeared when m4/ax_pthread.m4 was updated in
the commit 6629ed929cc7d45a11e385f357ab58ec15e7e4ad which
introduced the use of AC_EGREP_CPP. AC_EGREP_CPP calls
AC_REQUIRE([AC_PROG_EGREP]) to set the shell variable EGREP
but this was only executed if POSIX threads were enabled.
Libtool code also has AC_REQUIRE([AC_PROG_EGREP]) but Autoconf
omits it as AC_PROG_EGREP has already been required earlier.
Thus, if not using POSIX threads, the shell variable EGREP
would be undefined in the Libtool code in configure.

ax_pthread.m4 is fine. The bug was in configure.ac which called
AX_PTHREAD conditionally in an incorrect way. Using AS_CASE
ensures that all AC_REQUIREs get always run.

Thanks to Frank Busse for reporting the bug.
Fixes: https://github.com/tukaani-project/xz/issues/45
2023-03-21 14:14:35 +02:00
Lasse Collin
0673c9ec98 liblzma: Silence -Wsign-conversion in SSE2 code in memcmplen.h.
Thanks to Christian Hesse for reporting the issue.
Fixes: https://github.com/tukaani-project/xz/issues/44
2023-03-19 22:46:26 +02:00
Jia Tan
6ca8046ecb Bump version and soname for 5.4.2. 2023-03-18 23:22:06 +08:00
Jia Tan
ce4f246600 Add NEWS for 5.4.2. 2023-03-18 22:24:08 +08:00
Lasse Collin
3634fe3307 Update the copy of GNU GPLv3 from gnu.org to COPYING.GPLv3. 2023-03-18 22:02:45 +08:00
Lasse Collin
97679d25ce Change a few HTTP URLs to HTTPS.
The xz man page timestamp was intentionally left unchanged.
2023-03-18 22:02:40 +08:00
Jia Tan
01a67e89a5 CMake: Fix typo in a comment. 2023-03-18 00:41:09 +08:00
Lasse Collin
5dca3f5cba Windows: build.bash: Copy liblzma API docs to the output package. 2023-03-18 00:39:32 +08:00
Lasse Collin
ae252862b3 Windows: Add microlzma_*.c to the VS project files.
These should have been included in 5.3.2alpha already.
2023-03-17 20:19:38 +08:00
Lasse Collin
147d282cc3 CMake: Add microlzma_*.c to the build.
These should have been included in 5.3.2alpha already.
2023-03-17 20:19:34 +08:00
Lasse Collin
4523a5ee29 Build: Update comments about unaligned access to mention 64-bit. 2023-03-17 20:19:29 +08:00
Lasse Collin
82aacb4036 Tests: Update .gitignore. 2023-03-17 20:19:24 +08:00
Lasse Collin
5d022c2492 po4a/update-po: Display the script name consistently in error messages. 2023-03-17 20:19:20 +08:00
Jia Tan
8962951173 Doc: Rename Doxygen HTML doc directory name liblzma => api.
When the docs are installed, calling the directory "liblzma" is
confusing since multiple other files in the doc directory are for
liblzma. This should also make it more natural for distros when they
package the documentation.
2023-03-17 20:19:16 +08:00
Jia Tan
94097157fa liblzma: Remove note from lzma_options_bcj about the ARM64 exception.
This was left in by mistake since an early version of the ARM64 filter
used a different struct for its options.
2023-03-17 20:19:10 +08:00
Lasse Collin
da16d0b73b COPYING: Add a note about the included Doxygen-generated HTML. 2023-03-17 20:19:02 +08:00
Jia Tan
e57c74f9ef Doc: Update PACKAGERS with details about liblzma API docs install. 2023-03-17 20:18:57 +08:00
Jia Tan
7e2fa48bb7 liblzma: Add set lzma.h as the main page for Doxygen documentation.
The \mainpage command is used in the first block of comments in lzma.h.
This changes the previously nearly empty index.html to use the first
comment block in lzma.h for its contents.

lzma.h is no longer documented separately, but this is for the better
since lzma.h only defined a few macros that users do not need to use.
The individual API header files all have a disclaimer that they should
not be #included directly, so there should be no confusion on the fact
that lzma.h should be the only header used by applications.

Additionally, the note "See ../lzma.h for information about liblzma as
a whole." was removed since lzma.h is now the main page of the
generated HTML and does not have its own page anymore. So it would be
confusing in the HTML version and was only a "nice to have" when
browsing the source files.
2023-03-17 20:18:52 +08:00
Jia Tan
d42977c7ac Build: Generate doxygen documentation in autogen.sh.
Another command line option (--no-doxygen) was added to disable
creating the doxygen documenation in cases where it not wanted or
if the doxygen tool is not installed.
2023-03-17 20:18:46 +08:00
Jia Tan
8fc712fcf4 Build: Create doxygen/update-doxygen script.
This is a helper script to generate the Doxygen documentation. It can be
run in 'liblzma' or 'internal' mode by setting the first argument. It
will default to 'liblzma' mode and only generate documentation for the
liblzma API header files.

The helper script will be run during the custom mydist hook when we
create releases. This hook already alters the source directory, so its
fine to do it here too. This way, we can include the Doxygen generated
files in the distrubtion and when installing.

In 'liblzma' mode, the JavaScript is stripped from the .html files and
the .js files are removed. This avoids license hassle from jQuery and
other libraries that Doxygen 1.9.6 puts into jquery.js in minified form.
2023-03-17 20:18:41 +08:00
Jia Tan
77d2c025d1 Build: Install Doxygen docs and include in distribution if generated.
Added a install-data-local target to install the Doxygen documentation
only when it has been generated. In order to correctly remove the docs,
a corresponding uninstall-local target was added.

If the doxygen docs exist in the source tree, they will also be included
in the distribution now too.
2023-03-17 20:18:36 +08:00
Jia Tan
9af8f6f947 Doxygen: Refactor Doxyfile.in to doxygen/Doxyfile.
Instead of having Doxyfile.in configured by Autoconf, the Doxyfile
can have the tags that need to be configured piped into the doxygen
command through stdin with the overrides after Doxyfile's contents.

Going forward, the documentation should be generated in two different
modes: liblzma or internal.

liblzma is useful for most users. It is the documentation for just
the liblzma API header files. This is the default.

internal is for people who want to understand how xz and liblzma work.
It might be useful for people who want to contribute to the project.
2023-03-17 20:17:27 +08:00
Jia Tan
1c558a2692 Tests: Remove unused macros and functions. 2023-03-13 20:53:26 +08:00
Jia Tan
7479a69a45 Tests: Refactors existing lzma_index tests.
Converts the existing lzma_index tests into tuktests and covers every
API function from index.h except for lzma_file_info_decoder, which can
be tested in the future.
2023-03-13 20:53:12 +08:00
Lasse Collin
fd56d53533 xz: Make Capsicum sandbox more strict with stdin and stdout. 2023-03-11 19:34:39 +02:00
Lasse Collin
d1bdaaebc6 xz: Don't fail if Capsicum is enabled but kernel doesn't support it.
(This commit combines related commits from the master branch.)

If Capsicum support is missing from the kernel or xz is being run
in an emulator that lacks Capsicum suport, the syscalls will fail
and set errno to ENOSYS. Previously xz would display and error and
exit, making xz unusable. Now it will check for ENOSYS and run
without sandbox support. Other tools like ssh behave similarly.

Displaying a warning for missing Capsicum support was considered
but such extra output would quickly become annoying. It would also
break test_scripts.sh in "make check".

Also move cap_enter() to be the first step instead of the last one.
This matches the example in the cap_rights_limit(2) man page. With
the current code it shouldn't make any practical difference though.

Thanks to Xin Li for the bug report, suggesting a fix, and testing:
https://github.com/tukaani-project/xz/pull/43

Thanks to Jia Tan for most of the original commits.
2023-03-11 19:31:40 +02:00
Jia Tan
5d351c69c1 Build: Adjust CMake version search regex.
Now, the LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, and LZMA_VERSION_PATCH
macros do not need to be on consecutive lines in version.h. They can be
separated by more whitespace, comments, or even other content, as long
as they appear in the proper order (major, minor, patch).
2023-03-07 23:57:39 +08:00
Jia Tan
b82d4831e3 liblzma: Improve documentation for version.h.
Specified parameter and return values for API functions and documented
a few more of the macros.
2023-03-07 23:57:39 +08:00
Jia Tan
2caba3efe3 liblzma: Clarify lzma_lzma_preset() documentation in lzma12.h.
lzma_lzma_preset() does not guarentee that the lzma_options_lzma are
usable in an encoder even if it returns false (success). If liblzma
is built with default configurations, then the options will always be
usable. However if the match finders hc3, hc4, or bt4 are disabled, then
the options may not be usable depending on the preset level requested.

The documentation was updated to reflect this complexity, since this
behavior was unclear before.
2023-03-07 23:25:17 +08:00
Lasse Collin
594f904673 CMake: Require that the C compiler supports C99 or a newer standard.
Thanks to autoantwort for reporting the issue and suggesting
a different patch:
https://github.com/tukaani-project/xz/pull/42
2023-03-07 23:25:12 +08:00
Jia Tan
88101143cb Tests: Small tweak to test-vli.c.
The static global variables can be disabled if encoders and decoders
are not built. If they are not disabled and -Werror is used, it will
cause an usused warning as an error.
2023-03-07 23:24:56 +08:00
Jia Tan
4042dbf03a liblzma: Replace '\n' -> newline in filter.h documentation.
The '\n' renders as a newline when the comments are converted to html
by Doxygen.
2023-03-07 23:24:46 +08:00
Jia Tan
3971f5c502 liblzma: Shorten return description for two functions in filter.h.
Shorten the description for lzma_raw_encoder_memusage() and
lzma_raw_decoder_memusage().
2023-03-07 23:24:42 +08:00
Jia Tan
5e61b39432 liblzma: Reword a few lines in filter.h 2023-03-07 23:24:38 +08:00
Jia Tan
8a53533869 liblzma: Improve documentation in filter.h.
All functions now explicitly specify parameter and return values.
The notes and code annotations were moved before the parameter and
return value descriptions for consistency.

Also, the description above lzma_filter_encoder_is_supported() about
not being able to list available filters was removed since
lzma_str_list_filters() will do this.
2023-03-07 23:24:32 +08:00
Lasse Collin
6d05b08b17 Update THANKS. 2023-03-07 23:24:27 +08:00
Lasse Collin
dfc9a54082 liblzma: Avoid null pointer + 0 (undefined behavior in C).
In the C99 and C17 standards, section 6.5.6 paragraph 8 means that
adding 0 to a null pointer is undefined behavior. As of writing,
"clang -fsanitize=undefined" (Clang 15) diagnoses this. However,
I'm not aware of any compiler that would take advantage of this
when optimizing (Clang 15 included). It's good to avoid this anyway
since compilers might some day infer that pointer arithmetic implies
that the pointer is not NULL. That is, the following foo() would then
unconditionally return 0, even for foo(NULL, 0):

    void bar(char *a, char *b);

    int foo(char *a, size_t n)
    {
        bar(a, a + n);
        return a == NULL;
    }

In contrast to C, C++ explicitly allows null pointer + 0. So if
the above is compiled as C++ then there is no undefined behavior
in the foo(NULL, 0) call.

To me it seems that changing the C standard would be the sane
thing to do (just add one sentence) as it would ensure that a huge
amount of old code won't break in the future. Based on web searches
it seems that a large number of codebases (where null pointer + 0
occurs) are being fixed instead to be future-proof in case compilers
will some day optimize based on it (like making the above foo(NULL, 0)
return 0) which in the worst case will cause security bugs.

Some projects don't plan to change it. For example, gnulib and thus
many GNU tools currently require that null pointer + 0 is defined:

    https://lists.gnu.org/archive/html/bug-gnulib/2021-11/msg00000.html

    https://www.gnu.org/software/gnulib/manual/html_node/Other-portability-assumptions.html

In XZ Utils null pointer + 0 issue should be fixed after this
commit. This adds a few if-statements and thus branches to avoid
null pointer + 0. These check for size > 0 instead of ptr != NULL
because this way bugs where size > 0 && ptr == NULL will likely
get caught quickly. None of them are in hot spots so it shouldn't
matter for performance.

A little less readable version would be replacing

    ptr + offset

with

    offset != 0 ? ptr + offset : ptr

or creating a macro for it:

    #define my_ptr_add(ptr, offset) \
            ((offset) != 0 ? ((ptr) + (offset)) : (ptr))

Checking for offset != 0 instead of ptr != NULL allows GCC >= 8.1,
Clang >= 7, and Clang-based ICX to optimize it to the very same code
as ptr + offset. That is, it won't create a branch. So for hot code
this could be a good solution to avoid null pointer + 0. Unfortunately
other compilers like ICC 2021 or MSVC 19.33 (VS2022) will create a
branch from my_ptr_add().

Thanks to Marcin Kowalczyk for reporting the problem:
https://github.com/tukaani-project/xz/issues/36
2023-03-07 23:24:15 +08:00
Jia Tan
f6dce49cb6 liblzma: Adjust container.h for consistency with filter.h. 2023-03-07 23:24:09 +08:00
Jia Tan
173d240bb4 liblzma: Fix small typos and reword a few things in filter.h. 2023-03-07 23:24:05 +08:00
Jia Tan
17797bacde liblzma: Convert list of flags in lzma_mt to bulleted list. 2023-03-07 23:24:00 +08:00
Jia Tan
37da0e7271 liblzma: Fix typo in documentation in container.h
lzma_microlzma_decoder -> lzma_microlzma_encoder
2023-03-07 23:23:55 +08:00
Jia Tan
b8331077c6 liblzma: Improve documentation for container.h
Standardizing each function to always specify parameters and return
values. Also moved the parameters and return values to the end of each
function description.
2023-03-07 23:23:51 +08:00
Jia Tan
b9a3511bb6 CMake: Add LZIP decoder test to list of tests. 2023-03-07 23:23:41 +08:00
Lasse Collin
cd82ef2fb4 Update THANKS. 2023-03-07 23:23:34 +08:00
Lasse Collin
076e911ba2 Build: Use only the generic symbol versioning on MicroBlaze.
On MicroBlaze, GCC 12 is broken in sense that
__has_attribute(__symver__) returns true but it still doesn't
support the __symver__ attribute even though the platform is ELF
and symbol versioning is supported if using the traditional
__asm__(".symver ...") method. Avoiding the traditional method is
good because it breaks LTO (-flto) builds with GCC.

See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766

For now the only extra symbols in liblzma_linux.map are the
compatibility symbols with the patch that spread from RHEL/CentOS 7.
These require the use of __symver__ attribute or __asm__(".symver ...")
in the C code. Compatibility with the patch from CentOS 7 doesn't
seem valuable on MicroBlaze so use liblzma_generic.map on MicroBlaze
instead. It doesn't require anything special in the C code and thus
no LTO issues either.

An alternative would be to detect support for __symver__
attribute in configure.ac and CMakeLists.txt and fall back
to __asm__(".symver ...") but then LTO would be silently broken
on MicroBlaze. It sounds likely that MicroBlaze is a special
case so let's treat it as a such because that is simpler. If
a similar issue exists on some other platform too then hopefully
someone will report it and this can be reconsidered.

(This doesn't do the same fix in CMakeLists.txt. Perhaps it should
but perhaps CMake build of liblzma doesn't matter much on MicroBlaze.
The problem breaks the build so it's easy to notice and can be fixed
later.)

Thanks to Vincent Fazio for reporting the problem and proposing
a patch (in the end that solution wasn't used):
https://github.com/tukaani-project/xz/pull/32
2023-03-07 23:23:29 +08:00
Lasse Collin
bc34e5ac99 liblzma: Very minor API doc tweaks.
Use "member" to refer to struct members as that's the term used
by the C standard.

Use lzma_options_delta.dist and such in docs so that in Doxygen's
HTML output they will link to the doc of the struct member.

Clean up a few trailing white spaces too.
2023-03-07 23:23:19 +08:00
Jia Tan
d31fbd28be liblzma: Adjust spacing in doc headers in bcj.h. 2023-03-07 23:23:04 +08:00
Jia Tan
701e9be6be liblzma: Adjust documentation in bcj.h for consistent style. 2023-03-07 23:22:57 +08:00
Jia Tan
762c4d0b62 liblzma: Rename field => member in documentation.
Also adjusted preset value => preset level.
2023-03-07 23:22:46 +08:00
Lasse Collin
0ce1db0223 liblzma: Silence a warning from MSVC.
It gives C4146 here since unary minus with unsigned integer
is still unsigned (which is the intention here). Doing it
with substraction makes it clearer and avoids the warning.

Thanks to Nathan Moinvaziri for reporting this.
2023-03-07 23:22:21 +08:00
Jia Tan
d83da006b3 liblzma: Improve documentation for stream_flags.h
Standardizing each function to always specify parameters and return
values. Also moved the parameters and return values to the end of each
function description.

A few small things were reworded and long sentences broken up.
2023-03-07 23:21:47 +08:00
Jia Tan
2796bb4736 liblzma: Improve documentation in lzma12.h.
All functions now explicitly specify parameter and return values.
2023-02-15 22:48:21 +08:00
Jia Tan
ebebaa8d93 liblzma: Improve documentation in check.h.
All functions now explicitly specify parameter and return values.
Also moved the note about SHA-256 functions not being exported to the
top of the file.
2023-02-15 22:48:07 +08:00
Jia Tan
765fa2865a liblzma: Improve documentation in index.h
All functions now explicitly specify parameter and return values.
2023-02-15 22:47:59 +08:00
Jia Tan
918e208af5 liblzma: Reword a comment in index.h. 2023-02-15 22:47:55 +08:00
Jia Tan
1f157d214b liblzma: Omit lzma_index_iter's internal field from Doxygen docs.
Add \private above this field and its sub-fields since it is not meant
to be modified by users.
2023-02-15 22:47:36 +08:00
Jia Tan
28757fa46d liblzma: Fix documentation for LZMA_MEMLIMIT_ERROR.
LZMA_MEMLIMIT_ERROR was missing the "<" character needed to put
documentation after a member.
2023-02-15 22:47:29 +08:00
Jia Tan
135d5a1a65 liblzma: Improve documentation for base.h.
Standardizing each function to always specify params and return values.
Also fixed a small grammar mistake.
2023-02-15 22:46:41 +08:00
Jia Tan
2287d56683 liblzma: Minor improvements to vli.h.
Added [out] annotations to parameters that are pointers and can have
their value changed. Also added a clarification to lzma_vli_is_valid.
2023-02-15 22:46:25 +08:00
Jia Tan
7124b8a16a liblzma: Add comments for macros in delta.h.
Document LZMA_DELTA_DIST_MIN and LZMA_DELTA_DIST_MAX for completeness
and to avoid Doxygen warnings.
2023-02-15 22:45:57 +08:00
Jia Tan
59c7bb8931 liblzma: Improve documentation in index_hash.h.
All functions now explicitly specify parameter and return values.
Also reworded the description of lzma_index_hash_init() for readability.
2023-02-15 22:45:51 +08:00
Jia Tan
e970c28ac3 liblzma: Fix bug in lzma_str_from_filters() not checking filters[] length.
The bug is only a problem in applications that do not properly terminate
the filters[] array with LZMA_VLI_UNKNOWN or have more than
LZMA_FILTERS_MAX filters. This bug does not affect xz.
2023-02-03 21:43:01 +08:00
Jia Tan
85e01266a9 Tests: Create test_filter_str.c.
Tests lzma_str_to_filters(), lzma_str_from_filters(), and
lzma_str_list_filters() API functions.
2023-02-03 21:42:48 +08:00
Jia Tan
3fa0f3ba12 liblzma: Fix typos in comments in string_conversion.c. 2023-02-03 21:42:40 +08:00
Jia Tan
32dbe045d7 liblzma: Clarify block encoder and decoder documentation.
Added a few sentences to the description for lzma_block_encoder() and
lzma_block_decoder() to highlight that the Block Header must be coded
before calling these functions.
2023-02-03 21:42:35 +08:00
Jia Tan
ccf12acbfa Update lzma_block documentation for lzma_block_uncomp_encode(). 2023-02-03 21:42:30 +08:00
Jia Tan
6a0b168dd9 liblzma: Minor edits to lzma_block header_size documentation. 2023-02-03 21:42:27 +08:00
Jia Tan
84ce36f90e liblzma: Enumerate functions that read version in lzma_block. 2023-02-03 21:42:24 +08:00
Jia Tan
d662077468 liblzma: Clarify comment in block.h. 2023-02-03 21:42:19 +08:00
Jia Tan
880adb5aa2 liblzma: Improve documentation for block.h.
Standardizing each function to always specify params and return values.
Output pointer parameters are also marked with doxygen style [out] to
make it clear. Any note sections were also moved above the parameter and
return sections for consistency.
2023-02-03 21:42:14 +08:00
Jia Tan
b5b1b1f061 liblzma: Clarify a comment about LZMA_STR_NO_VALIDATION.
The flag description for LZMA_STR_NO_VALIDATION was previously confusing
about the treatment for filters than cannot be used with .xz format
(lzma1) without using LZMA_STR_ALL_FILTERS. Now, it is clear that
LZMA_STR_NO_VALIDATION is not a super set of LZMA_STR_ALL_FILTERS.
2023-02-03 21:42:07 +08:00
Jia Tan
e904e778b8 Translations: Add Brazilian Portuguese translation of man pages.
Thanks to Rafael Fontenelle.
2023-02-03 21:39:59 +08:00
Jia Tan
e9c47e79c9 liblzma: Fix documentation in filter.h for lzma_str_to_filters()
The previous documentation for lzma_str_to_filters() was technically
correct, but misleading. lzma_str_to_filters() returns NULL on success,
which is in practice always defined to 0. This is the same value as
LZMA_OK, but lzma_str_to_filters() does not return lzma_ret so we should
be more clear.
2023-02-03 21:38:26 +08:00
Jia Tan
99575947a5 xz: Refactor duplicated check for custom suffix when using --format=raw 2023-02-03 21:38:26 +08:00
Jia Tan
76dec92fcc liblzma: Set documentation on all reserved fields to private.
This prevents the reserved fields from being part of the generated
Doxygen documentation.
2023-02-03 21:38:26 +08:00
Jia Tan
bd213d06eb liblzma: Highlight liblzma API headers should not be included directly.
This improves the generated Doxygen HTML files to better highlight
how to properly use the liblzma API header files.
2023-02-03 21:38:26 +08:00
Jia Tan
257dbff0ba tuklib_physmem: Silence warning from -Wcast-function-type on MinGW-w64.
tuklib_physmem depends on GetProcAddress() for both MSVC and MinGW-w64
to retrieve a function address. The proper way to do this is to cast the
return value to the type of function pointer retrieved. Unfortunately,
this causes a cast-function-type warning, so the best solution is to
simply ignore the warning.
2023-02-03 21:38:13 +08:00
Jia Tan
720ad4a442 xz: Add missing comment for coder_set_compression_settings() 2023-02-03 21:11:32 +08:00
Jia Tan
88dc191634 xz: Do not set compression settings with raw format in list mode.
Calling coder_set_compression_settings() in list mode with verbose mode
on caused the filter chain and memory requirements to print. This was
unnecessary since the command results in an error and not consistent
with other formats like lzma and alone.
2023-02-03 21:11:11 +08:00
Jia Tan
039e0ab13e Translations: Update the Brazilian Portuguese translation. 2023-02-03 21:10:57 +08:00
Lasse Collin
718f7a60e7 Build: Omit -Wmissing-noreturn from the default warnings.
It's not that important. It can be annoying in builds that
disable many features since in those cases the tests programs
will correctly trigger this warning with Clang.
2023-02-03 21:10:47 +08:00
Lasse Collin
3ccedb0972 xz: Use ssize_t for the to-be-ignored return value from write(fd, ptr, 1).
It makes no difference here as the return value fits into an int
too and it then gets ignored but this looks better.
2023-02-03 21:10:42 +08:00
Lasse Collin
09fbd2f052 xz: Silence warnings from -Wsign-conversion in a 32-bit build. 2023-02-03 21:10:38 +08:00
Lasse Collin
683d3f178e liblzma: Silence another warning from -Wsign-conversion in a 32-bit build.
It doesn't warn on a 64-bit system because truncating
a ptrdiff_t (signed long) to uint32_t is diagnosed under
-Wconversion by GCC and -Wshorten-64-to-32 by Clang.
2023-02-03 21:10:30 +08:00
Lasse Collin
2b8062ef94 liblzma: Silence a warning from -Wsign-conversion in a 32-bit build. 2023-02-03 21:10:25 +08:00
Lasse Collin
b16b9c0d22 Build: Make configure add more warning flags for GCC and Clang.
-Wstrict-aliasing was removed from the list since it is enabled
by -Wall already.

A normal build is clean with these on GNU/Linux x86-64 with
GCC 12.2.0 and Clang 14.0.6.
2023-02-03 21:10:19 +08:00
Lasse Collin
c47ecd6d39 Tests: Fix warnings from clang --Wassign-enum.
Explicitly casting the integer to lzma_check silences the warning.
Since such an invalid value is needed in multiple tests, a constant
INVALID_LZMA_CHECK_ID was added to tests.h.

The use of 0x1000 for lzma_block.check wasn't optimal as if
the underlying type is a char then 0x1000 will be truncated to 0.
However, in these test cases the value is ignored, thus even with
such truncation the test would have passed.
2023-02-03 21:10:06 +08:00
Lasse Collin
34e13ce015 Tests: Silence warnings from -Wsign-conversion.
Note that assigning an unsigned int to lzma_check doesn't warn
on GNU/Linux x86-64 since the enum type is unsigned on that
platform. The enum can be signed on some other platform though
so it's best to use enumeration type lzma_check in these situations.
2023-02-03 21:10:01 +08:00
Lasse Collin
6671d0fe46 liblzma: Silence warnings from clang -Wconditional-uninitialized.
This is similar to 2ce4f36f179a81d0c6e182a409f363df759d1ad0.
The actual initialization of the variables is done inside
mythread_sync() macro. Clang doesn't seem to see that
the initialization code inside the macro is always executed.
2023-02-03 21:09:42 +08:00
Lasse Collin
d3e833ca1d Fix warnings from clang -Wdocumentation. 2023-02-03 21:09:35 +08:00
Lasse Collin
977dd2e26b Tests: test_lzip_decoder: Remove trailing white-space. 2023-02-03 21:09:12 +08:00
Lasse Collin
c55157ed74 Tests: test_lzip_decoder: Silence warnings from -Wsign-conversion. 2023-02-03 21:07:57 +08:00
Lasse Collin
18b845e697 Bump version and soname for 5.4.1. 2023-01-11 18:52:54 +02:00
Jia Tan
4080bbb844 Add NEWS for 5.4.1. 2023-01-11 18:52:23 +02:00
Lasse Collin
674c89fdb8 sysdefs.h: Don't include strings.h anymore.
On some platforms src/xz/suffix.c may need <strings.h> for
strcasecmp() but suffix.c includes the header when it needs it.

Unless there is an old system that otherwise supports enough C99
to build XZ Utils but doesn't have C89/C90-compatible <string.h>,
there should be no need to include <strings.h> in sysdefs.h.
2023-01-11 17:49:59 +02:00
Lasse Collin
2a6b938084 xz: Include <strings.h> in suffix.c if needed for strcasecmp().
SUSv2 and POSIX.1‐2017 declare only a few functions in <strings.h>.
Of these, strcasecmp() is used on some platforms in suffix.c.
Nothing else in the project needs <strings.h> (at least if
building on a modern system).

sysdefs.h currently includes <strings.h> if HAVE_STRINGS_H is
defined and suffix.c relied on this.

Note that dos/config.h doesn't #define HAVE_STRINGS_H even though
DJGPP does have strings.h. It isn't needed with DJGPP as strcasecmp()
is also in <string.h> in DJGPP.
2023-01-11 17:49:59 +02:00
Jia Tan
aea639e81b xz: Fix warning -Wformat-nonliteral on clang in message.c.
clang and gcc differ in how they handle -Wformat-nonliteral. gcc will
allow a non-literal format string as long as the function takes its
format arguments as a va_list.
2023-01-11 17:31:54 +02:00
Jia Tan
e3b42bfcb0 Tests: Fix test_filter_flags copy/paste error. 2023-01-11 17:31:54 +02:00
Jia Tan
21625b7e11 Tests: Fix type-limits warning in test_filter_flags.
This only occurs in test_filter_flags when the BCJ filters are not
configured and built. In this case, ARRAY_SIZE() returns 0 and causes a
type-limits warning with the loop variable since an unsigned number will
always be >= 0.
2023-01-11 17:31:54 +02:00
Lasse Collin
c337983e92 liblzma: CLMUL CRC64: Work around a bug in MSVC, second attempt.
This affects only 32-bit x86 builds. x86-64 is OK as is.

I still cannot easily test this myself. The reporter has tested
this and it passes the tests included in the CMake build and
performance is good: raw CRC64 is 2-3 times faster than the
C version of the slice-by-four method. (Note that liblzma doesn't
include a MSVC-compatible version of the 32-bit x86 assembly code
for the slice-by-four method.)

Thanks to Iouri Kharon for figuring out a fix, testing, and
benchmarking.
2023-01-11 17:31:54 +02:00
Jia Tan
b7fb438ea0 Tests: Fix unused function warning in test_block_header.
One of the global arrays of filters was only used in a test that
required both encoders and decoders to be configured in the build.
2023-01-11 17:31:54 +02:00
Jia Tan
68e9ef036d Tests: Fix unused function warning in test_index_hash.
test_index_hash does not use fill_index_hash() unless both encoders
and decoders are configured in the build.
2023-01-11 17:31:54 +02:00
Lasse Collin
a387707cd8 Windows: Update INSTALL-MSVC.txt to recommend CMake over project files. 2023-01-11 17:30:30 +02:00
Lasse Collin
52902ad695 Revert "liblzma: CLMUL CRC64: Workaround a bug in MSVC (VS2015-2022)."
This reverts commit 36edc65ab4cf10a131f239acbd423b4510ba52d5.

It was reported that it wasn't a good enough fix and MSVC
still produced (different kind of) bad code when building
for 32-bit x86 if optimizations are enabled.

Thanks to Iouri Kharon.
2023-01-10 12:51:19 +02:00
Lasse Collin
e81b9fc48c sysdefs.h: Fix a comment. 2023-01-10 10:26:59 +02:00
Lasse Collin
6e89ab58b0 sysdefs.h: Don't include memory.h anymore even if it were available.
It quite probably was never needed, that is, any system where memory.h
was required likely couldn't compile XZ Utils for other reasons anyway.

XZ Utils 5.2.6 and later source packages were generated using
Autoconf 2.71 which no longer defines HAVE_MEMORY_H. So the code
being removed is no longer used anyway.
2023-01-10 10:26:59 +02:00
Lasse Collin
65c59ad429 CMake/Windows: Add a workaround for windres from GNU binutils.
This is combined from the following commits in the master branch:
443dfebced041adc88f10d824188eeef5b5821a9
6b117d3b1fe91eb26d533ab16a2e552f84148d47
5e34774c31d1b7509b5cb77a3be9973adec59ea0

Thanks to Iouri Kharon for the bug report, the original patch,
and testing.
2023-01-10 08:50:26 +02:00
Lasse Collin
43521e77ac Tests: test_filter_flags: Clean up minor issues.
Here are the list of the most significant issues addressed:
- Avoid using internal common.h header. It's not good to copy the
constants like this but common.h cannot be included for use outside
of liblzma. This is the quickest thing to do that could be fixed later.

- Omit the INIT_FILTER macro. Initialization should be done with just
regular designated initializers.

- Use start_offset = 257 for BCJ tests. It demonstrates that Filter
Flags encoder and decoder don't validate the options thoroughly.
257 is valid only for the x86 filter. This is a bit silly but
not a significant problem in practice because the encoder and
decoder initialization functions will catch bad alignment still.
Perhaps this should be fixed but it's not urgent and doesn't need
to be in 5.4.x.

- Various tweaks to comments such as filter id -> Filter ID
2023-01-09 16:58:27 +02:00
Jia Tan
6b44cead95 Tests: Refactors existing filter flags tests.
Converts the existing filter flags tests into tuktests.
2023-01-09 16:58:27 +02:00
Lasse Collin
1bbefa9659 Tests: tuktest.h: Support tuktest_malloc(0).
It's not needed in XZ Utils at least for now. It's good to support
it still because if such use is needed later, it wouldn't be
caught on GNU/Linux since malloc(0) from glibc returns non-NULL.
2023-01-09 16:58:27 +02:00
Lasse Collin
ce3a3fbc7c CMake: Update cmake_minimum_required from 3.13...3.16 to 3.13...3.25.
The changes listed on cmake-policies(7) for versions 3.17 to 3.25
shouldn't affect this project.
2023-01-09 16:58:27 +02:00
Lasse Collin
99fcd57f2e Update THANKS. 2023-01-09 16:58:27 +02:00
Lasse Collin
c0c13d9d82 Update THANKS. 2023-01-09 16:58:27 +02:00
Lasse Collin
3d45987451 CMake: Fix a copypaste error in xzdec Windows resource file handling.
It was my mistake. Thanks to Iouri Kharon for the bug report.
2023-01-09 16:58:27 +02:00
Lasse Collin
706bce5018 CMake/Windows: Add resource files to xz.exe and xzdec.exe.
The command line tools cannot be built with MSVC for now but
they can be built with MinGW-w64.

Thanks to Iouri Kharon for the bug report and the original patch.
2023-01-09 16:58:27 +02:00
Lasse Collin
e96dee55df liblzma: CLMUL CRC64: Workaround a bug in MSVC (VS2015-2022).
I haven't tested with MSVC myself and there doesn't seem to be
information about the problem online, so I'm relying on the bug report.

Thanks to Iouri Kharon for the bug report and the patch.
2023-01-09 16:58:27 +02:00
Lasse Collin
52bc1ee34d Build: Require that _mm_set_epi64x() is usable to enable CLMUL support.
VS2013 doesn't have _mm_set_epi64x() so this way CLMUL gets
disabled with VS2013.

Thanks to Iouri Kharon for the bug report.
2023-01-09 16:58:27 +02:00
Jia Tan
bad44cfe19 Tests: Creates test_index_hash.c
Tests all API functions exported from index_hash.h. Does not have a
dedicated test for lzma_index_hash_end.

[Minor edits were made by Lasse Collin.]
2023-01-09 16:56:07 +02:00
Jia Tan
692ccdf551 liblzma: Remove common.h include from common/index.h.
common/index.h is needed by liblzma internally and tests. common.h will
include and define many things that are not needed by the tests.

Also, this prevents include order problems because both common.h and
lzma.h define LZMA_API. On most platforms it results only in a warning
but on Windows it would break the build as the definition in common.h
must be used only for building liblzma itself.
2023-01-09 16:37:19 +02:00
Jia Tan
2ac7bafc8f liblzma: Add NULL check to lzma_index_hash_append.
This is for consistency with lzma_index_append.
2023-01-09 16:34:32 +02:00
Jia Tan
db714d30e0 liblzma: Replaced hardcoded 0x0 index indicator byte with macro 2023-01-09 16:34:32 +02:00
Jia Tan
39d2585dcd Style: Change #if !defined() to #ifndef in mythread.h. 2023-01-09 16:33:53 +02:00
Jia Tan
3f0130aa28 Build: Add missing stream_decoder_mt.c to .vcxproj files.
The line in the .vcxproj files for building with was missing in 5.4.0.
Thank to Hajin Jang for reporting the issue.
2023-01-09 16:33:53 +02:00
Lasse Collin
f204d1050a Update THANKS. 2023-01-04 23:17:09 +02:00
Lasse Collin
34a9c2d650 Tests: Adjust style in test_compress.sh. 2023-01-04 23:17:09 +02:00
Jia Tan
761c208d58 Tests: Replace non portable shell parameter expansion
The shell parameter expansion using # and ## is not supported in
Solaris 10 Bourne shell (/bin/sh). Even though this is POSIX, it is not fully
portable, so we should avoid it.
2023-01-05 00:30:22 +08:00
Jia Tan
8a7cbc0745 Translations: Add Korean translation of man pages.
Thanks to Seong-ho Cho
2023-01-05 00:30:14 +08:00
Jia Tan
ca2af49bb8 Translations: Update the Esperanto translation. 2023-01-05 00:30:05 +08:00
Lasse Collin
bfba3394ae Build: Fix config.h comments. 2023-01-05 00:29:52 +08:00
Jia Tan
507648ad11 Build: Only define HAVE_PROGRAM_INVOCATION_NAME if it is set to 1.
HAVE_DECL_PROGRAM_INVOCATION_NAME is renamed to
HAVE_PROGRAM_INVOCATION_NAME. Previously,
HAVE_DECL_PROGRAM_INVOCATION_NAME was always set when
building with autotools. CMake would only set this when it was 1, and the
dos/config.h did not define it. The new macro definition is consistent
across build systems.
2023-01-05 00:29:39 +08:00
Lasse Collin
ab5229d32a Tests: test_check: Test corner cases of CLMUL CRC64. 2023-01-05 00:28:09 +08:00
Lasse Collin
8791826f31 Tests: Clarify a comment in test_lzip_decoder.c. 2023-01-05 00:28:01 +08:00
Jia Tan
c410d812ea xz: Includes <time.h> and <sys/time.h> conditionally in mytime.c.
Previously, mytime.c depended on mythread.h for <time.h> to be included.
2023-01-05 00:27:51 +08:00
Jia Tan
501c6013d4 liblzma: Includes sys/time.h conditionally in mythread
Previously, <sys/time.h> was always included, even if mythread only used
clock_gettime. <time.h> is still needed even if clock_gettime is not used
though because struct timespec is needed for mythread_condtime.
2023-01-05 00:26:45 +08:00
Jia Tan
9e3cb514b5 Build: No longer require HAVE_DECL_CLOCK_MONOTONIC to always be set.
Previously, if threading was enabled HAVE_DECL_CLOCK_MONOTONIC would always
be set to 0 or 1. However, this macro was needed in xz so if xz was not
built with threading and HAVE_DECL_CLOCK_MONOTONIC was not defined but
HAVE_CLOCK_GETTIME was, it caused a warning during build. Now,
HAVE_DECL_CLOCK_MONOTONIC has been renamed to HAVE_CLOCK_MONOTONIC and
will only be set if it is 1.
2023-01-05 00:26:35 +08:00
Jia Tan
6fc3e54679 Translations: Add Ukrainian translations of man pages.
Thanks to Yuri Chornoivan
2022-12-28 01:20:44 +08:00
Jia Tan
e84f2ab7f8 liblzma: Update documentation for lzma_filter_encoder. 2022-12-28 01:20:27 +08:00
Jia Tan
b14b8dbba9 Tests: Adds lzip decoder tests 2022-12-28 01:20:16 +08:00
Jia Cheong Tan
09a114805e Doxygen: Update .gitignore for generating docs for in source build.
In source builds are not recommended, but we should still ignore
the generated artifacts.
2022-12-20 22:23:59 +08:00
Jia Tan
d3e6fe4419 liblzma: Fix lzma_microlzma_encoder() return value.
Using return_if_error on lzma_lzma_lclppb_encode was improper because
return_if_error is expecting an lzma_ret value, but
lzma_lzma_lclppb_encode returns a boolean. This could result in
lzma_microlzma_encoder, which would be misleading for applications.
2022-12-20 22:23:59 +08:00
Lasse Collin
b55a27b46f liblzma: Update authors list in arm64.c. 2022-12-20 22:23:59 +08:00
Jia Tan
2fd28d2b7c CMake: Update .gitignore for CMake artifacts from in source build.
In source builds are not recommended, but we can make it easier
by ignoring the generated artifacts from CMake.
2022-12-16 20:58:55 +08:00
446 changed files with 31170 additions and 61967 deletions

View File

@ -1,30 +0,0 @@
# SPDX-License-Identifier: 0BSD
[codespell]
# Skip all translation files and a few other autogenerated files.
# The autotool files should have their typos fixed in the upstream, but
# until then we will blacklist them here.
# THANKS contains names, some do trigger codespell.
skip = *.po,*.pot,./po4a/man,./doc/api,./configure,./autom4te.cache,./m4/libtool.m4,./build-aux/depcomp,./build-aux/ltmain.sh,./build-aux/config.guess,./build-aux/config.rpath,./m4/po.m4,./build-aux/config.sub,THANKS
# Ignore false positive matching words. Ideally codespell would allow
# ignoring words for specific files, but that does not appear to be
# supported. Instead we need to hope we do not make these typos.
# Additionally, the ignored words must be specified lower-case even though
# some of the false positives only occurred upper-case.
# ANS - used as a variable name in xzmore.in.
# bu - groff syntax for creating a bullet list item, used in xz.1.
# te - groff syntax, used in xz.1.
# caf - command line options for tar example, used in xz.1.
ignore-words-list = ans,bu,te,caf
# Add extra dictionaries to help improvement comments, docs, etc.
builtin = clear,rare,informal,usage,names
# Always default to highest interactive level to avoid accidentally
# changing a false positive or picking the wrong replacement.
interactive = 3
# Ignore a URL with debbugs.
ignore-regex = \bhttps://debbugs\.gnu\.org\b

8
.gitattributes vendored
View File

@ -1,8 +0,0 @@
.gitattributes export-ignore
.gitignore export-ignore
/.codespellrc export-ignore
/.github export-ignore
/build-aux/ci_build.bash export-ignore
/doc/SHA256SUMS export-ignore

View File

@ -1,171 +0,0 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# Author: Jia Tan
#
#############################################################################
name: CI
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows running workflow manually
workflow_dispatch:
permissions: {}
jobs:
POSIX:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
build_system: [autotools, cmake]
runs-on: ${{ matrix.os }}
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
########################
# Install Dependencies #
########################
# Install Autotools on Linux
- name: Install Dependencies
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: |
sudo apt-get update
sudo apt-get install -y autoconf automake build-essential po4a autopoint doxygen musl-tools valgrind
- name: Install Dependencies
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: |
sudo apt-get install -y gcc-multilib
# Install Autotools on Mac
- name: Install Dependencies
if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'autotools' }}
run: brew install autoconf automake libtool po4a doxygen
# Install CMake on Linux
- name: Install Dependencies
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'cmake' }}
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake gettext doxygen musl-tools
# Install CMake on Mac
- name: Install Dependencies
if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'cmake' }}
run: brew install cmake gettext doxygen
##################
# Build and Test #
##################
# -b specifies the build system to use.
# -p specifies the phase (build or test) to help narrow down an error
# if one occurs.
#
# The first two builds/tests are only run on Autotools Linux and
# affect the CFLAGS. Resetting the CFLAGS requires clearing the
# config cache between runs, so the tests that require CFLAGS are
# done first.
- name: Build 32-bit
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: ./build-aux/ci_build.bash -b autotools -p build -m "gcc -m32"
- name: Test 32-bit
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: |
./build-aux/ci_build.bash -b autotools -p test -m "gcc -m32" -n 32_bit
cd ../xz_build && make distclean
# The sandbox must be disabled because it will prevent access to
# the /proc/ filesystem on Linux, which is used by the sanitizer's
# instrumentation.
- name: Build with -fsanitize=address,undefined
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: ./build-aux/ci_build.bash -b autotools -p build -f "-fsanitize=address,undefined" -d sandbox
- name: Test with -fsanitize=address,undefined
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: |
export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1
./build-aux/ci_build.bash -b autotools -p test -f "-fsanitize=address,undefined" -d sandbox
cd ../xz_build && make distclean
- name: Build with Valgrind
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: ./build-aux/ci_build.bash -b autotools -p build -d shared,sandbox
- name: Test with Valgrind
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: |
./build-aux/ci_build.bash -b autotools -p test -d sandbox -w "valgrind --quiet --trace-children=yes --trace-children-skip=*/cmp,*/cp,*/diff,*/grep,*/rm,*/sed --exit-on-first-error=yes --error-exitcode=1"
cd ../xz_build && make distclean
- name: Build with musl libc
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -p build -m "/usr/bin/musl-gcc"
- name: Test with musl libc
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: |
./build-aux/ci_build.bash -b ${{ matrix.build_system }} -p test -m "/usr/bin/musl-gcc"
- name: Clean up musl libc run
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.build_system == 'autotools' }}
run: cd ../xz_build && make distclean
- name: Build with full features
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -p build
- name: Test with full features
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -p test -n full_features
- name: Build without encoders
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d encoders,shared -p build
- name: Test without encoders
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d encoders,shared -p test -n no_encoders
- name: Build without decoders
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d decoders,shared -p build
- name: Test without decoders
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d decoders,shared -p test -n no_decoders
- name: Build without threads
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d threads,shared -p build
- name: Test without threads
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d threads,shared -p test -n no_threads
- name: Build without BCJ filters
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d bcj,shared,nls -p build
- name: Test without BCJ filters
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d bcj,shared,nls -p test -n no_bcj
- name: Build without Delta filters
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d delta,shared,nls -p build
- name: Test without Delta filters
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d delta,shared,nls -p test -n no_delta
- name: Build without sha256 check
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -c crc32,crc64 -d shared,nls -p build
- name: Test without sha256 check
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -c crc32,crc64 -d shared,nls -p test -n no_sha256
- name: Build without crc64 check
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -c crc32,sha256 -d shared,nls -p build
- name: Test without crc64 check
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -c crc32,sha256 -d shared,nls -p test -n no_crc64
- name: Build small
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d small -p build
- name: Test small
run: ./build-aux/ci_build.bash -b ${{ matrix.build_system }} -d small -p test -n small
# Attempt to upload the test logs as artifacts if any step has failed
- uses: actions/upload-artifact@v4
if: ${{ failure() }}
with:
name: ${{ matrix.os }} ${{ matrix.build_system }} Test Logs
path: build-aux/artifacts

View File

@ -1,55 +0,0 @@
# SPDX-License-Identifier: 0BSD
# Authors: Sam James
# Lasse Collin
#
# This was written based on the OSS-Fuzz docs:
# https://google.github.io/oss-fuzz/getting-started/continuous-integration/
name: CIFuzz
on:
push:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
CIFuzz:
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
sanitizer: [ address, undefined, memory ]
steps:
- name: Build Fuzzers (${{ matrix.sanitizer }})
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'xz'
# The language must match the one in project.yaml in OSS-Fuzz:
# https://github.com/google/oss-fuzz/blob/master/projects/xz/project.yaml
# Thus, use C++ even though there are no C++ files in XZ Utils.
language: c++
sanitizer: ${{ matrix.sanitizer }}
- name: Run Fuzzers (${{ matrix.sanitizer }})
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'xz'
language: c++
sanitizer: ${{ matrix.sanitizer }}
fuzz-seconds: 600
report-timeouts: true
report-ooms: true
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: ${{ matrix.sanitizer }}-artifacts
path: ./out/artifacts

View File

@ -1,38 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: Coverity Scan
# We only want to test a special branch, per
# https://docs.travis-ci.com/user/coverity-scan/#build-submission-frequency
on:
push:
branches: [coverity_scan]
jobs:
coverity:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update -q
sudo apt-get install -qy autoconf automake build-essential autopoint gcc-multilib
- name: Run autogen.sh
run: ./autogen.sh --no-po4a
- name: Run configure
run: ./configure --enable-debug --disable-silent-rules
# Coverity doesn't understand what the inline asm does,
# which results in false positives.
- name: Disable complex inline assembly code
run: echo '#define LZMA_RANGE_DECODER_CONFIG 0' >> config.h
- name: Coverity Scan
uses: vapier/coverity-scan-action@2068473c7bdf8c2fb984a6a40ae76ee7facd7a85 # v1.8.0
with:
command: make -Oline -j$(nproc)
email: ${{ secrets.COVERITY_SCAN_EMAIL }}
token: ${{ secrets.COVERITY_SCAN_TOKEN }}

View File

@ -1,40 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: DragonFly BSD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
DragonflyBSD:
runs-on: ubuntu-latest
timeout-minutes: 10
name: DragonFly BSD
steps:
- uses: actions/checkout@v4
- name: Test in DragonFly BSD
id: test
uses: vmactions/dragonflybsd-vm@4ffb90652b45abc8156f89ede453c85f7ea257bb #v1.1.4
with:
usesh: true
prepare: >
pkg install -y
autoconf
automake
gettext-tools
libtool
m4
run: |
set -e
uname -a
./autogen.sh --no-po4a
# Innocent putc() triggers strict-overflow warnings.
./configure --disable-static --enable-debug --enable-werror CFLAGS='-g -O2 -pipe -Wno-error=strict-overflow'
make -j4 check

View File

@ -1,58 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: FreeBSD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
FreeBSD:
strategy:
matrix:
include:
- host: ubuntu-latest
version: 12.4
arch: x86_64
- host: ubuntu-latest
version: 15.0
arch: x86_64
# NOTE: Comment in the repo says that aarch64 VM is faster
# on x86_64 host compared to ubuntu-24.04-arm.
# - host: ubuntu-24.04-arm
# version: 15.0
# arch: aarch64
runs-on: ${{ matrix.host }}
timeout-minutes: 10
name: FreeBSD
steps:
- uses: actions/checkout@v4
- name: Test in FreeBSD
uses: vmactions/freebsd-vm@670398e4236735b8b65805c3da44b7a511fb8b27 #v1.3.0
with:
release: ${{ matrix.release }}
arch: ${{ matrix.arch }}
usesh: true
prepare: >
pkg install -y
autoconf
automake
gettext-tools
libtool
m4
po4a
run: |
set -e
uname -a
./autogen.sh
./configure --disable-static --enable-debug --enable-werror
make -j4 check

View File

@ -1,138 +0,0 @@
# SPDX-License-Identifier: 0BSD
# Author: Lasse Collin
name: Windows-MSVC
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
MSVC:
strategy:
fail-fast: false
matrix:
os: [ windows-latest ]
runs-on: ${{ matrix.os }}
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Configure Win32
run: >
cmake
-A Win32
-B build-msvc-win32
- name: Build Win32 Debug
run: >
cmake
--build build-msvc-win32
--config Debug
- name: Test Win32 Debug
run: >
ctest
--test-dir build-msvc-win32
--build-config Debug
--output-on-failure
- name: Build Win32 Release
run: >
cmake
--build build-msvc-win32
--config Release
# This fails with VS 2019 without b5a5d9e3f702.
- name: Test Win32 Release
run: >
ctest
--test-dir build-msvc-win32
--build-config Release
--output-on-failure
- name: Configure x64
run: >
cmake
-A x64
-B build-msvc-x64
- name: Build x64 Debug
run: >
cmake
--build build-msvc-x64
--config Debug
- name: Test x64 Debug
run: >
ctest
--test-dir build-msvc-x64
--build-config Debug
--output-on-failure
- name: Build x64 Release
run: >
cmake
--build build-msvc-x64
--config Release
- name: Test x64 Release
run: >
ctest
--test-dir build-msvc-x64
--build-config Release
--output-on-failure
- name: Configure ClangCL x64
run: >
cmake
-T ClangCL
-A x64
-B build-clangcl-x64
-DCMAKE_C_FLAGS="
-Wno-cast-align
-Wno-cast-qual
-Wno-covered-switch-default
-Wno-declaration-after-statement
-Wno-deprecated-declarations
-Wno-disabled-macro-expansion
-Wno-nonportable-system-include-path
-Wno-overlength-strings
-Wno-pre-c11-compat
-Wno-reserved-identifier
-Wno-unsafe-buffer-usage
-Wno-used-but-marked-unused"
- name: Build ClangCL x64 Debug
run: >
cmake
--build build-clangcl-x64
--config Debug
- name: Test ClangCL x64 Debug
run: >
ctest
--test-dir build-clangcl-x64
--build-config Debug
--output-on-failure
- name: Build ClangCL x64 Release
run: >
cmake
--build build-clangcl-x64
--config Release
- name: Test ClangCL x64 Release
run: >
ctest
--test-dir build-clangcl-x64
--build-config Release
--output-on-failure

View File

@ -1,148 +0,0 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# Authors: Jia Tan
# Lasse Collin
#
#############################################################################
name: Windows-MSYS2
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
MSYS2:
strategy:
fail-fast: false
matrix:
runner: [ windows-latest ]
sys: [ mingw32, ucrt64, clang64, msys ]
include:
- runner: windows-11-arm
sys: clangarm64
# Set the shell to be msys2 as a default to avoid setting it for
# every individual run command.
defaults:
run:
shell: msys2 {0}
runs-on: ${{ matrix.runner }}
timeout-minutes: 20
steps:
- name: Setup MSYS2
if: ${{ matrix.sys == 'msys' }}
uses: msys2/setup-msys2@fb197b72ce45fb24f17bf3f807a388985654d1f2 # v2.29.0
with:
msystem: ${{ matrix.sys }}
update: true
install: >
make
ninja
autotools
cmake
base-devel
gettext-devel
gcc
- name: Setup MSYS2
if: ${{ matrix.sys != 'msys' }}
uses: msys2/setup-msys2@fb197b72ce45fb24f17bf3f807a388985654d1f2 # v2.29.0
with:
msystem: ${{ matrix.sys }}
update: true
pacboy: >
make:p
ninja:p
autotools:p
cmake:p
toolchain:p
gettext:p
- name: Git configuration
# Need to explicitly set the shell here since we set the default
# shell as msys2 earlier. This avoids an extra msys2 dependency on
# git.
shell: powershell
# Avoid Windows line endings. Otherwise test_scripts.sh will fail
# because the expected output is stored in the test framework as a
# text file and will not match the output from xzgrep.
run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- name: CMake (full, shared)
run: |
set -e
cmake -G Ninja -B b-cmake-full \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_C_FLAGS='-UNDEBUG -g -O2 -pipe' \
-DCMAKE_COMPILE_WARNING_AS_ERROR=ON \
${{ startsWith(matrix.sys, 'mingw') && '-DXZ_NLS=OFF' || '' }}
ninja -C b-cmake-full
ctest --test-dir b-cmake-full --output-on-failure
- name: CMake (small, static)
if: ${{ matrix.runner == 'windows-latest' }}
run: |
set -e
cmake -G Ninja -B b-cmake-small \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_C_FLAGS='-UNDEBUG -g -Os -pipe' \
-DCMAKE_COMPILE_WARNING_AS_ERROR=ON \
-DXZ_SMALL=ON \
-DXZ_THREADS=no \
-DXZ_NLS=OFF
ninja -C b-cmake-small
ctest --test-dir b-cmake-small --output-on-failure
- name: autogen.sh
run: ./autogen.sh --no-po4a
- name: Autotools (full, shared)
run: |
set -e
mkdir b-autotools-full
cd b-autotools-full
../configure \
--enable-debug \
--enable-werror \
--disable-static \
${{ startsWith(matrix.sys, 'mingw') && '--disable-nls' || '' }}
make -j"$(nproc)" check
- name: Autotools (small, static)
if: ${{ matrix.runner == 'windows-latest' }}
run: |
set -e
mkdir b-autotools-small
cd b-autotools-small
../configure \
--enable-debug \
--enable-werror \
--disable-shared \
--enable-small \
--disable-threads \
--disable-nls \
CFLAGS='-g -Os'
make -j"$(nproc)" check
# Upload the test logs as artifacts if any step has failed.
- uses: actions/upload-artifact@v4
if: failure()
with:
name: test-logs-${{ matrix.sys }}
path: |
b-cmake-*/Testing/Temporary/
b-cmake-*/test_*/
b-autotools-*/tests/*.log
b-autotools-*/tests/*output

View File

@ -1,40 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: NetBSD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
NetBSD:
runs-on: ubuntu-latest
timeout-minutes: 10
name: NetBSD
steps:
- uses: actions/checkout@v4
- name: Test in NetBSD
id: test
uses: vmactions/netbsd-vm@b24ed5f7a605362ab1226e73df291c8b01990c85 #v1.2.3
with:
usesh: true
prepare: >
/usr/sbin/pkg_add -v
cmake
gettext-tools
ninja-build
po4a
run: |
set -e
uname -a
./po4a/update-po
# Innocent putc() triggers strict-overflow warnings.
cmake -G Ninja -B build -DBUILD_SHARED_LIBS=ON -DCMAKE_C_FLAGS='-UNDEBUG -g -O2 -pipe -Wno-error=strict-overflow' -DCMAKE_COMPILE_WARNING_AS_ERROR=ON
ninja -C build
ctest --test-dir build --output-on-failure

View File

@ -1,40 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: OpenBSD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
OpenBSD:
runs-on: ubuntu-latest
timeout-minutes: 10
name: OpenBSD
steps:
- uses: actions/checkout@v4
- name: Test in OpenBSD
uses: vmactions/openbsd-vm@2e29de1eb150dfe1c9c97b84ff2b7896f14ca690 #v1.2.5
with:
usesh: true
prepare: >
/usr/sbin/pkg_add -I -v
autoconf-2.72p0
automake-1.17
gettext-tools
libtool
m4
run: |
set -e
export AUTOCONF_VERSION=2.72
export AUTOMAKE_VERSION=1.17
uname -a
./autogen.sh --no-po4a
./configure --disable-static --enable-debug --enable-werror --disable-nls --enable-external-sha256
make -j4 check

View File

@ -1,34 +0,0 @@
# SPDX-License-Identifier: 0BSD
name: Solaris
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
permissions: {}
jobs:
Solaris:
runs-on: ubuntu-latest
timeout-minutes: 10
name: Solaris
steps:
- uses: actions/checkout@v4
- name: Test in Solaris
uses: vmactions/solaris-vm@47bea106d03acaf91084e52548ee460556011602 #v1.1.8
with:
release: 11.4-gcc
usesh: true
run: |
set -e
uname -a
# /usr/xpg4/bin isn't in PATH by default.
echo "Environment variable PATH: $PATH"
./autogen.sh --no-po4a
./configure --disable-static --enable-debug --enable-werror
make check

27
.gitignore vendored
View File

@ -15,6 +15,7 @@ Makefile.in
/ABOUT-NLS
/autom4te.cache
/Doxyfile
/aclocal.m4
/config.h
/config.h.in
@ -24,7 +25,6 @@ Makefile.in
/libtool
/stamp-h1
build-aux/artifacts
build-aux/compile
build-aux/config.guess
build-aux/config.rpath
@ -40,10 +40,6 @@ coverage
/doc/internal
/doc/api
/po4a/man
/po4a/xz-man.pot
/po4a/*.po.authors
/src/liblzma/liblzma.pc
/src/lzmainfo/lzmainfo
/src/xz/xz
@ -70,7 +66,6 @@ coverage
/tests/test_index
/tests/test_index_hash
/tests/test_lzip_decoder
/tests/test_microlzma
/tests/test_memlimit
/tests/test_stream_flags
/tests/test_vli
@ -97,17 +92,21 @@ coverage
/DartConfiguration.tcl
/liblzma-config-version.cmake
/liblzma-config.cmake
/lzcat
/lzcat.1
/lzma
/lzma.1
/Testing
/tests_bin/
/unlzma
/unlzma.1
/unxz
/unxz.1
/xz
/xzcat
/xzcat.1
/xzdec
/lzmadec
/lzmainfo
/xzdiff
/xzgrep
/xzless
/xzmore
/liblzma.pc
/*.gmo
/windows/*/.vs
/windows/*/liblzma.vcxproj.user
/.vscode/

49
AUTHORS
View File

@ -2,20 +2,22 @@
Authors of XZ Utils
===================
XZ Utils is developed and maintained by
Lasse Collin <lasse.collin@tukaani.org>.
XZ Utils is developed and maintained by Lasse Collin
<lasse.collin@tukaani.org> and Jia Tan <jiat0218@gmail.com>.
Major parts of liblzma are based on code written by Igor Pavlov,
specifically the LZMA SDK <https://7-zip.org/sdk.html>. Without
this code, XZ Utils wouldn't exist.
The SHA-256 implementation in liblzma is based on code written by
Wei Dai in Crypto++ Library <https://www.cryptopp.com/>.
The SHA-256 implementation in liblzma is based on the code found from
7-Zip <https://7-zip.org/>, which has a modified version of the SHA-256
code found from Crypto++ <https://www.cryptopp.com/>. The SHA-256 code
in Crypto++ was written by Kevin Springle and Wei Dai.
A few scripts have been adapted from GNU gzip. The original
versions were written by Jean-loup Gailly, Charles Levert, and
Paul Eggert. Andrew Dudman helped adapting the scripts and their
man pages for XZ Utils.
Some scripts have been adapted from gzip. The original versions
were written by Jean-loup Gailly, Charles Levert, and Paul Eggert.
Andrew Dudman helped adapting the scripts and their man pages for
XZ Utils.
The initial version of the threaded .xz decompressor was written
by Sebastian Andrzej Siewior.
@ -23,36 +25,15 @@ Authors of XZ Utils
The initial version of the .lz (lzip) decoder was written
by Michał Górny.
Architecture-specific CRC optimizations were contributed by
Ilya Kurdyukov, Chenxi Mao, and Xi Ruoyao.
CLMUL-accelerated CRC code was contributed by Ilya Kurdyukov.
Other authors:
- Jonathan Nieder
- Joachim Henke
Special author: Jia Tan was a co-maintainer in 2022-2024. He and
the team behind him inserted a backdoor (CVE-2024-3094) into
XZ Utils 5.6.0 and 5.6.1 releases. He suddenly disappeared when
this was discovered.
The GNU Autotools-based build system contains files from many authors,
which I'm not trying to list here.
Many people have contributed improvements or reported bugs.
Most of these people are mentioned in the file THANKS.
The translations of the command line tools and man pages have been
contributed by many people via the Translation Project:
- https://translationproject.org/domain/xz.html
- https://translationproject.org/domain/xz-man.html
The authors of the translated man pages are in the header comments
of the man page files. In the source package, the authors of the
translations are in po/*.po and po4a/*.po files.
Third-party code whose authors aren't listed here:
- GNU getopt_long() in the 'lib' directory is included for
platforms that don't have a usable getopt_long().
- The build system files from GNU Autoconf, GNU Automake,
GNU Libtool, GNU Gettext, Autoconf Archive, and related files.
Several people have contributed fixes or reported bugs. Most of them
are mentioned in the file THANKS.

File diff suppressed because it is too large Load Diff

86
COPYING
View File

@ -3,68 +3,74 @@ XZ Utils Licensing
==================
Different licenses apply to different files in this package. Here
is a summary of which licenses apply to which parts of this package:
is a rough summary of which licenses apply to which parts of this
package (but check the individual files to be sure!):
- liblzma is under the BSD Zero Clause License (0BSD).
- liblzma is in the public domain.
- The command line tools xz, xzdec, lzmadec, and lzmainfo are
under 0BSD except that, on systems that don't have a usable
getopt_long, GNU getopt_long is compiled and linked in from the
'lib' directory. The getopt_long code is under GNU LGPLv2.1+.
- xz, xzdec, and lzmadec command line tools are in the public
domain unless GNU getopt_long had to be compiled and linked
in from the lib directory. The getopt_long code is under
GNU LGPLv2.1+.
- The scripts to grep, diff, and view compressed files have been
adapted from GNU gzip. These scripts (xzgrep, xzdiff, xzless,
and xzmore) are under GNU GPLv2+. The man pages of the scripts
are under 0BSD; they aren't based on the man pages of GNU gzip.
adapted from gzip. These scripts and their documentation are
under GNU GPLv2+.
- Most of the XZ Utils specific documentation that is in
plain text files (like README, INSTALL, PACKAGERS, NEWS,
and ChangeLog) are under 0BSD unless stated otherwise in
the file itself. The files xz-file-format.txt and
lzma-file-format.xt are in the public domain but may
be distributed under the terms of 0BSD too.
- All the documentation in the doc directory and most of the
XZ Utils specific documentation files in other directories
are in the public domain.
- Translated messages and man pages are under 0BSD except that
some old translations are in the public domain.
Note: The JavaScript files (under the MIT license) have
been removed from the Doxygen-generated HTML version of the
liblzma API documentation. Doxygen itself is under the GNU GPL
but the remaining files generated by Doxygen are not affected
by the licenses used in Doxygen because Doxygen licensing has
the following exception:
- Test files and test code in the 'tests' directory, and
debugging utilities in the 'debug' directory are under
the BSD Zero Clause License (0BSD).
"Documents produced by doxygen are derivative works
derived from the input used in their production;
they are not affected by this license."
- The GNU Autotools based build system contains files that are
under GNU GPLv2+, GNU GPLv3+, and a few permissive licenses.
These files don't affect the licensing of the binaries being
built.
- Translated messages are in the public domain.
- The 'extra' directory contains files that are under various
free software licenses. These aren't built or installed as
part of XZ Utils.
- The build system contains public domain files, and files that
are under GNU GPLv2+ or GNU GPLv3+. None of these files end up
in the binaries being built.
The following command may be helpful in finding per-file license
information. It works on xz.git and on a clean file tree extracted
from a release tarball.
- Test files and test code in the tests directory, and debugging
utilities in the debug directory are in the public domain.
sh build-aux/license-check.sh -v
- The extra directory may contain public domain files, and files
that are under various free software licenses.
For the files under the BSD Zero Clause License (0BSD), if
a copyright notice is needed, the following is sufficient:
You can do whatever you want with the files that have been put into
the public domain. If you find public domain legally problematic,
take the previous sentence as a license grant. If you still find
the lack of copyright legally problematic, you have too many
lawyers.
Copyright (C) The XZ Utils authors and contributors
As usual, this software is provided "as is", without any warranty.
If you copy significant amounts of 0BSD-licensed code from XZ Utils
If you copy significant amounts of public domain code from XZ Utils
into your project, acknowledging this somewhere in your software is
polite (especially if it is proprietary, non-free software), but
it is not legally required by the license terms. Here is an example
of a good notice to put into "about box" or into documentation:
naturally it is not legally required. Here is an example of a good
notice to put into "about box" or into documentation:
This software includes code from XZ Utils <https://tukaani.org/xz/>.
The following license texts are included in the following files:
- COPYING.0BSD: BSD Zero Clause License
- COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1
- COPYING.GPLv2: GNU General Public License version 2
- COPYING.GPLv3: GNU General Public License version 3
If you have questions, don't hesitate to ask for more information.
The contact information is in the README file.
Note that the toolchain (compiler, linker etc.) may add some code
pieces that are copyrighted. Thus, it is possible that e.g. liblzma
binary wouldn't actually be in the public domain in its entirety
even though it contains no copyrighted code from the XZ Utils source
package.
If you have questions, don't hesitate to ask the author(s) for more
information.

View File

@ -1,11 +0,0 @@
Permission to use, copy, modify, and/or distribute this
software for any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
<https://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -304,7 +304,8 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, see <https://www.gnu.org/licenses/>.
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -328,8 +329,8 @@ necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Moe Ghoul>, 1 April 1989
Moe Ghoul, President of Vice
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may

View File

@ -2,7 +2,7 @@
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
<https://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -484,7 +484,8 @@ convey the exclusion of warranty; and each file should have at least the
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, see <https://www.gnu.org/licenses/>.
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
@ -495,7 +496,7 @@ necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Moe Ghoul>, 1 April 1990
Moe Ghoul, President of Vice
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@ -1,6 +1,6 @@
See the commit log in the git repository:
git clone https://github.com/tukaani-project/xz
git clone https://git.tukaani.org/xz.git
Note that "make dist" doesn't put this tiny file into the package.
Instead, the git commit log is used as ChangeLog. See dist-hook in

367
INSTALL
View File

@ -16,7 +16,7 @@ XZ Utils Installation
1.2.8. DOS
1.2.9. z/OS
1.3. Adding support for new platforms
2. configure and CMake options
2. configure options
2.1. Static vs. dynamic linking of liblzma
2.2. Optimizing xzdec and lzmadec
3. xzgrep and other scripts
@ -76,11 +76,6 @@ XZ Utils Installation
you use CC=xlc instead, you must disable threading support
with --disable-threads (usually not recommended).
If building a 32-bit executable, the address space available to xz
might be limited to 256 MiB by default. To increase the address
space to 2 GiB, pass LDFLAGS=-Wl,-bmaxdata:0x80000000 as an argument
to configure.
1.2.2. IRIX
@ -95,15 +90,21 @@ XZ Utils Installation
1.2.3. MINIX 3
Version 3.3.0 and later are supported.
The default install of MINIX 3 includes Amsterdam Compiler Kit (ACK),
which doesn't support C99. Install GCC to compile XZ Utils.
Multithreading isn't supported because MINIX 3 doesn't have
pthreads. The option --disable-threads must be passed to configure
as this isn't autodetected.
MINIX 3.1.8 and older have bugs in /usr/include/stdint.h, which has
to be patched before XZ Utils can be compiled correctly. See
<http://gforge.cs.vu.nl/gf/project/minix/tracker/?action=TrackerItemEdit&tracker_item_id=537>.
Note that disabling threads causes "make check" to show a few tests
as skipped ("SKIP"). It's only due to a few threading-dependent
subtests are skipped. See the matching tests/test_*.log files.
MINIX 3.2.0 and later use a different libc and aren't affected by
the above bug.
XZ Utils doesn't have code to detect the amount of physical RAM and
number of CPU cores on MINIX 3.
See section 5.4 in this file about symbol visibility warnings (you
may want to pass gl_cv_cc_visibility=no to configure).
1.2.4. OpenVMS
@ -142,37 +143,43 @@ XZ Utils Installation
1.2.7. Windows
The "windows" directory contains instructions for a few types
of builds:
If it is enough to build liblzma (no command line tools):
- INSTALL-MinGW-w64_with_CMake.txt
Simple instructions how to build XZ Utils natively on
Windows using only CMake and a prebuilt toolchain
(GCC + MinGW-w64 or Clang/LLVM + MinGW-w64).
- There is CMake support. It should be good enough to build
static liblzma or liblzma.dll with Visual Studio. The CMake
support may work with MinGW or MinGW-w64. Read the comment
in the beginning of CMakeLists.txt before running CMake!
- INSTALL-MinGW-w64_with_Autotools.txt
Native build under MSYS2 or cross-compilation from
GNU/Linux using a bash script that creates a .zip
and .7z archives of the binaries and documentation.
The related file README-Windows.txt is for the
resulting binary package.
- There are Visual Studio project files under the "windows"
directory. See windows/INSTALL-MSVC.txt. In the future the
project files will be removed when CMake support is good
enough. Thus, please test the CMake version and help fix
possible issues.
- INSTALL-MSVC.txt
Building with MSVC / Visual Studio and CMake.
To build also the command line tools:
- liblzma-crt-mixing.txt
Documentation what to take into account as a programmer
if liblzma.dll and the application don't use the same
CRT (MSVCRT or UCRT).
- MinGW-w64 + MSYS (32-bit and 64-bit x86): This is used
for building the official binary packages for Windows.
There is windows/build.bash to ease packaging XZ Utils with
MinGW(-w64) + MSYS into a redistributable .zip or .7z file.
See windows/INSTALL-MinGW.txt for more information.
Other choices:
- MinGW + MSYS (32-bit x86): I haven't recently tested this.
- Cygwin: https://cygwin.com/
Building on Cygwin can be done like on many POSIX operating
systems. XZ Utils >= 5.2.0 isn't compatible with Cygwin older
than 1.7.35 (data loss!). 1.7.35 was released on 2015-03-04.
- Cygwin 1.7.35 and later: NOTE that using XZ Utils >= 5.2.0
under Cygwin older than 1.7.35 can lead to DATA LOSS! If
you must use an old Cygwin version, stick to XZ Utils 5.0.x
which is safe under older Cygwin versions. You can check
the Cygwin version with the command "cygcheck -V".
- MSYS2: https://www.msys2.org/
It may be possible to build liblzma with other toolchains too, but
that will probably require writing a separate makefile. Building
the command line tools with non-GNU toolchains will be harder than
building only liblzma.
Even if liblzma is built with MinGW(-w64), the resulting DLL can
be used by other compilers and linkers, including MSVC. See
windows/README-Windows.txt for details.
1.2.8. DOS
@ -218,53 +225,19 @@ XZ Utils Installation
in C89 or C++.
2. configure and CMake options
------------------------------
2. configure options
--------------------
In most cases, the defaults are what you want. Many of the options
below are useful only when building a size-optimized version of
liblzma or command line tools.
configure options are those that begin with two dashes "--"
or "gl_".
CMake options begin with "XZ_", "TUKLIB_", or "CMAKE_". To use
them on the command line, prefix them with "-D", for example,
"cmake -DCMAKE_COMPILE_WARNING_AS_ERROR=ON".
CMAKE_BUILD_TYPE=TYPE
CMake only:
For release builds, CMAKE_BUILD_TYPE=Release is fine.
On targets where CMake defaults to -O3, the default
value is overridden to -O2.
Empty value (CMAKE_BUILD_TYPE=) is fine if using custom
optimization options. *In this package* the empty build
type also disables debugging code just like "Release"
does. To enable debugging code with empty build type,
use -UNDEBUG in the CFLAGS environment variable or in
the CMAKE_C_FLAGS CMake variable to override -DNDEBUG.
Non-standard build types like "None" do NOT disable
debugging code! Such non-standard build types should
be avoided for production builds!
--enable-encoders=LIST
--disable-encoders
XZ_ENCODERS=LIST
Specify a LIST of filter encoders to build. In the
configure option the list is comma separated.
CMake lists are semicolon separated.
To see the exact list of available filter encoders:
- Autotools: ./configure --help
- CMake: Configure the tree normally first, then use
"cmake -LH ." to list the cache variables.
The default is to build all supported encoders.
Specify a comma-separated LIST of filter encoders to
build. See "./configure --help" for exact list of
available filter encoders. The default is to build all
supported encoders.
If LIST is empty or --disable-encoders is used, no filter
encoders will be built and also the code shared between
@ -276,12 +249,10 @@ XZ Utils Installation
--enable-decoders=LIST
--disable-decoders
XZ_DECODERS=LIST
This is like --enable-encoders but for decoders. The
default is to build all supported decoders.
--enable-match-finders=LIST
XZ_MATCH_FINDERS=LIST
liblzma includes two categories of match finders:
hash chains and binary trees. Hash chains (hc3 and hc4)
are quite fast but they don't provide the best compression
@ -298,11 +269,9 @@ XZ Utils Installation
or LZMA2 filter encoders are being built.
--enable-checks=LIST
XZ_CHECKS=LIST
liblzma support multiple integrity checks. CRC32 is
mandatory, and cannot be omitted. Supported check
types are "crc32", "crc64", and "sha256". By default
all supported check types are enabled.
mandatory, and cannot be omitted. See "./configure --help"
for exact list of available integrity check types.
liblzma and the command line tools can decompress files
which use unsupported integrity check type, but naturally
@ -313,7 +282,6 @@ XZ Utils Installation
it is known to not cause problems.
--enable-external-sha256
XZ_EXTERNAL_SHA256=ON
Try to use SHA-256 code from the operating system libc
or similar base system libraries. This doesn't try to
use OpenSSL or libgcrypt or such libraries.
@ -350,8 +318,6 @@ XZ Utils Installation
time xz --test foo.xz
--disable-microlzma
XZ_MICROLZMA_ENCODER=OFF
XZ_MICROLZMA_DECODER=OFF
Don't build MicroLZMA encoder and decoder. This omits
lzma_microlzma_encoder() and lzma_microlzma_decoder()
API functions from liblzma. These functions are needed
@ -359,7 +325,6 @@ XZ Utils Installation
erofs-utils but they may be used by others too.
--disable-lzip-decoder
XZ_LZIP_DECODER=OFF
Disable decompression support for .lz (lzip) files.
This omits the API function lzma_lzip_decoder() from
liblzma and .lz support from the xz tool.
@ -368,10 +333,6 @@ XZ Utils Installation
--disable-xzdec
--disable-lzmadec
--disable-lzmainfo
XZ_TOOL_XZ=OFF
XZ_TOOL_XZDEC=OFF
XZ_TOOL_LZMADEC=OFF
XZ_TOOL_LZMAINFO=OFF
Don't build and install the command line tool mentioned
in the option name.
@ -381,63 +342,37 @@ XZ Utils Installation
a dangling man page symlink lzmadec.1 -> xzdec.1 is
created.
XZ_TOOL_SYMLINKS=OFF
Don't create the unxz and xzcat symlinks. (There is
no "configure" option to disable these symlinks.)
--disable-lzma-links
XZ_TOOL_SYMLINKS_LZMA=OFF
Don't create symlinks for LZMA Utils compatibility.
This includes lzma, unlzma, and lzcat. If scripts are
installed, also lzdiff, lzcmp, lzgrep, lzegrep, lzfgrep,
lzmore, and lzless will be omitted if this option is used.
--disable-scripts
XZ_TOOL_SCRIPTS=OFF
Don't install the scripts xzdiff, xzgrep, xzmore, xzless,
and their symlinks.
--disable-doc
XZ_DOC=OFF
Don't install the documentation files to $docdir
(often /usr/doc/xz or /usr/local/doc/xz). Man pages
will still be installed. The $docdir can be changed
with --docdir=DIR.
--enable-doxygen
XZ_DOXYGEN=ON
Enable generation of the HTML version of the liblzma API
documentation using Doxygen. The resulting files are
installed to $docdir/api. This option assumes that
the 'doxygen' tool is available.
NOTE: --disable-doc or XZ_DOC=OFF don't affect this.
--disable-assembler
XZ_ASM_I386=OFF
This disables CRC32 and CRC64 assembly code on
32-bit x86. This option currently does nothing
on other architectures (not even on x86-64).
liblzma includes some assembler optimizations. Currently
there is only assembler code for CRC32 and CRC64 for
32-bit x86.
The 32-bit x86 assembly is position-independent code
which is suitable for use in shared libraries and
position-independent executables. It uses only i386
instructions but the code is optimized for i686 class
CPUs. If you are compiling liblzma exclusively for
All the assembler code in liblzma is position-independent
code, which is suitable for use in shared libraries and
position-independent executables. So far only i386
instructions are used, but the code is optimized for i686
class CPUs. If you are compiling liblzma exclusively for
pre-i686 systems, you may want to disable the assembler
code.
The assembly code is compatible with only certain OSes
and toolchains (it's not compatible with MSVC).
Since XZ Utils 5.7.1alpha, the 32-bit x86 assembly code
co-exists with the modern CLMUL code: CLMUL is used if
support for it is detected at runtime. On old processors
the assembly code is used.
--disable-clmul-crc
XZ_CLMUL_CRC=OFF
Disable the use of carryless multiplication for CRC
Disable the use carryless multiplication for CRC
calculation even if compiler support for it is detected.
The code uses runtime detection of SSSE3, SSE4.1, and
CLMUL instructions on x86. On 32-bit x86 this currently
@ -448,27 +383,7 @@ XZ Utils Installation
required extensions (-msse4.1 -mpclmul) then runtime
detection isn't used and the generic code is omitted.
--disable-arm64-crc32
XZ_ARM64_CRC32=OFF
Disable the use of the ARM64 CRC32 instruction extension
even if compiler support for it is detected. The code will
detect support for the instruction at runtime.
If using compiler options that unconditionally allow the
required extensions (-march=armv8-a+crc or -march=armv8.1-a
and later) then runtime detection isn't used and the
generic code is omitted.
--disable-loongarch-crc32
XZ_LOONGARCH_CRC32=OFF
Disable the use of the 64-bit LoongArch CRC32
instruction extension even if compiler support for
it is detected. There is no runtime detection because
all 64-bit LoongArch processors should support
the CRC32 instructions.
--enable-unaligned-access
TUKLIB_FAST_UNALIGNED_ACCESS=ON
Allow liblzma to use unaligned memory access for 16-bit,
32-bit, and 64-bit loads and stores. This should be
enabled only when the hardware supports this, that is,
@ -477,46 +392,10 @@ XZ Utils Installation
slow. This option shouldn't be used on systems that
rely on such emulation.
Unaligned access is enabled by default on these:
- 32-bit x86
- 64-bit x86-64
- 32-bit big endian PowerPC
- 64-bit big endian PowerPC
- 64-bit little endian PowerPC
- some RISC-V [1]
- some 32-bit ARM [2]
- some 64-bit ARM64 [2] (NOTE: Autodetection bug
if using GCC -mstrict-align, see below.)
[1] Unaligned access is enabled by default if
configure sees that the C compiler
#defines __riscv_misaligned_fast.
[2] Unaligned access is enabled by default if
configure sees that the C compiler
#defines __ARM_FEATURE_UNALIGNED:
- ARMv7 + GCC or Clang: It works. The options
-munaligned-access and -mno-unaligned-access
affect this macro correctly.
- ARM64 + Clang: It works. The options
-munaligned-access, -mno-unaligned-access,
and -mstrict-align affect this macro correctly.
Clang >= 17 supports -mno-strict-align too.
- ARM64 + GCC: It partially works. The macro
is always #defined by GCC versions at least
up to 13.2, even when using -mstrict-align.
If building for strict-align ARM64, the
configure option --disable-unaligned-access
should be used if using a GCC version that has
this issue because otherwise the performance
may be degraded. It likely won't crash due to
how unaligned access is done in the C code.
Unaligned access is enabled by default on x86, x86-64,
big endian PowerPC, some ARM, and some ARM64 systems.
--enable-unsafe-type-punning
TUKLIB_USE_UNSAFE_TYPE_PUNNING=ON
This enables use of code like
uint8_t *buf8 = ...;
@ -533,7 +412,6 @@ XZ Utils Installation
GCC 3 and early 4.x on x86, GCC < 6 on ARMv6 and ARMv7).
--enable-small
XZ_SMALL=ON
Reduce the size of liblzma by selecting smaller but
semantically equivalent version of some functions, and
omit precomputed lookup tables. This option tends to
@ -550,7 +428,6 @@ XZ Utils Installation
flag(s) to CFLAGS manually.
--enable-assume-ram=SIZE
XZ_ASSUME_RAM=SIZE
On the most common operating systems, XZ Utils is able to
detect the amount of physical memory on the system. This
information is used by the options --memlimit-compress,
@ -567,7 +444,6 @@ XZ Utils Installation
src/common/tuklib_physmem.c for details.
--enable-threads=METHOD
XZ_THREADS=METHOD
Threading support is enabled by default so normally there
is no need to specify this option.
@ -584,14 +460,14 @@ XZ Utils Installation
too. This is the default for 32-bit x86
Windows builds. Unless the compiler
supports __attribute__((__constructor__)),
the 'win95' threading is incompatible with
the `win95' threading is incompatible with
--enable-small.
vista Use Windows Vista compatible threads. The
resulting binaries won't run on Windows XP
or older. This is the default for Windows
excluding 32-bit x86 builds (that is, on
x86-64 the default is 'vista').
x86-64 the default is `vista').
no Disable threading support. This is the
same as using --disable-threads.
@ -604,17 +480,13 @@ XZ Utils Installation
one thread, something bad may happen.
--enable-sandbox=METHOD
XZ_SANDBOX=METHOD
There is limited sandboxing support in the xz and xzdec
tools. If built with sandbox support, xz uses it
automatically when (de)compressing exactly one file to
standard output when the options --files or --files0 aren't
used. This is a common use case, for example,
(de)compressing .tar.xz files via GNU tar. The sandbox is
also used for single-file 'xz --test' or 'xz --list'.
xzdec always uses the sandbox, except when more than one
file are decompressed. In this case it will enable the
sandbox for the last file that is decompressed.
There is limited sandboxing support in the xz tool. If
built with sandbox support, it's used automatically when
(de)compressing exactly one file to standard output and
the options --files or --files0 weren't used. This is a
common use case, for example, (de)compressing .tar.xz
files via GNU tar. The sandbox is also used for
single-file `xz --test' or `xz --list'.
Supported METHODs:
@ -626,7 +498,7 @@ XZ Utils Installation
no Disable sandboxing support.
capsicum
Use Capsicum (FreeBSD >= 10.2) for
Use Capsicum (FreeBSD >= 10) for
sandboxing. If no Capsicum support
is found, configure will give an error.
@ -634,76 +506,23 @@ XZ Utils Installation
sandboxing. If pledge(2) isn't found,
configure will give an error.
landlock
Use Landlock (Linux >= 5.13) for
sandboxing. If no Landlock support
is found, configure will give an error.
--enable-symbol-versions[=VARIANT]
XZ_SYMBOL_VERSIONING=VARIANT
Use symbol versioning for liblzma shared library.
This is enabled by default on GNU/Linux (glibc only),
other GNU-based systems, and FreeBSD.
Symbol versioning is never used for static liblzma. This
option is ignored when not building a shared library.
Supported VARIANTs:
no Disable symbol versioning. This is the
same as using --disable-symbol-versions.
auto Autodetect between "no", "linux",
and "generic".
yes Autodetect between "linux" and
"generic". This forces symbol
versioning to be used when
building a shared library.
generic Generic version is the default for
FreeBSD and GNU/Linux on MicroBlaze.
This is also used on GNU/Linux when
building with NVIDIA HPC Compiler
because the compiler doesn't support
the features required for the "linux"
variant below.
linux Special version for GNU/Linux (glibc
only). This adds a few extra symbol
versions for compatibility with binaries
that have been linked against a liblzma
version that has been patched with
"xz-5.2.2-compat-libs.patch" from
RHEL/CentOS 7. That patch was used
by some build tools outside of
RHEL/CentOS 7 too.
--enable-symbol-versions
Use symbol versioning for liblzma. This is enabled by
default on GNU/Linux, other GNU-based systems, and
FreeBSD.
--enable-debug
This enables the assert() macro and possibly some other
run-time consistency checks. It makes the code slower, so
you normally don't want to have this enabled.
In CMake, the build type (CMAKE_BUILD_TYPE) controls if
-DNDEBUG is passed to the compiler. *In this package*,
an empty build type disables debugging code too.
Non-standard build types like "None" do NOT disable
debugging code!
To enable debugging code with empty build type in CMake,
use -UNDEBUG in the CFLAGS environment variable or in
the CMAKE_C_FLAGS CMake variable to override -DNDEBUG.
--enable-werror
CMAKE_COMPILE_WARNING_AS_ERROR=ON (CMake >= 3.24)
If building with GCC, make all compiler warnings an error,
that abort the compilation. This may help catching bugs,
and should work on most systems. This has no effect on the
resulting binaries.
--enable-path-for-scripts=PREFIX
(CMake determines this from the path of XZ_POSIX_SHELL)
If PREFIX isn't empty, PATH=PREFIX:$PATH will be set in
the beginning of the scripts (xzgrep and others).
The default is empty except on Solaris the default is
@ -720,36 +539,6 @@ XZ Utils Installation
the PATH for the scripts. It is described in section 3.2
and is supported in this xz version too.
gl_cv_posix_shell=/path/to/bin/sh
XZ_POSIX_SHELL=/path/to/bin/sh
POSIX shell to use for xzgrep and other scripts.
- configure should autodetect this well enough.
Typically it's /bin/sh but in some cases, like
Solaris, something else is used.
- CMake build uses /bin/sh except on Solaris the
default is /usr/xpg4/bin/sh.
CMAKE_DLL_NAME_WITH_SOVERSION=ON
CMake on native Windows (not Cygwin) only:
This changes the filename liblzma.dll to liblzma-5.dll.
The unversioned filename liblzma.dll has been used
since XZ Utils 5.0.0 when creating binary packages
using the included windows/build.bash. The same
unversioned filename is the default with CMake.
However, there are popular builds that, very
understandably and reasonably, use the versioned
filename produced by GNU Libtool.
This option should usually be left to its default value
(OFF). It can be set to ON if the liblzma DLL filename
must be compatible with the versioned filename
produced by GNU Libtool. For example, binaries
distributed in MSYS2 use a versioned DLL filename.
2.1. Static vs. dynamic linking of liblzma
@ -918,7 +707,7 @@ XZ Utils Installation
The configure script determines if assembler code can be used by
looking at the configure triplet; there is currently no check if
the assembler code can actually be built. The x86 assembler
the assembler code can actually actually be built. The x86 assembler
code should work on x86 GNU/Linux, *BSDs, Solaris, Darwin, MinGW,
Cygwin, and DJGPP. On other x86 systems, there may be problems and
the assembler code may need to be disabled with the configure option.

View File

@ -1,5 +1,9 @@
## SPDX-License-Identifier: 0BSD
##
## Author: Lasse Collin
##
## This file has been put into the public domain.
## You can do whatever you want with this file.
##
# Use -n to prevent gzip from adding a timestamp to the .gz headers.
GZIP_ENV = -9n
@ -17,11 +21,11 @@ if COND_DOC
dist_doc_DATA = \
AUTHORS \
COPYING \
COPYING.0BSD \
COPYING.GPLv2 \
NEWS \
README \
THANKS \
TODO \
doc/faq.txt \
doc/history.txt \
doc/xz-file-format.txt \
@ -34,34 +38,47 @@ dist_examples_DATA = \
doc/examples/02_decompress.c \
doc/examples/03_compress_custom.c \
doc/examples/04_compress_easy_mt.c \
doc/examples/11_file_info.c \
doc/examples/Makefile
examplesolddir = $(docdir)/examples_old
dist_examplesold_DATA = \
doc/examples_old/xz_pipe_comp.c \
doc/examples_old/xz_pipe_decomp.c
# Install the Doxygen generated documentation if they were built.
install-data-local:
if test -d "$(srcdir)/doc/api" ; then \
$(MKDIR_P) "$(DESTDIR)$(docdir)/api" && \
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
"$(DESTDIR)$(docdir)/api"; \
fi
# Remove the Doxygen generated documentation when uninstalling.
uninstall-local:
rm -rf "$(DESTDIR)$(docdir)/api"
endif
EXTRA_DIST = \
cmake \
po4a \
extra \
dos \
doxygen \
extra \
po4a \
windows \
macosx \
cmake \
CMakeLists.txt \
autogen.sh \
COPYING.GPLv2 \
COPYING.GPLv3 \
COPYING.LGPLv2.1 \
INSTALL.generic \
PACKAGERS \
TODO \
autogen.sh \
build-aux/license-check.sh \
build-aux/manconv.sh \
build-aux/version.sh \
po/xz.pot-header
build-aux/version.sh
ACLOCAL_AMFLAGS = -I m4
# List of man pages to convert to plain text in the dist-hook target
# or to PDF in the pdf-local target.
# List of man pages to convert to PDF and plain text in the dist-hook target.
manfiles = \
src/xz/xz.1 \
src/xzdec/xzdec.1 \
@ -71,53 +88,47 @@ manfiles = \
src/scripts/xzless.1 \
src/scripts/xzmore.1
# Create ChangeLog using "git log".
# Convert the man pages to plain text (ASCII only) format.
# Create ChangeLog from output of "git log --date=iso --stat".
# Convert the man pages to PDF and plain text (ASCII only) formats.
dist-hook:
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
( cd "$(srcdir)" && git log --pretty=medium --date=iso --stat \
b69da6d4bb6bb11fc0cf066920791990d2b22a06^..HEAD ) \
( cd "$(srcdir)" && git log --date=iso --stat \
6060f7dc76fd6c2a8a1f8e85d0e4d86bb78273e6^..HEAD ) \
> "$(distdir)/ChangeLog"; \
fi
if type groff > /dev/null 2>&1; then \
if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \
dest="$(distdir)/doc/man" && \
$(MKDIR_P) "$$dest/txt" && \
$(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" "$$dest/txt" && \
for FILE in $(manfiles); do \
BASE=`basename $$FILE .1` && \
$(SHELL) "$(srcdir)/build-aux/manconv.sh" ascii \
sh "$(srcdir)/build-aux/manconv.sh" pdf a4 \
< "$(srcdir)/$$FILE" \
> "$$dest/pdf-a4/$$BASE-a4.pdf" && \
sh "$(srcdir)/build-aux/manconv.sh" pdf letter \
< "$(srcdir)/$$FILE" \
> "$$dest/pdf-letter/$$BASE-letter.pdf" && \
sh "$(srcdir)/build-aux/manconv.sh" ascii \
< "$(srcdir)/$$FILE" \
> "$$dest/txt/$$BASE.txt"; \
done; \
fi
cd "$(distdir)" && $(SHELL) "build-aux/license-check.sh"
if test -d "$(srcdir)/doc/api" ; then \
$(MKDIR_P) "$(distdir)/doc/api" && \
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
"$(distdir)/doc/api"; \
fi
# This works with GNU tar and gives cleaner package than normal 'make dist'.
# This also ensures that the translations are up to date (dist-hook
# This also ensures that the man page translations are up to date (dist-hook
# would be too late for that).
mydist:
$(SHELL) "$(srcdir)/src/liblzma/validate_map.sh"
cd po && $(MAKE) xz.pot-update
cd "$(srcdir)/po4a" && $(SHELL) update-po
sh "$(srcdir)/src/liblzma/validate_map.sh"
cd "$(srcdir)/po4a" && sh update-po
cd "$(srcdir)/doxygen" && sh update-doxygen
VERSION=$(VERSION); \
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
$(SHELL) "$(srcdir)/build-aux/license-check.sh" || exit 1; \
SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=8 | cut -b2-`; \
SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \
test -n "$$SNAPSHOT" && VERSION=$$SNAPSHOT; \
fi; \
TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w --sort=name' \
LC_COLLATE=C \
TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w' \
$(MAKE) VERSION="$$VERSION" dist-gzip
# NOTE: This only creates the PDFs. The install rules are missing.
pdf-local:
dest="doc/man" && \
$(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" && \
for FILE in $(manfiles); do \
BASE=`basename $$FILE .1` && \
$(SHELL) "$(srcdir)/build-aux/manconv.sh" pdf a4 \
< "$(srcdir)/$$FILE" \
> "$$dest/pdf-a4/$$BASE-a4.pdf" && \
$(SHELL) "$(srcdir)/build-aux/manconv.sh" pdf letter \
< "$(srcdir)/$$FILE" \
> "$$dest/pdf-letter/$$BASE-letter.pdf"; \
done

1194
NEWS

File diff suppressed because it is too large Load Diff

View File

@ -44,8 +44,8 @@ Information to packagers of XZ Utils
lzmadec binary for compatibility with LZMA Utils
liblzma liblzma.so.*
liblzma-devel liblzma.so, liblzma.a, API headers
liblzma-doc Example programs and, if enabled at build time,
Doxygen-generated liblzma API docs (HTML)
liblzma-doc Doxygen-generated liblzma API docs (HTML),
example programs
2. Package description
@ -124,15 +124,14 @@ Information to packagers of XZ Utils
If the package manager supports a license field, you probably should
put GPLv2+ there (GNU GPL v2 or later). The interesting parts of
XZ Utils are under the BSD Zero Clause License (0BSD), but some less
important files ending up into the binary package are under GPLv2+.
So it is simplest to just say GPLv2+ if you cannot specify
"BSD0 and GPLv2+".
XZ Utils are in the public domain, but some less important files
ending up into the binary package are under GPLv2+. So it is simplest
to just say GPLv2+ if you cannot specify "public domain and GPLv2+".
If you split XZ Utils into multiple packages as described earlier
in this file, liblzma and liblzma-dev packages will contain only
0BSD-licensed code from XZ Utils (compiler or linker may add some
third-party code which may have other licenses).
public domain code (from XZ Utils at least; compiler or linker may
add some third-party code, which may be copyrighted).
4. configure options
@ -170,14 +169,13 @@ Information to packagers of XZ Utils
can be replaced with a symlink if your distro ships with shared
copies of the common license texts.
The Doxygen-generated liblzma API documentation (HTML) is built and
installed if the configure option --enable-doxygen is used (it's
disabled by default). This requires that Doxygen is available. The
API documentation is installed by "make install" to $docdir/api.
NOTE: The files generated by Doxygen include content from
Doxygen itself. Check the license info before distributing
the Doxygen-generated files.
The Doxygen-generated documentation (HTML) for the liblzma API
headers is included in the source release and will be installed by
"make install" to $docdir/api. All JavaScript is removed to
simplify license compliance and to reduce the install size. If the
liblzma API documentation is not desired, either run configure with
--disable-doc or remove the doc/api directory before running
"make install".
6. Extra files

154
README
View File

@ -10,7 +10,6 @@ XZ Utils
2. Version numbering
3. Reporting bugs
4. Translations
4.1. Testing translations
5. Other implementations of the .xz format
6. Contact information
@ -68,25 +67,24 @@ XZ Utils
1.1. Overall documentation
README This file
README This file
INSTALL.generic Generic install instructions for those not
familiar with packages using GNU Autotools
INSTALL Installation instructions specific to XZ Utils
PACKAGERS Information to packagers of XZ Utils
INSTALL.generic Generic install instructions for those not familiar
with packages using GNU Autotools
INSTALL Installation instructions specific to XZ Utils
PACKAGERS Information to packagers of XZ Utils
COPYING XZ Utils copyright and license information
COPYING.0BSD BSD Zero Clause License
COPYING.GPLv2 GNU General Public License version 2
COPYING.GPLv3 GNU General Public License version 3
COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1
COPYING XZ Utils copyright and license information
COPYING.GPLv2 GNU General Public License version 2
COPYING.GPLv3 GNU General Public License version 3
COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1
AUTHORS The main authors of XZ Utils
THANKS Incomplete list of people who have helped making
this software
NEWS User-visible changes between XZ Utils releases
ChangeLog Detailed list of changes (commit log)
TODO Known bugs and some sort of to-do list
AUTHORS The main authors of XZ Utils
THANKS Incomplete list of people who have helped making
this software
NEWS User-visible changes between XZ Utils releases
ChangeLog Detailed list of changes (commit log)
TODO Known bugs and some sort of to-do list
Note that only some of the above files are included in binary
packages.
@ -96,9 +94,9 @@ XZ Utils
The command-line tools are documented as man pages. In source code
releases (and possibly also in some binary packages), the man pages
are also provided in plain text (ASCII only) format in the directory
"doc/man" to make the man pages more accessible to those whose
operating system doesn't provide an easy way to view man pages.
are also provided in plain text (ASCII only) and PDF formats in the
directory "doc/man" to make the man pages more accessible to those
whose operating system doesn't provide an easy way to view man pages.
1.3. Documentation for liblzma
@ -204,47 +202,77 @@ XZ Utils
https://translationproject.org/html/translators.html
Updates to translations won't be accepted by methods that bypass
the Translation Project because there is a risk of duplicate work:
translation updates made in the xz repository aren't seen by the
translators in the Translation Project. If you have found bugs in
a translation, please report them to the Language-Team address
which can be found near the beginning of the PO file.
Below are notes and testing instructions specific to xz
translations.
If you find language problems in the original English strings,
feel free to suggest improvements. Ask if something is unclear.
4.1. Testing translations
Testing can be done by installing xz into a temporary directory.
If building from Git repository (not tarball), generate the
Autotools files:
./autogen.sh
Create a subdirectory for the build files. The tmp-build directory
can be deleted after testing.
mkdir tmp-build
cd tmp-build
../configure --disable-shared --enable-debug --prefix=$PWD/inst
Edit the .po file in the po directory. Then build and install to
the "tmp-build/inst" directory, and use translations.bash to see
how some of the messages look. Repeat these steps if needed:
Testing can be done by installing xz into a temporary directory:
./configure --disable-shared --prefix=/tmp/xz-test
# <Edit the .po file in the po directory.>
make -C po update-po
make -j"$(nproc)" install
bash ../debug/translation.bash | less
bash ../debug/translation.bash | less -S # For --list outputs
make install
bash debug/translation.bash | less
bash debug/translation.bash | less -S # For --list outputs
To test other languages, set the LANGUAGE environment variable
before running translations.bash. The value should match the PO file
name without the .po suffix. Example:
Repeat the above as needed (no need to re-run configure though).
export LANGUAGE=fi
Note especially the following:
- The output of --help and --long-help must look nice on
an 80-column terminal. It's OK to add extra lines if needed.
- In contrast, don't add extra lines to error messages and such.
They are often preceded with e.g. a filename on the same line,
so you have no way to predict where to put a \n. Let the terminal
do the wrapping even if it looks ugly. Adding new lines will be
even uglier in the generic case even if it looks nice in a few
limited examples.
- Be careful with column alignment in tables and table-like output
(--list, --list --verbose --verbose, --info-memory, --help, and
--long-help):
* All descriptions of options in --help should start in the
same column (but it doesn't need to be the same column as
in the English messages; just be consistent if you change it).
Check that both --help and --long-help look OK, since they
share several strings.
* --list --verbose and --info-memory print lines that have
the format "Description: %s". If you need a longer
description, you can put extra space between the colon
and %s. Then you may need to add extra space to other
strings too so that the result as a whole looks good (all
values start at the same column).
* The columns of the actual tables in --list --verbose --verbose
should be aligned properly. Abbreviate if necessary. It might
be good to keep at least 2 or 3 spaces between column headings
and avoid spaces in the headings so that the columns stand out
better, but this is a matter of opinion. Do what you think
looks best.
- Be careful to put a period at the end of a sentence when the
original version has it, and don't put it when the original
doesn't have it. Similarly, be careful with \n characters
at the beginning and end of the strings.
- Read the TRANSLATORS comments that have been extracted from the
source code and included in xz.pot. Some comments suggest
testing with a specific command which needs an .xz file. You
may use e.g. any tests/files/good-*.xz. However, these test
commands are included in translations.bash output, so reading
translations.bash output carefully can be enough.
- If you find language problems in the original English strings,
feel free to suggest improvements. Ask if something is unclear.
- The translated messages should be understandable (sometimes this
may be a problem with the original English messages too). Don't
make a direct word-by-word translation from English especially if
the result doesn't sound good in your language.
Thanks for your help!
5. Other implementations of the .xz format
@ -269,13 +297,11 @@ XZ Utils
6. Contact information
----------------------
XZ Utils in general:
- Home page: https://tukaani.org/xz/
- Email to maintainer(s): xz@tukaani.org
- IRC: #tukaani on Libera Chat
- GitHub: https://github.com/tukaani-project/xz
If you have questions, bug reports, patches etc. related to XZ Utils,
the project maintainers Lasse Collin and Jia Tan can be reached via
<xz@tukaani.org>.
Lead maintainer:
- Email: Lasse Collin <lasse.collin@tukaani.org>
- IRC: Larhzu on Libera Chat
You might find Lasse also from #tukaani on Libera Chat (IRC).
The nick is Larhzu. The channel tends to be pretty quiet,
so just ask your question and someone might wake up.

385
THANKS
View File

@ -3,252 +3,169 @@ Thanks
======
Some people have helped more, some less, but nevertheless everyone's help
has been important. :-)
- Adam Borowski
- Adam Walling
- Adrien Nader
- Agostino Sarubbo
- Alexander Bluhm
- Alexander M. Greenham
- Alexander Neumann
- Alexandre Sauvé
- Alexey Tourbin
- Anders F. Björklund
- Andraž 'ruskie' Levstik
- Andre Noll
- Andreas K. Hüttel
- Andreas Müller
- Andreas Schwab
- Andreas Zieringer
- Andrej Skenderija
- Andres Freund
- Andrew Dudman
- Andrew Murray
- Antoine Cœur
- Anton Kochkov
- Antonio Diaz Diaz
- Arkadiusz Miskiewicz
- Asgeir Storesund Nilsen
- Aziz Chaudhry
- Bela Lubkin
- Ben Boeckel
- Benjamin Buch
- Benno Schulenberg
- Bernhard Reutner-Fischer
- Bert Wesarg
- Bhargava Shastry
- Bill Glessner
- Bjarni Ingi Gislason
- Boud Roukema
- Brad Smith
- Bruce Stark
- Cary Lewis
- Charles Wilson
- Chenxi Mao
- Chien Wong
- Chris Donawa
- Chris McCrohan
- Christian Hesse
- Christian Kujau
- Christian von Roques
- Christian Weisgerber
- Christoph Junghans
- Collin Funk
- Conley Moorhous
- Cristian Rodríguez
- Cristiano Ceglia
- Dan Shechter
- Dan Stromberg
- Dan Weiss
- Daniel Leonard
- Daniel Mealha Cabrita
- Daniel Packard
- Daniel Richard G.
- David Burklund
- Denis Excoffier
- Derwin McGeary
- Dexter Castor Döpping
- Diederik de Haas
- Diego Elio Pettenò
- Dimitri Papadopoulos Orfanos
- Dirk Müller
- Douglas Thor
- Ed Maste
- Elbert Pol
- Eli Schwartz
- Elijah Almeida Coimbra
- Émilie Labbé
- Emmanuel Blot
- Eric Lindblad
- Eric S. Raymond
- Étienne Mollier
- Evan Nemerson
- Fangrui Song
- Felix Collin
- Filip Palian
- Firas Khalil Khana
- François Etcheverry
- Frank Busse
- Frank Prochnow
- Fredrik Wikstrom
- Gabi Davar
- Gabriela Gutierrez
- Gilles Espinasse
- Gregory Margo
- Guillaume Outters
- Guiorgy Potskhishvili
has been important. :-) In alphabetical order:
- Mark Adler
- H. Peter Anvin
- Hajin Jang
- Hans Jansen
- Harri K. Koskinen
- Hin-Tak Leung
- H.J. Lu
- Hongbo Ni
- Igor Pavlov
- İhsan Doğan
- Ilya Kurdyukov
- Iouri Kharon
- İsmail Dönmez
- Ivan A. Melnikov
- Jakub Bogusz
- James Buren
- James M Leddy
- Jan Kratochvil
- Jan Terje Hansen
- Jason Gorski
- Jeff Bastian
- Jeffrey Walton
- Jeroen Roovers
- Jim Meyering
- Jim Wilcoxson
- Joachim Henke
- John Paul Adrian Glaubitz
- Jonathan Nieder
- Jonathan Stott
- Joona Kannisto
- Jouk Jansen
- Juan Manuel Guerrero
- Jukka Salmi
- Julien Marrec
- Jun I Jin
- Kai Pastor
- Nelson H. F. Beebe
- Karl Beldan
- Karl Berry
- Keith Patton
- Kelvin Lee
- Kevin R. Bulgrien
- Kian-Meng Ang
- Kim Jinyeong
- Kirill A. Korinsky
- Kiyoshi Kanazawa
- Lars Wirzenius
- Li Chenggang
- Lizandro Heredia
- Loganaden Velvindron
- Lorenzo De Liso
- Lukas Braune
- Maarten Bosmans
- Maksym Vatsyk
- Marcin Kowalczyk
- Marcus Comstedt
- Marcus Tillmanns
- Marek Černocký
- Mark Adler
- Mark Wielaard
- Markus Duft
- Markus Rickert
- Martin Blumenstingl
- Martin Matuška
- Martin Storsjö
- Martin Väth
- Mathieu Vachon
- Matthew Good
- Matthieu Rakotojaona
- Anders F. Björklund
- Emmanuel Blot
- Melanie Blower
- Alexander Bluhm
- Martin Blumenstingl
- Ben Boeckel
- Jakub Bogusz
- Adam Borowski
- Maarten Bosmans
- Lukas Braune
- Benjamin Buch
- Trent W. Buck
- Kevin R. Bulgrien
- James Buren
- David Burklund
- Frank Busse
- Daniel Mealha Cabrita
- Milo Casagrande
- Marek Černocký
- Tomer Chachamu
- Vitaly Chikunov
- Antoine Cœur
- Gabi Davar
- İhsan Doğan
- Chris Donawa
- Andrew Dudman
- Markus Duft
- İsmail Dönmez
- Paul Eggert
- Robert Elz
- Gilles Espinasse
- Denis Excoffier
- Vincent Fazio
- Michael Felt
- Michael Fox
- Michał Górny
- Mike Frysinger
- Mikko Pouru
- Milo Casagrande
- Mohammed Adnène Trojette
- Nathan Moinvaziri
- Nelson H. F. Beebe
- Nicholas Jackson
- Ole André Vadla Ravnås
- Orange Tsai
- Orgad Shaneh
- Patrick J. Volkerding
- Paul Eggert
- Paul Townsend
- Pavel Raiskup
- Per Øyvind Karlsen
- Peter Ivanov
- Peter Lawler
- Peter O'Gorman
- Peter Pallinger
- Peter Seiderer
- Pierre-Yves Martin
- Pilorz Wojciech
- Pippijn van Steenhoven
- Rafał Mużyło
- Rainer Müller
- Ralf Wildenhues
- Rich Prohaska
- Richard Koch
- Richard W.M. Jones
- Robert Elz
- Robert Readman
- Roel Bouckaert
- Ron Desmond
- Ruarí Ødegaard
- Rui Paulo
- Ryan Colyer
- Ryan Young
- Sam James
- Scott McAllister
- Sean Fenian
- Sebastian Andrzej Siewior
- Sergey Kosukhin
- Simon Josefsson
- Siteshwar Vashisht
- Steffen Nurpmeso
- Stephan Kulow
- Stephen Sachs
- Stuart Shelton
- Taiki Tsunekawa
- Thomas Klausner
- Tobias Lahrmann Hansen
- Tobias Stoeckmann
- Daniel Richard G.
- Tomasz Gajc
- Tomer Chachamu
- Torsten Rupp
- Trần Ngọc Quân
- Trent W. Buck
- Victoria Alexia
- Vijay Sarvepalli
- Ville Koskinen
- Ville Skyttä
- Vincent Cruz
- Vincent Fazio
- Vincent Lefevre
- Vincent Torri
- Vincent Wixsom
- Bjarni Ingi Gislason
- John Paul Adrian Glaubitz
- Bill Glessner
- Michał Górny
- Jason Gorski
- Juan Manuel Guerrero
- Diederik de Haas
- Joachim Henke
- Christian Hesse
- Vincenzo Innocente
- Vitaly Chikunov
- Peter Ivanov
- Nicholas Jackson
- Sam James
- Hajin Jang
- Jouk Jansen
- Jun I Jin
- Kiyoshi Kanazawa
- Joona Kannisto
- Per Øyvind Karlsen
- Iouri Kharon
- Thomas Klausner
- Richard Koch
- Anton Kochkov
- Ville Koskinen
- Marcin Kowalczyk
- Jan Kratochvil
- Christian Kujau
- Stephan Kulow
- Ilya Kurdyukov
- Peter Lawler
- James M Leddy
- Vincent Lefevre
- Hin-Tak Leung
- Andraž 'ruskie' Levstik
- Cary Lewis
- Wim Lewis
- Xi Ruoyao
- Xin Li
- Yifeng Li
- 榆柳松 (ZhengSen Wang)
Companies:
- Google
- Sandfly Security
Other credits:
- cleemy desu wayo working with Trend Micro Zero Day Initiative
- Orange Tsai and splitline from DEVCORE Research Team
- Eric Lindblad
- Lorenzo De Liso
- H.J. Lu
- Bela Lubkin
- Gregory Margo
- Julien Marrec
- Ed Maste
- Martin Matuška
- Ivan A. Melnikov
- Jim Meyering
- Arkadiusz Miskiewicz
- Nathan Moinvaziri
- Étienne Mollier
- Conley Moorhous
- Rafał Mużyło
- Adrien Nader
- Evan Nemerson
- Hongbo Ni
- Jonathan Nieder
- Andre Noll
- Peter O'Gorman
- Dimitri Papadopoulos Orfanos
- Daniel Packard
- Filip Palian
- Peter Pallinger
- Rui Paulo
- Igor Pavlov
- Diego Elio Pettenò
- Elbert Pol
- Mikko Pouru
- Rich Prohaska
- Trần Ngọc Quân
- Pavel Raiskup
- Ole André Vadla Ravnås
- Eric S. Raymond
- Robert Readman
- Bernhard Reutner-Fischer
- Markus Rickert
- Cristian Rodríguez
- Christian von Roques
- Boud Roukema
- Torsten Rupp
- Stephen Sachs
- Jukka Salmi
- Agostino Sarubbo
- Alexandre Sauvé
- Benno Schulenberg
- Andreas Schwab
- Bhargava Shastry
- Dan Shechter
- Stuart Shelton
- Sebastian Andrzej Siewior
- Ville Skyttä
- Brad Smith
- Bruce Stark
- Pippijn van Steenhoven
- Martin Storsjö
- Jonathan Stott
- Dan Stromberg
- Jia Tan
- Vincent Torri
- Paul Townsend
- Mohammed Adnène Trojette
- Alexey Tourbin
- Taiki Tsunekawa
- Loganaden Velvindron
- Patrick J. Volkerding
- Martin Väth
- Adam Walling
- Jeffrey Walton
- Christian Weisgerber
- Dan Weiss
- Bert Wesarg
- Fredrik Wikstrom
- Jim Wilcoxson
- Ralf Wildenhues
- Charles Wilson
- Lars Wirzenius
- Pilorz Wojciech
- Ryan Young
- Andreas Zieringer
Also thanks to all the people who have participated in the Tukaani project.

29
TODO
View File

@ -5,7 +5,12 @@ XZ Utils To-Do List
Known bugs
----------
The test suite is incomplete.
The test suite is too incomplete.
If the memory usage limit is less than about 13 MiB, xz is unable to
automatically scale down the compression settings enough even though
it would be possible by switching from BT2/BT3/BT4 match finder to
HC3/HC4.
XZ Utils compress some files significantly worse than LZMA Utils.
This is due to faster compression presets used by XZ Utils, and
@ -14,8 +19,15 @@ Known bugs
compress extremely well, so going from compression ratio of 0.003
to 0.004 means big relative increase in the compressed file size.
xz doesn't quote unprintable characters when it displays file names
given on the command line.
tuklib_exit() doesn't block signals => EINTR is possible.
SIGTSTP is not handled. If xz is stopped, the estimated remaining
time and calculated (de)compression speed won't make sense in the
progress indicator (xz --verbose).
If liblzma has created threads and fork() gets called, liblzma
code will break in the child process unless it calls exec() and
doesn't touch liblzma.
@ -33,6 +45,9 @@ Missing features
be mostly useful when using a preset dictionary in LZMA2, but
it may have other uses too. Compare to deflateCopy() in zlib.
Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and
other streams that don't have an end of payload marker.
Adjust dictionary size when the input file size is known.
Maybe do this only if an option is given.
@ -56,9 +71,9 @@ Missing features
Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
Block and Stream boundaries.
Error codes from lzma_code() aren't very specific. A more detailed
error message (string) could be provided too. It could be returned
by a new function or use a currently-reserved member of lzma_stream.
lzma_strerror() to convert lzma_ret to human readable form?
This is tricky, because the same error codes are used with
slightly different meanings, and this cannot be fixed anymore.
Make it possible to adjust LZMA2 options in the middle of a Block
so that the encoding speed vs. compression ratio can be optimized
@ -86,3 +101,9 @@ Documentation
Document the LZMA1 and LZMA2 algorithms.
Miscellaneous
------------
Try to get the media type for .xz registered at IANA.

View File

@ -1,10 +1,12 @@
#!/bin/sh
# SPDX-License-Identifier: 0BSD
###############################################################################
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
###############################################################################
set -e -x
@ -17,12 +19,14 @@ ${AUTOCONF:-autoconf}
${AUTOHEADER:-autoheader}
${AUTOMAKE:-automake} -acf --foreign
# Generate the translated man pages if the "po4a" tool is available.
# Generate the translated man pages and the doxygen documentation if the
# "po4a" and "doxygen" tools are available.
# This is *NOT* done by "autoreconf -fi" or when "make" is run.
# Pass --no-po4a to this script to skip this step.
# It can be useful when you know that po4a isn't available and
# Pass --no-po4a or --no-doxygen to this script to skip these steps.
# It can be useful when you know that po4a or doxygen aren't available and
# don't want autogen.sh to exit with non-zero exit status.
generate_po4a="y"
generate_doxygen="y"
for arg in "$@"
do
@ -30,6 +34,10 @@ do
"--no-po4a")
generate_po4a="n"
;;
"--no-doxygen")
generate_doxygen="n"
;;
esac
done
@ -39,4 +47,10 @@ if test "$generate_po4a" != "n"; then
cd ..
fi
if test "$generate_doxygen" != "n"; then
cd doxygen
sh update-doxygen
cd ..
fi
exit 0

View File

@ -1,295 +0,0 @@
#!/bin/bash
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# Script meant to be used for Continuous Integration automation for POSIX
# systems. On GitHub, this is used by Ubuntu and MacOS builds.
#
#############################################################################
#
# Author: Jia Tan
#
#############################################################################
set -e
USAGE="Usage: $0
-a [autogen flags]
-b [autotools|cmake]
-c [crc32|crc64|sha256]
-d [encoders|decoders|bcj|delta|threads|shared|nls|small|clmul|sandbox]
-f [CFLAGS]
-l [destdir]
-m [compiler]
-n [ARTIFACTS_DIR_NAME]
-p [all|build|test]
-s [srcdir]"
# Absolute path of script directory
ABS_DIR=$(cd -- "$(dirname -- "$0")" && pwd)
# Default CLI option values
AUTOGEN_FLAGS=""
BUILD_SYSTEM="autotools"
CHECK_TYPE="crc32,crc64,sha256"
BCJ="y"
DELTA="y"
ENCODERS="y"
DECODERS="y"
THREADS="y"
SHARED="y"
NATIVE_LANG_SUPPORT="y"
SMALL="n"
CLMUL="y"
SANDBOX="y"
DOXYGEN="y"
SRC_DIR="$ABS_DIR/../"
DEST_DIR="$SRC_DIR/../xz_build"
PHASE="all"
ARTIFACTS_DIR_NAME="output"
[[ -z ${CPU_COUNT} ]] && { CPU_COUNT=$(nproc 2>/dev/null || sysctl -n hw.activecpu); }
[[ -z ${MAKEFLAGS} ]] && export MAKEFLAGS="-j${CPU_COUNT} -l${CPU_COUNT}"
[[ -z ${CFLAGS} ]] && export CFLAGS="-O2"
###################
# Parse arguments #
###################
while getopts a:b:c:d:l:m:n:s:p:f:w:h opt; do
# b option can have either value "autotools" OR "cmake"
case ${opt} in
h)
echo "$USAGE"
exit 0
;;
a)
AUTOGEN_FLAGS="$OPTARG"
;;
b)
case "$OPTARG" in
autotools) ;;
cmake) ;;
*) echo "Invalid build system: $OPTARG"; exit 1;;
esac
BUILD_SYSTEM="$OPTARG"
;;
c) CHECK_TYPE="$OPTARG"
;;
# d options can be a comma separated list of things to disable at
# configure time
d)
for disable_arg in $(echo "$OPTARG" | sed "s/,/ /g"); do
case "$disable_arg" in
encoders) ENCODERS="n" ;;
decoders) DECODERS="n" ;;
bcj) BCJ="n" ;;
delta) DELTA="n" ;;
threads) THREADS="n" ;;
shared) SHARED="n";;
nls) NATIVE_LANG_SUPPORT="n";;
small) SMALL="y";;
clmul) CLMUL="n";;
sandbox) SANDBOX="n";;
doxygen) DOXYGEN="n";;
*) echo "Invalid disable value: $disable_arg"; exit 1 ;;
esac
done
;;
l) DEST_DIR="$OPTARG"
;;
m)
CC="$OPTARG"
export CC
;;
n) ARTIFACTS_DIR_NAME="$OPTARG"
;;
s) SRC_DIR="$OPTARG"
;;
p) PHASE="$OPTARG"
;;
f)
CFLAGS+=" $OPTARG"
export CFLAGS
;;
w) WRAPPER="$OPTARG"
;;
*)
echo "Unsupported option: $opt"
exit 1
;;
esac
done
####################
# Helper Functions #
####################
# These two functions essentially implement the ternary "?" operator.
add_extra_option() {
# First argument is option value ("y" or "n")
# Second argument is option to set if "y"
# Third argument is option to set if "n"
if [ "$1" = "y" ]
then
EXTRA_OPTIONS="$EXTRA_OPTIONS $2"
else
EXTRA_OPTIONS="$EXTRA_OPTIONS $3"
fi
}
add_to_filter_list() {
# First argument is option value ("y" or "n")
# Second argument is option to set if "y"
if [ "$1" = "y" ]
then
FILTER_LIST="$FILTER_LIST$2"
fi
}
###############
# Build Phase #
###############
if [ "$PHASE" = "all" ] || [ "$PHASE" = "build" ]
then
# Checksum options should be specified differently based on the
# build system. It must be calculated here since we won't know
# the build system used until all args have been parsed.
# Autotools - comma separated
# CMake - semi-colon separated
if [ "$BUILD_SYSTEM" = "autotools" ]
then
SEP=","
else
SEP=";"
fi
CHECK_TYPE_TEMP=""
for crc in $(echo "$CHECK_TYPE" | sed "s/,/ /g"); do
case "$crc" in
crc32 | crc64 | sha256) ;;
*) echo "Invalid check type: $crc"; exit 1 ;;
esac
CHECK_TYPE_TEMP="$CHECK_TYPE_TEMP$SEP$crc"
done
# Remove the first character from $CHECK_TYPE_TEMP since it will
# always be the delimiter.
CHECK_TYPE="${CHECK_TYPE_TEMP:1}"
FILTER_LIST="lzma1$SEP"lzma2
# Build based on arguments
mkdir -p "$DEST_DIR"
# Generate configure option values
EXTRA_OPTIONS=""
case $BUILD_SYSTEM in
autotools)
cd "$SRC_DIR"
# Run autogen.sh script if not already run
if [ ! -f configure ]
then
./autogen.sh "$AUTOGEN_FLAGS"
fi
cd "$DEST_DIR"
add_to_filter_list "$BCJ" ",x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv"
add_to_filter_list "$DELTA" ",delta"
add_extra_option "$ENCODERS" "--enable-encoders=$FILTER_LIST" "--disable-encoders"
add_extra_option "$DECODERS" "--enable-decoders=$FILTER_LIST" "--disable-decoders"
add_extra_option "$THREADS" "" "--disable-threads"
add_extra_option "$SHARED" "" "--disable-shared"
add_extra_option "$NATIVE_LANG_SUPPORT" "" "--disable-nls"
add_extra_option "$SMALL" "--enable-small" ""
add_extra_option "$CLMUL" "" "--disable-clmul-crc"
add_extra_option "$SANDBOX" "" "--disable-sandbox"
add_extra_option "$DOXYGEN" "--enable-doxygen" ""
# Workaround a bug in too old config.guess. Version with
# timestamp='2022-05-08' would be needed but the autotools-dev
# package has 2022-01-09 in Ubuntu 22.04LTS and 24.04LTS. The
# bug breaks i386 assembler usage autodetection.
if "$SRC_DIR/build-aux/config.guess" | grep -q x86_64-pc-linux-gnux32
then
EXTRA_OPTIONS="$EXTRA_OPTIONS --build=i686-pc-linux-gnu"
fi
# Run configure script
"$SRC_DIR"/configure --enable-werror --enable-checks="$CHECK_TYPE" $EXTRA_OPTIONS --config-cache
# Build the project
make
;;
cmake)
cd "$DEST_DIR"
add_to_filter_list "$BCJ" ";x86;powerpc;ia64;arm;armthumb;arm64;sparc;riscv"
add_to_filter_list "$DELTA" ";delta"
add_extra_option "$THREADS" "-DXZ_THREADS=yes" "-DXZ_THREADS=no"
# Disable MicroLZMA if encoders are not configured.
add_extra_option "$ENCODERS" "-DXZ_ENCODERS=$FILTER_LIST" "-DXZ_ENCODERS= -DXZ_MICROLZMA_ENCODER=OFF"
# Disable MicroLZMA and lzip decoders if decoders are not configured.
add_extra_option "$DECODERS" "-DXZ_DECODERS=$FILTER_LIST" "-DXZ_DECODERS= -DXZ_MICROLZMA_DECODER=OFF -DXZ_LZIP_DECODER=OFF"
# CMake disables the shared library by default.
add_extra_option "$SHARED" "-DBUILD_SHARED_LIBS=ON" ""
add_extra_option "$NATIVE_LANG_SUPPORT" "" "-DXZ_NLS=OFF"
add_extra_option "$SMALL" "-DXZ_SMALL=ON" ""
add_extra_option "$DOXYGEN" "-DXZ_DOXYGEN=ON" ""
# Remove old cache file to clear previous settings.
rm -f "CMakeCache.txt"
cmake "$SRC_DIR/CMakeLists.txt" -B "$DEST_DIR" $EXTRA_OPTIONS -DXZ_CHECKS="$CHECK_TYPE" -G "Unix Makefiles"
cmake --build "$DEST_DIR"
;;
esac
fi
##############
# Test Phase #
##############
if [ "$PHASE" = "all" ] || [ "$PHASE" = "test" ]
then
case $BUILD_SYSTEM in
autotools)
cd "$DEST_DIR"
# If the tests fail, copy the test logs into the artifacts folder
if make check VERBOSE=1 LOG_COMPILER="$WRAPPER"
then
:
else
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
cp ./tests/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
exit 1
fi
;;
cmake)
cd "$DEST_DIR"
if ${WRAPPER} make CTEST_OUTPUT_ON_FAILURE=1 test
then
:
else
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
cp ./Testing/Temporary/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
exit 1
fi
;;
esac
fi

View File

@ -1,177 +0,0 @@
#!/bin/sh
# SPDX-License-Identifier: 0BSD
###############################################################################
#
# Look for missing license info in xz.git
#
# The project doesn't conform to the FSFE REUSE specification for now.
# Instead, this script helps in finding files that lack license info.
# Pass -v as an argument to get license info from all files in xz.git or,
# when .git isn't available, from files extracted from a release tarball
# (in case of a release tarball, the tree must be clean of any extra files).
#
# NOTE: This relies on non-POSIX xargs -0. It's supported on GNU and *BSDs.
#
###############################################################################
#
# Author: Lasse Collin
#
###############################################################################
# Print good files too if -v is passed as an argument.
VERBOSE=false
case $1 in
'')
;;
-v)
VERBOSE=true
;;
*)
echo "Usage: $0 [-v]"
exit 1
;;
esac
# Use the C locale so that sorting is always the same.
LC_ALL=C
export LC_ALL
# String to match the SPDX license identifier tag.
# Spell it here in a way that doesn't match regular grep patterns.
SPDX_LI='SPDX''-License-''Identifier'':'
# Pattern for files that don't contain SPDX tags but they are under
# a free license that isn't 0BSD.
PAT_UNTAGGED_MISC='^COPYING\.
^INSTALL\.generic$'
# Pattern for files that are 0BSD but don't contain SPDX tags.
# (The two file format specification files are public domain but
# they can be treated as 0BSD too.)
PAT_UNTAGGED_0BSD='^(.*/)?\.gitattributes$
^(.*/)?\.gitignore$
^\.github/SECURITY\.md$
^AUTHORS$
^COPYING$
^ChangeLog$
^INSTALL$
^NEWS$
^PACKAGERS$
^(.*/)?README$
^THANKS$
^TODO$
^(.*/)?[^/]+\.txt$
^doc/SHA256SUMS$
^po/LINGUAS$
^src/common/w32_application\.manifest$
^tests/xzgrep_expected_output$
^tests/files/[^/]+\.(lz|lzma|xz)$'
# Pattern for files that must be ignored when Git isn't available. This is
# useful when this script is run right after extracting a release tarball.
PAT_TARBALL_IGNORE='^(m4/)?[^/]*\.m4$
^(.*/)?Makefile\.in(\.in)?$
^(po|po4a)/.*[^.]..$
^ABOUT-NLS$
^build-aux/(config\..*|ltmain\.sh|[^.]*)$
^config\.h\.in$
^configure$'
# Go to the top source dir.
cd "$(dirname "$0")/.." || exit 1
# Get the list of files to check from git if possible.
# Otherwise list the whole source tree. This script should pass
# if it is run right after extracting a release tarball.
if test -d .git && type git > /dev/null 2>&1; then
FILES=$(git ls-files) || exit 1
IS_TARBALL=false
else
FILES=$(find . -type f) || exit 1
FILES=$(printf '%s\n' "$FILES" | sed 's,^\./,,')
IS_TARBALL=true
fi
# Sort to keep the order consistent.
FILES=$(printf '%s\n' "$FILES" | sort)
# Find the tagged files.
TAGGED=$(printf '%s\n' "$FILES" \
| tr '\n' '\000' | xargs -0r grep -l "$SPDX_LI" --)
# Find the tagged 0BSD files.
TAGGED_0BSD=$(printf '%s\n' "$TAGGED" \
| tr '\n' '\000' | xargs -0r grep -l "$SPDX_LI 0BSD" --)
# Find the tagged non-0BSD files, that is, remove the 0BSD-tagged files
# from the list of tagged files.
TAGGED_MISC=$(printf '%s\n%s\n' "$TAGGED" "$TAGGED_0BSD" | sort | uniq -u)
# Remove the tagged files from the list.
FILES=$(printf '%s\n%s\n' "$FILES" "$TAGGED" | sort | uniq -u)
# Find the intentionally-untagged files.
UNTAGGED_0BSD=$(printf '%s\n' "$FILES" | grep -E "$PAT_UNTAGGED_0BSD")
UNTAGGED_MISC=$(printf '%s\n' "$FILES" | grep -E "$PAT_UNTAGGED_MISC")
# Remove the intentionally-untagged files from the list.
FILES=$(printf '%s\n' "$FILES" | grep -Ev \
-e "$PAT_UNTAGGED_0BSD" -e "$PAT_UNTAGGED_MISC")
# FIXME: Allow untagged translations if they have a public domain notice.
# These are old translations that haven't been updated after 2024-02-14.
# Eventually these should go away.
PD_PO=$(printf '%s\n' "$FILES" | grep '\.po$' | tr '\n' '\000' \
| xargs -0r grep -Fl '# This file is put in the public domain.' --)
if test -n "$PD_PO"; then
# Remove the public domain .po files from the list.
FILES=$(printf '%s\n%s\n' "$FILES" "$PD_PO" | sort | uniq -u)
fi
# Remove generated files from the list which don't have SPDX tags but which
# can be present in release tarballs. This step is skipped when the file list
# is from "git ls-files".
GENERATED=
if $IS_TARBALL; then
GENERATED=$(printf '%s\n' "$FILES" | grep -E "$PAT_TARBALL_IGNORE")
FILES=$(printf '%s\n' "$FILES" | grep -Ev "$PAT_TARBALL_IGNORE")
fi
if $VERBOSE; then
printf '# Tagged 0BSD files:\n%s\n\n' "$TAGGED_0BSD"
printf '# Intentionally untagged 0BSD:\n%s\n\n' "$UNTAGGED_0BSD"
# FIXME: Remove when no longer needed.
if test -n "$PD_PO"; then
printf '# Old public domain translations:\n%s\n\n' "$PD_PO"
fi
printf '# Tagged non-0BSD files:\n%s\n\n' "$TAGGED_MISC"
printf '# Intentionally untagged miscellaneous: \n%s\n\n' \
"$UNTAGGED_MISC"
if test -n "$GENERATED"; then
printf '# Generated files whose license was NOT checked:\n%s\n\n' \
"$GENERATED"
fi
fi
# Look for files with an unknown license and set the exit status accordingly.
STATUS=0
if test -n "$FILES"; then
printf '# ERROR: Licensing is unclear:\n%s\n' "$FILES"
STATUS=1
fi
exit "$STATUS"

View File

@ -1,6 +1,5 @@
#!/bin/sh
# SPDX-License-Identifier: 0BSD
#
###############################################################################
#
# Wrapper for GNU groff to convert man pages to a few formats
@ -18,6 +17,9 @@
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
###############################################################################
FORMAT=$1
@ -42,12 +44,12 @@ case $FORMAT in
groff -t -mandoc -Tutf8 -P-c | col -bx
;;
ps)
sed "$SED_PD" | groff -dpaper="$PAPER" -t -mandoc \
-rC1 -rS"$FONT" -Tps -P-p"$PAPER"
sed "$SED_PD" | groff -dpaper=$PAPER -t -mandoc \
-rC1 -rS$FONT -Tps -P-p$PAPER
;;
pdf)
sed "$SED_PD" | groff -dpaper="$PAPER" -t -mandoc \
-rC1 -rS"$FONT" -Tps -P-p"$PAPER" | ps2pdf - -
sed "$SED_PD" | groff -dpaper=$PAPER -t -mandoc \
-rC1 -rS$FONT -Tps -P-p$PAPER | ps2pdf - -
;;
*)
echo 'Invalid arguments' >&2

View File

@ -1,6 +1,5 @@
#!/bin/sh
# SPDX-License-Identifier: 0BSD
#
#############################################################################
#
# Get the version string from version.h and print it out without
@ -10,6 +9,9 @@
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/
@ -17,5 +19,6 @@ sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/
s/LZMA_VERSION_STABILITY_STABLE//
s/^#define LZMA_VERSION_[MPS][AIT][AJNT][A-Z]* //p' \
src/liblzma/api/lzma/version.h \
| sed 'N; N; N; s/\n/./; s/\n/./; s/\n//g' \
| tr -d '\012\015\025'
| tr '\n' '|' \
| sed 's/|/./; s/|/./; s/|//g' \
| tr -d '\r\n'

View File

@ -1,5 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# remove-ordinals.cmake
@ -18,6 +16,9 @@
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
file(READ "${INPUT_FILE}" STR)

View File

@ -1,12 +1,11 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_common.cmake - common functions and macros for tuklib_*.cmake files
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
function(tuklib_add_definitions TARGET_OR_ALL DEFINITIONS)
# DEFINITIONS may be an empty string/list but it's fine here. There is
@ -26,29 +25,23 @@ endfunction()
# This is an over-simplified version of AC_USE_SYSTEM_EXTENSIONS in Autoconf
# or gl_USE_SYSTEM_EXTENSIONS in gnulib.
#
# NOTE: This is a macro because the changes to CMAKE_REQUIRED_DEFINITIONS
# must be visible in the calling scope.
macro(tuklib_use_system_extensions)
if(NOT MSVC)
add_compile_definitions(
_GNU_SOURCE # glibc, musl, mingw-w64
_NETBSD_SOURCE # NetBSD, MINIX 3
_OPENBSD_SOURCE # Also NetBSD!
__EXTENSIONS__ # Solaris
_POSIX_PTHREAD_SEMANTICS # Solaris
_DARWIN_C_SOURCE # macOS
_TANDEM_SOURCE # HP NonStop
_ALL_SOURCE # AIX, z/OS
macro(tuklib_use_system_extensions TARGET_OR_ALL)
if(NOT WIN32)
# FIXME? The Solaris-specific __EXTENSIONS__ should be conditional
# even on Solaris. See gnulib: git log m4/extensions.m4.
# FIXME? gnulib and autoconf.git has lots of new stuff.
tuklib_add_definitions("${TARGET_OR_ALL}"
_GNU_SOURCE
__EXTENSIONS__
_POSIX_PTHREAD_SEMANTICS
_TANDEM_SOURCE
_ALL_SOURCE
)
list(APPEND CMAKE_REQUIRED_DEFINITIONS
-D_GNU_SOURCE
-D_NETBSD_SOURCE
-D_OPENBSD_SOURCE
-D__EXTENSIONS__
-D_POSIX_PTHREAD_SEMANTICS
-D_DARWIN_C_SOURCE
-D_TANDEM_SOURCE
-D_ALL_SOURCE
)

View File

@ -1,15 +1,13 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_cpucores.cmake - see tuklib_cpucores.m4 for description and comments
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CMakePushCheckState)
include(CheckCSourceCompiles)
include(CheckIncludeFile)
@ -77,7 +75,6 @@ function(tuklib_cpucores_internal_check)
#
# We test sysctl() first and intentionally break the sysctl() test on QNX
# so that sysctl() is never used on QNX.
cmake_push_check_state()
check_include_file(sys/param.h HAVE_SYS_PARAM_H)
if(HAVE_SYS_PARAM_H)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_PARAM_H)
@ -105,7 +102,6 @@ function(tuklib_cpucores_internal_check)
}
"
TUKLIB_CPUCORES_SYSCTL)
cmake_pop_check_state()
if(TUKLIB_CPUCORES_SYSCTL)
if(HAVE_SYS_PARAM_H)
set(TUKLIB_CPUCORES_DEFINITIONS

View File

@ -1,12 +1,11 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_integer.cmake - see tuklib_integer.m4 for description and comments
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(TestBigEndian)
@ -14,69 +13,6 @@ include(CheckCSourceCompiles)
include(CheckIncludeFile)
include(CheckSymbolExists)
# An internal helper for tuklib_integer that attempts to detect if
# -mstrict-align or -mno-strict-align is in effect. This sets the
# cache variable TUKLIB_INTEGER_STRICT_ALIGN to ON if OBJDUMP_REGEX
# matches the objdump output of a check program. Otherwise it is set to OFF.
function(tuklib_integer_internal_strict_align OBJDUMP_REGEX)
if(NOT DEFINED TUKLIB_INTEGER_STRICT_ALIGN)
# Build a static library because then the function won't be optimized
# away, and there won't be any unrelated startup code either.
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# CMake >= 3.25 wouldn't require us to create a temporary file,
# but the following method is compatible with 3.20.
file(WRITE "${CMAKE_BINARY_DIR}/tuklib_integer_strict_align.c" "
#include <string.h>
unsigned int check_strict_align(const void *p)
{
unsigned int i;
memcpy(&i, p, sizeof(i));
return i;
}
")
# Force -O2 because memcpy() won't be optimized out if optimizations
# are disabled.
try_compile(
TRY_COMPILE_RESULT
"${CMAKE_BINARY_DIR}"
"${CMAKE_BINARY_DIR}/tuklib_integer_strict_align.c"
COMPILE_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}"
CMAKE_FLAGS "-DCOMPILE_DEFINITIONS=${CMAKE_REQUIRED_FLAGS} -O2"
COPY_FILE "${CMAKE_BINARY_DIR}/tuklib_integer_strict_align.a"
)
if(NOT TRY_COMPILE_RESULT)
message(FATAL_ERROR
"Compilation of the strict align check failed. "
"Either the specified compiler flags are broken "
"or ${CMAKE_CURRENT_FUNCTION_LIST_FILE} has a bug.")
endif()
# Use WORKING_DIRECTORY instead of passing the full path to objdump.
# This ensures that the pathname won't affect the objdump output,
# which could result in an unwanted regex match in the next step.
execute_process(
COMMAND "${CMAKE_OBJDUMP}" -d "tuklib_integer_strict_align.a"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
OUTPUT_VARIABLE OBJDUMP_OUTPUT
RESULT_VARIABLE OBJDUMP_RESULT
)
# FIXME? Should we remove the temporary files here?
# Look for instructions that load unsigned bytes. If none are found,
# assume that -mno-strict-align is in effect.
if(OBJDUMP_RESULT STREQUAL "0" AND
OBJDUMP_OUTPUT MATCHES "${OBJDUMP_REGEX}")
set(TUKLIB_INTEGER_STRICT_ALIGN ON CACHE INTERNAL "")
else()
set(TUKLIB_INTEGER_STRICT_ALIGN OFF CACHE INTERNAL "")
endif()
endif()
endfunction()
function(tuklib_integer TARGET_OR_ALL)
# Check for endianness. Unlike the Autoconf's AC_C_BIGENDIAN, this doesn't
# support Apple universal binaries. The CMake module will leave the
@ -123,148 +59,25 @@ function(tuklib_integer TARGET_OR_ALL)
endif()
endif()
# Autodetect if unaligned memory access is fast when the cache variable
# TUKLIB_FAST_UNALIGNED_ACCESS isn't set. The result is stored in
# FAST_UNALIGNED_GUESS. Assume that unaligned access shouldn't be used.
# Initialize the variable here so that it's never undefined in the
# option() command after the if()...endif() block.
# Unaligned access is fast on x86(-64), big endian PowerPC, and usually on
# 32/64-bit ARM too. There are others too and ARM could be a false match.
#
# Guess the default value for the option.
# CMake's ability to give info about the target arch seems bad.
# The the same arch can have different name depending on the OS.
#
# FIXME: The regex is based on guessing, not on factual information!
#
# NOTE: Compared to the Autoconf test, this lacks the GCC/Clang test
# on ARM and always assumes that unaligned is fast on ARM.
set(FAST_UNALIGNED_GUESS OFF)
if(NOT DEFINED TUKLIB_FAST_UNALIGNED_ACCESS)
message(CHECK_START "Check if unaligned memory access should be used")
# Guess that unaligned access is fast on these archs:
# - 32/64-bit x86 / x86-64
# - 32/64-bit big endian PowerPC
# - 64-bit little endian PowerPC
# - 32/64-bit Loongarch (*)
# - Some 32-bit ARM
# - Some 64-bit ARM64 (AArch64)
# - Some 32/64-bit RISC-V
#
# (*) See sections 7.4, 8.1, and 8.2:
# https://github.com/loongson/la-softdev-convention/blob/v0.2/la-softdev-convention.adoc
#
# That is, desktop and server processors likely support
# unaligned access in hardware but embedded processors
# might not. GCC defaults to -mno-strict-align and so
# do majority of GNU/Linux distributions. As of
# GCC 15.2, there is no predefined macro to detect
# if -mstrict-align or -mno-strict-align is in effect.
# We use heuristics based on compiler output.
#
# CMake < 4.1 doesn't provide a standardized/normalized list of arch
# names. For example, x86-64 may be "x86_64" (Linux),
# "AMD64" (Windows), or even "EM64T" (64-bit WinXP).
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PROCESSOR)
# CMake 4.1 made CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID useful on many
# targets. In earlier versions it's still useful with MSVC with which
# CMAKE_SYSTEM_PROCESSOR can refer to the build machine.
if(NOT CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "")
# CMake 4.2.0 docs say that the list typically has only one entry
# except possibly on macOS. On macOS, most (all?) archs support
# unaligned access. Just pick the first one from the list.
list(GET CMAKE_C_COMPILER_ARCHITECTURE_ID 0 PROCESSOR)
string(TOLOWER "${PROCESSOR}" PROCESSOR)
endif()
# There is no ^ in the first regex branch to allow "i" at
# the beginning so it can match "i386" to "i786", and "x86_64".
if(PROCESSOR MATCHES "[x34567]86|^x64|^amd64|^em64t")
set(FAST_UNALIGNED_GUESS ON)
elseif(PROCESSOR MATCHES "^powerpc|^ppc")
if(WORDS_BIGENDIAN OR PROCESSOR MATCHES "64")
set(FAST_UNALIGNED_GUESS ON)
endif()
elseif(PROCESSOR MATCHES "^arm|^riscv" AND
NOT PROCESSOR MATCHES "^arm64")
# On 32-bit ARM, GCC and Clang # #define __ARM_FEATURE_UNALIGNED
# if and only if unaligned access is supported.
#
# RISC-V C API Specification says that if
# __riscv_misaligned_fast is defined then
# unaligned access is known to be fast.
#
# MSVC is handled as a special case: We assume that
# 32-bit ARM supports fast unaligned access.
# If MSVC gets RISC-V support then this will assume
# fast unaligned access on RISC-V too.
check_c_source_compiles("
#if !defined(__ARM_FEATURE_UNALIGNED) \
&& !defined(__riscv_misaligned_fast) \
&& !defined(_MSC_VER)
compile error
#endif
int main(void) { return 0; }
"
TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
if(TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
set(FAST_UNALIGNED_GUESS ON)
endif()
elseif(PROCESSOR MATCHES "^aarch64|^arm64")
# On ARM64, Clang defines __ARM_FEATURE_UNALIGNED if and only if
# unaligned access is supported. However, GCC (at least up to 15.2.0)
# defines it even when using -mstrict-align, so autodetection with
# this macro doesn't work with GCC on ARM64. (It does work on
# 32-bit ARM.) See:
#
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111555
#
# We need three checks:
#
# 1. If __ARM_FEATURE_UNALIGNED is defined and the
# compiler isn't GCC, unaligned access is enabled.
# If the compiler is MSVC, unaligned access is
# enabled even without __ARM_FEATURE_UNALIGNED.
check_c_source_compiles("
#if defined(__ARM_FEATURE_UNALIGNED) \
&& (!defined(__GNUC__) || defined(__clang__))
#elif defined(_MSC_VER)
#else
compile error
#endif
int main(void) { return 0; }
"
TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
if(TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
set(FAST_UNALIGNED_GUESS ON)
else()
# 2. If __ARM_FEATURE_UNALIGNED is not defined,
# unaligned access is disabled.
check_c_source_compiles("
#ifdef __ARM_FEATURE_UNALIGNED
compile error
#endif
int main(void) { return 0; }
"
TUKLIB_FAST_UNALIGNED_NOT_DEFINED_BY_PREPROCESSOR)
if(NOT TUKLIB_FAST_UNALIGNED_NOT_DEFINED_BY_PREPROCESSOR)
# 3. Use heuristics to detect if -mstrict-align is
# in effect when building with GCC.
tuklib_integer_internal_strict_align("[ \t]ldrb[ \t]")
if(NOT TUKLIB_INTEGER_STRICT_ALIGN)
set(FAST_UNALIGNED_GUESS ON)
endif()
endif()
endif()
elseif(PROCESSOR MATCHES "^loongarch")
tuklib_integer_internal_strict_align("[ \t]ld\\.bu[ \t]")
if(NOT TUKLIB_INTEGER_STRICT_ALIGN)
set(FAST_UNALIGNED_GUESS ON)
endif()
endif()
if(FAST_UNALIGNED_GUESS)
message(CHECK_PASS "yes")
else()
message(CHECK_PASS "no")
if(CMAKE_SYSTEM_PROCESSOR MATCHES
"[Xx3456]86|^[Xx]64|^[Aa][Mm][Dd]64|^[Aa][Rr][Mm]|^aarch|^powerpc|^ppc")
if(NOT WORDS_BIGENDIAN OR
NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc|^ppc")
set(FAST_UNALIGNED_GUESS ON)
endif()
endif()
option(TUKLIB_FAST_UNALIGNED_ACCESS
"Enable if the system supports *fast* unaligned memory access \
with 16-bit, 32-bit, and 64-bit integers."

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_large_file_support.cmake
#
@ -11,10 +8,11 @@
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CMakePushCheckState)
include(CheckCSourceCompiles)
function(tuklib_large_file_support TARGET_OR_ALL)

View File

@ -1,12 +1,11 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_mbstr.cmake - see tuklib_mbstr.m4 for description and comments
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CheckSymbolExists)
@ -18,8 +17,4 @@ function(tuklib_mbstr TARGET_OR_ALL)
# NOTE: wcwidth() requires _GNU_SOURCE or _XOPEN_SOURCE on GNU/Linux.
check_symbol_exists(wcwidth wchar.h HAVE_WCWIDTH)
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_WCWIDTH)
# NOTE: vasprintf() requires _GNU_SOURCE on GNU/Linux.
check_symbol_exists(vasprintf stdio.h HAVE_VASPRINTF)
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_VASPRINTF)
endfunction()

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_physmem.cmake - see tuklib_physmem.m4 for description and comments
#
@ -9,10 +6,11 @@
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CMakePushCheckState)
include(CheckCSourceCompiles)
include(CheckIncludeFile)
@ -77,11 +75,11 @@ function(tuklib_physmem_internal_check)
endif()
# sysctl()
cmake_push_check_state()
check_include_file(sys/param.h HAVE_SYS_PARAM_H)
if(HAVE_SYS_PARAM_H)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_PARAM_H)
endif()
check_c_source_compiles("
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
@ -97,7 +95,6 @@ function(tuklib_physmem_internal_check)
}
"
TUKLIB_PHYSMEM_SYSCTL)
cmake_pop_check_state()
if(TUKLIB_PHYSMEM_SYSCTL)
if(HAVE_SYS_PARAM_H)
set(TUKLIB_PHYSMEM_DEFINITIONS

View File

@ -1,12 +1,11 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# tuklib_progname.cmake - see tuklib_progname.m4 for description and comments
#
# Author: Lasse Collin
#
#############################################################################
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CheckSymbolExists)

View File

@ -1,12 +1,13 @@
# -*- Autoconf -*-
# SPDX-License-Identifier: 0BSD
# Process this file with autoconf to produce a configure script.
###############################################################################
#
# Process this file with autoconf to produce a configure script.
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
###############################################################################
# NOTE: Don't add useless checks. autoscan detects this and that, but don't
@ -78,8 +79,8 @@ fi
# Filters #
###########
m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv])dnl
m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv])
m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,arm64,sparc])dnl
m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,arm64,sparc])
m4_define([LZ_FILTERS], [lzma1,lzma2])
m4_foreach([NAME], [SUPPORTED_FILTERS],
@ -309,7 +310,7 @@ case $enable_microlzma in
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([--enable-microlzma accepts only 'yes' or 'no'.])
AC_MSG_ERROR([--enable-microlzma accepts only `yes' or `no'.])
;;
esac
AM_CONDITIONAL(COND_MICROLZMA, test "x$enable_microlzma" = xyes)
@ -358,17 +359,12 @@ if test "x$enable_assembler" = xyes; then
esac
fi
case $enable_assembler in
x86)
AC_DEFINE([HAVE_CRC_X86_ASM], [1], [Define to 1 if
the 32-bit x86 CRC assembly files are used.])
AC_MSG_RESULT([x86])
;;
no)
AC_MSG_RESULT([no])
x86 | no)
AC_MSG_RESULT([$enable_assembler])
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([--enable-assembler accepts only 'yes', 'no', or 'x86' (32-bit).])
AC_MSG_ERROR([--enable-assembler accepts only `yes', `no', or `x86' (32-bit).])
;;
esac
AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86)
@ -384,26 +380,6 @@ AC_ARG_ENABLE([clmul-crc], AS_HELP_STRING([--disable-clmul-crc],
[], [enable_clmul_crc=yes])
############################
# ARM64 CRC32 Instructions #
############################
AC_ARG_ENABLE([arm64-crc32], AS_HELP_STRING([--disable-arm64-crc32],
[Do not use ARM64 CRC32 instructions even if support for it
is detected.]),
[], [enable_arm64_crc32=yes])
################################
# LoongArch CRC32 instructions #
################################
AC_ARG_ENABLE([loongarch-crc32], AS_HELP_STRING([--disable-loongarch-crc32],
[Do not use LoongArch CRC32 instructions even if support for
them is detected.]),
[], [enable_loongarch_crc32=yes])
#####################
# Size optimization #
#####################
@ -417,7 +393,7 @@ if test "x$enable_small" = xyes; then
AC_DEFINE([HAVE_SMALL], [1], [Define to 1 if optimizing for size.])
elif test "x$enable_small" != xno; then
AC_MSG_RESULT([])
AC_MSG_ERROR([--enable-small accepts only 'yes' or 'no'])
AC_MSG_ERROR([--enable-small accepts only `yes' or `no'])
fi
AC_MSG_RESULT([$enable_small])
AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes)
@ -429,8 +405,8 @@ AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes)
AC_MSG_CHECKING([if threading support is wanted])
AC_ARG_ENABLE([threads], AS_HELP_STRING([--enable-threads=METHOD],
[Supported METHODS are 'yes', 'no', 'posix', 'win95', and
'vista'. The default is 'yes'. Using 'no' together with
[Supported METHODS are `yes', `no', `posix', `win95', and
`vista'. The default is `yes'. Using `no' together with
--enable-small makes liblzma thread unsafe.]),
[], [enable_threads=yes])
@ -457,7 +433,7 @@ case $enable_threads in
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([--enable-threads only accepts 'yes', 'no', 'posix', 'win95', or 'vista'])
AC_MSG_ERROR([--enable-threads only accepts `yes', `no', `posix', `win95', or `vista'])
;;
esac
@ -531,18 +507,10 @@ AM_CONDITIONAL([COND_SCRIPTS], [test x$enable_scripts != xno])
AC_ARG_ENABLE([doc], [AS_HELP_STRING([--disable-doc],
[do not install documentation files to docdir
(man pages are still installed and,
if --enable-doxygen is used,
liblzma API documentation is installed too)])],
(man pages will still be installed)])],
[], [enable_doc=yes])
AM_CONDITIONAL([COND_DOC], [test x$enable_doc != xno])
AC_ARG_ENABLE([doxygen], [AS_HELP_STRING([--enable-doxygen],
[generate HTML version of the liblzma API documentation
using Doxygen and install the result to docdir])],
[], [enable_doxygen=no])
AM_CONDITIONAL([COND_DOXYGEN], [test x$enable_doxygen != xno])
##############
# Sandboxing #
@ -551,24 +519,20 @@ AM_CONDITIONAL([COND_DOXYGEN], [test x$enable_doxygen != xno])
AC_MSG_CHECKING([if sandboxing should be used])
AC_ARG_ENABLE([sandbox], [AS_HELP_STRING([--enable-sandbox=METHOD],
[Sandboxing METHOD can be
'auto', 'no', 'capsicum', 'pledge', or 'landlock'.
The default is 'auto' which enables sandboxing if
`auto', `no', `capsicum', or `pledge'.
The default is `auto' which enables sandboxing if
a supported sandboxing method is found.])],
[], [enable_sandbox=auto])
case $enable_xzdec-$enable_xz-$enable_sandbox in
no-no-*)
enable_sandbox=no
AC_MSG_RESULT([no, --disable-xz and --disable-xzdec was used])
;;
*-*-auto)
case $enable_sandbox in
auto)
AC_MSG_RESULT([maybe (autodetect)])
;;
*-*-no | *-*-capsicum | *-*-pledge | *-*-landlock)
no | capsicum | pledge)
AC_MSG_RESULT([$enable_sandbox])
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([--enable-sandbox only accepts 'auto', 'no', 'capsicum', 'pledge', or 'landlock'.])
AC_MSG_ERROR([--enable-sandbox only accepts `auto', `no', `capsicum', or `pledge'.])
;;
esac
@ -642,38 +606,12 @@ AM_PROG_CC_C_O
AM_PROG_AS
AC_USE_SYSTEM_EXTENSIONS
# If using GCC or compatible compiler, verify that CFLAGS doesn't contain
# something that makes -Werror unhappy. It's important to check this after
# the above check for system extensions. It adds macros that can trigger,
# for example, -Wunused-macros.
if test "$GCC" = yes && test "x$SKIP_WERROR_CHECK" != xyes ; then
AC_MSG_CHECKING([if the -Werror option is usable])
OLD_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[extern int foo; int foo;]])], [
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
AC_MSG_ERROR([
CFLAGS contains something that makes -Werror complain (see config.log).
This would break certain checks in 'configure'. It is strongly
recommended to modify CFLAGS to fix this. If you want to use noisy
warning options, for example, -Weverything, it is still possible to
add them later when running 'make': make CFLAGS+=-Weverything
In case you really want to continue with the current CFLAGS, pass
'SKIP_WERROR_CHECK=yes' as an argument to 'configure'.
])
])
CFLAGS=$OLD_CFLAGS
fi
AS_CASE([$enable_threads],
[posix], [
echo
echo "POSIX threading support:"
AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro.
LIBS="$PTHREAD_LIBS $LIBS"
LIBS="$LIBS $PTHREAD_LIBS"
AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS"
dnl NOTE: PTHREAD_CC is ignored. It would be useful on AIX,
@ -684,10 +622,21 @@ AS_CASE([$enable_threads],
AC_DEFINE([MYTHREAD_POSIX], [1],
[Define to 1 when using POSIX threads (pthreads).])
# This is nice to have but not mandatory.
# These are nice to have but not mandatory.
#
# FIXME: xz uses clock_gettime if it is available and can do
# it even when threading is disabled. Moving this outside
# of pthread detection may be undesirable because then
# liblzma may get linked against librt even when librt isn't
# needed by liblzma.
OLD_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AC_CHECK_FUNCS([pthread_condattr_setclock])
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([clock_gettime pthread_condattr_setclock])
AC_CHECK_DECL([CLOCK_MONOTONIC], [AC_DEFINE(
[HAVE_CLOCK_MONOTONIC], [1], [Define to 1 if
`CLOCK_MONOTONIC' is declared in <time.h>.])], [],
[[#include <time.h>]])
CFLAGS=$OLD_CFLAGS
],
[win95], [
@ -758,108 +707,66 @@ fi
# --with-pic and --without-pic though. As long as neither --with-pic nor
# --without-pic is used then we can use #ifdef PIC to detect if the file is
# being built for a shared library.
LINKER_FLAG_UNDEFINED_VERSION=
AS_IF([test "x$enable_symbol_versions" = xno], [
if test "x$enable_symbol_versions" = xno ; then
enable_symbol_versions=no
AC_MSG_RESULT([no])
], [test "x$enable_shared" = xno], [
elif test "x$enable_shared" = xno ; then
enable_symbol_versions=no
AC_MSG_RESULT([no (not building a shared library)])
], [
# "yes" means that symbol version are to be used but we need to
# autodetect which variant to use.
if test "x$enable_symbol_versions" = xyes ; then
case "$host_cpu-$host_os" in
microblaze*)
# GCC 12 on MicroBlaze doesn't support
# __symver__ attribute. It's simplest and
# safest to use the generic version on that
# platform since then only the linker script
# is needed. The RHEL/CentOS 7 compatibility
# symbols don't matter on MicroBlaze.
enable_symbol_versions=generic
;;
*-linux*)
# NVIDIA HPC Compiler doesn't support symbol
# versioning but the linker script can still
# be used.
AC_EGREP_CPP([use_generic_symbol_versioning],
[#ifdef __NVCOMPILER
use_generic_symbol_versioning
#endif],
[enable_symbol_versions=generic],
[enable_symbol_versions=linux])
;;
*)
enable_symbol_versions=generic
;;
esac
fi
if test "x$enable_symbol_versions" = xlinux ; then
case "$pic_mode-$enable_static" in
default-*)
# Use symvers if PIC is defined.
have_symbol_versions_linux=2
;;
*-no)
# Not building static library.
# Use symvers unconditionally.
have_symbol_versions_linux=1
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([
else
case "$host_cpu-$host_os" in
microblaze*)
# GCC 12 on MicroBlaze doesn't support __symver__
# attribute. It's simplest and safest to use the
# generic version on that platform since then only
# the linker script is needed. The RHEL/CentOS 7
# compatibility symbols don't matter on MicroBlaze.
enable_symbol_versions=generic
;;
*-linux*)
case "$pic_mode-$enable_static" in
default-*)
# Use symvers if PIC is defined.
have_symbol_versions_linux=2
;;
*-no)
# Not building static library.
# Use symvers unconditionally.
have_symbol_versions_linux=1
;;
*)
AC_MSG_RESULT([])
AC_MSG_ERROR([
On GNU/Linux, building both shared and static library at the same time
is not supported if --with-pic or --without-pic is used.
Use either --disable-shared or --disable-static to build one type
of library at a time. If both types are needed, build one at a time,
possibly picking only src/liblzma/.libs/liblzma.a from the static build.])
;;
esac
AC_DEFINE_UNQUOTED([HAVE_SYMBOL_VERSIONS_LINUX],
[$have_symbol_versions_linux],
[Define to 1 to if GNU/Linux-specific details
are unconditionally wanted for symbol
versioning. Define to 2 to if these are wanted
only if also PIC is defined (allows building
both shared and static liblzma at the same
time with Libtool if neither --with-pic nor
--without-pic is used). This define must be
used together with liblzma_linux.map.])
elif test "x$enable_symbol_versions" != xgeneric ; then
AC_MSG_RESULT([])
AC_MSG_ERROR([unknown symbol versioning variant '$enable_symbol_versions'])
fi
;;
esac
enable_symbol_versions=linux
AC_DEFINE_UNQUOTED([HAVE_SYMBOL_VERSIONS_LINUX],
[$have_symbol_versions_linux],
[Define to 1 to if GNU/Linux-specific details
are unconditionally wanted for symbol
versioning. Define to 2 to if these are wanted
only if also PIC is defined (allows building
both shared and static liblzma at the same
time with Libtool if neither --with-pic nor
--without-pic is used). This define must be
used together with liblzma_linux.map.])
;;
*)
enable_symbol_versions=generic
;;
esac
AC_MSG_RESULT([yes ($enable_symbol_versions)])
# If features are disabled in liblzma, some symbols may be missing.
# LLVM's lld defaults to --no-undefined-version and the build breaks
# if not all symbols in the version script exist. That is good for
# catching errors like typos, but in our case the downside is too big.
# Avoid the problem by using --undefined-version if the linker
# supports it.
#
# GNU ld has had --no-undefined-version for a long time but it's not
# the default. The opposite option --undefined-version was only added
# in 2022, thus we must use --undefined-version conditionally.
AC_MSG_CHECKING([if linker supports --undefined-version])
OLD_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,--undefined-version"
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void) { return 0; }]])], [
LINKER_FLAG_UNDEFINED_VERSION=-Wl,--undefined-version
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
])
LDFLAGS=$OLD_LDFLAGS
])
fi
AM_CONDITIONAL([COND_SYMVERS_LINUX],
[test "x$enable_symbol_versions" = xlinux])
AM_CONDITIONAL([COND_SYMVERS_GENERIC],
[test "x$enable_symbol_versions" = xgeneric])
AC_SUBST([LINKER_FLAG_UNDEFINED_VERSION])
###############################################################################
@ -875,35 +782,6 @@ AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
AM_GNU_GETTEXT_VERSION([0.19.6])
AM_GNU_GETTEXT([external])
# The command line tools use UTF-8 on native Windows. Non-ASCII characters
# display correctly only when using UCRT and gettext-runtime >= 0.23.1.
AS_CASE([$USE_NLS-$host_os],
[yes-mingw*], [
AC_MSG_CHECKING([for UCRT and gettext-runtime >= 0.23.1])
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <libintl.h>
#ifndef _UCRT
#error "Not UCRT"
#endif
#if LIBINTL_VERSION < 0x001701
#error "gettext-runtime < 0.23.1"
#endif
]])], [
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
AC_MSG_ERROR([
Translation support (--enable-nls) on native Windows requires
UCRT and gettext-runtime >= 0.23.1. Use --disable-nls to build
with MSVCRT or old gettext-runtime.])
])
]
)
###############################################################################
# Checks for header files.
@ -912,6 +790,12 @@ AS_CASE([$USE_NLS-$host_os],
echo
echo "System headers and functions:"
# There is currently no workarounds in this package if some of
# these headers are missing.
AC_CHECK_HEADERS([fcntl.h limits.h sys/time.h],
[],
[AC_MSG_ERROR([Required header file(s) are missing.])])
# immintrin.h allows the use of the intrinsic functions if they are available.
# cpuid.h may be used for detecting x86 processor features at runtime.
AC_CHECK_HEADERS([immintrin.h cpuid.h])
@ -949,6 +833,13 @@ AC_C_BIGENDIAN
# __attribute__((__constructor__)) can be used for one-time initializations.
# Use -Werror because some compilers accept unknown attributes and just
# give a warning.
#
# FIXME? Unfortunately -Werror can cause trouble if CFLAGS contains options
# that produce warnings for unrelated reasons. For example, GCC and Clang
# support -Wunused-macros which will warn about "#define _GNU_SOURCE 1"
# which will be among the #defines that Autoconf inserts to the beginning of
# the test program. There seems to be no nice way to prevent Autoconf from
# inserting the any defines to the test program.
AC_MSG_CHECKING([if __attribute__((__constructor__)) can be used])
have_func_attribute_constructor=no
OLD_CFLAGS="$CFLAGS"
@ -967,6 +858,7 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
])
CFLAGS="$OLD_CFLAGS"
# The Win95 threading lacks a thread-safe one-time initialization function.
# The one-time initialization is needed for crc32_small.c and crc64_small.c
# create the CRC tables. So if small mode is enabled, the threading mode is
@ -981,7 +873,6 @@ if test "x$enable_small$enable_threads$have_func_attribute_constructor" \
__attribute__((__constructor__))])
fi
###############################################################################
# Checks for library functions.
###############################################################################
@ -989,27 +880,11 @@ fi
# Gnulib replacements as needed
gl_GETOPT
# If clock_gettime() is available, liblzma with pthreads may use it, and
# xz may use it even when threading support is disabled. In XZ Utils 5.4.x
# and older, configure checked for clock_gettime() only when using pthreads.
# This way non-threaded builds of liblzma didn't get a useless dependency on
# librt which further had a dependency on libpthread. Avoiding these was
# useful when a small build was needed, for example, for initramfs use.
#
# The above reasoning is thoroughly obsolete: On GNU/Linux, librt hasn't
# been needed for clock_gettime() since glibc 2.17 (2012-12-25).
# Solaris 10 needs librt but Solaris 11 doesn't anymore.
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([clock_gettime])
AC_CHECK_DECL([CLOCK_MONOTONIC], [AC_DEFINE([HAVE_CLOCK_MONOTONIC], [1],
[Define to 1 if 'CLOCK_MONOTONIC' is declared in <time.h>.])], [],
[[#include <time.h>]])
# Find the best function to set timestamps.
AC_CHECK_FUNCS([futimens futimes futimesat utimes _futime utime], [break])
# These are nice to have but not mandatory.
AC_CHECK_FUNCS([getrlimit posix_fadvise])
# This is nice to have but not mandatory.
AC_CHECK_FUNCS([posix_fadvise])
TUKLIB_PROGNAME
TUKLIB_INTEGER
@ -1096,15 +971,11 @@ AC_CHECK_DECL([_mm_movemask_epi8],
#
# If everything above is supported, runtime detection will be used to keep the
# binaries working on systems that don't support the required extensions.
#
# NOTE: Use a check that links and not merely compiles to ensure that
# missing intrinsics don't get accepted with compilers that allow
# implicit function declarations.
AC_MSG_CHECKING([if _mm_clmulepi64_si128 is usable])
AS_IF([test "x$enable_clmul_crc" = xno], [
AC_MSG_RESULT([no, --disable-clmul-crc was used])
], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <immintrin.h>
// CLMUL works on older E2K instruction set but it is slow due to emulation.
@ -1118,162 +989,31 @@ AS_IF([test "x$enable_clmul_crc" = xno], [
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("ssse3,sse4.1,pclmul")))
#endif
int main(void)
__m128i my_clmul(__m128i a)
{
__m128i a = _mm_set_epi64x(1, 2);
a = _mm_clmulepi64_si128(a, a, 0);
return 0;
const __m128i b = _mm_set_epi64x(1, 2);
return _mm_clmulepi64_si128(a, b, 0);
}
]])], [
AC_DEFINE([HAVE_USABLE_CLMUL], [1],
[Define to 1 if _mm_set_epi64x and
_mm_clmulepi64_si128 are usable.
See configure.ac for details.])
enable_clmul_crc=yes
AC_MSG_RESULT([yes])
], [
enable_clmul_crc=no
AC_MSG_RESULT([no])
])
AC_MSG_RESULT([$enable_clmul_crc])
])
# ARM64 C Language Extensions define CRC32 functions in arm_acle.h.
# These are supported by at least GCC and Clang which both need
# __attribute__((__target__("+crc"))), unless the needed compiler flags
# are used to support the CRC instruction.
AC_MSG_CHECKING([if ARM64 CRC32 instruction is usable])
AS_IF([test "x$enable_arm64_crc32" = xno], [
AC_MSG_RESULT([no, --disable-arm64-crc32 was used])
], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <arm_acle.h>
#include <stdint.h>
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("+crc")))
#endif
int main(void)
{
return __crc32d(1, 2) != 0;
}
]])], [
AC_DEFINE([HAVE_ARM64_CRC32], [1],
[Define to 1 if ARM64 CRC32 instruction is supported.
See configure.ac for details.])
enable_arm64_crc32=yes
], [
enable_arm64_crc32=no
])
AC_MSG_RESULT([$enable_arm64_crc32])
])
# Check for ARM64 CRC32 instruction runtime detection.
#
# - getauxval() is supported on Linux. We also need HWCAP_CRC32 which was
# added in glibc 2.24.
#
# - elf_aux_info() is supported on FreeBSD and OpenBSD >= 7.6.
#
# - sysctlbyname("hw.optional.armv8_crc32", ...) is supported on Darwin
# (macOS, iOS, etc.). Note that sysctlbyname() is supported on FreeBSD,
# NetBSD, and possibly others too but the string is specific to Apple
# OSes. The C code is responsible for checking defined(__APPLE__)
# before using sysctlbyname("hw.optional.armv8_crc32", ...).
#
AS_IF([test "x$enable_arm64_crc32" = xyes], [
AC_CHECK_FUNCS([getauxval elf_aux_info sysctlbyname], [break])
AC_CHECK_DECL([HWCAP_CRC32], [AC_DEFINE([HAVE_HWCAP_CRC32], [1],
[Define to 1 if 'HWCAP_CRC32' is declared in <sys/auxv.h>.])],
[], [[#include <sys/auxv.h>]])
])
# LoongArch CRC32 intrinsics are in larchintrin.h.
# These are supported by at least GCC and Clang.
#
# Only 64-bit LoongArch is currently supported.
# It doesn't need runtime detection.
AC_MSG_CHECKING([if LoongArch CRC32 instructions are usable])
AS_IF([test "x$enable_loongarch_crc32" = xno], [
AC_MSG_RESULT([no, --disable-loongarch-crc32 was used])
], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
#if !(defined(__loongarch__) && __loongarch_grlen >= 64)
# error
#endif
#include <larchintrin.h>
int main(void)
{
return __crc_w_w_w(1, 2);
}
]])], [
AC_DEFINE([HAVE_LOONGARCH_CRC32], [1], [Define to 1 if
64-bit LoongArch CRC32 instructions are supported.])
enable_loongarch_crc32=yes
], [
enable_loongarch_crc32=no
])
AC_MSG_RESULT([$enable_loongarch_crc32])
])
# Check for sandbox support. If one is found, set enable_sandbox=found.
#
# About -fsanitize: Of our three sandbox methods, only Landlock is
# incompatible with -fsanitize. FreeBSD 13.2 with Capsicum was tested with
# -fsanitize=address,undefined and had no issues. OpenBSD (as of version
# 7.4) has minimal support for process instrumentation. OpenBSD does not
# distribute the additional libraries needed (libasan, libubsan, etc.) with
# GCC or Clang needed for runtime sanitization support and instead only
# support -fsanitize-minimal-runtime for minimal undefined behavior
# sanitization. This minimal support is compatible with our use of the
# Pledge sandbox. So only Landlock will result in a build that cannot
# compress or decompress a single file to standard out.
AS_CASE([$enable_sandbox],
[auto | capsicum], [
AC_CHECK_FUNCS([cap_rights_limit], [enable_sandbox=found])
AX_CHECK_CAPSICUM([enable_sandbox=found], [:])
]
)
AS_CASE([$enable_sandbox],
[auto | pledge], [
AC_CHECK_FUNCS([pledge], [enable_sandbox=found])
]
)
AS_CASE([$enable_sandbox],
[auto | landlock], [
AC_MSG_CHECKING([if Linux Landlock is usable])
# A compile check is done here because some systems have
# linux/landlock.h, but do not have the syscalls defined
# in order to actually use Linux Landlock.
AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <linux/landlock.h>
#include <sys/syscall.h>
#include <sys/prctl.h>
int main(void)
{
(void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
(void)SYS_landlock_create_ruleset;
(void)SYS_landlock_restrict_self;
(void)LANDLOCK_CREATE_RULESET_VERSION;
return 0;
}
]])], [
enable_sandbox=found
AS_CASE(["$CC $CFLAGS"], [*-fsanitize=*],
[AC_MSG_ERROR([
CC or CFLAGS contain '-fsanitize=' which is incompatible with the Landlock
sandboxing. Use --disable-sandbox when using '-fsanitize'.])])
AC_DEFINE([HAVE_LINUX_LANDLOCK], [1],
[Define to 1 if Linux Landlock is supported.
See configure.ac for details.])
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
])
AC_CHECK_FUNCS([pledge], [enable_sandbox=found ; break])
]
)
@ -1323,6 +1063,7 @@ AS_IF([test "$GCC" = yes], [
-Wall \
-Wextra \
-Wvla \
-Wc99-c11-compat \
-Wformat=2 \
-Winit-self \
-Wmissing-include-dirs \
@ -1346,8 +1087,6 @@ AS_IF([test "$GCC" = yes], [
-Wmissing-prototypes \
-Wmissing-declarations \
-Wredundant-decls \
-Wimplicit-fallthrough \
-Wimplicit-fallthrough=5 \
\
-Wc99-compat \
-Wc11-extensions \
@ -1360,7 +1099,6 @@ AS_IF([test "$GCC" = yes], [
-Wdocumentation \
-Wduplicate-enum \
-Wempty-translation-unit \
-Wextra-semi-stmt \
-Wflexible-array-extensions \
-Wmissing-variable-declarations \
-Wnewline-eof \

View File

@ -1,5 +1,9 @@
## SPDX-License-Identifier: 0BSD
##
## Author: Lasse Collin
##
## This file has been put into the public domain.
## You can do whatever you want with this file.
##
EXTRA_DIST = \
translation.bash
@ -11,8 +15,7 @@ noinst_PROGRAMS = \
memusage \
crc32 \
known_sizes \
hex2bin \
testfilegen-arm64
hex2bin
AM_CPPFLAGS = \
-I$(top_srcdir)/src/common \

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file crc32.c
@ -7,6 +5,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file full_flush.c
@ -7,6 +5,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file hex2bin.c
@ -7,6 +5,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file known_sizes.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file memusage.c
@ -7,6 +5,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file repeat.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file sync_flush.c
@ -7,6 +5,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include "sysdefs.h"

View File

@ -1,116 +0,0 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file testfilegen-arm64.c
/// \brief Generates uncompressed test file for the ARM64 filter
//
// Author: Lasse Collin
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
static uint32_t pc4 = 0;
static void
put32le(uint32_t v)
{
putchar((v >> 0) & 0xFF);
putchar((v >> 8) & 0xFF);
putchar((v >> 16) & 0xFF);
putchar((v >> 24) & 0xFF);
++pc4;
}
static void
putbl(uint32_t imm)
{
imm &= (1U << 26) - 1;
imm |= 0x25U << 26;
put32le(imm);
}
static void
putadrp32(uint32_t imm)
{
imm &= 0x1FFFFFU;
// fprintf(stderr, "ADRP 0x%08X\n", imm);
uint32_t instr = 0x90000000;
instr |= (pc4 * 5 + 11) & 0x1F;
instr |= (imm & 3) << 29;
instr |= (imm >> 2) << 5;
put32le(instr);
}
extern int
main(void)
{
putbl(0);
putbl(0x03FFFFFF);
putbl(0x03FFFFFE);
putbl(0x03FFFFFD);
putbl(3);
putbl(2);
putbl(1);
putbl(0);
putbl(0x02000001);
putbl(0x02000000);
putbl(0x01FFFFFF);
putbl(0x01FFFFFE);
putbl(0x01111117);
putbl(0x01111116);
putbl(0x01111115);
putbl(0x01111114);
putbl(0x02222227);
putbl(0x02222226);
putbl(0x02222225);
putbl(0x02222224);
putbl(0U - pc4);
putbl(0U - pc4);
putbl(0U - pc4);
putbl(0U - pc4);
putadrp32(0x00);
putadrp32(0x05);
putadrp32(0x15);
putadrp32(0x25);
for (unsigned rep = 0; rep < 2; ++rep) {
while ((pc4 << 2) & 4095)
put32le(0x55555555U);
for (unsigned i = 10; i <= 21; ++i) {
const uint32_t neg = (0x1FFF00 >> (21 - i)) & ~255U;
const uint32_t plus = 1U << (i - 1);
putadrp32(0x000000 | plus);
putadrp32(0x000005 | plus);
putadrp32(0x0000FE | plus);
putadrp32(0x0000FF | plus);
putadrp32(0x000000 | neg);
putadrp32(0x000005 | neg);
putadrp32(0x0000FE | neg);
putadrp32(0x0000FF | neg);
}
}
return 0;
}

View File

@ -1,5 +1,4 @@
#!/bin/bash
# SPDX-License-Identifier: 0BSD
###############################################################################
#
@ -10,8 +9,8 @@
# cover most of the cases where mistakes can easily happen.
#
# Give the path and filename of the xz executable as an argument. If no
# arguments are given, this script uses src/xz/xz (relative to the current
# directory).
# arguments are given, this script uses ../src/xz/xz (relative to the
# location of this script).
#
# You may want to pipe the output of this script to less -S to view the
# tables printed by xz --list on a 80-column terminal. On the other hand,
@ -21,6 +20,9 @@
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
###############################################################################
set -e
@ -32,6 +34,10 @@ if [ -n "$1" ]; then
[ "x${XZ:0:1}" != "x/" ] && XZ="$PWD/$XZ"
fi
# Locate top_srcdir and go there.
top_srcdir="$(cd -- "$(dirname -- "$0")" && cd .. && pwd)"
cd -- "$top_srcdir"
# If XZ wasn't already set, use the default location.
XZ=${XZ-"$PWD/src/xz/xz"}
if [ "$(type -t "$XZ" || true)" != "file" ]; then
@ -41,20 +47,15 @@ if [ "$(type -t "$XZ" || true)" != "file" ]; then
fi
XZ=$(type -p -- "$XZ")
# Locate top_srcdir and go there.
top_srcdir="$(cd -- "$(dirname -- "$0")" && cd .. && pwd)"
cd -- "$top_srcdir"
# Print the xz version and locale information.
echo "$XZ --version"
"$XZ" --version
echo
if [ -d .git ] && type git > /dev/null 2>&1; then
echo "Source code version in $PWD:"
git describe --abbrev=8
git describe --abbrev=4
fi
echo
echo "LANGUAGE=$LANGUAGE"
locale
echo
@ -79,13 +80,17 @@ for CMD in \
"xz --lzma2=foobarbaz=abcd" \
"xz --lzma2=mf=abcd" \
"xz --lzma2=preset=foobarbaz" \
"xz --lzma2=mf=bt4,nice=2" \
"xz --lzma2=nice=50000" \
"xz --help" \
"xz --long-help" \
"xz --filters-help" \
"xz --list good-*lzma2*" \
"xz --list good-1-check* unsupported-check.xz" \
"xz --list --verbose --verbose good-1-arm64-lzma2-1.xz good-1-block_header-1.xz good-1-check-sha256.xz good-2-lzma2.xz"
"xz --list good-1-check*" \
"xz --list --verbose good-*lzma2*" \
"xz --list --verbose good-1-check*" \
"xz --list --verbose --verbose good-*lzma2*" \
"xz --list --verbose --verbose good-1-check*" \
"xz --list --verbose --verbose unsupported-check.xz"
do
echo "-----------------------------------------------------------"
echo

View File

@ -1,249 +0,0 @@
61e82b90203cd44c3a712fee5e1efb2a3de62c673cfbe010928856ef2a29b907 xz-4.999.9beta.tar
330312c4397608d8b7be362cc7edbfeafa6101614bc2164d816ea767656aa15c xz-4.999.9beta.tar.bz2
fa3901d1c034842da47fec1a24a9b5a5bd435f5ecfbb444c168512e2daddb86f xz-4.999.9beta.tar.gz
d6649124c7046caea616f599716a559c971c97947e4533c8f25f683310154e8c xz-4.999.9beta.tar.xz
0cb40c62ab80536c9cda0125bad445994c0c48f7f9e7c5a3839dbe2be7e7dabc xz-5.0.0.tar
47a89e65c4690364a0123871a221e663d23a9fbd1ca756a804b10dd4006056d8 xz-5.0.0.tar.bz2
eba9211990a642fc2c35ea02618b710c7fa898d78ccca48b546a07bdde03c44d xz-5.0.0.tar.gz
2da61184b5da24b7dd9266416259dbf65212d1ef83726202427233e7fcfe5754 xz-5.0.0.tar.xz
2485450f5bdfcdef701454c0ae61eeab144e852a20a14e07b0f3cba2f2a758e9 xz-5.0.0-dos.zip
ba46384f060b2c6646f2b342cc9de0e220d057f1ee148b5002eafe7156f27412 xz-5.0.0-windows.zip
e4103c00b237a7dfc0f2419ea0aafb739822405facea7e4ecc8fd10dcd82c734 xz-5.0.0-windows.7z
e0aa4e3d504d7b27b9d6b76107d0f3656a06a3217dd5006c401aa83d18931b40 xz-5.0.1.tar
9b380f502d37085a60821484a3a13747454638927cc36033be64970512451ed8 xz-5.0.1.tar.bz2
3770b8872a4322b9502937b4781d523303bf193962c4822899fd3a210878fc80 xz-5.0.1.tar.gz
0bd2cb93c172f6cce144493004755aa565d751cb40945bbbb5b5d210c037fce4 xz-5.0.1.tar.xz
47337530220b8eb5951c6be1bcdcaee49b32b843e39ea97e0da4c2791e994a98 xz-5.0.1-dos.zip
73488c8d475d6634484a65e32aa3ccdc9e56de21b6e8872feaee0d52dc1cd879 xz-5.0.1-windows.zip
0505cc1a49b5fd38226a28f145dff6d34bc7f14ff5a1d78a3e08b6fa3398425e xz-5.0.1-windows.7z
574b8b84359c263c0bb3c35ee13d53fdf36fac2ea89f0a6234cb5bdc5ae6fe87 xz-5.0.2.tar
216df1ddbd591f0da63de31d4b0837eed6d019ccb0e36e57812764c69af645bc xz-5.0.2.tar.bz2
57e979baaa40147dde1bbb284e3618f8f18b6532c932648bd57b5aee674b98a7 xz-5.0.2.tar.gz
b334483005639a65a37bcc3c33971de2df94764c11a1c3329ce388abb1d95334 xz-5.0.2.tar.xz
8d65f9e9b625394f98846fc9a19e79dafeacd7a905aba2e0f28397df099d57c9 xz-5.0.2-windows.zip
4e89d87fe9a3d795ed79b93f9d70478107e45ee51047758d4812ac070f13a54a xz-5.0.2-windows.7z
74984834d91aadd516f26bcf60e4f82adb74044f9a3f367dca5488ee3c97b8d4 xz-5.0.3.tar
5a11b9e17bfcda62319c5a8c4a2062dc81607a316d3f6adff89422d81ec1eae9 xz-5.0.3.tar.bz2
10eb4df72dffb2fb14c3d2d82b450e72282ffcb9ee3908a8e5b392b8f09681bf xz-5.0.3.tar.gz
3544421e3447fd3f668fd89fb384ff9d312d2730cb860f6b8e09564028de8e32 xz-5.0.3.tar.xz
f7e741635976eead2dd5ff592cc98a04261d96df81b7db94a957a96cc2b13cce xz-5.0.3-windows.zip
0ed3c11430735e81ec65fb3588b2b8cf4bea6953ad4dda99d9aef4ee231a6036 xz-5.0.3-windows.7z
403df1a612036569a1bf54a171a609b6c11370f6b774bcb4940533a72edda1f9 xz-5.0.4.tar
5cd9b060d3a1ad396b3be52c9b9311046a1c369e6062aea752658c435629ce92 xz-5.0.4.tar.bz2
d67405798dad645965fe51cf4e40c23d1201fb234378d3c44f5a3787142b83b6 xz-5.0.4.tar.gz
b7fd25be1ebead021447960804f91006e3fc2f151d7a19948c6a27b4db09b5e9 xz-5.0.4.tar.xz
45e5771ebb88bc71805a3fc183bcb49d1e24b21aa6f762d94be6bc11426d9101 xz-5.0.4-dos.zip
7ed7d59f71bbfac959a4d4c6eb86733440a0ca115677522c6f5f43ab0e106edc xz-5.0.4-windows.zip
7be3642f91ba2fe3339bcb6c458cad303cd9d8ab085537c7b4e96e14c5025de9 xz-5.0.4-windows.7z
dd665d739d07ff4b1cae5ecadfad929928fc069d3a617cf682435beadb568e3c xz-5.0.5.tar
166c48d2842519bc4f96333bff9e265f8cdda44d38e40594ef3f9bbb52890490 xz-5.0.5.tar.bz2
5dcffe6a3726d23d1711a65288de2e215b4960da5092248ce63c99d50093b93a xz-5.0.5.tar.gz
3515c74d170d0f6ec00820de63106ad16c07bae55a59c174b4741242c76264a4 xz-5.0.5.tar.xz
f5463e2a45788773e33a8056c931d8973da5a00122056df417da24033088daff xz-5.0.5-windows.zip
8dbe3357a6ad39cc3076e4f5f0cef9a4ef67461559d4db02f1f06841b74dec44 xz-5.0.5-windows.7z
1a8c89616655bf05b04b6dfb62642db02e5fe368d53ee033990be5c26f194a15 xz-5.0.5-with-libtool-2.4.2.418.tar
0b6fa3b002c8e15fcc4417001ef0327cfdf6ad53656d7e545c6069ff7657b26d xz-5.0.5-with-libtool-2.4.2.418.tar.gz
ea314028ba6aa221de52e0bb4b149db4704a3317e6676adde2607debd026054f xz-5.0.6.tar
2f444375cd1d66c04247127e9b5101ce8fb2a8726449f211f05c84c143289408 xz-5.0.6.tar.bz2
b6cf4cdc1313556a00848e722625bce40d2cd552c052b0465791c64c9202c3f1 xz-5.0.6.tar.gz
9d4136392b6266219fd0f1068256c34180f106ee4214752136c58c0f4864391c xz-5.0.6.tar.xz
97ab44b55b252cb2e1b851f6dbdb9811011bad7a80eb42445b0ea63bb1444dc3 xz-5.0.7.tar
e8851dc749df2340dac6c9297cb2653eff684e73c3dedf690930119502edd616 xz-5.0.7.tar.bz2
f4d2165553b9d0d82fd08bc2eacddeb48ebeb862a5686a603f8c044a2e52c93f xz-5.0.7.tar.gz
55146936f33a432282e399ef702b2c3ab06644d9f091a811b39ff483fd190e24 xz-5.0.7.tar.xz
e4cb781440e29b2c1e1700730f3fdabf7ccc62317a61931609a098c384bfca96 xz-5.0.8.tar
2286f9d90bb0a0de34cba990df1b10cfad0777f00cb2883def26b8ec1b326bda xz-5.0.8.tar.bz2
cac71b31ed322a487f1da1f10dfcf47f8855f97ff2c23b92680c7ae7be58babb xz-5.0.8.tar.gz
1b5c105c1f372f128bf23ed7a1fd9acf473c88adefb3243d2ea762edca2a0b79 xz-5.0.8.tar.xz
812fb3369dde3c81d0765e1a7e00afa0dcfa2e5fa63fdb57e7582147220b2491 xz-5.1.1alpha.tar
54e59a83690a4a0ec88a7d7c3bdef90c6b196c892a93463863c71c24fe87951a xz-5.1.1alpha.tar.gz
90d7162c001d388d6ef082ccda7b7852c6adc367c492a8935cdf170e49a9ccda xz-5.1.1alpha.tar.xz
5d1f5b39d19d1e0b5e7e446b11add769ce68fef781173e116bf8e7d533a90dcb xz-5.1.2alpha.tar
70e792d2a67cfbb8f2dffd0feab6ca6e5a4a618d65070fb44a367629d1ba94e5 xz-5.1.2alpha.tar.gz
7a9c8dbede0b62e70c75cc0dc14135760a39e9fc6504f87091a59fea87461e18 xz-5.1.2alpha.tar.xz
b77cfbdea2f805b69c4c3db40da311555af3fe78271097cf5dec06f7919f07c9 xz-5.1.3alpha.tar
9f94506e301d5b6863921bba861a99ba00de384dafb4e5f409679a93e41613d4 xz-5.1.3alpha.tar.gz
0413632457df9c65b1ce9dcf78495152fc9307bea5c3267c9996eebf708bf2b6 xz-5.1.3alpha.tar.xz
1b70584fdf6c872d7a921dea53772b89962dc0b292b0e3ec0d7a0ca5c860242b xz-5.1.4beta.tar
7c47b9e2cfb5be93245d9fcf2bec5b459412b7628c333896dded373dcd0cf0e0 xz-5.1.4beta.tar.gz
9f9c6a97959afbbd1315626f253f2d3d48c47e01a921c7f160dab4fde10678b5 xz-5.1.4beta.tar.xz
2d066a7ed58c98cd91111d8408fb8896b8100a8ee7e519ce5ea2315c284ba5b0 xz-5.2.0.tar
f7357d7455a1670229b3cca021da71dd5d13b789db62743c20624bdffc9cc4a5 xz-5.2.0.tar.bz2
231ef369982240bb20ed7cffa52bb12a4a297ce6871f480ab85e8a7ba98bf3d6 xz-5.2.0.tar.gz
5962fe32e0b42c7065b4410b7d8ffbf2895e197e97d410c4fc374ea0d7610a14 xz-5.2.0.tar.xz
490fc2ad09fea7bc3772bb23432b3dce32d0ef81d413b3b974730436599d9ec5 xz-5.2.0-dos.zip
b49c05f82cd05fa67031e72138e40f422d8fd6e2c9ca106016dfd24fae0e629e xz-5.2.0-windows.zip
13dfe89a796f4c50f28fac9059d33241746b8e66c540e54d2ac44fd3ea1fd027 xz-5.2.0-windows.7z
a9ebc19a511b650c4b678802375505302992214f578a40ce78db089f99c3341f xz-5.2.1.tar
679148f497e0bff2c1adce42dee5a23f746e71321c33ebb0f641a302e30c2a80 xz-5.2.1.tar.bz2
b918b6648076e74f8d7ae19db5ee663df800049e187259faf5eb997a7b974681 xz-5.2.1.tar.gz
6ecdd4d80b12001497df0741d6037f918d270fa0f9a1ab4e2664bf4157ae323c xz-5.2.1.tar.xz
e4150f52b2e9937cbe54f0e85325a25a3dc2da68cf643310bd973c9b5c121131 xz-5.2.1-dos.zip
2447f5e70dd105900a2957d6c2fad2b5872a6482ba59c1fa0513d03e8b2d10f4 xz-5.2.1-windows.zip
afc018a5ab327aac5c8d6e60dc20aae844204b4e86cfac56ec7dd455921dc2ce xz-5.2.1-windows.7z
f96b347204dbb984f6e58ecc98f01f823742d403133a461dd8a52993b237bb8c xz-5.2.2.tar
6ff5f57a4b9167155e35e6da8b529de69270efb2b4cf3fbabf41a4ee793840b5 xz-5.2.2.tar.bz2
73df4d5d34f0468bd57d09f2d8af363e95ed6cc3a4a86129d2f2c366259902a2 xz-5.2.2.tar.gz
f341b1906ebcdde291dd619399ae944600edc9193619dd0c0110a5f05bfcc89e xz-5.2.2.tar.xz
1a88e9645eca0c3d95e00e8fc4b1a155fa3e527a60bec5a667ca56ed36dbb29b xz-5.2.3.tar
fd9ca16de1052aac899ad3495ad20dfa906c27b4a5070102a2ec35ca3a4740c1 xz-5.2.3.tar.bz2
71928b357d0a09a12a4b4c5fafca8c31c19b0e7d3b8ebb19622e96f26dbf28cb xz-5.2.3.tar.gz
7876096b053ad598c31f6df35f7de5cd9ff2ba3162e5a5554e4fc198447e0347 xz-5.2.3.tar.xz
afe73c260e38fdebdd14c9eaab71c19b206ff74cebbdc744b0fa35b77b243220 xz-5.2.3-windows.zip
30352e7f1f1605ff0758d10e951f4b3eda108538ecd500b831124dc480e603f3 xz-5.2.3-windows.7z
7f77d67aec8207e4fef28c58f19919e51ef469621a58eafd13bf1f80ce956312 xz-5.2.4.tar
3313fd2a95f43d88e44264e6b015e7d03053e681860b0d5d3f9baca79c57b7bf xz-5.2.4.tar.bz2
b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145 xz-5.2.4.tar.gz
9717ae363760dedf573dad241420c5fea86256b65bc21d2cf71b2b12f0544f4b xz-5.2.4.tar.xz
9a5163623f435b6fa0844b6b884babd6bf4f8d876ae2d8134deeb296afd49c61 xz-5.2.4-windows.zip
efb267a5c7b267cd9e7bf18b29857738b06845178c74f424e3c502609fbf9862 xz-5.2.4-windows.7z
cdd92f155d202979dace48d16ea9e1a7c93d09eb2c2c0ac9a207e7544ed4703a xz-5.2.5.tar
5117f930900b341493827d63aa910ff5e011e0b994197c3b71c08a20228a42df xz-5.2.5.tar.bz2
f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10 xz-5.2.5.tar.gz
3e1e518ffc912f86608a8cb35e4bd41ad1aec210df2a47aaa1f95e7f5576ef56 xz-5.2.5.tar.xz
601ccfa756da378429eb246b60c52d5e9c7f7b41e95e187c487004c093112789 xz-5.2.5.tar.zst
98c6cb1042284fe704ec30083f3fc87364ce9ed2ea51f62bbb0ee9d3448717ec xzgrep-ZDI-CAN-16587.patch
0b77f9ac5af53dec0b14773087f8f53e699ad6ce97cc8bfc3ea3cf89535dd335 xz-5.2.5-dos.zip
d83b82ca75dfab39a13dda364367b34970c781a9df4d41264db922ac3a8f622d xz-5.2.5-windows.zip
bee788dcc8f4a16e232a5a91c5625be1cfad36085eade6983013d1a92a308cfc xz-5.2.5-windows.7z
49305a2e5804ba438aa4690377e9b630646da6ae9f3edd0e3e727f92b47dc661 xz-5.2.6.tar
13e3402e301b6018f6a71ef0e497f714c6d11e214ae82dab156b81c2a64acb25 xz-5.2.6.tar.bz2
a2105abee17bcd2ebd15ced31b4f5eda6e17efd6b10f921a01cda4a44c91b3a0 xz-5.2.6.tar.gz
e076ba3439cb7cfc45b908c869f51a8c89f3c9ee9ee982fde28849c015e723a7 xz-5.2.6.tar.xz
2716b4067763de99b3901bcc71d3bda233798045cb8189735e611b165b8a7f4f xz-5.2.6.tar.zst
6fd6dad79e5b0d3b24a43bc3f79472b62a48d210f1aaa02fb06e5dfad89a4ebc xz-5.2.6-windows.zip
88242ad128b131ae7340370cc3c17f8d35e8b238a1db528185b28be2e6c164e1 xz-5.2.6-windows.7z
050958af3ccf032f0dba7104743e48ee6ddd9fdf5c21ec905b237e92b221c524 xz-5.2.7.tar
b65f1d0c2708e57716f4dd2216989a73847ac6fdb4168ffceb155767e22b834b xz-5.2.7.tar.bz2
06327c2ddc81e126a6d9a78b0be5014b976a2c0832f492dcfc4755d7facf6d33 xz-5.2.7.tar.gz
8712e9acb0b6b49a97d443458a3067dc5c08a025e02dc5f773176c51dd7cfc69 xz-5.2.7.tar.xz
709372e665270acf21a8ef55a8e34ca1f2421e7b5cc3146f4d45cc717fb2bea4 xz-5.2.7.tar.zst
30837d396bb50d5cec2c2431686de6f94c537c0551dc884e5cd3ab5551e65f1e xz-5.2.7-windows.zip
e9eb1dc1b8beaa5e3c535fbeaaab3780869b08fdfea0aa3ac09a804cc8a84c1a xz-5.2.7-windows.7z
96ebba68e4cc33dcd6e47a6326a39babeccc78ed17a08f5db0c11942d2c6fbc4 xz-5.2.8.tar
1f8a43d9fcf325d049a31fe4514dc8c44a6d00ce8860d48c4212d1e349d2a3ed xz-5.2.8.tar.bz2
ec5cda9f0b91336ab1b881d3d144e8203fcca604e607caca8ae678ddbc29207d xz-5.2.8.tar.gz
2424b2711b1d40d2129645d550363896c6853c97528f085f7765092fe68679d4 xz-5.2.8.tar.xz
c4092edd7ca1416be97364548cb86d7ef40b07c48a417a7254fb053b68098794 xz-5.2.8.tar.zst
f4c1eb727301b9a2acb1ae065562ad0beb7a6512639f8088af1afefcbbcc6260 xz-5.2.8-windows.zip
13390e4bd6023e27985cd25a61087e93a248858e7cd01755af8a84f5eef11feb xz-5.2.8-windows.7z
18d594e0c3ca307c89c809d636a8878e3d067f0c26983cbc7dc5a586377bc0bd xz-5.2.9.tar
b194507fba3a462a753c553149ccdaa168337bcb7deefddd067ba987c83dfce6 xz-5.2.9.tar.bz2
e982ea31b81543d7ee2b6fa34c2ad11760e1c50c6f4475add8ba0f2f005f07b4 xz-5.2.9.tar.gz
287ef163e7e57561e9de590b2a9037457af24f03a46bbd12bf84f3263679e8d2 xz-5.2.9.tar.xz
45cb9dd8785dbb60341450a28c39228cc86146119b4eac48e754a6650bc26931 xz-5.2.9.tar.zst
62ac7ba1e223616b365bd7bf1f2231b1c7e0aad111d53e675bef77ef1ac65c43 xz-5.2.9-windows.zip
19810e26e202ab2f0b28b70ca785320c006a72826f7bf80c9c9db65db24a23cc xz-5.2.9-windows.7z
33aa379c788ffe5af0765296fd9d31fd1fd6d409088ded09af7ff60035694521 xz-5.2.10.tar
01b71df61521d9da698ce3c33148bff06a131628ff037398c09482f3a26e5408 xz-5.2.10.tar.bz2
eb7a3b2623c9d0135da70ca12808a214be9c019132baaa61c9e1d198d1d9ded3 xz-5.2.10.tar.gz
d615974a17299eaa1bf3d0f3b7afa172624755c8885111b17659051869d6f072 xz-5.2.10.tar.xz
4cb110fa88b6062758c1c7600f5fc497cbe10372690a7964c611adc3399c8e4b xz-5.2.10.tar.zst
02232767320c7587a9f16f9c1c42a1d0bdc94f33d93aa327bb0f0fb67a5f0beb xz-5.2.11.tar
7859c47a5e909299e77d0e87e2bafc52fb1d09e35abac48b6426c1be213c5b37 xz-5.2.11.tar.bz2
0089d47b966bd9ab48f1d01baf7ce146a3b591716c7477866b807010de3d96ab xz-5.2.11.tar.gz
503b4a9fb405e70e1d3912e418fdffe5de27e713e58925fb67e12d20d03a77bc xz-5.2.11.tar.xz
1facb7ec3c0950a95e7d5396488fd5c9710c7fec353292962291b2c103777989 xz-5.2.11.tar.zst
4d8837034498dcbe64d3cff5f71b5fb6584c1af027eda7548831832efba1c0f4 xz-5.2.12.tar
fbedff8eb67e229f2e95eb1ff920b255e405c86c9e1a53d4a6861d9823acff18 xz-5.2.12.tar.bz2
61bda930767dcb170a5328a895ec74cab0f5aac4558cdda561c83559db582a13 xz-5.2.12.tar.gz
f79a92b84101d19d76be833aecc93e68e56065b61ec737610964cd4f6c54ff2e xz-5.2.12.tar.xz
88e6796dada9b65b50ec80a3815be3e4d4ee5fbee17541f112a070d875d59a5d xz-5.2.12.tar.zst
515f41be4b7bfd4d2d1ddb939ebd028b8e979bec9baf28b7886e04637a8e54f0 xz-5.2.13.tar
620cdbfc31adbc7e3e5cd8c3c3aa9ffed9335f0ddc42719cf9afce5136a978c1 xz-5.2.13.tar.bz2
2942a1a8397cd37688f79df9584947d484dd658db088d51b790317eb3184827b xz-5.2.13.tar.gz
03eca718652bc8a77f0d2e9ad7744755818aece15cebbc11a3a069cc604ecd84 xz-5.2.13.tar.xz
9bbcac67b776385b4345d287e90e345f6c841d4285502aa386515a49696abd5d xz-5.3.1alpha.tar
55a92fe16b1dbf2067dda6c0d8fcfff5639b0c8fe926f2a6aad4785699095ec2 xz-5.3.1alpha.tar.xz
fe96db09fa3cd289a2e67af8b4045213117e47fbf7fb882bed606556edcf7d5c xz-5.3.2alpha.tar
36f4fe561714385eea08945a910a31e6ea5d48611eb7af2fe7966dd030b502d2 xz-5.3.2alpha.tar.gz
35b7e753a0da827020bd3fe9c55b34d86b888f69a82a8c5d981e8f89e555360d xz-5.3.2alpha.tar.xz
ed8fe42c7f36f707f8b65f70f106c8c06e4cc68322f3277ab31aa17b57ea0927 xz-5.3.3alpha.tar
c6d4789a79bab565440784db2e132d6bf03b2e75dd6d66a8102cf002d8dfe926 xz-5.3.3alpha.tar.gz
8d50c45575cb943d14dfef2a3f5b1199cc86b5066273d322556cf16e7f75411f xz-5.3.3alpha.tar.xz
f3dfc690c1207efd3bcb362dcb5d63df21817c9780ea058c46ef0236febf43e0 xz-5.3.4alpha.tar
829e7bc21334b163be9155cb6148f4ca80a573dc453b90e6f1e3bf023764e5f9 xz-5.3.4alpha.tar.gz
e0358fb10e59dac8da9b58c14aae59ed9b5b56cc075fbdd884b44d87a35971e9 xz-5.3.4alpha.tar.xz
9ad807c4e203ff21b921944c441d5de509d21262f5db81deeae6f56fc97c54ea xz-5.3.5beta.tar
542bb3549b2a1988d5d9ce871a5db189d117eb51371c9c1e675f5a0b1870f692 xz-5.3.5beta.tar.gz
e08932f382bed9c293a13a3cb72e07464b6caad6d6ceafe9a7545bee501f857c xz-5.3.5beta.tar.xz
d2f31178627378b6a2567e028194a4e7c18164925ac0d0364d439a8226bb06a4 xz-5.4.0.tar
795ea0494c66d509b052ddc36dc63bd634e59ff2a0f39c16a3b5644dd01d87e6 xz-5.4.0.tar.bz2
7471ef5991f690268a8f2be019acec2e0564b7b233ca40035f339fe9a07f830b xz-5.4.0.tar.gz
5f260e3b43f75cf43ca43d107dd18209f7d516782956a74ddd53288e02a83a31 xz-5.4.0.tar.xz
3d16dc30760af691318cd4bebbae9f7a177ee9a270dbaa47cb58cb1d271cac36 xz-5.4.0.tar.zst
48f8a02005c1b0f49eb629daa6567dfeccaa9cb9b6725feaf8b7cd1955bd049d xz-5.4.0-dos.zip
749fe4d7c0ce95b5c9cf35e725ed78d6158477e140cf84cde2107ec8465a5e9b xz-5.4.1.tar
dd172acb53867a68012f94c17389401b2f274a1aa5ae8f84cbfb8b7e383ea8d3 xz-5.4.1.tar.bz2
e4b0f81582efa155ccf27bb88275254a429d44968e488fc94b806f2a61cd3e22 xz-5.4.1.tar.gz
5d9827aa1875b21c288f78864bb26d2650b436ea8d2cad364e4921eb6266a5a5 xz-5.4.1.tar.xz
9b3d36dd65ecffc9cfef093010061ffe1d48ee34eef0cff69b63cf82b2d099c4 xz-5.4.1.tar.zst
3db1ec993b96cfee143df08d780b642ace8b40bb14043537db8a9c951317fafc xz-5.4.2.tar
aa49909cbd9028c4666a35fa4975f9a6203ed98154fbb8223ee43ef9ceee97c3 xz-5.4.2.tar.bz2
87947679abcf77cc509d8d1b474218fd16b72281e2797360e909deaee1ac9d05 xz-5.4.2.tar.gz
3ee13d0f40148625306b90f9622f8c9660b8082884051b0cfe46f18492f88955 xz-5.4.2.tar.xz
cd43589df77eb776956c8082a0cbae1d0cd1a2637a6930ea93ba5759639511b1 xz-5.4.2.tar.zst
475e09077f4a0cd57306ea1d4cf9ccdfd5add1a2744cf75956725e7fb531ce36 xz-5.4.3.tar
9243a04598d7a70c1f567a0143a255581ac5c64b140fd55fd5cbc1e00b0e6f90 xz-5.4.3.tar.bz2
1c382e0bc2e4e0af58398a903dd62fff7e510171d2de47a1ebe06d1528e9b7e9 xz-5.4.3.tar.gz
92177bef62c3824b4badc524f8abcce54a20b7dbcfb84cde0a2eb8b49159518c xz-5.4.3.tar.xz
da51e1105e152e62a72fd81acd9a3e325609b4aed5631c50de3ea58a7f162ebb xz-5.4.3.tar.zst
a9ffcc046c96908caed200e2d11b27a4af66b1b4351880f9ba88657a6b6b690c xz-5.4.4.tar
0b6fcde1ac38e90433a2556f500c065950b9bcd2d602006efc334782bdfe6296 xz-5.4.4.tar.bz2
aae39544e254cfd27e942d35a048d592959bd7a79f9a624afb0498bb5613bdf8 xz-5.4.4.tar.gz
705d0d96e94e1840e64dec75fc8d5832d34f6649833bec1ced9c3e08cf88132e xz-5.4.4.tar.xz
610c4d79ea3a56bfd1df178578aa17e10a88d58a362b0a7b3fa47321469bae20 xz-5.4.4.tar.zst
3ee65a3efb5c96da5e50a0f16567a926258f83f472d2773d40c4d19c8873daad xz-5.4.5.tar
8ccf5fff868c006f29522e386fb4c6a1b66463fbca65a4cfc3c4bd596e895e79 xz-5.4.5.tar.bz2
135c90b934aee8fbc0d467de87a05cb70d627da36abe518c357a873709e5b7d6 xz-5.4.5.tar.gz
da9dec6c12cf2ecf269c31ab65b5de18e8e52b96f35d5bcd08c12b43e6878803 xz-5.4.5.tar.xz
9ab5561ce9fed7860695c14b955a0ebec2df9a00fb171862a25910546a1737cc xz-5.4.5.tar.zst
b32e1195788a00ca01ea43bc5ea67ecf5bdbaf35ea8faa272da0066e795cb7e2 xz-5.4.6.tar
913851b274e8e1d31781ec949f1c23e8dbcf0ecf6e73a2436dc21769dd3e6f49 xz-5.4.6.tar.bz2
aeba3e03bf8140ddedf62a0a367158340520f6b384f75ca6045ccc6c0d43fd5c xz-5.4.6.tar.gz
b92d4e3a438affcf13362a1305cd9d94ed47ddda22e456a42791e630a5644f5c xz-5.4.6.tar.xz
21326933d567a87a7d7484a22cd5723387a71b5934b131dc91ea7495a813bdf3 xz-5.4.6.tar.zst
f30cdc66bb071622b382106b0a06ef0e28263e5656a96d88ff55cf92786391f9 xz-5.4.7.tar
9976ed9cd0764e962d852d7d519ee1c3a7f87aca3b86e5d021a45650ba3ecb41 xz-5.4.7.tar.bz2
8db6664c48ca07908b92baedcfe7f3ba23f49ef2476864518ab5db6723836e71 xz-5.4.7.tar.gz
016182c70bb5c7c9eb3465030e3a7f6baa25e17b0e8c0afe92772e6021843ce2 xz-5.4.7.tar.xz
f4a16279ebe33a607a41536fd203dc9337bdd6395ef72130cff47dc8276fd9ff xz-5.6.2.tar
e12aa03cbd200597bd4ce11d97be2d09a6e6d39a9311ce72c91ac7deacde3171 xz-5.6.2.tar.bz2
8bfd20c0e1d86f0402f2497cfa71c6ab62d4cd35fd704276e3140bfb71414519 xz-5.6.2.tar.gz
a9db3bb3d64e248a0fae963f8fb6ba851a26ba1822e504dc0efd18a80c626caf xz-5.6.2.tar.xz
31f58851acdf0d24d15bce14782dafa5a447ee922eaa39859170277dc9a8fae7 xz-5213-547-562-libtool.patch
b55087b6e30fb0cb0175e89022dafd4acb46190a4ec6831cb3e21172fc815186 xz-5.6.3.tar
a95a49147b2dbb5487517acc0adcd77f9c2032cf00664eeae352405357d14a6c xz-5.6.3.tar.bz2
b1d45295d3f71f25a4c9101bd7c8d16cb56348bbef3bbc738da0351e17c73317 xz-5.6.3.tar.gz
db0590629b6f0fa36e74aea5f9731dc6f8df068ce7b7bafa45301832a5eebc3a xz-5.6.3.tar.xz
c06b09e74a64616c36ce7c65c8af442d62031135f948d04c704f46d8c2cc2fef xz-5.6.4.tar
176d510c30d80a23b8050bbc048f2ecaacb823ae48b6821727ed6591f0df9200 xz-5.6.4.tar.bz2
269e3f2e512cbd3314849982014dc199a7b2148cf5c91cedc6db629acdf5e09b xz-5.6.4.tar.gz
829ccfe79d769748f7557e7a4429a64d06858e27e1e362e25d01ab7b931d9c95 xz-5.6.4.tar.xz
e5403003b4698967680ca57c733e11fdc110426858091cc83c8df8f4322957ee xz-5.6.4-windows.zip
a69d83338facb6e9a45147384beb7d7d8ed53b5e2a41e8c059ae0d0260b356ac xz-5.6.4-windows.7z
31199267fba9588305c0df3de5d6d9898d00c4ee02f5eee19f79baa427628519 xz-5.7.1alpha.tar
ae655a4bec0820f750985ecd270d6802ae0a987bb1cb03d41d9afa37abc2e87c xz-5.7.1alpha.tar.gz
c859193b8619f6818326141ee041870d9b76ba83f55c3c94ebcfcb71e1f79e5d xz-5.7.1alpha.tar.xz
b75a932fa38515e5d3953242b1e3c2e7edd882504b24280f0e9776d596e9cc0d xz-5.7.2beta.tar
608ed92561c9f27a1eead76653c6f63c6a40d0a20ec91753ed508ba40f9703b3 xz-5.7.2beta.tar.gz
98a61e45e5917b93ce17d826ef2d11f9331951882b2558675cdf115cdf3f77c8 xz-5.7.2beta.tar.xz
bdff4615bf19c46042bced4d7b8c52bdacce61261b39db464d482692c948dd02 xz-5.8.0.tar
8c107270289807e2047f35d687b4d7a5bb029137f7c89ebdcfa909cb3b674440 xz-5.8.0.tar.bz2
b523c5e47d1490338c5121bdf2a6ecca2bcf0dce05a83ad40a830029cbe6679b xz-5.8.0.tar.gz
05ecad9e71919f4fca9f19fbbc979ea28e230188ed123dc6f06b98031ea14542 xz-5.8.0.tar.xz
397165cedccb8e16700b8fdd026c3fd7ff2d18923e28cfbf7d0c5f89cd6a50af xz-5.8.0-windows.zip
078caa9d406018d4d43df343455f57811e9ba69c1340670a85a0ae6341d42ba3 xz-5.8.0-windows.7z
ee188eabc3220684422f62df7a385541a86d2a5c385407f9d8fd94d49b251c4e xz-cve-2025-31115.patch
c9789682496d124fd214e665f6aa2f6d3d9e8527a7f0e120f9180c531d322bd6 xz-5.8.1.tar
5965c692c4c8800cd4b33ce6d0f6ac9ac9d6ab227b17c512b6561bce4f08d47e xz-5.8.1.tar.bz2
507825b599356c10dca1cd720c9d0d0c9d5400b9de300af00e4d1ea150795543 xz-5.8.1.tar.gz
0b54f79df85912504de0b14aec7971e3f964491af1812d83447005807513cd9e xz-5.8.1.tar.xz
62fdfde73d5c5d293bbb4a96211b29d09adbd56bc6736976e4c9fc9942ae3c67 xz-5.8.1-windows.zip
8ed1403fe6c971a2a6ac85fb7b27c8438b83175bc6f3bc49fec06540c904c84d xz-5.8.1-windows.7z
b4c8a939220546e275456fac3d19540b152a85dfdb13d6e36289ed8fb49cb700 xz-5.8.2.tar
60345d7c0b9c8d7ffa469e96898c300def3669f5047fc76219b819340839f3d8 xz-5.8.2.tar.bz2
ce09c50a5962786b83e5da389c90dd2c15ecd0980a258dd01f70f9e7ce58a8f1 xz-5.8.2.tar.gz
890966ec3f5d5cc151077879e157c0593500a522f413ac50ba26d22a9a145214 xz-5.8.2.tar.xz
c90c4044b9562594d2125409dd4969ce0e281b9db60d2224c2f4a5419c7e2a4e xz-5.8.2-windows.zip
a64996b3219461bd959735376eb413fecfe71a6247bcdb870a7be30bf2040fd8 xz-5.8.2-windows.7z

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file 01_compress_easy.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>
@ -26,7 +27,7 @@ show_usage_and_exit(const char *argv0)
{
fprintf(stderr, "Usage: %s PRESET < INFILE > OUTFILE\n"
"PRESET is a number 0-9 and can optionally be "
"followed by 'e' to indicate extreme preset\n",
"followed by `e' to indicate extreme preset\n",
argv0);
exit(EXIT_FAILURE);
}

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file 02_decompress.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file 03_compress_custom.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>
@ -45,7 +46,7 @@ init_encoder(lzma_stream *strm)
}
// Now we could customize the LZMA2 options if we wanted. For example,
// we could set the dictionary size (opt_lzma2.dict_size) to
// we could set the the dictionary size (opt_lzma2.dict_size) to
// something else than the default (8 MiB) of the default preset.
// See lzma/lzma12.h for details of all LZMA2 options.
//

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file 04_compress_easy_mt.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>

View File

@ -1,5 +1,3 @@
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file 11_file_info.c
@ -11,6 +9,9 @@
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#include <stdbool.h>
@ -32,7 +33,7 @@ print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
// large files on 32-bit systems (POSIX versions fseeko() and
// ftello() can support large files).
if (fseek(infile, 0, SEEK_END)) {
fprintf(stderr, "Error seeking the file '%s': %s\n",
fprintf(stderr, "Error seeking the file `%s': %s\n",
filename, strerror(errno));
return false;
}
@ -79,7 +80,7 @@ print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
if (ferror(infile)) {
fprintf(stderr,
"Error reading from '%s': %s\n",
"Error reading from `%s': %s\n",
filename, strerror(errno));
return false;
}
@ -103,7 +104,7 @@ print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
// switch fseeko() or lseek().
if (fseek(infile, (long)(strm->seek_pos), SEEK_SET)) {
fprintf(stderr, "Error seeking the "
"file '%s': %s\n",
"file `%s': %s\n",
filename, strerror(errno));
return false;
}
@ -132,24 +133,24 @@ print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
case LZMA_FORMAT_ERROR:
// .xz magic bytes weren't found.
fprintf(stderr, "The file '%s' is not "
fprintf(stderr, "The file `%s' is not "
"in the .xz format\n", filename);
return false;
case LZMA_OPTIONS_ERROR:
fprintf(stderr, "The file '%s' has .xz headers that "
fprintf(stderr, "The file `%s' has .xz headers that "
"are not supported by this liblzma "
"version\n", filename);
return false;
case LZMA_DATA_ERROR:
fprintf(stderr, "The file '%s' is corrupt\n",
fprintf(stderr, "The file `%s' is corrupt\n",
filename);
return false;
case LZMA_MEM_ERROR:
fprintf(stderr, "Memory allocation failed when "
"decoding the file '%s'\n", filename);
"decoding the file `%s'\n", filename);
return false;
// LZMA_MEMLIMIT_ERROR shouldn't happen because we used
@ -182,7 +183,7 @@ main(int argc, char **argv)
FILE *infile = fopen(argv[i], "rb");
if (infile == NULL) {
fprintf(stderr, "Cannot open the file '%s': %s\n",
fprintf(stderr, "Cannot open the file `%s': %s\n",
argv[i], strerror(errno));
success = false;
}

View File

@ -1,5 +1,9 @@
# SPDX-License-Identifier: 0BSD
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
CC = c99
CFLAGS = -g

View File

@ -0,0 +1,127 @@
/*
* xz_pipe_comp.c
* A simple example of pipe-only xz compressor implementation.
* version: 2010-07-12 - by Daniel Mealha Cabrita
* Not copyrighted -- provided to the public domain.
*
* Compiling:
* Link with liblzma. GCC example:
* $ gcc -llzma xz_pipe_comp.c -o xz_pipe_comp
*
* Usage example:
* $ cat some_file | ./xz_pipe_comp > some_file.xz
*/
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdbool.h>
#include <lzma.h>
/* COMPRESSION SETTINGS */
/* analogous to xz CLI options: -0 to -9 */
#define COMPRESSION_LEVEL 6
/* boolean setting, analogous to xz CLI option: -e */
#define COMPRESSION_EXTREME true
/* see: /usr/include/lzma/check.h LZMA_CHECK_* */
#define INTEGRITY_CHECK LZMA_CHECK_CRC64
/* read/write buffer sizes */
#define IN_BUF_MAX 4096
#define OUT_BUF_MAX 4096
/* error codes */
#define RET_OK 0
#define RET_ERROR_INIT 1
#define RET_ERROR_INPUT 2
#define RET_ERROR_OUTPUT 3
#define RET_ERROR_COMPRESSION 4
/* note: in_file and out_file must be open already */
int xz_compress (FILE *in_file, FILE *out_file)
{
uint32_t preset = COMPRESSION_LEVEL | (COMPRESSION_EXTREME ? LZMA_PRESET_EXTREME : 0);
lzma_check check = INTEGRITY_CHECK;
lzma_stream strm = LZMA_STREAM_INIT; /* alloc and init lzma_stream struct */
uint8_t in_buf [IN_BUF_MAX];
uint8_t out_buf [OUT_BUF_MAX];
size_t in_len; /* length of useful data in in_buf */
size_t out_len; /* length of useful data in out_buf */
bool in_finished = false;
bool out_finished = false;
lzma_action action;
lzma_ret ret_xz;
int ret;
ret = RET_OK;
/* initialize xz encoder */
ret_xz = lzma_easy_encoder (&strm, preset, check);
if (ret_xz != LZMA_OK) {
fprintf (stderr, "lzma_easy_encoder error: %d\n", (int) ret_xz);
return RET_ERROR_INIT;
}
while ((! in_finished) && (! out_finished)) {
/* read incoming data */
in_len = fread (in_buf, 1, IN_BUF_MAX, in_file);
if (feof (in_file)) {
in_finished = true;
}
if (ferror (in_file)) {
in_finished = true;
ret = RET_ERROR_INPUT;
}
strm.next_in = in_buf;
strm.avail_in = in_len;
/* if no more data from in_buf, flushes the
internal xz buffers and closes the xz data
with LZMA_FINISH */
action = in_finished ? LZMA_FINISH : LZMA_RUN;
/* loop until there's no pending compressed output */
do {
/* out_buf is clean at this point */
strm.next_out = out_buf;
strm.avail_out = OUT_BUF_MAX;
/* compress data */
ret_xz = lzma_code (&strm, action);
if ((ret_xz != LZMA_OK) && (ret_xz != LZMA_STREAM_END)) {
fprintf (stderr, "lzma_code error: %d\n", (int) ret_xz);
out_finished = true;
ret = RET_ERROR_COMPRESSION;
} else {
/* write compressed data */
out_len = OUT_BUF_MAX - strm.avail_out;
fwrite (out_buf, 1, out_len, out_file);
if (ferror (out_file)) {
out_finished = true;
ret = RET_ERROR_OUTPUT;
}
}
} while (strm.avail_out == 0);
}
lzma_end (&strm);
return ret;
}
int main ()
{
int ret;
ret = xz_compress (stdin, stdout);
return ret;
}

View File

@ -0,0 +1,123 @@
/*
* xz_pipe_decomp.c
* A simple example of pipe-only xz decompressor implementation.
* version: 2012-06-14 - by Daniel Mealha Cabrita
* Not copyrighted -- provided to the public domain.
*
* Compiling:
* Link with liblzma. GCC example:
* $ gcc -llzma xz_pipe_decomp.c -o xz_pipe_decomp
*
* Usage example:
* $ cat some_file.xz | ./xz_pipe_decomp > some_file
*/
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdbool.h>
#include <lzma.h>
/* read/write buffer sizes */
#define IN_BUF_MAX 4096
#define OUT_BUF_MAX 4096
/* error codes */
#define RET_OK 0
#define RET_ERROR_INIT 1
#define RET_ERROR_INPUT 2
#define RET_ERROR_OUTPUT 3
#define RET_ERROR_DECOMPRESSION 4
/* note: in_file and out_file must be open already */
int xz_decompress (FILE *in_file, FILE *out_file)
{
lzma_stream strm = LZMA_STREAM_INIT; /* alloc and init lzma_stream struct */
const uint32_t flags = LZMA_TELL_UNSUPPORTED_CHECK | LZMA_CONCATENATED;
const uint64_t memory_limit = UINT64_MAX; /* no memory limit */
uint8_t in_buf [IN_BUF_MAX];
uint8_t out_buf [OUT_BUF_MAX];
size_t in_len; /* length of useful data in in_buf */
size_t out_len; /* length of useful data in out_buf */
bool in_finished = false;
bool out_finished = false;
lzma_action action;
lzma_ret ret_xz;
int ret;
ret = RET_OK;
/* initialize xz decoder */
ret_xz = lzma_stream_decoder (&strm, memory_limit, flags);
if (ret_xz != LZMA_OK) {
fprintf (stderr, "lzma_stream_decoder error: %d\n", (int) ret_xz);
return RET_ERROR_INIT;
}
while ((! in_finished) && (! out_finished)) {
/* read incoming data */
in_len = fread (in_buf, 1, IN_BUF_MAX, in_file);
if (feof (in_file)) {
in_finished = true;
}
if (ferror (in_file)) {
in_finished = true;
ret = RET_ERROR_INPUT;
}
strm.next_in = in_buf;
strm.avail_in = in_len;
/* if no more data from in_buf, flushes the
internal xz buffers and closes the decompressed data
with LZMA_FINISH */
action = in_finished ? LZMA_FINISH : LZMA_RUN;
/* loop until there's no pending decompressed output */
do {
/* out_buf is clean at this point */
strm.next_out = out_buf;
strm.avail_out = OUT_BUF_MAX;
/* decompress data */
ret_xz = lzma_code (&strm, action);
if ((ret_xz != LZMA_OK) && (ret_xz != LZMA_STREAM_END)) {
fprintf (stderr, "lzma_code error: %d\n", (int) ret_xz);
out_finished = true;
ret = RET_ERROR_DECOMPRESSION;
} else {
/* write decompressed data */
out_len = OUT_BUF_MAX - strm.avail_out;
fwrite (out_buf, 1, out_len, out_file);
if (ferror (out_file)) {
out_finished = true;
ret = RET_ERROR_OUTPUT;
}
}
} while (strm.avail_out == 0);
}
/* Bug fix (2012-06-14): If no errors were detected, check
that the last lzma_code() call returned LZMA_STREAM_END.
If not, the file is probably truncated. */
if ((ret == RET_OK) && (ret_xz != LZMA_STREAM_END)) {
fprintf (stderr, "Input truncated or corrupt\n");
ret = RET_ERROR_DECOMPRESSION;
}
lzma_end (&strm);
return ret;
}
int main ()
{
int ret;
ret = xz_decompress (stdin, stdout);
return ret;
}

View File

@ -40,10 +40,10 @@ The .lzma File Format
0.2. Changes
Last modified: 2024-04-08 17:35+0300
Last modified: 2022-07-13 21:00+0300
From version 2011-04-12 11:55+0300 to 2022-07-13 21:00+0300:
The section 1.1.3 was modified to allow End of Payload Marker
Compared to the previous version (2011-04-12 11:55+0300)
the section 1.1.3 was modified to allow End of Payload Marker
with a known Uncompressed Size.
@ -157,17 +157,17 @@ The .lzma File Format
2. References
LZMA SDK - The original LZMA implementation
https://7-zip.org/sdk.html
http://7-zip.org/sdk.html
7-Zip
https://7-zip.org/
http://7-zip.org/
LZMA Utils - LZMA adapted to POSIX-like systems
https://tukaani.org/lzma/
http://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils
https://tukaani.org/xz/
http://tukaani.org/xz/
The .xz file format - The successor of the .lzma format
https://tukaani.org/xz/xz-file-format.txt
http://tukaani.org/xz/xz-file-format.txt

View File

@ -2,7 +2,7 @@
The .xz File Format
===================
Version 1.2.1 (2024-04-08)
Version 1.1.0 (2022-12-11)
0. Preface
@ -81,26 +81,18 @@ Version 1.2.1 (2024-04-08)
0.2. Getting the Latest Version
The latest official version of this document can be downloaded
from <https://tukaani.org/xz/xz-file-format.txt>.
from <http://tukaani.org/xz/xz-file-format.txt>.
Specific versions of this document have a filename
xz-file-format-X.Y.Z.txt where X.Y.Z is the version number.
For example, the version 1.0.0 of this document is available
at <https://tukaani.org/xz/xz-file-format-1.0.0.txt>.
at <http://tukaani.org/xz/xz-file-format-1.0.0.txt>.
0.3. Version History
Version Date Description
1.2.1 2024-04-08 The URLs of this specification and
XZ Utils were changed back to the
original ones in Sections 0.2 and 7.
1.2.0 2024-01-19 Added RISC-V filter and updated URLs in
Sections 0.2 and 7. The URL of this
specification was changed.
1.1.0 2022-12-11 Added ARM64 filter and clarified 32-bit
ARM endianness in Section 5.3.2,
language improvements in Section 5.4
@ -931,7 +923,6 @@ Version 1.2.1 (2024-04-08)
0x08 2 bytes ARM Thumb filter [1]
0x09 4 bytes SPARC filter
0x0A 4 bytes ARM64 filter [2]
0x0B 2 bytes RISC-V filter
[1] These are for little endian instruction encoding.
This must not be confused with data endianness.
@ -1145,30 +1136,30 @@ Version 1.2.1 (2024-04-08)
7. References
LZMA SDK - The original LZMA implementation
https://7-zip.org/sdk.html
http://7-zip.org/sdk.html
LZMA Utils - LZMA adapted to POSIX-like systems
https://tukaani.org/lzma/
http://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils
https://tukaani.org/xz/
http://tukaani.org/xz/
[RFC-1952]
GZIP file format specification version 4.3
https://www.ietf.org/rfc/rfc1952.txt
http://www.ietf.org/rfc/rfc1952.txt
- Notation of byte boxes in section "2.1. Overall conventions"
[RFC-2119]
Key words for use in RFCs to Indicate Requirement Levels
https://www.ietf.org/rfc/rfc2119.txt
http://www.ietf.org/rfc/rfc2119.txt
[GNU-tar]
GNU tar 1.35 manual
https://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
GNU tar 1.21 manual
http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
- Node 9.4.2 "Blocking Factor", paragraph that begins
"gzip will complain about trailing garbage"
- Note that this URL points to the latest version of the
manual, and may some day not contain the note which is in
1.35. For the exact version of the manual, download GNU
tar 1.35: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.35.tar.gz
1.21. For the exact version of the manual, download GNU
tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz

View File

@ -1,11 +1,12 @@
# SPDX-License-Identifier: 0BSD
###############################################################################
#
# Makefile to build XZ Utils using DJGPP
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
###############################################################################
# For debugging, set comment "#define NDEBUG 1" from config.h to enable
@ -45,15 +46,13 @@ SRCS_C = \
../src/common/tuklib_cpucores.c \
../src/common/tuklib_exit.c \
../src/common/tuklib_mbstr_fw.c \
../src/common/tuklib_mbstr_nonprint.c \
../src/common/tuklib_mbstr_width.c \
../src/common/tuklib_mbstr_wrap.c \
../src/common/tuklib_open_stdxxx.c \
../src/common/tuklib_physmem.c \
../src/common/tuklib_progname.c \
../src/liblzma/check/check.c \
../src/liblzma/check/crc32_fast.c \
../src/liblzma/check/crc64_fast.c \
../src/liblzma/check/crc32_table.c \
../src/liblzma/check/crc64_table.c \
../src/liblzma/check/sha256.c \
../src/liblzma/common/alone_decoder.c \
../src/liblzma/common/alone_encoder.c \

View File

@ -1,5 +1,3 @@
/* SPDX-License-Identifier: 0BSD */
/* How many MiB of RAM to assume if the real amount cannot be determined. */
#define ASSUME_RAM 32
@ -12,9 +10,6 @@
/* Define to 1 if sha256 integrity check is enabled. */
#define HAVE_CHECK_SHA256 1
/* Define to 1 if the 32-bit x86 CRC assembly files are used. */
#define HAVE_CRC_X86_ASM 1
/* Define to 1 if any of HAVE_DECODER_foo have been defined. */
#define HAVE_DECODERS 1
@ -84,6 +79,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if .lz (lzip) decompression support is enabled. */
#define HAVE_LZIP_DECODER 1
@ -108,14 +106,23 @@
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the 'utimes' function. */
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the `utimes' function. */
#define HAVE_UTIMES 1
/* Define to 1 or 0, depending whether the compiler supports simple visibility
declarations. */
#define HAVE_VISIBILITY 0
/* Define to 1 if the system has the type '_Bool'. */
/* Define to 1 if the system has the type `_Bool'. */
#define HAVE__BOOL 1
/* Define to 1 if the GNU C extension __builtin_assume_aligned is supported.
@ -138,7 +145,7 @@
/* Define to the home page for this package. */
#define PACKAGE_URL "https://tukaani.org/xz/"
/* The size of 'size_t', as computed by sizeof. */
/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4
/* Define to 1 if the system supports fast unaligned access to 16-bit and

File diff suppressed because it is too large Load Diff

View File

@ -1,86 +1,53 @@
#!/bin/sh
# SPDX-License-Identifier: 0BSD
#
#############################################################################
#
# While it's possible to use the Doxyfile as is to generate liblzma API
# documentation, it is recommended to use this script because this adds
# the XZ Utils version number to the generated HTML.
# Updates the Doxygen generated documentation files in the source tree.
# If the doxygen command is not installed, it will exit with an error.
# This script can generate Doxygen documentation for all source files or for
# just liblzma API header files.
#
# Other features:
# - Generate documentation of the XZ Utils internals.
# - Set input and output paths for out-of-tree builds.
# It is recommended to use this script to update the Doxygen-generated HTML
# files since this will include the package version in the output and,
# in case of liblzma API docs, strip JavaScript files from the output.
#
#############################################################################
#
# Authors: Jia Tan
# Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
set -e
show_usage()
{
echo "Usage: $0 <api|internal> [ABS_TOP_SRCDIR ABS_OUTDIR]"
echo
echo "Supported modes:"
echo " - 'api' (default): liblzma API docs into doc/api"
echo " - 'internal': internal docs into doc/internal"
echo
echo "Absolute source and output dirs may be set" \
"to do an out-of-tree build."
echo "The output directory must already exist."
exit 1
}
case $1 in
api|internal)
;;
*)
show_usage
;;
esac
if type doxygen > /dev/null 2>&1; then
:
else
echo "$0: 'doxygen' command not found" >&2
echo "doxygen/update-doxygen: 'doxygen' command not found." >&2
echo "doxygen/update-doxygen: Skipping Doxygen docs generation." >&2
exit 1
fi
case $# in
1)
# One argument: Building inside the source tree
ABS_TOP_SRCDIR=`dirname "$0"`/..
ABS_OUTDIR=$ABS_TOP_SRCDIR/doc
;;
3)
# Three arguments: Possibly an out of tree build
ABS_TOP_SRCDIR=$2
ABS_OUTDIR=$3
;;
*)
show_usage
;;
esac
if test ! -f "$ABS_TOP_SRCDIR/doxygen/Doxyfile"; then
echo "$0: Source dir '$ABS_TOP_SRCDIR/doxygen/Doxyfile' not found" >&2
exit 1
fi
if test ! -d "$ABS_OUTDIR"; then
echo "$0: Output dir '$ABS_OUTDIR' not found" >&2
exit 1
if test ! -f Doxyfile; then
cd `dirname "$0"` || exit 1
if test ! -f Doxyfile; then
echo "doxygen/update-doxygen: Cannot find Doxyfile" >&2
exit 1
fi
fi
# Get the package version so that it can be included in the generated docs.
PACKAGE_VERSION=`cd "$ABS_TOP_SRCDIR" && sh build-aux/version.sh`
PACKAGE_VERSION=`cd .. && sh build-aux/version.sh` || exit 1
# If no arguments are specified, default to generating liblzma API header
# documentation only.
case $1 in
api)
'' | api)
# Remove old documentation before re-generating the new.
rm -rf "$ABS_OUTDIR/api"
rm -rf ../doc/api
# Generate the HTML documentation by preparing the Doxyfile
# in stdin and piping the result to the doxygen command.
@ -88,27 +55,57 @@ case $1 in
# override any earlier assignment. So, we can use this
# feature to override the tags that need to change between
# "api" and "internal" modes.
ABS_SRCDIR=$ABS_TOP_SRCDIR/src/liblzma/api
(
cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile"
cat Doxyfile
echo "PROJECT_NUMBER = $PACKAGE_VERSION"
echo "OUTPUT_DIRECTORY = $ABS_OUTDIR"
echo "STRIP_FROM_PATH = $ABS_SRCDIR"
echo "INPUT = $ABS_SRCDIR"
) | doxygen -q -
) | doxygen -
# As of Doxygen 1.8.0 - 1.9.6 and the Doxyfile options we use,
# the output is good without any JavaScript. Unfortunately
# Doxygen doesn't have an option to disable JavaScript usage
# completely so we strip it away with the hack below.
#
# Omitting the JavaScript code avoids some license hassle
# as jquery.js is fairly big, it contains more than jQuery
# itself, and doesn't include the actual license text (it
# only refers to the MIT license by name).
echo "Stripping JavaScript from Doxygen output..."
for F in ../doc/api/*.html
do
sed 's/<script [^>]*><\/script>//g
s/onclick="[^"]*"//g' \
"$F" > ../doc/api/tmp
mv -f ../doc/api/tmp "$F"
done
rm -f ../doc/api/*.js
;;
internal)
rm -rf "$ABS_OUTDIR/internal"
# The docs from internal aren't for distribution so
# the JavaScript files aren't an issue here.
rm -rf ../doc/internal
(
cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile"
echo 'PROJECT_NAME = "XZ Utils"'
cat Doxyfile
echo "PROJECT_NUMBER = $PACKAGE_VERSION"
echo "OUTPUT_DIRECTORY = $ABS_OUTDIR"
echo "STRIP_FROM_PATH = $ABS_TOP_SRCDIR"
echo "INPUT = $ABS_TOP_SRCDIR/src"
echo 'PROJECT_NAME = "XZ Utils"'
echo 'STRIP_FROM_PATH = ../src'
echo 'INPUT = ../src'
echo 'HTML_OUTPUT = internal'
echo 'EXTRACT_PRIVATE = YES'
echo 'EXTRACT_STATIC = YES'
echo 'EXTRACT_LOCAL_CLASSES = YES'
echo 'SEARCHENGINE = YES'
) | doxygen -q -
) | doxygen -
;;
*)
echo "doxygen/update-doxygen: Error: mode argument '$1'" \
"is not supported." >&2
echo "doxygen/update-doxygen: Supported modes:" >&2
echo "doxygen/update-doxygen: - 'api' (default):" \
"liblzma API docs into doc/api" >&2
echo "doxygen/update-doxygen: - 'internal':"\
"internal docs into doc/internal" >&2
exit 1
;;
esac

View File

@ -1,6 +1,5 @@
#!/bin/bash
# SPDX-License-Identifier: 0BSD
#
#############################################################################
#
# 7z2lzma.bash is very primitive .7z to .lzma converter. The input file must
@ -18,6 +17,9 @@
#
# Author: Lasse Collin <lasse.collin@tukaani.org>
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
# You can use 7z or 7za, both will work.

View File

@ -1,5 +1,3 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
scanlzma, scan for lzma compressed data in stdin and echo it to stdout.
Copyright (C) 2006 Timo Lindfors

View File

@ -1,5 +1,3 @@
## SPDX-License-Identifier: GPL-2.0-or-later
##
## Copyright (C) 2004-2007 Free Software Foundation, Inc.
##
@ -23,17 +21,7 @@ libgnu_a_SOURCES =
libgnu_a_DEPENDENCIES = $(LIBOBJS)
libgnu_a_LIBADD = $(LIBOBJS)
EXTRA_DIST = \
getopt.in.h \
getopt.c \
getopt1.c \
getopt_int.h \
getopt-cdefs.h \
getopt-core.h \
getopt-ext.h \
getopt-pfx-core.h \
getopt-pfx-ext.h
EXTRA_DIST = getopt.in.h getopt.c getopt1.c getopt_int.h
BUILT_SOURCES = $(GETOPT_H)
MOSTLYCLEANFILES = getopt.h getopt.h-t

View File

@ -1,72 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* getopt-on-non-glibc compatibility macros.
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of gnulib.
Unlike most of the getopt implementation, it is NOT shared
with the GNU C Library.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GETOPT_CDEFS_H
#define _GETOPT_CDEFS_H 1
/* This header should not be used directly; include getopt.h or
unistd.h instead. It does not have a protective #error, because
the guard macro for getopt.h in gnulib is not fixed. */
/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect
a number of the internal macros supplied to GNU libc's headers by
sys/cdefs.h. Provide fallback definitions for all of them. */
#ifdef HAVE_SYS_CDEFS_H
# include <sys/cdefs.h>
#endif
#ifndef __BEGIN_DECLS
# ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# else
# define __BEGIN_DECLS /* nothing */
# endif
#endif
#ifndef __END_DECLS
# ifdef __cplusplus
# define __END_DECLS }
# else
# define __END_DECLS /* nothing */
# endif
#endif
#ifndef __GNUC_PREREQ
# if defined __GNUC__ && defined __GNUC_VERSION__
# define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
# else
# define __GNUC_PREREQ(maj, min) 0
# endif
#endif
#ifndef __THROW
# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4)
# if __cplusplus >= 201103L
# define __THROW noexcept (true)
# else
# define __THROW throw ()
# endif
# else
# define __THROW
# endif
#endif
#endif /* _GETOPT_CDEFS_H */

View File

@ -1,98 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* Declarations for getopt (basic, portable features only).
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of the GNU C Library and is also part of gnulib.
Patches to this file should be submitted to both projects.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _GETOPT_CORE_H
#define _GETOPT_CORE_H 1
/* This header should not be used directly; include getopt.h or
unistd.h instead. Unlike most bits headers, it does not have
a protective #error, because the guard macro for getopt.h in
gnulib is not fixed. */
__BEGIN_DECLS
/* For communication from 'getopt' to the caller.
When 'getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when 'ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to 'getopt'.
On entry to 'getopt', zero means this is the first call; initialize.
When 'getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, 'optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message 'getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
/* Get definitions and prototypes for functions to process the
arguments in ARGV (ARGC of them, minus the program name) for
options given in OPTS.
Return the option character from OPTS just read. Return -1 when
there are no more options. For unrecognized options, or options
missing arguments, 'optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in 'optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU 'getopt'.
The argument '--' causes premature termination of argument
scanning, explicitly telling 'getopt' that there are no more
options.
If OPTS begins with '-', then non-option arguments are treated as
arguments to the option '\1'. This behavior is specific to the GNU
'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in
the environment, then do not permute arguments.
For standards compliance, the 'argv' argument has the type
char *const *, but this is inaccurate; if argument permutation is
enabled, the argv array (not the strings it points to) must be
writable. */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
__THROW _GL_ARG_NONNULL ((2, 3));
__END_DECLS
#endif /* _GETOPT_CORE_H */

View File

@ -1,79 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* Declarations for getopt (GNU extensions).
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of the GNU C Library and is also part of gnulib.
Patches to this file should be submitted to both projects.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _GETOPT_EXT_H
#define _GETOPT_EXT_H 1
/* This header should not be used directly; include getopt.h instead.
Unlike most bits headers, it does not have a protective #error,
because the guard macro for getopt.h in gnulib is not fixed. */
__BEGIN_DECLS
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of 'struct option' terminated by an element containing a name which is
zero.
The field 'has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field 'flag' is not NULL, it points to a variable that is set
to the value given in the field 'val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an 'int' to
a compiled-in constant, such as set a value from 'optarg', set the
option's 'flag' field to zero and its 'val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero 'flag' field, 'getopt'
returns the contents of the 'val' field. */
struct option
{
const char *name;
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the 'has_arg' field of 'struct option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
__THROW _GL_ARG_NONNULL ((2, 3));
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
__THROW _GL_ARG_NONNULL ((2, 3));
__END_DECLS
#endif /* _GETOPT_EXT_H */

View File

@ -1,68 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* getopt (basic, portable features) gnulib wrapper header.
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of gnulib.
Unlike most of the getopt implementation, it is NOT shared
with the GNU C Library.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GETOPT_PFX_CORE_H
#define _GETOPT_PFX_CORE_H 1
/* This header should not be used directly; include getopt.h or
unistd.h instead. It does not have a protective #error, because
the guard macro for getopt.h in gnulib is not fixed. */
/* Standalone applications should #define __GETOPT_PREFIX to an
identifier that prefixes the external functions and variables
defined in getopt-core.h and getopt-ext.h. Systematically
rename identifiers so that they do not collide with the system
functions and variables. Renaming avoids problems with some
compilers and linkers. */
#ifdef __GETOPT_PREFIX
# ifndef __GETOPT_ID
# define __GETOPT_CONCAT(x, y) x ## y
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
# endif
# undef getopt
# undef optarg
# undef opterr
# undef optind
# undef optopt
# define getopt __GETOPT_ID (getopt)
# define optarg __GETOPT_ID (optarg)
# define opterr __GETOPT_ID (opterr)
# define optind __GETOPT_ID (optind)
# define optopt __GETOPT_ID (optopt)
/* Work around a problem on macOS, which declares getopt with a
trailing __DARWIN_ALIAS(getopt) that would expand to something like
__asm("_" "rpl_getopt" "$UNIX2003") were it not for the following
hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */
# ifdef __APPLE__
# define _GETOPT
# endif
/* The system's getopt.h may have already included getopt-core.h to
declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that
getopt-core.h declares them with prefixes. */
# undef _GETOPT_CORE_H
#endif
#include <getopt-core.h>
#endif /* _GETOPT_PFX_CORE_H */

View File

@ -1,72 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* getopt (GNU extensions) gnulib wrapper header.
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of gnulib.
Unlike most of the getopt implementation, it is NOT shared
with the GNU C Library.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GETOPT_PFX_EXT_H
#define _GETOPT_PFX_EXT_H 1
/* This header should not be used directly; include getopt.h instead.
It does not have a protective #error, because the guard macro for
getopt.h in gnulib is not fixed. */
/* Standalone applications should #define __GETOPT_PREFIX to an
identifier that prefixes the external functions and variables
defined in getopt-core.h and getopt-ext.h. Systematically
rename identifiers so that they do not collide with the system
functions and variables. Renaming avoids problems with some
compilers and linkers. */
#ifdef __GETOPT_PREFIX
# ifndef __GETOPT_ID
# define __GETOPT_CONCAT(x, y) x ## y
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
# endif
# undef getopt_long
# undef getopt_long_only
# undef option
# undef _getopt_internal
# define getopt_long __GETOPT_ID (getopt_long)
# define getopt_long_only __GETOPT_ID (getopt_long_only)
# define option __GETOPT_ID (option)
# define _getopt_internal __GETOPT_ID (getopt_internal)
/* The system's getopt.h may have already included getopt-ext.h to
declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that
getopt-ext.h declares them with prefixes. */
# undef _GETOPT_EXT_H
#endif
/* Standalone applications get correct prototypes for getopt_long and
getopt_long_only; they declare "char **argv". For backward
compatibility with old applications, if __GETOPT_PREFIX is not
defined, we supply GNU-libc-compatible, but incorrect, prototypes
using "char *const *argv". (GNU libc is stuck with the incorrect
prototypes, as they are baked into older versions of LSB.) */
#ifndef __getopt_argv_const
# if defined __GETOPT_PREFIX
# define __getopt_argv_const /* empty */
# else
# define __getopt_argv_const const
# endif
#endif
#include <getopt-ext.h>
#endif /* _GETOPT_PFX_EXT_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,27 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* Declarations for getopt.
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of gnulib.
Unlike most of the getopt implementation, it is NOT shared
with the GNU C Library, which supplies a different version of
this file.
Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007
Free Software Foundation, Inc.
This file is part of the GNU C Library.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1, or (at your option)
any later version.
This file is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _GETOPT_H
#define _GETOPT_H 1
#ifndef __need_getopt
# define _GETOPT_H 1
#endif
/* Standalone applications should #define __GETOPT_PREFIX to an
identifier that prefixes the external functions and variables
@ -32,29 +31,196 @@
identifiers so that they do not collide with the system functions
and variables. Renaming avoids problems with some compilers and
linkers. */
#if defined __GETOPT_PREFIX
#if defined __GETOPT_PREFIX && !defined __need_getopt
# include <stdlib.h>
# include <stdio.h>
# ifndef _MSC_VER
# include <unistd.h>
# endif
# include <unistd.h>
# undef __need_getopt
# undef getopt
# undef getopt_long
# undef getopt_long_only
# undef optarg
# undef opterr
# undef optind
# undef optopt
# define __GETOPT_CONCAT(x, y) x ## y
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
# define getopt __GETOPT_ID (getopt)
# define getopt_long __GETOPT_ID (getopt_long)
# define getopt_long_only __GETOPT_ID (getopt_long_only)
# define optarg __GETOPT_ID (optarg)
# define opterr __GETOPT_ID (opterr)
# define optind __GETOPT_ID (optind)
# define optopt __GETOPT_ID (optopt)
#endif
/* From Gnulib's lib/arg-nonnull.h: */
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
that the values passed as arguments n, ..., m must be non-NULL pointers.
n = 1 stands for the first argument, n = 2 for the second argument etc. */
#ifndef _GL_ARG_NONNULL
# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__
# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
/* Standalone applications get correct prototypes for getopt_long and
getopt_long_only; they declare "char **argv". libc uses prototypes
with "char *const *argv" that are incorrect because getopt_long and
getopt_long_only can permute argv; this is required for backward
compatibility (e.g., for LSB 2.0.1).
This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
but it caused redefinition warnings if both unistd.h and getopt.h were
included, since unistd.h includes getopt.h having previously defined
__need_getopt.
The only place where __getopt_argv_const is used is in definitions
of getopt_long and getopt_long_only below, but these are visible
only if __need_getopt is not defined, so it is quite safe to rewrite
the conditional as follows:
*/
#if !defined __need_getopt
# if defined __GETOPT_PREFIX
# define __getopt_argv_const /* empty */
# else
# define _GL_ARG_NONNULL(params)
# define __getopt_argv_const const
# endif
#endif
#include <getopt-cdefs.h>
#include <getopt-pfx-core.h>
#include <getopt-pfx-ext.h>
/* If __GNU_LIBRARY__ is not already defined, either we are being used
standalone, or this is the first header included in the source file.
If we are being used with glibc, we need to include <features.h>, but
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
not defined, include <ctype.h>, which will pull in <features.h> for us
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
doesn't flood the namespace with stuff the way some other headers do.) */
#if !defined __GNU_LIBRARY__
# include <ctype.h>
#endif
#endif /* _GETOPT_H */
#ifndef __THROW
# ifndef __GNUC_PREREQ
# define __GNUC_PREREQ(maj, min) (0)
# endif
# if defined __cplusplus && __GNUC_PREREQ (2,8)
# define __THROW throw ()
# else
# define __THROW
# endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message `getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
#ifndef __need_getopt
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an `int' to
a compiled-in constant, such as set a value from `optarg', set the
option's `flag' field to zero and its `val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct option
{
const char *name;
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
# define no_argument 0
# define required_argument 1
# define optional_argument 2
#endif /* need getopt */
/* Get definitions and prototypes for functions to process the
arguments in ARGV (ARGC of them, minus the program name) for
options given in OPTS.
Return the option character from OPTS just read. Return -1 when
there are no more options. For unrecognized options, or options
missing arguments, `optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in `optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU `getopt'.
The argument `--' causes premature termination of argument
scanning, explicitly telling `getopt' that there are no more
options.
If OPTS begins with `-', then non-option arguments are treated as
arguments to the option '\1'. This behavior is specific to the GNU
`getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in
the environment, then do not permute arguments. */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
__THROW;
#ifndef __need_getopt
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
__THROW;
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
__THROW;
#endif
#ifdef __cplusplus
}
#endif
/* Make sure we later can get all the definitions and declarations. */
#undef __need_getopt
#endif /* getopt.h */

View File

@ -1,32 +1,41 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987-2023 Free Software Foundation, Inc.
This file is part of the GNU C Library and is also part of gnulib.
Patches to this file should be submitted to both projects.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1, or (at your option)
any later version.
The GNU C Library is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _LIBC
# ifdef HAVE_CONFIG_H
# include <config.h>
# endif
#ifdef _LIBC
# include <getopt.h>
#else
# include <config.h>
# include "getopt.h"
#endif
#include "getopt_int.h"
#include <stdio.h>
/* This needs to come after some library #include
to get __GNU_LIBRARY__ defined. */
#ifdef __GNU_LIBRARY__
#include <stdlib.h>
#endif
#include "getopt.h"
#include "getopt_int.h"
#ifndef NULL
#define NULL 0
#endif
int
getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
@ -42,7 +51,7 @@ _getopt_long_r (int argc, char **argv, const char *options,
struct _getopt_data *d)
{
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
0, d, 0);
0, 0, d);
}
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
@ -65,14 +74,13 @@ _getopt_long_only_r (int argc, char **argv, const char *options,
struct _getopt_data *d)
{
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
1, d, 0);
1, 0, d);
}
#ifdef TEST
#include <stdio.h>
#include <stdlib.h>
int
main (int argc, char **argv)
@ -84,7 +92,7 @@ main (int argc, char **argv)
{
int this_option_optind = optind ? optind : 1;
int option_index = 0;
static const struct option long_options[] =
static struct option long_options[] =
{
{"add", 1, 0, 0},
{"append", 0, 0, 0},
@ -134,11 +142,11 @@ main (int argc, char **argv)
break;
case 'c':
printf ("option c with value '%s'\n", optarg);
printf ("option c with value `%s'\n", optarg);
break;
case 'd':
printf ("option d with value '%s'\n", optarg);
printf ("option d with value `%s'\n", optarg);
break;
case '?':

View File

@ -1,64 +1,34 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* Internal declarations for getopt.
Copyright (C) 1989-2023 Free Software Foundation, Inc.
This file is part of the GNU C Library and is also part of gnulib.
Patches to this file should be submitted to both projects.
Copyright (C) 1989-1994,1996-1999,2001,2003,2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
The GNU C Library is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _GETOPT_INT_H
#define _GETOPT_INT_H 1
#include <getopt.h>
extern int _getopt_internal (int ___argc, char **___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
const struct option *__longopts, int *__longind,
int __long_only, int __posixly_correct);
/* Reentrant versions which can handle parsing multiple argument
vectors at the same time. */
/* Describe how to deal with options that follow non-option ARGV-elements.
REQUIRE_ORDER means don't recognize them as options; stop option
processing when the first non-option is seen. This is what POSIX
specifies should happen.
PERMUTE means permute the contents of ARGV as we scan, so that
eventually all the non-options are at the end. This allows options
to be given in any order, even with programs that were not written
to expect this.
RETURN_IN_ORDER is an option available to programs that were
written to expect options and other ARGV-elements in any order
and that care about the ordering of the two. We describe each
non-option ARGV-element as if it were the argument of an option
with character code 1.
The special argument '--' forces an end of option-scanning regardless
of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
'--' can cause 'getopt' to return -1 with 'optind' != ARGC. */
enum __ord
{
REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
};
/* Data type for reentrant functions. */
struct _getopt_data
{
@ -83,17 +53,58 @@ struct _getopt_data
by advancing to the next ARGV-element. */
char *__nextchar;
/* See __ord above. */
enum __ord __ordering;
/* Describe how to deal with options that follow non-option ARGV-elements.
If the caller did not specify anything,
the default is REQUIRE_ORDER if the environment variable
POSIXLY_CORRECT is defined, PERMUTE otherwise.
REQUIRE_ORDER means don't recognize them as options;
stop option processing when the first non-option is seen.
This is what Unix does.
This mode of operation is selected by either setting the environment
variable POSIXLY_CORRECT, or using `+' as the first character
of the list of option characters, or by calling getopt.
PERMUTE is the default. We permute the contents of ARGV as we
scan, so that eventually all the non-options are at the end.
This allows options to be given in any order, even with programs
that were not written to expect this.
RETURN_IN_ORDER is an option available to programs that were
written to expect options and other ARGV-elements in any order
and that care about the ordering of the two. We describe each
non-option ARGV-element as if it were the argument of an option
with character code 1. Using `-' as the first character of the
list of option characters selects this mode of operation.
The special argument `--' forces an end of option-scanning regardless
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
`--' can cause `getopt' to return -1 with `optind' != ARGC. */
enum
{
REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
} __ordering;
/* If the POSIXLY_CORRECT environment variable is set
or getopt was called. */
int __posixly_correct;
/* Handle permutation of arguments. */
/* Describe the part of ARGV that contains non-options that have
been skipped. 'first_nonopt' is the index in ARGV of the first
of them; 'last_nonopt' is the index after the last of them. */
been skipped. `first_nonopt' is the index in ARGV of the first
of them; `last_nonopt' is the index after the last of them. */
int __first_nonopt;
int __last_nonopt;
#if defined _LIBC && defined USE_NONOPTION_FLAGS
int __nonoption_flags_max_len;
int __nonoption_flags_len;
# endif
};
/* The initializer is necessary to set OPTIND and OPTERR to their
@ -103,8 +114,8 @@ struct _getopt_data
extern int _getopt_internal_r (int ___argc, char **___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only, struct _getopt_data *__data,
int __posixly_correct);
int __long_only, int __posixly_correct,
struct _getopt_data *__data);
extern int _getopt_long_r (int ___argc, char **___argv,
const char *__shortopts,

1
m4/.gitignore vendored
View File

@ -1,4 +1,3 @@
build-to-host.m4
codeset.m4
extern-inline.m4
fcntl-o.m4

85
m4/ax_check_capsicum.m4 Normal file
View File

@ -0,0 +1,85 @@
# -*- Autoconf -*-
# SYNOPSIS
#
# AX_CHECK_CAPSICUM([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
#
# DESCRIPTION
#
# This macro searches for an installed Capsicum header and library,
# and if found:
# - AC_DEFINE([HAVE_CAPSICUM]) is called.
# - AC_DEFINE([HAVE_SYS_CAPSICUM_H]) is called if <sys/capsicum.h>
# is present (otherwise <sys/capability.h> must be used).
# - CAPSICUM_LIB is set to the -l option needed to link Capsicum support,
# and AC_SUBST([CAPSICUM_LIB]) is called.
# - The shell commands in ACTION-IF-FOUND are run. The default
# ACTION-IF-FOUND prepends ${CAPSICUM_LIB} into LIBS. If you don't
# want to modify LIBS and don't need to run any other commands either,
# use a colon as ACTION-IF-FOUND.
#
# If Capsicum support isn't found:
# - The shell commands in ACTION-IF-NOT-FOUND are run. The default
# ACTION-IF-NOT-FOUND calls AC_MSG_WARN to print a warning that
# Capsicum support wasn't found.
#
# You should use autoheader to include a definition for the symbols above
# in a config.h file.
#
# Sample usage in a C/C++ source is as follows:
#
# #ifdef HAVE_CAPSICUM
# # ifdef HAVE_SYS_CAPSICUM_H
# # include <sys/capsicum.h>
# # else
# # include <sys/capability.h>
# # endif
# #endif /* HAVE_CAPSICUM */
#
# LICENSE
#
# Copyright (c) 2014 Google Inc.
# Copyright (c) 2015 Lasse Collin <lasse.collin@tukaani.org>
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
#serial 2
AC_DEFUN([AX_CHECK_CAPSICUM], [
# On FreeBSD >= 11.x and Linux, Capsicum is uses <sys/capsicum.h>.
# If this header is found, it is assumed to be the right one.
capsicum_header_found=no
AC_CHECK_HEADERS([sys/capsicum.h], [capsicum_header_found=yes])
if test "$capsicum_header_found" = no ; then
# On FreeBSD 10.x Capsicum uses <sys/capability.h>. Such a header exists
# on Linux too but it describes POSIX.1e capabilities. Look for the
# declaration of cap_rights_limit to check if <sys/capability.h> is
# a Capsicum header.
AC_CHECK_DECL([cap_rights_limit], [capsicum_header_found=yes], [],
[#include <sys/capability.h>])
fi
capsicum_lib_found=no
CAPSICUM_LIB=
if test "$capsicum_header_found" = yes ; then
AC_LANG_PUSH([C])
# FreeBSD >= 10.x has Capsicum functions in libc.
AC_LINK_IFELSE([AC_LANG_CALL([], [cap_rights_limit])],
[capsicum_lib_found=yes], [])
# Linux has Capsicum functions in libcaprights.
AC_CHECK_LIB([caprights], [cap_rights_limit],
[CAPSICUM_LIB=-lcaprights
capsicum_lib_found=yes], [])
AC_LANG_POP([C])
fi
AC_SUBST([CAPSICUM_LIB])
if test "$capsicum_lib_found" = yes ; then
AC_DEFINE([HAVE_CAPSICUM], [1], [Define to 1 if Capsicum is available.])
m4_default([$1], [LIBS="${CAPSICUM_LIB} $LIBS"])
else
m4_default([$2], [AC_MSG_WARN([Capsicum support not found])])
fi])

View File

@ -1,5 +1,3 @@
dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
# ===========================================================================

View File

@ -1,70 +1,71 @@
dnl SPDX-License-Identifier: FSFULLR
# getopt.m4 serial 49 (modified version)
dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
# getopt.m4 serial 14 (modified version)
dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# This version has been modified to reduce complexity since we only need
# GNU getopt_long and do not care about replacing getopt.
#
# Pass gl_replace_getopt=yes (or any non-empty value instead of "yes") as
# an argument to configure to force the use of the getopt_long replacement.
# The getopt module assume you want GNU getopt, with getopt_long etc,
# rather than vanilla POSIX getopt. This means your code should
# always include <getopt.h> for the getopt prototypes.
AC_DEFUN([gl_FUNC_GETOPT_GNU],
AC_DEFUN([gl_GETOPT_SUBSTITUTE],
[
AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
AC_LIBOBJ([getopt])
AC_LIBOBJ([getopt1])
gl_GETOPT_SUBSTITUTE_HEADER
])
if test -n "$gl_replace_getopt"; then
gl_GETOPT_SUBSTITUTE
fi
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
[
GETOPT_H=getopt.h
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
[Define to rpl_ if the getopt replacement functions and variables
should be used.])
AC_SUBST([GETOPT_H])
])
AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
[
if test -z "$gl_replace_getopt"; then
AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
if test -z "$GETOPT_H"; then
AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h])
fi
if test -z "$gl_replace_getopt"; then
AC_CHECK_FUNCS([getopt_long], [], [gl_replace_getopt=yes])
if test -z "$GETOPT_H"; then
AC_CHECK_FUNCS([getopt_long], [], [GETOPT_H=getopt.h])
fi
dnl BSD getopt_long uses a way to reset option processing, that is different
dnl from GNU and Solaris (which copied the GNU behavior). We support both
dnl GNU and BSD style resetting of getopt_long(), so there's no need to use
dnl GNU getopt_long() on BSD due to different resetting style.
if test -z "$gl_replace_getopt"; then
dnl
dnl With getopt_long(), some BSD versions have a bug in handling optional
dnl arguments. This bug appears only if the environment variable
dnl POSIXLY_CORRECT has been set, so it shouldn't be too bad in most
dnl cases; probably most don't have that variable set. But if we actually
dnl hit this bug, it is a real problem due to our heavy use of optional
dnl arguments.
dnl
dnl According to CVS logs, the bug was introduced in OpenBSD in 2003-09-22
dnl and copied to FreeBSD in 2004-02-24. It was fixed in both in 2006-09-22,
dnl so the affected versions shouldn't be popular anymore anyway. NetBSD
dnl never had this bug. TODO: What about Darwin and others?
if test -z "$GETOPT_H"; then
AC_CHECK_DECL([optreset],
[AC_DEFINE([HAVE_OPTRESET], 1,
[Define to 1 if getopt.h declares extern int optreset.])],
[], [#include <getopt.h>])
fi
dnl POSIX 2008 does not specify leading '+' behavior, but see
dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
dnl the next version of POSIX. We don't use that feature, so this
dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
dnl option string (as of 2005-05-05). We don't use that feature, so this
dnl is not a problem for us. Thus, the respective test was removed here.
dnl Checks for getopt handling '-' as a leading character in an option
dnl string were removed, since we also don't use that feature.
])
AC_DEFUN([gl_GETOPT_SUBSTITUTE],
AC_DEFUN([gl_GETOPT_IFELSE],
[
AC_LIBOBJ([getopt])
AC_LIBOBJ([getopt1])
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
[Define to rpl_ if the getopt replacement functions and variables
should be used.])
GETOPT_H=getopt.h
AC_SUBST([GETOPT_H])
AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
AS_IF([test -n "$GETOPT_H"], [$1], [$2])
])
AC_DEFUN([gl_GETOPT], [gl_FUNC_GETOPT_GNU])
AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])])

View File

@ -1,14 +1,11 @@
dnl SPDX-License-Identifier: FSFULLR
# posix-shell.m4
# serial 1
dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Find a POSIX-conforming shell.
# Copyright (C) 2007-2008 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# Written by Paul Eggert.
# If a POSIX-conforming shell can be found, set POSIX_SHELL and
@ -20,22 +17,22 @@ AC_DEFUN([gl_POSIX_SHELL],
AC_CACHE_CHECK([for a shell that conforms to POSIX], [gl_cv_posix_shell],
[gl_test_posix_shell_script='
func_return () {
(exit [$]1)
(exit [$]1)
}
func_success () {
func_return 0
func_return 0
}
func_failure () {
func_return 1
func_return 1
}
func_ret_success () {
return 0
return 0
}
func_ret_failure () {
return 1
return 1
}
subshell_umask_sanity () {
(umask 22; (umask 0); test $(umask) -eq 22)
(umask 22; (umask 0); test $(umask) -eq 22)
}
test "[$](echo foo)" = foo &&
func_success &&
@ -46,11 +43,11 @@ AC_DEFUN([gl_POSIX_SHELL],
subshell_umask_sanity
'
for gl_cv_posix_shell in \
"$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do
"$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do
case $gl_cv_posix_shell in
/*)
"$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \
&& break;;
"$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \
&& break;;
esac
done])

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -10,11 +7,13 @@
#
# Common checks for tuklib.
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_COMMON], [
AC_REQUIRE([AC_CANONICAL_HOST])

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -20,11 +17,13 @@
# GetSystemInfo() is used on Cygwin)
# - pstat_getdynamic(): HP-UX
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_CPUCORES], [
AC_REQUIRE([TUKLIB_COMMON])
@ -71,7 +70,7 @@ main(void)
# -lfreebsd-glue when linking and thus in the current form this would
# fail on GNU/kFreeBSD. The above test for sched_getaffinity() matches
# on GNU/kFreeBSD so the test below should never run on that OS.
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/param.h>
#include <sys/cpuset.h>
@ -92,7 +91,7 @@ main(void)
#
# We test sysctl() first and intentionally break the sysctl() test on QNX
# so that sysctl() is never used on QNX.
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#ifdef __QNX__
compile error
#endif
@ -116,7 +115,7 @@ main(void)
}
]])], [tuklib_cv_cpucores_method=sysctl], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <unistd.h>
int
main(void)
@ -133,7 +132,7 @@ main(void)
}
]])], [tuklib_cv_cpucores_method=sysconf], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/param.h>
#include <sys/pstat.h>

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -14,11 +11,13 @@
# - Does the hardware support fast unaligned access to 16-bit, 32-bit,
# and 64-bit integers
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_INTEGER], [
AC_REQUIRE([TUKLIB_COMMON])
@ -62,158 +61,30 @@ main(void)
fi
])
# On archs that we use tuklib_integer_strict_align() (see below), we need
# objdump to detect support for unaligned access. (Libtool needs objdump
# too, so Libtool does this same tool check as well.)
AC_CHECK_TOOL([OBJDUMP], [objdump], [false])
# An internal helper that attempts to detect if -mstrict-align or
# -mno-strict-align is in effect. This sets enable_unaligned_access=yes
# if compilation succeeds and the regex passed as an argument does *not*
# match the objdump output of a check program. Otherwise this sets
# enable_unaligned_access=no.
tuklib_integer_strict_align ()
{
# First guess no.
enable_unaligned_access=no
# Force -O2 because without optimizations the memcpy()
# won't be optimized out.
tuklib_integer_saved_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -O2"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <string.h>
unsigned int check_strict_align(const void *p)
{
unsigned int i;
memcpy(&i, p, sizeof(i));
return i;
}
]])], [
# Disassemble the test function from the object file.
if $OBJDUMP -d conftest.$ac_objext > conftest.s ; then
# This function should be passed a regex that
# matches if there are instructions that load
# unsigned bytes. Such instructions indicate
# that -mstrict-align is in effect.
#
# NOTE: Use braces to avoid M4 parameter
# expansion.
if grep -- "${1}" conftest.s > /dev/null ; then
:
else
# No single-byte unsigned load
# instructions were found,
# so it seems that -mno-strict-align
# is in effect.
# Override our earlier guess.
enable_unaligned_access=yes
fi
fi
])
CFLAGS=$tuklib_integer_saved_CFLAGS
}
AC_MSG_CHECKING([if unaligned memory access should be used])
AC_ARG_ENABLE([unaligned-access], AS_HELP_STRING([--enable-unaligned-access],
[Enable if the system supports *fast* unaligned memory access
with 16-bit, 32-bit, and 64-bit integers. By default,
this is enabled on x86, x86-64,
32/64-bit big endian PowerPC,
64-bit little endian PowerPC,
and some ARM, ARM64, and RISC-V systems.]),
this is enabled only on x86, x86_64, big endian PowerPC,
and some ARM systems.]),
[], [enable_unaligned_access=auto])
if test "x$enable_unaligned_access" = xauto ; then
# NOTE: There might be other architectures on which unaligned access
# is fast.
# TODO: There may be other architectures, on which unaligned access
# is OK.
case $host_cpu in
i?86|x86_64|powerpc|powerpc64|powerpc64le)
i?86|x86_64|powerpc|powerpc64)
enable_unaligned_access=yes
;;
arm*|riscv*)
# On 32-bit ARM, GCC and Clang
# #define __ARM_FEATURE_UNALIGNED
# if and only if unaligned access is supported.
#
# RISC-V C API Specification says that if
# __riscv_misaligned_fast is defined then
# unaligned access is known to be fast.
#
# MSVC is handled as a special case: We assume that
# 32-bit ARM supports fast unaligned access.
# If MSVC gets RISC-V support then this will assume
# fast unaligned access on RISC-V too.
arm*|aarch64*)
# On 32-bit and 64-bit ARM, GCC and Clang
# #define __ARM_FEATURE_UNALIGNED if
# unaligned access is supported.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#if !defined(__ARM_FEATURE_UNALIGNED) \
&& !defined(__riscv_misaligned_fast) \
&& !defined(_MSC_VER)
compile error
#endif
int main(void) { return 0; }
])],
[enable_unaligned_access=yes],
[enable_unaligned_access=no])
;;
aarch64*)
# On ARM64, Clang defines __ARM_FEATURE_UNALIGNED
# if and only if unaligned access is supported.
# However, GCC (at least up to 15.2.0) defines it
# even when using -mstrict-align, so autodetection
# with this macro doesn't work with GCC on ARM64.
# (It does work on 32-bit ARM.) See:
#
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111555
#
# We need three checks:
#
# 1. If __ARM_FEATURE_UNALIGNED is defined and the
# compiler isn't GCC, unaligned access is enabled.
# If the compiler is MSVC, unaligned access is
# enabled even without __ARM_FEATURE_UNALIGNED.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#if defined(__ARM_FEATURE_UNALIGNED) \
&& (!defined(__GNUC__) \
|| defined(__clang__))
#elif defined(_MSC_VER)
#else
compile error
#endif
int main(void) { return 0; }
])], [enable_unaligned_access=yes])
# 2. If __ARM_FEATURE_UNALIGNED is not defined,
# unaligned access is disabled.
if test "x$enable_unaligned_access" = xauto ; then
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#ifdef __ARM_FEATURE_UNALIGNED
compile error
#endif
int main(void) { return 0; }
])], [enable_unaligned_access=no])
fi
# 3. Use heuristics to detect if -mstrict-align is
# in effect when building with GCC.
if test "x$enable_unaligned_access" = xauto ; then
[tuklib_integer_strict_align \
'[[:blank:]]ldrb[[:blank:]]']
fi
;;
loongarch*)
# See sections 7.4, 8.1, and 8.2:
# https://github.com/loongson/la-softdev-convention/blob/v0.2/la-softdev-convention.adoc
#
# That is, desktop and server processors likely support
# unaligned access in hardware but embedded processors
# might not. GCC defaults to -mno-strict-align and so
# do majority of GNU/Linux distributions. As of
# GCC 15.2, there is no predefined macro to detect
# if -mstrict-align or -mno-strict-align is in effect.
# Use heuristics based on compiler output.
[
tuklib_integer_strict_align \
'[[:blank:]]ld\.bu[[:blank:]]'
]
#ifndef __ARM_FEATURE_UNALIGNED
compile error
#endif
int main(void) { return 0; }
])], [enable_unaligned_access=yes], [enable_unaligned_access=no])
;;
*)
enable_unaligned_access=no

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -18,14 +15,16 @@
# functions, but each function is put into a separate .c file so
# that it is possible to pick only what is strictly needed.
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_MBSTR], [
AC_REQUIRE([TUKLIB_COMMON])
AC_FUNC_MBRTOWC
AC_CHECK_FUNCS([wcwidth vasprintf])
AC_CHECK_FUNCS([wcwidth])
])dnl

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -32,11 +29,13 @@
# - sysinfo() works on Linux/dietlibc and probably on other Linux
# systems whose libc may lack sysconf().
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_PHYSMEM], [
AC_REQUIRE([TUKLIB_COMMON])
@ -65,11 +64,6 @@ compile error
# Look for AIX-specific solution before sysconf(), because the test
# for sysconf() will pass on AIX but won't actually work
# (sysconf(_SC_PHYS_PAGES) compiles but always returns -1 on AIX).
#
# NOTE: There is no need to link the check program because it's not calling
# any functions and thus implicit function declarations aren't a problem.
# The unused reference to _system_configuration.physmem might get optimized
# away, and thus the linker might not see that symbol anyway.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/systemcfg.h>
@ -81,7 +75,7 @@ main(void)
}
]])], [tuklib_cv_physmem_method=aix], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <unistd.h>
int
main(void)
@ -93,7 +87,7 @@ main(void)
}
]])], [tuklib_cv_physmem_method=sysconf], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
@ -109,7 +103,7 @@ main(void)
}
]])], [tuklib_cv_physmem_method=sysctl], [
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/sysinfo.h>
#include <machine/hal_sysinfo.h>
@ -123,7 +117,7 @@ main(void)
}
]])], [tuklib_cv_physmem_method=getsysinfo],[
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/param.h>
#include <sys/pstat.h>
@ -138,7 +132,7 @@ main(void)
}
]])], [tuklib_cv_physmem_method=pstat_getstatic],[
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <invent.h>
int
main(void)
@ -155,7 +149,7 @@ main(void)
# different sysinfo() so we must check $host_os.
case $host_os in
linux*)
AC_LINK_IFELSE([AC_LANG_SOURCE([[
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <sys/sysinfo.h>
int
main(void)

View File

@ -1,6 +1,3 @@
# SPDX-License-Identifier: 0BSD
#############################################################################
#
# SYNOPSIS
#
@ -14,16 +11,18 @@
# This .m4 file is needed allow this module to use glibc's
# program_invocation_name.
#
#############################################################################
# COPYING
#
# Author: Lasse Collin
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
AC_DEFUN_ONCE([TUKLIB_PROGNAME], [
AC_REQUIRE([TUKLIB_COMMON])
AC_CHECK_DECL([program_invocation_name], [AC_DEFINE(
[HAVE_PROGRAM_INVOCATION_NAME], [1],
[Define to 1 if 'program_invocation_name' is declared in <errno.h>.])],
[Define to 1 if `program_invocation_name' is declared in <errno.h>.])],
[], [#include <errno.h>])
])dnl

View File

@ -1,8 +1,5 @@
dnl SPDX-License-Identifier: FSFULLR
# visibility.m4
# serial 9
dnl Copyright (C) 2005, 2008, 2010-2024 Free Software Foundation, Inc.
# visibility.m4 serial 8
dnl Copyright (C) 2005, 2008, 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@ -34,18 +31,18 @@ AC_DEFUN([gl_VISIBILITY],
dnl user has put into $CC $CFLAGS $CPPFLAGS.
AC_CACHE_CHECK([whether the -Werror option is usable],
[gl_cv_cc_vis_werror],
[gl_saved_CFLAGS="$CFLAGS"
[gl_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[]], [[]])],
[gl_cv_cc_vis_werror=yes],
[gl_cv_cc_vis_werror=no])
CFLAGS="$gl_saved_CFLAGS"
CFLAGS="$gl_save_CFLAGS"
])
dnl Now check whether visibility declarations are supported.
AC_CACHE_CHECK([for simple visibility declarations],
[gl_cv_cc_visibility],
[gl_saved_CFLAGS="$CFLAGS"
[gl_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fvisibility=hidden"
dnl We use the option -Werror and a function dummyfunc, because on some
dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
@ -71,7 +68,7 @@ AC_DEFUN([gl_VISIBILITY],
[[]])],
[gl_cv_cc_visibility=yes],
[gl_cv_cc_visibility=no])
CFLAGS="$gl_saved_CFLAGS"
CFLAGS="$gl_save_CFLAGS"
])
if test $gl_cv_cc_visibility = yes; then
CFLAG_VISIBILITY="-fvisibility=hidden"

113
macosx/build.sh Executable file
View File

@ -0,0 +1,113 @@
#!/bin/sh
###############################################################################
# Author: Anders F Björklund <afb@users.sourceforge.net>
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
###############################################################################
mkdir -p Root
mkdir -p Resources
# Abort immediately if something goes wrong.
set -e
GCC="gcc-4.2"
SDK="/Developer/SDKs/MacOSX10.5.sdk"
MDT="10.5"
GTT=i686-apple-darwin9
ARCHES1="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
ARCHES2="-arch ppc -arch i386"
PKGFORMAT="10.5" # xar
# avoid "unknown required load command: 0x80000022" from linking on Snow Leopard
uname -r | grep ^1 >/dev/null && LDFLAGS="$LDFLAGS -Wl,-no_compact_linkedit"
# Clean up if it was already configured.
[ -f Makefile ] && make distclean
# Build the regular fat program
CC="$GCC" \
CFLAGS="-O2 -g $ARCHES1 -isysroot $SDK -mmacosx-version-min=$MDT" \
../configure --disable-dependency-tracking --disable-xzdec --disable-lzmadec $GTT
make
make check
make DESTDIR=`pwd`/Root install
make distclean
# Build the size-optimized program
CC="$GCC" \
CFLAGS="-Os -g $ARCHES2 -isysroot $SDK -mmacosx-version-min=$MDT" \
../configure --disable-dependency-tracking --disable-shared --disable-nls --disable-encoders --enable-small --disable-threads $GTT
make -C src/liblzma
make -C src/xzdec
make -C src/xzdec DESTDIR=`pwd`/Root install
cp -a ../extra Root/usr/local/share/doc/xz
make distclean
# Move development files to different package
test -d liblzma && rm -r liblzma
mkdir -p liblzma/usr/local
mv Root/usr/local/include liblzma/usr/local
mv Root/usr/local/lib liblzma/usr/local
mkdir -p Root/usr/local/lib
cp -p liblzma/usr/local/lib/liblzma.5.dylib Root/usr/local/lib
mkdir -p liblzma/usr/local/share/doc/xz
mv Root/usr/local/share/doc/xz/examples* liblzma/usr/local/share/doc/xz
# Strip debugging symbols and make relocatable
for bin in xz lzmainfo xzdec lzmadec; do
strip -S Root/usr/local/bin/$bin
install_name_tool -change /usr/local/lib/liblzma.5.dylib @executable_path/../lib/liblzma.5.dylib Root/usr/local/bin/$bin
done
for lib in liblzma.5.dylib; do
strip -S Root/usr/local/lib/$lib
install_name_tool -id @executable_path/../lib/liblzma.5.dylib Root/usr/local/lib/$lib
done
# Create tarball, but without the HFS+ attrib
rmdir debug lib po src/liblzma/api src/liblzma src/lzmainfo src/scripts src/xz src/xzdec src tests
( cd Root/usr/local; COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar cvjf ../../../XZ.tbz * )
( cd liblzma; COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar cvjf ../liblzma.tbz ./usr/local )
# Include documentation files for package
cp -p ../README Resources/ReadMe.txt
cp -p ../COPYING Resources/License.txt
# Make an Installer.app package
ID="org.tukaani.xz"
VERSION=`cd ..; sh build-aux/version.sh`
PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
$PACKAGEMAKER -r Root/usr/local -l /usr/local -e Resources -i $ID -n $VERSION -t XZ -o XZ.pkg -g $PKGFORMAT --verbose
$PACKAGEMAKER -r liblzma -w -k -i $ID.liblzma -n $VERSION -o liblzma.pkg -g $PKGFORMAT --verbose
# Put the package in a disk image
if [ "$PKGFORMAT" != "10.5" ]; then
hdiutil create -fs HFS+ -format UDZO -quiet -srcfolder XZ.pkg -ov XZ.dmg
hdiutil internet-enable -yes -quiet XZ.dmg
fi
echo
echo "Build completed successfully."
echo

1
po/.gitignore vendored
View File

@ -5,7 +5,6 @@ Rules-quot
boldquot.sed
en@boldquot.header
en@quot.header
insert-header.sed
insert-header.sin
quot.sed
remove-potcdate.sin

View File

@ -9,9 +9,7 @@ fr
hr
hu
it
ka
ko
nl
pl
pt
pt_BR

View File

@ -1,10 +1,4 @@
# SPDX-License-Identifier: FSFUL
# Makefile variables for PO directory in any package using GNU gettext.
#
# Copyright (C) 2003-2019 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation gives
# unlimited permission to use, copy, distribute, and modify it.
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
@ -14,7 +8,7 @@ subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --add-location=file --no-wrap --keyword=_ --keyword=N_ '--keyword=W_:1,"This is word wrapped at spaces. The Unicode character U+00A0 works as a non-breaking space. Tab (\t) is interpret as a zero-width space (the tab itself is not displayed); U+200B is NOT supported. Manual word wrapping with \n is supported but requires care."'
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
@ -24,14 +18,7 @@ XGETTEXT_OPTIONS = --add-location=file --no-wrap --keyword=_ --keyword=N_ '--key
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = The XZ Utils authors and contributors
# This tells whether or not to prepend "GNU " prefix to the package
# name that gets inserted into the header of the $(DOMAIN).pot file.
# Possible values are "yes", "no", or empty. If it is empty, try to
# detect it automatically by scanning the files in $(top_srcdir) for
# "GNU packagename" string.
PACKAGE_GNU = no
COPYRIGHT_HOLDER =
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
@ -53,39 +40,7 @@ MSGID_BUGS_ADDRESS =
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
# context. Possible values are "yes" and "no". Set this to yes if the
# package uses functions taking also a message context, like pgettext(), or
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
USE_MSGCTXT = no
# These options get passed to msgmerge.
# Useful options are in particular:
# --previous to keep previous msgids of translated messages,
# --quiet to reduce the verbosity.
MSGMERGE_OPTIONS = --add-location=file --no-wrap
# These options get passed to msginit.
# If you want to disable line wrapping when writing PO files, add
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
# MSGINIT_OPTIONS.
#
# Although one may need slightly wider terminal than 80 chars, it is
# much nicer to edit the output of --help when --no-wrap is set.
MSGINIT_OPTIONS = --no-wrap
# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
# has changed. Possible values are "yes" and "no". Set this to no if
# the POT file is checked in the repository and the version control
# program ignores timestamps.
PO_DEPENDS_ON_POT = yes
# This tells whether or not to forcibly update $(DOMAIN).pot and
# regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained
# externally.
#
# NOTE: The the custom "mydist" target in ../Makefile.am updates xz.pot.
# An updated xz.pot will cause the .po files to be updated too but
# only when updating would change more than the POT-Creation-Date line.
DIST_DEPENDS_ON_UPDATE_PO = no
# Although you may need slightly wider terminal than 80 chars, it is
# much nicer to edit the output of --help when this is set.
XGETTEXT_OPTIONS += --no-wrap
MSGMERGE += --no-wrap

View File

@ -1,5 +1,3 @@
# SPDX-License-Identifier: 0BSD
# List of source files which contain translatable strings.
src/xz/args.c
src/xz/coder.c
@ -8,12 +6,8 @@ src/xz/hardware.c
src/xz/list.c
src/xz/main.c
src/xz/message.c
src/xz/mytime.c
src/xz/options.c
src/xz/sandbox.c
src/xz/signals.c
src/xz/suffix.c
src/xz/util.c
src/lzmainfo/lzmainfo.c
src/common/tuklib_exit.c
src/liblzma/common/string_conversion.c

1446
po/ca.po

File diff suppressed because it is too large Load Diff

1608
po/cs.po

File diff suppressed because it is too large Load Diff

1378
po/da.po

File diff suppressed because it is too large Load Diff

1212
po/de.po

File diff suppressed because it is too large Load Diff

1427
po/eo.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More