diff -ur xz-5.2.5/AUTHORS xz-5.4.3/AUTHORS --- xz-5.2.5/AUTHORS 2020-03-17 17:28:50 +++ xz-5.4.3/AUTHORS 2023-05-04 17:21:05 @@ -3,21 +3,33 @@ =================== XZ Utils is developed and maintained by Lasse Collin - . + and Jia Tan . Major parts of liblzma are based on code written by Igor Pavlov, - specifically the LZMA SDK . Without + specifically the LZMA SDK . Without this code, XZ Utils wouldn't exist. The SHA-256 implementation in liblzma is based on the code found from - 7-Zip , which has a modified version of the SHA-256 - code found from Crypto++ . The SHA-256 code + 7-Zip , which has a modified version of the SHA-256 + code found from Crypto++ . The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai. 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. + + The initial version of the .lz (lzip) decoder was written + by Michał Górny. + + CLMUL-accelerated CRC code was contributed by Ilya Kurdyukov. + + Other authors: + - Jonathan Nieder + - Joachim Henke The GNU Autotools-based build system contains files from many authors, which I'm not trying to list here. Only in xz-5.4.3: CMakeLists.txt diff -ur xz-5.2.5/COPYING xz-5.4.3/COPYING --- xz-5.2.5/COPYING 2020-03-17 17:28:50 +++ xz-5.4.3/COPYING 2023-05-04 17:21:05 @@ -21,6 +21,17 @@ XZ Utils specific documentation files in other directories 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: + + "Documents produced by doxygen are derivative works + derived from the input used in their production; + they are not affected by this license." + - Translated messages are in the public domain. - The build system contains public domain files, and files that diff -ur xz-5.2.5/COPYING.GPLv3 xz-5.4.3/COPYING.GPLv3 --- xz-5.2.5/COPYING.GPLv3 2020-03-17 17:28:50 +++ xz-5.4.3/COPYING.GPLv3 2023-05-04 17:21:05 @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ 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 . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff -ur xz-5.2.5/ChangeLog xz-5.4.3/ChangeLog --- xz-5.2.5/ChangeLog 2020-03-17 17:31:45 +++ xz-5.4.3/ChangeLog 2023-05-04 17:33:10 @@ -1,6947 +1,10186 @@ -commit 2327a461e1afce862c22269b80d3517801103c1b -Author: Lasse Collin -Date: 2020-03-17 16:27:42 +0200 +commit 238b4e5458b4bd2cadefb768b8ea7c6b70a191ac +Author: Jia Tan +Date: 2023-05-04 20:38:52 +0800 - Bump version and soname for 5.2.5. + Translations: Update the Croatian translation. + po/hr.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 0cee63c3c6c4f9084a5e7fa7c15a1863ac8e5ffc +Author: Jia Tan +Date: 2023-05-04 19:50:42 +0800 + + Bump version and soname for 5.4.3. + src/liblzma/Makefile.am | 2 +- src/liblzma/api/lzma/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -commit 3be82d2f7dc882258caf0f0a69214e5916b2bdda -Author: Lasse Collin -Date: 2020-03-17 16:26:04 +0200 +commit 01f937ea9a49005c5091c0165fa0c1e572dd1749 +Author: Jia Tan +Date: 2023-05-02 20:39:56 +0800 - Update NEWS for 5.2.5. + Add NEWS for 5.4.3. - NEWS | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 105 insertions(+) + NEWS | 10 ++++++++++ + 1 file changed, 10 insertions(+) -commit ab3e57539c7337f0653b13b75dbc5d03ade9700e +commit e9b9ea953179502d5245b4e6ca4f5ffe9d5797b1 Author: Lasse Collin -Date: 2020-03-16 21:57:21 +0200 +Date: 2023-05-03 22:46:42 +0300 - Translations: Rebuild cs.po to avoid incorrect fuzzy strings. + tuklib_integer.h: Fix a recent copypaste error in Clang detection. - "make dist" updates the .po files and the fuzzy strings would - result in multiple very wrong translations. + 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. - po/cs.po | 592 ++++++++++++++++++++++++++++++++++----------------------------- - 1 file changed, 322 insertions(+), 270 deletions(-) + src/common/tuklib_integer.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 3a6f38309dc5d44d8a63ebb337b6b2028561c93e -Author: Lasse Collin -Date: 2020-03-16 20:01:37 +0200 +commit be6e39a8622f0d905072874ec25b1ffd155b12e1 +Author: Jia Tan +Date: 2023-04-20 20:15:00 +0800 - README: Update outdated sections. + Update THANKS. - README | 21 +++++++++++---------- - 1 file changed, 11 insertions(+), 10 deletions(-) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 9cc0901798217e258e91c13cf6fda7ad42ba108c -Author: Lasse Collin -Date: 2020-03-16 19:46:27 +0200 +commit 9e343a46cf87a345799222c0b0b3a6f3358dde0c +Author: Jia Tan +Date: 2023-04-19 22:22:16 +0800 - README: Mention that translatable strings will change after 5.2.x. + Windows: Include when needed. + + Legacy Windows did not need to #include 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 when it will is + actually needed. - README | 74 +++--------------------------------------------------------------- - 1 file changed, 3 insertions(+), 71 deletions(-) + src/common/tuklib_integer.h | 6 ++++++ + src/liblzma/common/memcmplen.h | 10 ++++++++++ + 2 files changed, 16 insertions(+) -commit cc163574249f6a4a66f3dc09d6fe5a71bee24fab -Author: Lasse Collin -Date: 2020-03-16 19:39:45 +0200 +commit 12321a9390acc076b414035a46df9d7545ac379f +Author: Jia Tan +Date: 2023-04-19 21:59:03 +0800 - README: Mention that man pages can be translated. + 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 + header file in order to use the MSVC intrinsics. + + Thanks to Anton Kochkov for notifying us about the bug. - README | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) + src/common/tuklib_integer.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit ca261994edc3f2d03d5589c037171c63471ee9dc +commit d1f0e01c395960efd6c29ff144eda4f4c8c1c6d3 Author: Lasse Collin -Date: 2020-03-16 17:30:39 +0200 +Date: 2023-04-14 18:42:33 +0300 - Translations: Add partial Danish translation. + liblzma: Update project maintainers in lzma.h. - I made a few minor white space changes without getting them - approved by the Danish translation team. + AUTHORS was updated earlier, lzma.h was simply forgotten. - po/LINGUAS | 1 + - po/da.po | 896 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 897 insertions(+) + src/liblzma/api/lzma.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 51cd5d051fc730d61411dee292e863582784e189 -Author: Lasse Collin -Date: 2020-03-16 16:43:29 +0200 +commit 8204c5d1304e1e3b7487801b4acaf8e3179a6c52 +Author: Jia Tan +Date: 2023-04-13 20:45:19 +0800 - Update INSTALL.generic from Automake 1.16.1. + liblzma: Cleans up old commented out code. - INSTALL.generic | 321 ++++++++++++++++++++++++++++---------------------------- - 1 file changed, 162 insertions(+), 159 deletions(-) + src/liblzma/common/alone_encoder.c | 11 ----------- + 1 file changed, 11 deletions(-) -commit 69d694e5f1beae2bbfa3b6c348ec0ec5f14b5cd0 -Author: Lasse Collin -Date: 2020-03-15 15:27:22 +0200 +commit 32980d1562bc031013306be1c787761fa63da87d +Author: Jia Tan +Date: 2023-03-28 22:32:40 +0800 - Update INSTALL for Windows and DOS and add preliminary info for z/OS. + 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. - INSTALL | 51 +++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 41 insertions(+), 10 deletions(-) + CMakeLists.txt | 33 ++++++++++++++++++++++----------- + 1 file changed, 22 insertions(+), 11 deletions(-) -commit 2c3b1bb80a3ca7e09728fe4d7a1d8648a5cb9bca -Author: Lasse Collin -Date: 2020-03-15 15:26:20 +0200 +commit 023907faa965476fb921a6344253c50e0ba795f9 +Author: Jia Tan +Date: 2023-03-28 22:25:33 +0800 - Build: Update m4/ax_pthread.m4 from Autoconf Archive (again). + 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. - m4/ax_pthread.m4 | 219 +++++++++++++++++++++++++++++-------------------------- - 1 file changed, 117 insertions(+), 102 deletions(-) + CMakeLists.txt | 144 +++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 104 insertions(+), 40 deletions(-) -commit 74a5af180a6a6c4b8c90cefb37ee900d3fea7dc6 -Author: Lasse Collin -Date: 2020-03-11 21:15:35 +0200 +commit ba176d77cbb164b13006516660fc1ff6c59dedb5 +Author: Jia Tan +Date: 2023-03-24 20:05:59 +0800 - xz: Never use thousand separators in DJGPP builds. - - DJGPP 2.05 added support for thousands separators but it's - broken at least under WinXP with Finnish locale that uses - a non-breaking space as the thousands separator. Workaround - by disabling thousands separators for DJGPP builds. + CMake: Only build xzdec if decoders are enabled. - src/xz/util.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit ceba0d25e826bcdbf64bb4cb03385a2a66f8cbcb -Author: Lasse Collin -Date: 2020-03-11 19:38:08 +0200 +commit c99d697df800e9bc47e09facf88bcfdb9e0264a5 +Author: Jia Tan +Date: 2023-03-22 15:42:04 +0800 - DOS: Update dos/Makefile for DJGPP 2.05. - - It doesn't need -fgnu89-inline like 2.04beta did. + Build: Removes redundant check for LZMA1 filter support. - dos/Makefile | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) + src/liblzma/lzma/Makefile.inc | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) -commit 29e5bd71612253281fb22bbaa0a566990a74dcc3 +commit 54a2fd8c850e626343b79c4cc8fcac2f638ec890 Author: Lasse Collin -Date: 2020-03-11 19:36:07 +0200 +Date: 2023-03-23 15:14:29 +0200 - DOS: Update instructions in dos/INSTALL.txt. + 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. - dos/INSTALL.txt | 59 ++++++++++++++++++++++++++++----------------------------- - 1 file changed, 29 insertions(+), 30 deletions(-) + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 00a037ee9c8ee5a03cf9744e05570ae93d56b875 -Author: Lasse Collin -Date: 2020-03-11 17:58:51 +0200 +commit 622d0fdc02d5f565c2872d79bc70c669c95c8284 +Author: Jia Tan +Date: 2023-03-21 23:36:00 +0800 - DOS: Update config.h. - - The added defines assume GCC >= 4.8. + CMake: Conditionally build xz list.* files if decoders are enabled. - dos/config.h | 8 ++++++++ - 1 file changed, 8 insertions(+) + CMakeLists.txt | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) -commit 4ec2feaefa310b4249eb41893caf526e5c51ee39 -Author: Lasse Collin -Date: 2020-03-11 22:37:54 +0200 +commit 3e2dc523c596cd770a6a7c58cacc0d0d8761e853 +Author: Jia Tan +Date: 2023-02-25 11:46:50 +0800 - Translations: Add hu, zh_CN, and zh_TW. + CMake: Allow configuring features as cache variables. - I made a few white space changes to these without getting them - approved by the translation teams. (I tried to contact the hu and - zh_TW teams but didn't succeed. I didn't contact the zh_CN team.) + 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. - po/LINGUAS | 3 + - po/hu.po | 985 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - po/zh_CN.po | 963 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - po/zh_TW.po | 956 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 2907 insertions(+) + CMakeLists.txt | 528 ++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 391 insertions(+), 137 deletions(-) -commit b6ed09729ae408be4533a0ddbc7df3d6f566846a +commit 0c053f97337fa4ead77acefb577e8e86f8ef388d Author: Lasse Collin -Date: 2020-03-11 14:33:30 +0200 +Date: 2023-03-21 14:07:51 +0200 - Translations: Update vi.po to match the file from the TP. + Build: Add a comment that AC_PROG_CC_C99 is needed for Autoconf 2.69. - The translated strings haven't been updated but word wrapping - is different. + 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. - po/vi.po | 407 ++++++++++++++++++++++++++++----------------------------------- - 1 file changed, 179 insertions(+), 228 deletions(-) + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) -commit 7c85e8953ced204c858101872a15183e4639e9fb +commit 915d4f6058d52f84d2b58b0a5f3c8272eaa6c1bd Author: Lasse Collin -Date: 2020-03-11 14:18:03 +0200 +Date: 2023-03-21 14:04:37 +0200 - Translations: Add fi and pt_BR, and update de, fr, it, and pl. + Build: configure.ac: Use AS_IF and AS_CASE where required. - The German translation isn't identical to the file in - the Translation Project but the changes (white space changes - only) were approved by the translator Mario Blättermann. + 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. - po/LINGUAS | 2 + - po/de.po | 476 ++++++++++++++-------------- - po/fi.po | 974 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - po/fr.po | 272 ++++++++-------- - po/it.po | 479 ++++++++++++---------------- - po/pl.po | 239 +++++++------- - po/pt_BR.po | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 7 files changed, 2697 insertions(+), 746 deletions(-) + configure.ac | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) -commit 7da3ebc67fb5414034685ec16c7a29dad03dfa9b +commit b848c039586ed2cddb6fb033680dac107cc5143f Author: Lasse Collin -Date: 2020-02-25 21:35:14 +0200 +Date: 2023-03-21 13:12:03 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 1acc48794364606c9091cae6fa56db75a1325114 +commit c775ba1602a74f29dbc2088bbe4d02c23fc32ba1 Author: Lasse Collin -Date: 2020-03-11 13:05:29 +0200 +Date: 2023-03-21 13:11:49 +0200 - Build: Add very limited experimental CMake support. + Build: Fix --disable-threads breaking the building of shared libs. - This version matches CMake files in the master branch (commit - 265daa873c0d871f5f23f9b56e133a6f20045a0a) except that this omits - two source files that aren't in v5.2 and in the beginning of - CMakeLists.txt the first paragraph in the comment is slightly - different to point out possible issues in building shared liblzma. + 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 - CMakeLists.txt | 659 ++++++++++++++++++++++++++++++++++++++++++++ - cmake/tuklib_common.cmake | 49 ++++ - cmake/tuklib_cpucores.cmake | 175 ++++++++++++ - cmake/tuklib_integer.cmake | 102 +++++++ - cmake/tuklib_mbstr.cmake | 20 ++ - cmake/tuklib_physmem.cmake | 150 ++++++++++ - cmake/tuklib_progname.cmake | 19 ++ - 7 files changed, 1174 insertions(+) + configure.ac | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) -commit 9acc6abea1552803c74c1486fbb10af119550772 +commit 0673c9ec98b6bae12b33dc295564514aaa26e2fc Author: Lasse Collin -Date: 2020-02-27 20:24:27 +0200 +Date: 2023-03-19 22:45:59 +0200 - Build: Add support for --no-po4a option to autogen.sh. + liblzma: Silence -Wsign-conversion in SSE2 code in memcmplen.h. - Normally, if po4a isn't available, autogen.sh will return - with non-zero exit status. The option --no-po4a can be useful - when one knows that po4a isn't available but wants autogen.sh - to still return with zero exit status. + Thanks to Christian Hesse for reporting the issue. + Fixes: https://github.com/tukaani-project/xz/issues/44 - autogen.sh | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) + src/liblzma/common/memcmplen.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit c8853b31545db7bd0551be85949624b1261efd47 +commit 6ca8046ecbc7a1c81ee08f544bfd1414819fb2e8 +Author: Jia Tan +Date: 2023-03-18 23:22:06 +0800 + + Bump version and soname for 5.4.2. + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit ce4f246600db10e77fc93d492ea045b4c9830bc6 +Author: Jia Tan +Date: 2023-03-18 22:10:57 +0800 + + Add NEWS for 5.4.2. + + NEWS | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit 3634fe330788fc0df217acdb6581031a851600a3 Author: Lasse Collin -Date: 2020-02-24 23:37:07 +0200 +Date: 2023-03-18 16:00:54 +0200 - Update m4/.gitignore. + Update the copy of GNU GPLv3 from gnu.org to COPYING.GPLv3. - m4/.gitignore | 1 + - 1 file changed, 1 insertion(+) + COPYING.GPLv3 | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) -commit 901eb4a8c992354c3ea482f5bad60a1f8ad6fcc8 +commit 97679d25ce7cb014328f1455bb338903c003d54f Author: Lasse Collin -Date: 2020-02-24 23:01:00 +0200 +Date: 2023-03-18 15:51:57 +0200 - liblzma: Remove unneeded from fastpos_tablegen.c. + Change a few HTTP URLs to HTTPS. - This file only generates fastpos_table.c. - It isn't built as a part of liblzma. + The xz man page timestamp was intentionally left unchanged. - src/liblzma/lzma/fastpos_tablegen.c | 1 - - 1 file changed, 1 deletion(-) + INSTALL | 2 +- + README | 8 ++++---- + configure.ac | 2 +- + dos/INSTALL.txt | 4 ++-- + src/liblzma/api/lzma.h | 8 ++++---- + src/liblzma/check/sha256.c | 2 +- + src/xz/xz.1 | 2 +- + windows/INSTALL-MinGW.txt | 10 +++++----- + 8 files changed, 19 insertions(+), 19 deletions(-) -commit ac35c9585fb734b7a19785d490c152e0b8cd4663 +commit 01a67e89a56c3ebf5f6681bd06f0edc22a1ae594 +Author: Jia Tan +Date: 2023-03-18 00:40:28 +0800 + + CMake: Fix typo in a comment. + + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5dca3f5cbab31105196c89cd6df0a9bbc3307c05 Author: Lasse Collin -Date: 2020-02-22 14:15:07 +0200 +Date: 2023-03-17 18:36:22 +0200 - Use defined(__GNUC__) before __GNUC__ in preprocessor lines. - - This should silence the equivalent of -Wundef in compilers that - don't define __GNUC__. + Windows: build.bash: Copy liblzma API docs to the output package. - src/common/sysdefs.h | 3 ++- - src/liblzma/api/lzma.h | 5 +++-- - 2 files changed, 5 insertions(+), 3 deletions(-) + windows/build.bash | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit fb9cada7cfade1156d6277717280e05b5cd342d6 +commit ae252862b30b509ab88b2bbcaa08e8d51b57e928 Author: Lasse Collin -Date: 2020-02-21 17:40:02 +0200 +Date: 2023-03-17 08:53:38 +0200 - liblzma: Add more uses of lzma_memcmplen() to the normal mode of LZMA. + Windows: Add microlzma_*.c to the VS project files. - This gives a tiny encoder speed improvement. This could have been done - in 2014 after the commit 544aaa3d13554e8640f9caf7db717a96360ec0f6 but - it was forgotten. + These should have been included in 5.3.2alpha already. - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 16 ++++++++++------ - 1 file changed, 10 insertions(+), 6 deletions(-) + windows/vs2013/liblzma.vcxproj | 2 ++ + windows/vs2013/liblzma_dll.vcxproj | 2 ++ + windows/vs2017/liblzma.vcxproj | 2 ++ + windows/vs2017/liblzma_dll.vcxproj | 2 ++ + windows/vs2019/liblzma.vcxproj | 2 ++ + windows/vs2019/liblzma_dll.vcxproj | 2 ++ + 6 files changed, 12 insertions(+) -commit 6117955af0b9cef5acde7859e86f773692b5f43c +commit 147d282cc3733e2723df82622b6540ddfb52635e Author: Lasse Collin -Date: 2020-02-21 17:01:15 +0200 +Date: 2023-03-17 08:43:51 +0200 - Build: Add visibility.m4 from gnulib. + CMake: Add microlzma_*.c to the build. - Appears that this file used to get included as a side effect of - gettext. After the change to gettext version requirements this file - no longer got copied to the package and so the build was broken. + These should have been included in 5.3.2alpha already. - m4/.gitignore | 1 - - m4/visibility.m4 | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 77 insertions(+), 1 deletion(-) + CMakeLists.txt | 2 ++ + 1 file changed, 2 insertions(+) -commit c2cc64d78c098834231f9cfd7d852c9cd8950d74 +commit 4523a5ee29f45c0256af67a15771bc8bbd25ba53 Author: Lasse Collin -Date: 2020-02-21 16:10:44 +0200 +Date: 2023-03-17 08:41:36 +0200 - xz: Silence a warning when sig_atomic_t is long int. - - It can be true at least on z/OS. + Build: Update comments about unaligned access to mention 64-bit. - src/xz/signals.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + cmake/tuklib_integer.cmake | 7 +++---- + m4/tuklib_integer.m4 | 4 ++-- + 2 files changed, 5 insertions(+), 6 deletions(-) -commit b6314aa275b35c714e0a191d0b2e9b6106129ea9 +commit 82aacb40367dc580b09c5a7b270f6c98b63e49b9 Author: Lasse Collin -Date: 2020-02-21 15:59:26 +0200 +Date: 2023-03-17 00:02:30 +0200 - xz: Avoid unneeded access of a volatile variable. + Tests: Update .gitignore. - src/xz/signals.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .gitignore | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit f772a1572f723e5dc7d2d32e1d4287ac7a0da55e +commit 5d022c24921eec938604a8cb10d70aa08dbd8575 Author: Lasse Collin -Date: 2020-02-21 01:24:18 +0200 +Date: 2023-03-14 20:04:03 +0200 - tuklib_integer.m4: Optimize the check order. + po4a/update-po: Display the script name consistently in error messages. + + po4a/update-po | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 896295117324f323c0b8db6a31ad6ebfaa88793d +Author: Jia Tan +Date: 2023-03-17 01:30:36 +0800 + + Doc: Rename Doxygen HTML doc directory name liblzma => api. - The __builtin byteswapping is the preferred one so check for it first. + 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. - m4/tuklib_integer.m4 | 56 +++++++++++++++++++++++++++------------------------- - 1 file changed, 29 insertions(+), 27 deletions(-) + .gitignore | 2 +- + Makefile.am | 18 +++++++++--------- + PACKAGERS | 4 ++-- + doxygen/Doxyfile | 2 +- + doxygen/update-doxygen | 18 +++++++++--------- + 5 files changed, 22 insertions(+), 22 deletions(-) -commit 641042e63f665f3231c2fd1241fd3dddda3fb313 -Author: Lasse Collin -Date: 2020-02-20 18:54:04 +0200 +commit 94097157fae308b2c1a5edb4e8597c68b45eeaea +Author: Jia Tan +Date: 2023-03-16 22:07:15 +0800 - tuklib_exit: Add missing header. + liblzma: Remove note from lzma_options_bcj about the ARM64 exception. - strerror() needs which happened to be included via - tuklib_common.h -> tuklib_config.h -> sysdefs.h if HAVE_CONFIG_H - was defined. This wasn't tested without config.h before so it - had worked fine. + This was left in by mistake since an early version of the ARM64 filter + used a different struct for its options. - src/common/tuklib_exit.c | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/api/lzma/bcj.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit dbd55a69e530fec9ae866aaf6c3ccc0b4daf1f1f +commit da16d0b73b79d7785ece6f78a577fadd1fb59d0e Author: Lasse Collin -Date: 2020-02-16 11:18:28 +0200 +Date: 2023-03-15 19:19:13 +0200 - sysdefs.h: Omit the conditionals around string.h and limits.h. + COPYING: Add a note about the included Doxygen-generated HTML. + + COPYING | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit e57c74f9ef19201f72c106f2c347596f40229936 +Author: Jia Tan +Date: 2023-03-16 21:41:09 +0800 + + Doc: Update PACKAGERS with details about liblzma API docs install. + + PACKAGERS | 22 ++++++++++++++++------ + 1 file changed, 16 insertions(+), 6 deletions(-) + +commit 7e2fa48bb73edb25457232e2e62a4f81c6b95281 +Author: Jia Tan +Date: 2023-03-16 21:38:32 +0800 + + liblzma: Add set lzma.h as the main page for Doxygen documentation. - string.h is used unconditionally elsewhere in the project and - configure has always stopped if limits.h is missing, so these - headers must have been always available even on the weirdest - systems. + 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. - src/common/sysdefs.h | 8 ++------ - 1 file changed, 2 insertions(+), 6 deletions(-) + src/liblzma/api/lzma.h | 1 + + src/liblzma/api/lzma/base.h | 2 -- + src/liblzma/api/lzma/bcj.h | 2 -- + src/liblzma/api/lzma/block.h | 2 -- + src/liblzma/api/lzma/check.h | 2 -- + src/liblzma/api/lzma/container.h | 2 -- + src/liblzma/api/lzma/delta.h | 2 -- + src/liblzma/api/lzma/filter.h | 2 -- + src/liblzma/api/lzma/hardware.h | 2 -- + src/liblzma/api/lzma/index.h | 2 -- + src/liblzma/api/lzma/index_hash.h | 4 +--- + src/liblzma/api/lzma/lzma12.h | 2 -- + src/liblzma/api/lzma/stream_flags.h | 2 -- + src/liblzma/api/lzma/version.h | 2 -- + src/liblzma/api/lzma/vli.h | 2 -- + 15 files changed, 2 insertions(+), 29 deletions(-) -commit 9294909861e6d22b32418467e0e988f953a82264 -Author: Lasse Collin -Date: 2020-02-15 15:07:11 +0200 +commit d42977c7acfdf7fd9acc8803cf411eca7dc10478 +Author: Jia Tan +Date: 2023-03-16 21:37:32 +0800 - Build: Bump Autoconf and Libtool version requirements. + Build: Generate doxygen documentation in autogen.sh. - There is no specific reason for this other than blocking - the most ancient versions. These are still old: + 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. + + autogen.sh | 35 +++++++++++++++++++++++++++++------ + 1 file changed, 29 insertions(+), 6 deletions(-) + +commit 8fc712fcf41d821069c670f22b8bf628e7a4a877 +Author: Jia Tan +Date: 2023-03-16 21:35:55 +0800 + + Build: Create doxygen/update-doxygen script. - Autoconf 2.69 (2012) - Automake 1.12 (2012) - gettext 0.19.6 (2015) - Libtool 2.4 (2010) + 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. - configure.ac | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + Makefile.am | 1 + + doxygen/update-doxygen | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 112 insertions(+) -commit bd09081bbdf552f730030d2fd0e5e39ccb3936af -Author: Lasse Collin -Date: 2020-02-15 03:08:32 +0200 +commit 77d2c025d19fbac7277c63239cfb1338f02c66c0 +Author: Jia Tan +Date: 2023-03-16 21:34:36 +0800 - Build: Use AM_GNU_GETTEXT_REQUIRE_VERSION and require 0.19.6. + Build: Install Doxygen docs and include in distribution if generated. - This bumps the version requirement from 0.19 (from 2014) to - 0.19.6 (2015). + 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. - Using only the old AM_GNU_GETTEXT_VERSION results in old - gettext infrastructure being placed in the package. By using - both macros we get the latest gettext files while the other - programs in the Autotools family can still see the old macro. + If the doxygen docs exist in the source tree, they will also be included + in the distribution now too. - configure.ac | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + Makefile.am | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) -commit 1e5e08d86534aec7ca957982c7f6e90203c19e9f -Author: Lasse Collin -Date: 2020-02-14 20:42:06 +0200 +commit 9af8f6f947a43974a4ff025f4c896f2fb4c91b4f +Author: Jia Tan +Date: 2023-01-03 20:37:30 +0800 - Translations: Add German translation of the man pages. + Doxygen: Refactor Doxyfile.in to doxygen/Doxyfile. - Thanks to Mario Blättermann. + 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. - po4a/de.po | 5532 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - po4a/po4a.conf | 2 +- - 2 files changed, 5533 insertions(+), 1 deletion(-) + .gitignore | 3 +- + Doxyfile.in | 1234 ------------------------- + Makefile.am | 1 - + configure.ac | 1 - + doxygen/Doxyfile | 2684 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 2686 insertions(+), 1237 deletions(-) -commit 4b1447809ffbc0d77c0ad456bd6b3afcf0b8623e +commit 1c558a26928b753fcf1c0d4bce9c0643285edd86 +Author: Jia Tan +Date: 2023-02-28 23:22:36 +0800 + + Tests: Remove unused macros and functions. + + tests/tests.h | 75 ----------------------------------------------------------- + 1 file changed, 75 deletions(-) + +commit 7479a69a45a1b8fdb9a209e11f247dce11ac1ba0 +Author: Jia Tan +Date: 2023-01-12 22:29:07 +0800 + + 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. + + tests/test_index.c | 2036 ++++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 1492 insertions(+), 544 deletions(-) + +commit fd56d5353360279c10e8e5e05f5bc6ea03f64584 Author: Lasse Collin -Date: 2020-02-07 15:32:21 +0200 +Date: 2023-03-07 19:59:23 +0200 - Build: Add support for translated man pages using po4a. + xz: Make Capsicum sandbox more strict with stdin and stdout. + + src/xz/file_io.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit d1bdaaebc68cae7f0ba457fa990b520df2186fd1 +Author: Lasse Collin +Date: 2023-03-11 19:31:40 +0200 + + xz: Don't fail if Capsicum is enabled but kernel doesn't support it. - The dependency on po4a is optional. It's never required to install - the translated man pages when xz is built from a release tarball. - If po4a is missing when building from xz.git, the translated man - pages won't be generated but otherwise the build will work normally. + (This commit combines related commits from the master branch.) - The translations are only updated automatically by autogen.sh and - by "make mydist". This makes it easy to keep po4a as an optional - dependency and ensures that I won't forget to put updated - translations to a release tarball. + 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. - The translated man pages aren't installed if --disable-nls is used. + 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". - The installation of translated man pages abuses Automake internals - by calling "install-man" with redefined dist_man_MANS and man_MANS. - This makes the hairy script code slightly less hairy. If it breaks - some day, this code needs to be fixed; don't blame Automake developers. + 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. - Also, this adds more quotes to the existing shell script code in - the Makefile.am "-hook"s. + 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. - Makefile.am | 4 ++++ - autogen.sh | 8 ++++--- - po4a/.gitignore | 2 ++ - po4a/po4a.conf | 14 +++++++++++ - po4a/update-po | 45 ++++++++++++++++++++++++++++++++++ - src/scripts/Makefile.am | 64 +++++++++++++++++++++++++++++++++++++------------ - src/xz/Makefile.am | 50 +++++++++++++++++++++++++++----------- - src/xzdec/Makefile.am | 55 ++++++++++++++++++++++++++++++++---------- - 8 files changed, 197 insertions(+), 45 deletions(-) + src/xz/file_io.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) -commit 882fcfdcd86525cc5c6f6d0bf0230d0089206d13 +commit 5d351c69c19d212ddd2cf1f3bdb24900820c6776 +Author: Jia Tan +Date: 2023-02-04 21:06:35 +0800 + + 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). + + CMakeLists.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit b82d4831e3f2339c4cdbc47776c99462088c11b7 +Author: Jia Tan +Date: 2023-01-26 09:50:21 +0800 + + liblzma: Improve documentation for version.h. + + Specified parameter and return values for API functions and documented + a few more of the macros. + + src/liblzma/api/lzma/version.h | 29 ++++++++++++++++++++++------- + 1 file changed, 22 insertions(+), 7 deletions(-) + +commit 2caba3efe3e0c2d7c6dca00e22c56812326a34e6 +Author: Jia Tan +Date: 2023-02-24 23:46:23 +0800 + + 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. + + src/liblzma/api/lzma/lzma12.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 594f904673ba55a833adfa60bbab6b60d4902d08 Author: Lasse Collin -Date: 2020-02-06 00:04:42 +0200 +Date: 2023-02-27 18:38:35 +0200 - Update THANKS (sync with the master branch). + 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 - THANKS | 3 +++ - 1 file changed, 3 insertions(+) + CMakeLists.txt | 8 ++++++++ + 1 file changed, 8 insertions(+) -commit 134bb7765815d5f265eb0bc9e6ebacd9ae4a52bc +commit 88101143cb774bca6b7006c8335b09dc3f334140 +Author: Jia Tan +Date: 2023-02-24 18:10:37 +0800 + + 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. + + tests/test_vli.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 4042dbf03a06e019ccdd1e9d1b94cf613d62d5a9 +Author: Jia Tan +Date: 2023-02-06 21:46:43 +0800 + + liblzma: Replace '\n' -> newline in filter.h documentation. + + The '\n' renders as a newline when the comments are converted to html + by Doxygen. + + src/liblzma/api/lzma/filter.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3971f5c5024750ce8286891c6f79ae1661047483 +Author: Jia Tan +Date: 2023-02-06 21:45:37 +0800 + + liblzma: Shorten return description for two functions in filter.h. + + Shorten the description for lzma_raw_encoder_memusage() and + lzma_raw_decoder_memusage(). + + src/liblzma/api/lzma/filter.h | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +commit 5e61b39432752b6cd1a7b518f0f9e4f0c3f0f242 +Author: Jia Tan +Date: 2023-02-06 21:44:45 +0800 + + liblzma: Reword a few lines in filter.h + + src/liblzma/api/lzma/filter.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 8a53533869defa1191b41f176a0312cb53a139e2 +Author: Jia Tan +Date: 2023-02-06 21:35:06 +0800 + + 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. + + src/liblzma/api/lzma/filter.h | 226 ++++++++++++++++++++++++++---------------- + 1 file changed, 143 insertions(+), 83 deletions(-) + +commit 6d05b08b17ac8cb93165ee8f310fdd925b0b258f Author: Lasse Collin -Date: 2020-02-05 22:35:06 +0200 +Date: 2023-02-23 20:46:16 +0200 - Update tests/.gitignore. + Update THANKS. - .gitignore | 4 ++++ - 1 file changed, 4 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 6912472fafb656be8f4c5b4ac9ea28fea3065de4 +commit dfc9a54082e0fc7b3b796ea15336b5075acc79d5 Author: Lasse Collin -Date: 2020-02-05 22:28:51 +0200 +Date: 2023-02-21 22:57:10 +0200 - Update m4/.gitignore. + 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 - m4/.gitignore | 1 + + src/liblzma/common/block_decoder.c | 5 ++++- + src/liblzma/common/block_encoder.c | 7 +++++-- + src/liblzma/common/common.c | 20 ++++++++++++++------ + src/liblzma/common/index_decoder.c | 13 ++++++++++--- + src/liblzma/common/index_encoder.c | 11 +++++++++-- + src/liblzma/common/index_hash.c | 13 ++++++++++--- + src/liblzma/common/lzip_decoder.c | 6 +++++- + src/liblzma/delta/delta_decoder.c | 7 ++++++- + src/liblzma/delta/delta_encoder.c | 12 ++++++++++-- + src/liblzma/simple/simple_coder.c | 6 ++++-- + 10 files changed, 77 insertions(+), 23 deletions(-) + +commit f6dce49cb656b358e2fb2a3032e35e20af34dc84 +Author: Jia Tan +Date: 2023-02-07 00:00:44 +0800 + + liblzma: Adjust container.h for consistency with filter.h. + + src/liblzma/api/lzma/container.h | 20 +++++++++----------- + 1 file changed, 9 insertions(+), 11 deletions(-) + +commit 173d240bb4763aedc8c01df4d9c83e311d954c33 +Author: Jia Tan +Date: 2023-02-07 00:00:09 +0800 + + liblzma: Fix small typos and reword a few things in filter.h. + + src/liblzma/api/lzma/container.h | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +commit 17797bacde3f7264048ef0976c137a600148d6cf +Author: Jia Tan +Date: 2023-02-06 23:42:08 +0800 + + liblzma: Convert list of flags in lzma_mt to bulleted list. + + src/liblzma/api/lzma/container.h | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit 37da0e727161b401b8bfd8dccf163a4b2fc0460b +Author: Jia Tan +Date: 2023-01-26 23:17:41 +0800 + + liblzma: Fix typo in documentation in container.h + + lzma_microlzma_decoder -> lzma_microlzma_encoder + + src/liblzma/api/lzma/container.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b8331077c626e6bf14f4671d09b561146eaf816a +Author: Jia Tan +Date: 2023-01-26 23:16:34 +0800 + + 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. + + src/liblzma/api/lzma/container.h | 146 +++++++++++++++++++++++++-------------- + 1 file changed, 93 insertions(+), 53 deletions(-) + +commit b9a3511bb61d3b6ce49abd33dce6155a573f5272 +Author: Jia Tan +Date: 2023-02-22 20:59:41 +0800 + + CMake: Add LZIP decoder test to list of tests. + + CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) -commit 68c60735bbb6e51d4205ba8a9fde307bcfb22f8c +commit cd82ef2fb48b174c57cd03b84a9a0f978772cb89 Author: Lasse Collin -Date: 2020-02-05 20:47:38 +0200 +Date: 2023-02-17 20:56:49 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit e1beaa74bc7cb5a409d59b55870e01ae7784ce3a +commit 076e911ba25cadf2cbdfbd0f65991a002e210c0b Author: Lasse Collin -Date: 2020-02-05 20:33:50 +0200 +Date: 2023-02-17 20:48:28 +0200 - xz: Comment out annoying sandboxing messages. + 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 - src/xz/file_io.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) + configure.ac | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) -commit 8238192652290df78bd728b20e3f6542d1a2819e +commit bc34e5ac9996667d2c1ec9a7895ec5931ac4caea Author: Lasse Collin -Date: 2020-02-05 19:33:37 +0200 +Date: 2023-02-16 21:09:00 +0200 - Build: Workaround a POSIX shell detection problem on Solaris. + liblzma: Very minor API doc tweaks. - I don't know if the problem is in gnulib's gl_POSIX_SHELL macro - or if xzgrep does something that isn't in POSIX. The workaround - adds a special case for Solaris: if /usr/xpg4/bin/sh exists and - gl_cv_posix_shell wasn't overriden on the configure command line, - use that shell for xzgrep and other scripts. That shell is known - to work and exists on most Solaris systems. + 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. - configure.ac | 10 ++++++++++ - 1 file changed, 10 insertions(+) + src/liblzma/api/lzma/block.h | 6 +++--- + src/liblzma/api/lzma/delta.h | 6 +++--- + src/liblzma/api/lzma/index.h | 10 +++++----- + src/liblzma/api/lzma/stream_flags.h | 6 +++--- + 4 files changed, 14 insertions(+), 14 deletions(-) -commit 93a1f61e892e145607dd938e3b30098af19a1672 -Author: Lasse Collin -Date: 2020-02-03 22:03:50 +0200 +commit d31fbd28be5b79eb682db50004b0fb7aad5299ec +Author: Jia Tan +Date: 2023-02-17 00:54:33 +0800 - Build: Update m4/ax_pthread.m4 from Autoconf Archive. + liblzma: Adjust spacing in doc headers in bcj.h. - m4/ax_pthread.m4 | 398 ++++++++++++++++++++++++++++++++++++++----------------- - 1 file changed, 279 insertions(+), 119 deletions(-) + src/liblzma/api/lzma/bcj.h | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) -commit d0daa21792ff861e5423bbd82aaa6c8ba9fa0462 +commit 701e9be6bede19771895f756082db0c017f86f07 +Author: Jia Tan +Date: 2023-02-17 00:44:44 +0800 + + liblzma: Adjust documentation in bcj.h for consistent style. + + src/liblzma/api/lzma/bcj.h | 43 ++++++++++++++++++++++--------------------- + 1 file changed, 22 insertions(+), 21 deletions(-) + +commit 762c4d0b62d2694cf3a01e030fdfe68e09e7b503 +Author: Jia Tan +Date: 2023-02-17 00:36:05 +0800 + + liblzma: Rename field => member in documentation. + + Also adjusted preset value => preset level. + + src/liblzma/api/lzma/base.h | 18 +++++++-------- + src/liblzma/api/lzma/block.h | 44 ++++++++++++++++++------------------- + src/liblzma/api/lzma/container.h | 26 +++++++++++----------- + src/liblzma/api/lzma/delta.h | 12 +++++----- + src/liblzma/api/lzma/index.h | 30 ++++++++++++------------- + src/liblzma/api/lzma/lzma12.h | 28 +++++++++++------------ + src/liblzma/api/lzma/stream_flags.h | 32 +++++++++++++-------------- + 7 files changed, 95 insertions(+), 95 deletions(-) + +commit 0ce1db0223854d94b4a0d17737ac0486a75d9e6a Author: Lasse Collin -Date: 2020-02-01 19:56:18 +0200 +Date: 2023-02-16 17:59:50 +0200 - xz: Limit --memlimit-compress to at most 4020 MiB for 32-bit xz. + liblzma: Silence a warning from MSVC. - See the code comment for reasoning. It's far from perfect but - hopefully good enough for certain cases while hopefully doing - nothing bad in other situations. + 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. - At presets -5 ... -9, 4020 MiB vs. 4096 MiB makes no difference - on how xz scales down the number of threads. + Thanks to Nathan Moinvaziri for reporting this. + + src/liblzma/check/crc64_fast.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d83da006b3e8dbad9112e6cde6b27049d193c9ec +Author: Jia Tan +Date: 2023-02-16 21:04:54 +0800 + + liblzma: Improve documentation for stream_flags.h - The limit has to be a few MiB below 4096 MiB because otherwise - things like "xz --lzma2=dict=500MiB" won't scale down the dict - size enough and xz cannot allocate enough memory. With - "ulimit -v $((4096 * 1024))" on x86-64, the limit in xz had - to be no more than 4085 MiB. Some safety margin is good though. + Standardizing each function to always specify parameters and return + values. Also moved the parameters and return values to the end of each + function description. - This is hack but it should be useful when running 32-bit xz on - a 64-bit kernel that gives full 4 GiB address space to xz. - Hopefully this is enough to solve this: + A few small things were reworded and long sentences broken up. + + src/liblzma/api/lzma/stream_flags.h | 76 ++++++++++++++++++++++--------------- + 1 file changed, 46 insertions(+), 30 deletions(-) + +commit 2796bb4736f645d34939b5d62d5958f534e41e69 +Author: Jia Tan +Date: 2023-02-14 21:50:16 +0800 + + liblzma: Improve documentation in lzma12.h. - https://bugzilla.redhat.com/show_bug.cgi?id=1196786 + All functions now explicitly specify parameter and return values. + + src/liblzma/api/lzma/lzma12.h | 32 +++++++++++++++++++++++--------- + 1 file changed, 23 insertions(+), 9 deletions(-) + +commit ebebaa8d9381afea440eb1b01917117551adf68f +Author: Jia Tan +Date: 2023-01-27 22:44:06 +0800 + + liblzma: Improve documentation in check.h. - FreeBSD has a patch that limits the result in tuklib_physmem() - to SIZE_MAX on 32-bit systems. While I think it's not the way - to do it, the results on --memlimit-compress have been good. This - commit should achieve practically identical results for compression - while leaving decompression and tuklib_physmem() and thus - lzma_physmem() unaffected. + 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. - src/xz/hardware.c | 32 +++++++++++++++++++++++++++++++- - src/xz/xz.1 | 21 ++++++++++++++++++++- - 2 files changed, 51 insertions(+), 2 deletions(-) + src/liblzma/api/lzma/check.h | 41 ++++++++++++++++++++++++++++------------- + 1 file changed, 28 insertions(+), 13 deletions(-) -commit 4433c2dc5727ee6aef570e001a5a024e0d94e609 -Author: Lasse Collin -Date: 2020-01-26 20:53:25 +0200 +commit 765fa2865aab97ea713c1715922e322b3cf599a7 +Author: Jia Tan +Date: 2023-02-08 21:33:52 +0800 - xz: Set the --flush-timeout deadline when the first input byte arrives. + liblzma: Improve documentation in index.h - xz --flush-timeout=2000, old version: + All functions now explicitly specify parameter and return values. + + src/liblzma/api/lzma/index.h | 177 ++++++++++++++++++++++++++++++------------- + 1 file changed, 126 insertions(+), 51 deletions(-) + +commit 918e208af5960728b6def01e692b395f7d8e3701 +Author: Jia Tan +Date: 2023-02-08 20:35:32 +0800 + + liblzma: Reword a comment in index.h. + + src/liblzma/api/lzma/index.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1f157d214bc09338876d2467b549935679abc0bf +Author: Jia Tan +Date: 2023-02-08 20:30:23 +0800 + + liblzma: Omit lzma_index_iter's internal field from Doxygen docs. - 1. xz is started. The next flush will happen after two seconds. - 2. No input for one second. - 3. A burst of a few kilobytes of input. - 4. No input for one second. - 5. Two seconds have passed and flushing starts. + Add \private above this field and its sub-fields since it is not meant + to be modified by users. + + src/liblzma/api/lzma/index.h | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit 28757fa46d8e0f0a9c17628b2b6af9bcb3cd96fc +Author: Jia Tan +Date: 2023-01-21 21:32:03 +0800 + + liblzma: Fix documentation for LZMA_MEMLIMIT_ERROR. - The first second counted towards the flush-timeout even though - there was no pending data. This can cause flushing to occur more - often than needed. + LZMA_MEMLIMIT_ERROR was missing the "<" character needed to put + documentation after a member. + + src/liblzma/api/lzma/base.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 135d5a1a65a9e199b9a5550c1f788cf43cd81018 +Author: Jia Tan +Date: 2023-01-21 00:29:38 +0800 + + liblzma: Improve documentation for base.h. - xz --flush-timeout=2000, after this commit: + Standardizing each function to always specify params and return values. + Also fixed a small grammar mistake. + + src/liblzma/api/lzma/base.h | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +commit 2287d5668384e289d51e72724997dc920483768e +Author: Jia Tan +Date: 2023-02-14 00:08:33 +0800 + + liblzma: Minor improvements to vli.h. - 1. xz is started. - 2. No input for one second. - 3. A burst of a few kilobytes of input. The next flush will - happen after two seconds counted from the time when the - first bytes of the burst were read. - 4. No input for one second. - 5. No input for another second. - 6. Two seconds have passed and flushing starts. + Added [out] annotations to parameters that are pointers and can have + their value changed. Also added a clarification to lzma_vli_is_valid. - src/xz/coder.c | 6 +----- - src/xz/file_io.c | 6 +++++- - src/xz/mytime.c | 1 - - 3 files changed, 6 insertions(+), 7 deletions(-) + src/liblzma/api/lzma/vli.h | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) -commit acc0ef3ac80f18e349c6d0252177707105c0a29c -Author: Lasse Collin -Date: 2020-01-26 20:19:19 +0200 +commit 7124b8a16ae60cb2e93218ff531868eebd673bde +Author: Jia Tan +Date: 2023-02-10 21:38:02 +0800 - xz: Move flush_needed from mytime.h to file_pair struct in file_io.h. + 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. - src/xz/coder.c | 3 ++- - src/xz/file_io.c | 3 ++- - src/xz/file_io.h | 3 +++ - src/xz/mytime.c | 3 --- - src/xz/mytime.h | 4 ---- - 5 files changed, 7 insertions(+), 9 deletions(-) + src/liblzma/api/lzma/delta.h | 8 ++++++++ + 1 file changed, 8 insertions(+) -commit 4afe69d30b66812682a2016ee18441958019cbb2 -Author: Lasse Collin -Date: 2020-01-26 14:49:22 +0200 +commit 59c7bb8931159fdb1a31bbbeaed0e6984e2d3c81 +Author: Jia Tan +Date: 2023-02-10 21:35:23 +0800 - xz: coder.c: Make writing output a separate function. + liblzma: Improve documentation in index_hash.h. - The same code sequence repeats so it's nicer as a separate function. - Note that in one case there was no test for opt_mode != MODE_TEST, - but that was only because that condition would always be true, so - this commit doesn't change the behavior there. + All functions now explicitly specify parameter and return values. + Also reworded the description of lzma_index_hash_init() for readability. - src/xz/coder.c | 30 +++++++++++++++++------------- - 1 file changed, 17 insertions(+), 13 deletions(-) + src/liblzma/api/lzma/index_hash.h | 36 +++++++++++++++++++++++++++--------- + 1 file changed, 27 insertions(+), 9 deletions(-) -commit ec26f3ace5f9b260ca91508030f07465ae2f9f78 -Author: Lasse Collin -Date: 2020-01-26 14:13:42 +0200 +commit e970c28ac3cb2e8051925f81db2fe953664c2645 +Author: Jia Tan +Date: 2023-02-03 00:33:32 +0800 - xz: Fix semi-busy-waiting in xz --flush-timeout. + liblzma: Fix bug in lzma_str_from_filters() not checking filters[] length. - When input blocked, xz --flush-timeout=1 would wake up every - millisecond and initiate flushing which would have nothing to - flush and thus would just waste CPU time. The fix disables the - timeout when no input has been seen since the previous flush. + 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. - src/xz/coder.c | 4 ++++ - src/xz/file_io.c | 15 +++++++++++---- - src/xz/file_io.h | 4 ++++ - 3 files changed, 19 insertions(+), 4 deletions(-) + src/liblzma/common/string_conversion.c | 7 +++++++ + 1 file changed, 7 insertions(+) -commit 38915703241e69a64f133ff9a02ec9100c6019c6 -Author: Lasse Collin -Date: 2020-01-26 13:47:31 +0200 +commit 85e01266a96689448abb249da6c6abc3afcd4a4e +Author: Jia Tan +Date: 2023-02-03 00:32:47 +0800 - xz: Refactor io_read() a bit. + Tests: Create test_filter_str.c. + + Tests lzma_str_to_filters(), lzma_str_from_filters(), and + lzma_str_list_filters() API functions. - src/xz/file_io.c | 17 ++++++++--------- - 1 file changed, 8 insertions(+), 9 deletions(-) + CMakeLists.txt | 1 + + tests/Makefile.am | 2 + + tests/test_filter_str.c | 593 ++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 596 insertions(+) -commit f6d24245349cecfae6ec0d2366fa80716c9f6d37 -Author: Lasse Collin -Date: 2020-01-26 13:37:08 +0200 +commit 3fa0f3ba12dd3383f62dbfa18a864f9b4217fa0a +Author: Jia Tan +Date: 2023-01-22 08:49:00 +0800 - xz: Update a comment in file_io.h. + liblzma: Fix typos in comments in string_conversion.c. - src/xz/file_io.h | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) + src/liblzma/common/string_conversion.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 15b55d5c63d27f81776edb1abc05872a751fc674 -Author: Lasse Collin -Date: 2020-01-26 13:27:51 +0200 +commit 32dbe045d74e94f75c53236fa2a6c0454d7b6d9e +Author: Jia Tan +Date: 2023-02-03 00:20:20 +0800 - xz: Move the setting of flush_needed in file_io.c to a nicer location. + 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. - src/xz/file_io.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) + src/liblzma/api/lzma/block.h | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) -commit 609c7067859146ffc62ac655f6ba53599c891801 -Author: Lasse Collin -Date: 2020-02-05 19:56:09 +0200 +commit ccf12acbfa7331b1bbb99ec55879186eb35f879f +Author: Jia Tan +Date: 2023-02-03 00:12:24 +0800 - xz: Enable Capsicum sandboxing by default if available. + Update lzma_block documentation for lzma_block_uncomp_encode(). + + src/liblzma/api/lzma/block.h | 3 +++ + 1 file changed, 3 insertions(+) + +commit 6a0b168dd9dc1ef437255c4bfdc6eff8b96fdb24 +Author: Jia Tan +Date: 2023-02-03 00:11:37 +0800 + + liblzma: Minor edits to lzma_block header_size documentation. + + src/liblzma/api/lzma/block.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 84ce36f90e68471fec1f0e61cd93ac7ed9ab4883 +Author: Jia Tan +Date: 2023-02-03 00:11:07 +0800 + + liblzma: Enumerate functions that read version in lzma_block. + + src/liblzma/api/lzma/block.h | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +commit d6620774682830d606f57109861b6763805b3492 +Author: Jia Tan +Date: 2023-02-03 00:10:34 +0800 + + liblzma: Clarify comment in block.h. + + src/liblzma/api/lzma/block.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 880adb5aa25f66a53d81c2f3acc716f7a4d373d1 +Author: Jia Tan +Date: 2023-02-03 00:07:23 +0800 + + liblzma: Improve documentation for block.h. - It has been enabled in FreeBSD for a while and reported to work fine. + 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. + + src/liblzma/api/lzma/block.h | 96 ++++++++++++++++++++++++++++++++++---------- + 1 file changed, 75 insertions(+), 21 deletions(-) + +commit b5b1b1f061c342271e4977ce5cba604a19c0ca52 +Author: Jia Tan +Date: 2023-02-01 23:38:30 +0800 + + liblzma: Clarify a comment about LZMA_STR_NO_VALIDATION. - Thanks to Xin Li. + 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. - INSTALL | 6 ------ - configure.ac | 8 ++++---- - 2 files changed, 4 insertions(+), 10 deletions(-) + src/liblzma/api/lzma/filter.h | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) -commit 00517d125cc26ecece0eebb84c1c3975cd19bee0 -Author: Lasse Collin -Date: 2019-12-31 22:41:45 +0200 +commit e904e778b82b14f2779aab80d6c8f3c01a3fc54b +Author: Jia Tan +Date: 2023-01-27 20:14:51 +0800 - Rename unaligned_read32ne to read32ne, and similarly for the others. + Translations: Add Brazilian Portuguese translation of man pages. + + Thanks to Rafael Fontenelle. - src/common/tuklib_integer.h | 64 +++++++++++++++---------------- - src/liblzma/common/alone_encoder.c | 2 +- - src/liblzma/common/block_header_decoder.c | 2 +- - src/liblzma/common/block_header_encoder.c | 2 +- - src/liblzma/common/memcmplen.h | 9 ++--- - src/liblzma/common/stream_flags_decoder.c | 6 +-- - src/liblzma/common/stream_flags_encoder.c | 8 ++-- - src/liblzma/lz/lz_encoder_hash.h | 2 +- - src/liblzma/lzma/lzma_decoder.c | 2 +- - src/liblzma/lzma/lzma_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder_private.h | 3 +- - src/liblzma/simple/simple_decoder.c | 2 +- - src/liblzma/simple/simple_encoder.c | 2 +- - tests/test_block_header.c | 4 +- - tests/test_stream_flags.c | 6 +-- - 15 files changed, 54 insertions(+), 62 deletions(-) + po4a/po4a.conf | 2 +- + po4a/pt_BR.po | 3677 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 3678 insertions(+), 1 deletion(-) -commit 52d89d8443c4a31a69c0701062f2c7711d82bbed -Author: Lasse Collin -Date: 2019-12-31 00:29:48 +0200 +commit e9c47e79c9584ba1126f5fa0dbe6c96e67411aa6 +Author: Jia Tan +Date: 2023-01-24 20:48:50 +0800 - Rename read32ne to aligned_read32ne, and similarly for the others. + liblzma: Fix documentation in filter.h for lzma_str_to_filters() - Using the aligned methods requires more care to ensure that - the address really is aligned, so it's nicer if the aligned - methods are prefixed. The next commit will remove the unaligned_ - prefix from the unaligned methods which in liblzma are used in - more places than the aligned ones. + 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. - src/common/tuklib_integer.h | 56 +++++++++++++++++++++--------------------- - src/liblzma/check/crc32_fast.c | 4 +-- - src/liblzma/check/crc64_fast.c | 4 +-- - 3 files changed, 32 insertions(+), 32 deletions(-) + src/liblzma/api/lzma/filter.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 850620468b57d49f16093e5870d1050886fcb37a -Author: Lasse Collin -Date: 2019-12-31 00:18:24 +0200 +commit 99575947a58a60416c570eb78038d18a1ea4cef4 +Author: Jia Tan +Date: 2023-01-07 21:55:06 +0800 - Revise tuklib_integer.h and .m4. + xz: Refactor duplicated check for custom suffix when using --format=raw + + src/xz/args.c | 8 ++++++++ + src/xz/suffix.c | 26 ++++++++------------------ + src/xz/suffix.h | 8 ++++++++ + 3 files changed, 24 insertions(+), 18 deletions(-) + +commit 76dec92fcca4a9ccd2063ed6d5d9e3474665baad +Author: Jia Tan +Date: 2023-01-20 21:53:14 +0800 + + liblzma: Set documentation on all reserved fields to private. - Add a configure option --enable-unsafe-type-punning to get the - old non-conforming memory access methods. It can be useful with - old compilers or in some other less typical situations but - shouldn't normally be used. + This prevents the reserved fields from being part of the generated + Doxygen documentation. + + src/liblzma/api/lzma/base.h | 17 +++++++++++++++ + src/liblzma/api/lzma/block.h | 43 +++++++++++++++++++++++++++++++++++++ + src/liblzma/api/lzma/container.h | 24 +++++++++++++++++++++ + src/liblzma/api/lzma/delta.h | 12 +++++++++++ + src/liblzma/api/lzma/index.h | 27 +++++++++++++++++++++++ + src/liblzma/api/lzma/lzma12.h | 22 +++++++++++++++++++ + src/liblzma/api/lzma/stream_flags.h | 28 ++++++++++++++++++++++++ + 7 files changed, 173 insertions(+) + +commit bd213d06ebf92cf42eeb97e7c578bddc857f8ea8 +Author: Jia Tan +Date: 2022-12-21 23:59:43 +0800 + + liblzma: Highlight liblzma API headers should not be included directly. - Omit the packed struct trick for unaligned access. While it's - best in some cases, this is simpler. If the memcpy trick doesn't - work, one can request unsafe type punning from configure. + This improves the generated Doxygen HTML files to better highlight + how to properly use the liblzma API header files. + + src/liblzma/api/lzma/base.h | 5 +++-- + src/liblzma/api/lzma/bcj.h | 5 +++-- + src/liblzma/api/lzma/block.h | 5 +++-- + src/liblzma/api/lzma/check.h | 5 +++-- + src/liblzma/api/lzma/container.h | 5 +++-- + src/liblzma/api/lzma/delta.h | 5 +++-- + src/liblzma/api/lzma/filter.h | 5 +++-- + src/liblzma/api/lzma/hardware.h | 5 +++-- + src/liblzma/api/lzma/index.h | 5 +++-- + src/liblzma/api/lzma/index_hash.h | 5 +++-- + src/liblzma/api/lzma/lzma12.h | 5 +++-- + src/liblzma/api/lzma/stream_flags.h | 5 +++-- + src/liblzma/api/lzma/version.h | 5 +++-- + src/liblzma/api/lzma/vli.h | 5 +++-- + 14 files changed, 42 insertions(+), 28 deletions(-) + +commit 257dbff0ba1a7bc45a74d203ece015c9f70c88cd +Author: Jia Tan +Date: 2023-01-19 20:35:09 +0800 + + tuklib_physmem: Silence warning from -Wcast-function-type on MinGW-w64. - Because CRC32/CRC64 code needs fast aligned reads, if no very - safe way to do it is found, type punning is used as a fallback. - This sucks but since it currently works in practice, it seems to - be the least bad option. It's never needed with GCC >= 4.7 or - Clang >= 3.6 since these support __builtin_assume_aligned and - thus fast aligned access can be done with the memcpy trick. + 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. + + src/common/tuklib_physmem.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit 720ad4a44282a7ee59aa9920eaf495d85d245d97 +Author: Jia Tan +Date: 2023-01-16 21:35:45 +0800 + + xz: Add missing comment for coder_set_compression_settings() + + src/xz/coder.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 88dc19163421282369c0989e997c05f9a447edc6 +Author: Jia Tan +Date: 2023-01-16 20:55:10 +0800 + + xz: Do not set compression settings with raw format in list mode. - Other things: - - Support GCC/Clang __builtin_bswapXX - - Cleaner bswap fallback macros - - Minor cleanups + 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. - m4/tuklib_integer.m4 | 43 ++++ - src/common/tuklib_integer.h | 488 ++++++++++++++++++++++++-------------------- - 2 files changed, 314 insertions(+), 217 deletions(-) + src/xz/args.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit a45badf0342666462cc6a7107a071418570ab773 +commit 039e0ab13efb144642f9d99eeeb9c668e76bb430 +Author: Jia Tan +Date: 2023-01-13 20:37:06 +0800 + + Translations: Update the Brazilian Portuguese translation. + + po/pt_BR.po | 603 ++++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 344 insertions(+), 259 deletions(-) + +commit 718f7a60e740b26b8353965edaaddc7d4deb4d85 Author: Lasse Collin -Date: 2019-12-29 22:51:58 +0200 +Date: 2023-01-12 13:04:05 +0200 - Tests: Hopefully fix test_check.c to work on EBCDIC systems. + Build: Omit -Wmissing-noreturn from the default warnings. - Thanks to Daniel Richard G. + 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. - tests/test_check.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) + configure.ac | 1 - + 1 file changed, 1 deletion(-) -commit c9a8071e6690a8db8a485c075920df254e7c70ea +commit 3ccedb09724c998c39d708c945f6da5852c39e13 Author: Lasse Collin -Date: 2019-09-24 23:02:40 +0300 +Date: 2023-01-12 06:05:58 +0200 - Scripts: Put /usr/xpg4/bin to the beginning of PATH on Solaris. + xz: Use ssize_t for the to-be-ignored return value from write(fd, ptr, 1). - This adds a configure option --enable-path-for-scripts=PREFIX - which defaults to empty except on Solaris it is /usr/xpg4/bin - to make POSIX grep and others available. The Solaris case had - been documented in INSTALL with a manual fix but it's better - to do this automatically since it is needed on most Solaris - systems anyway. - - Thanks to Daniel Richard G. + It makes no difference here as the return value fits into an int + too and it then gets ignored but this looks better. - INSTALL | 43 +++++++++++++++++++++++++++++++++++-------- - configure.ac | 26 ++++++++++++++++++++++++++ - src/scripts/xzdiff.in | 1 + - src/scripts/xzgrep.in | 1 + - src/scripts/xzless.in | 1 + - src/scripts/xzmore.in | 1 + - 6 files changed, 65 insertions(+), 8 deletions(-) + src/xz/file_io.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit aba140e2df3ff63ad124ae997de16d517b98ca50 +commit 09fbd2f0527def89e839c8907de4fe7ef6bc5019 Author: Lasse Collin -Date: 2019-07-12 18:57:43 +0300 +Date: 2023-01-12 06:01:12 +0200 - Fix comment typos in tuklib_mbstr* files. + xz: Silence warnings from -Wsign-conversion in a 32-bit build. - src/common/tuklib_mbstr.h | 2 +- - src/common/tuklib_mbstr_fw.c | 2 +- - src/common/tuklib_mbstr_width.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) + src/common/tuklib_mbstr_fw.c | 2 +- + src/xz/list.c | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) -commit 710f5bd769a5d2bd8684256c2727d15350ee2ab8 +commit 683d3f178ef1487b5418be49f331b0131a101b40 Author: Lasse Collin -Date: 2019-07-12 18:30:46 +0300 +Date: 2023-01-12 05:38:48 +0200 - Add missing include to tuklib_mbstr_width.c. + liblzma: Silence another warning from -Wsign-conversion in a 32-bit build. - It didn't matter in XZ Utils because sysdefs.h - includes string.h anyway. + 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. - src/common/tuklib_mbstr_width.c | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/lz/lz_encoder_mf.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit 0e491aa8cd72e0100cd15c1b9469cd57fae500b0 +commit 2b8062ef94a38d0f9ad0d1b309e8748db52f5c15 Author: Lasse Collin -Date: 2019-06-25 23:15:21 +0300 +Date: 2023-01-12 04:46:45 +0200 - liblzma: Fix a buggy comment. + liblzma: Silence a warning from -Wsign-conversion in a 32-bit build. - src/liblzma/lz/lz_encoder_mf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/common/mythread.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit bfc245569f340a75bd71ad32a6beba786712683b +commit b16b9c0d22227012518595c2222facc73bd833a8 Author: Lasse Collin -Date: 2019-06-25 00:16:06 +0300 +Date: 2023-01-12 04:17:24 +0200 - configure.ac: Fix a typo in a comment. + 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. - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + configure.ac | 36 +++++++++++++++++++++++++++++++----- + 1 file changed, 31 insertions(+), 5 deletions(-) -commit f18eee9d15a22c8449ef395a05f0eb637c4ad253 +commit c47ecd6d3909d0d3ff48dfd6e2ee41e7c7130b94 Author: Lasse Collin -Date: 2019-06-25 00:08:13 +0300 +Date: 2023-01-12 04:14:18 +0200 - Tests: Silence warnings from clang -Wassign-enum. + Tests: Fix warnings from clang --Wassign-enum. - Also changed 999 to 99 so it fits even if lzma_check happened - to be 8 bits wide. + 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. - tests/test_block_header.c | 3 ++- - tests/test_stream_flags.c | 2 +- - 2 files changed, 3 insertions(+), 2 deletions(-) + tests/test_block_header.c | 6 +++--- + tests/test_check.c | 2 +- + tests/test_stream_flags.c | 8 ++++---- + tests/tests.h | 9 +++++++++ + 4 files changed, 17 insertions(+), 8 deletions(-) -commit 25f74554723e8deabc66fed1abf0ec27a4ed19d5 +commit 34e13ce015232968731de2a9ec3440a08b0084b1 Author: Lasse Collin -Date: 2019-06-24 23:52:17 +0300 +Date: 2023-01-12 03:51:07 +0200 - liblzma: Add a comment. + 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. + tests/test_check.c | 6 +++--- + tests/test_stream_flags.c | 10 +++++----- + 2 files changed, 8 insertions(+), 8 deletions(-) + +commit 6671d0fe46b77f0fafce860836b7a12dc3cda14a +Author: Lasse Collin +Date: 2023-01-12 03:19:59 +0200 + + 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. + + src/liblzma/common/stream_decoder_mt.c | 8 +++++--- src/liblzma/common/stream_encoder_mt.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + 2 files changed, 6 insertions(+), 4 deletions(-) -commit 44eb961f2a51d02420d017bc5ff470360663650c +commit d3e833ca1d2abda54648494c33aca73a40a47efe Author: Lasse Collin -Date: 2019-06-24 23:45:21 +0300 +Date: 2023-01-12 03:11:40 +0200 - liblzma: Silence clang -Wmissing-variable-declarations. + Fix warnings from clang -Wdocumentation. - src/liblzma/check/crc32_table.c | 3 +++ - src/liblzma/check/crc64_table.c | 3 +++ - 2 files changed, 6 insertions(+) + src/liblzma/check/check.h | 4 ---- + src/liblzma/lz/lz_encoder_mf.c | 4 ++-- + src/xz/options.c | 4 ++-- + 3 files changed, 4 insertions(+), 8 deletions(-) -commit 267afcd9955e668c1532b069230c21c348eb4f82 +commit 977dd2e26bc50efec8d30fb90380394042d24558 Author: Lasse Collin -Date: 2019-06-24 22:57:43 +0300 +Date: 2023-01-12 03:04:28 +0200 - xz: Silence a warning from clang -Wsign-conversion in main.c. + Tests: test_lzip_decoder: Remove trailing white-space. - src/xz/main.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + tests/test_lzip_decoder.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 0e3c4002f809311ecef239b05e556d9c462b5703 +commit c55157ed7437ab14f2afb7fecf331e321f2edf9a Author: Lasse Collin -Date: 2019-06-24 22:47:39 +0300 +Date: 2023-01-12 03:03:55 +0200 - liblzma: Remove incorrect uses of lzma_attribute((__unused__)). - - Caught by clang -Wused-but-marked-unused. + Tests: test_lzip_decoder: Silence warnings from -Wsign-conversion. - src/liblzma/common/alone_decoder.c | 3 +-- - src/liblzma/common/alone_encoder.c | 3 +-- - src/liblzma/lz/lz_decoder.c | 3 +-- - 3 files changed, 3 insertions(+), 6 deletions(-) + tests/test_lzip_decoder.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) -commit cb708e8fa3405ec13a0ebfebbbf2793f927deab1 +commit 18b845e69752c975dfeda418ec00eda22605c2ee Author: Lasse Collin -Date: 2019-06-24 20:53:55 +0300 +Date: 2023-01-11 18:52:54 +0200 - Tests: Silence a warning from -Wsign-conversion. + Bump version and soname for 5.4.1. - tests/create_compress_files.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit c8cace3d6e965c0fb537591372bf71b9357dd76c +commit 4080bbb844fb36701ffb978f0c41ea2c2c9f8960 +Author: Jia Tan +Date: 2023-01-11 23:58:16 +0800 + + Add NEWS for 5.4.1. + + NEWS | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 70 insertions(+) + +commit 674c89fdb8c457ebc3a0652e235d8b6cd7b7dee2 Author: Lasse Collin -Date: 2019-06-24 20:45:49 +0300 +Date: 2023-01-10 11:56:11 +0200 - xz: Fix an integer overflow with 32-bit off_t. + sysdefs.h: Don't include strings.h anymore. - Or any off_t which isn't very big (like signed 64 bit integer - that most system have). A small off_t could overflow if the - file being decompressed had long enough run of zero bytes, - which would result in corrupt output. + On some platforms src/xz/suffix.c may need 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 , + there should be no need to include in sysdefs.h. - src/xz/file_io.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) + src/common/sysdefs.h | 6 ------ + 1 file changed, 6 deletions(-) -commit 65a42741e290fbcd85dfc5db8a62c4bce5f7712c +commit 2a6b938084fac9ddb39cd69c9beeed15c3b6f6f6 Author: Lasse Collin -Date: 2019-06-24 00:57:23 +0300 +Date: 2023-01-10 11:23:41 +0200 - Tests: Remove a duplicate branch from tests/tests.h. + xz: Include in suffix.c if needed for strcasecmp(). - The duplication was introduced about eleven years ago and - should have been cleaned up back then already. + SUSv2 and POSIX.1‐2017 declare only a few functions in . + Of these, strcasecmp() is used on some platforms in suffix.c. + Nothing else in the project needs (at least if + building on a modern system). - This was caught by -Wduplicated-branches. + sysdefs.h currently includes 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 in DJGPP. - tests/tests.h | 9 ++------- - 1 file changed, 2 insertions(+), 7 deletions(-) + src/xz/suffix.c | 3 +++ + 1 file changed, 3 insertions(+) -commit 5c4fb60e8df026e933afab0cfe0a8b55be20036c +commit aea639e81beb548e3114c74b6d9a894d6e036189 +Author: Jia Tan +Date: 2023-01-11 22:46:48 +0800 + + 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. + + src/xz/message.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit e3b42bfcb0f67988beee7c7022fed0361282be45 +Author: Jia Tan +Date: 2023-01-11 20:58:31 +0800 + + Tests: Fix test_filter_flags copy/paste error. + + tests/test_filter_flags.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 21625b7e11d004788e40eb5eb88d9d89f65fe347 +Author: Jia Tan +Date: 2023-01-11 20:42:29 +0800 + + 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. + + tests/test_filter_flags.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +commit c337983e928682d56ce3470b286a8d5b8646e0ad Author: Lasse Collin -Date: 2019-06-23 23:22:45 +0300 +Date: 2023-01-10 22:14:03 +0200 - tuklib_mbstr_width: Fix a warning from -Wsign-conversion. + 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. - src/common/tuklib_mbstr_width.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/check/crc64_fast.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) -commit 37df03ce52ce53710e1513387648763f8a744154 +commit b7fb438ea0e3ee02e3a164f3b72fae456cbe34d7 +Author: Jia Tan +Date: 2023-01-11 01:18:50 +0800 + + 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. + + tests/test_block_header.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 68e9ef036d18d7c3952bff0b391d5989b86934da +Author: Jia Tan +Date: 2023-01-11 01:08:03 +0800 + + 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. + + tests/test_index_hash.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit a387707cd8cdefbffb5b7429bda4b7fcc192954a Author: Lasse Collin -Date: 2019-06-23 23:19:34 +0300 +Date: 2023-01-10 00:33:14 +0200 - xz: Fix some of the warnings from -Wsign-conversion. + Windows: Update INSTALL-MSVC.txt to recommend CMake over project files. - src/xz/args.c | 4 ++-- - src/xz/coder.c | 4 ++-- - src/xz/file_io.c | 5 +++-- - src/xz/message.c | 4 ++-- - src/xz/mytime.c | 4 ++-- - src/xz/options.c | 2 +- - src/xz/util.c | 4 ++-- - 7 files changed, 14 insertions(+), 13 deletions(-) + windows/INSTALL-MSVC.txt | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) -commit 7c65ae0f5f2e2431f88621e8fe6d1dc7907e30c1 +commit 52902ad69518255a14b0144f0a2379e06fde5b6e Author: Lasse Collin -Date: 2019-06-23 22:27:45 +0300 +Date: 2023-01-10 12:47:16 +0200 - tuklib_cpucores: Silence warnings from -Wsign-conversion. + 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. - src/common/tuklib_cpucores.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) + src/liblzma/check/crc64_fast.c | 6 ------ + 1 file changed, 6 deletions(-) -commit a502dd1d000b598406637d452f535f4bbd43e2a4 +commit e81b9fc48ca70f9228308d3f1871cd81f9a5a496 Author: Lasse Collin -Date: 2019-06-23 21:40:47 +0300 +Date: 2023-01-10 10:05:13 +0200 - xzdec: Fix warnings from -Wsign-conversion. + sysdefs.h: Fix a comment. - src/xzdec/xzdec.c | 2 +- + src/common/sysdefs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit a45d1a5374ceb22e23255b0b595b9e641e9860af +commit 6e89ab58b031aa046308a0b3504ff0a5be042571 Author: Lasse Collin -Date: 2019-06-23 21:38:56 +0300 +Date: 2023-01-10 10:04:06 +0200 - liblzma: Fix warnings from -Wsign-conversion. + sysdefs.h: Don't include memory.h anymore even if it were available. - Also, more parentheses were added to the literal_subcoder - macro in lzma_comon.h (better style but no functional change - in the current usage). + 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. - src/liblzma/common/block_header_decoder.c | 2 +- - src/liblzma/delta/delta_decoder.c | 2 +- - src/liblzma/lzma/fastpos.h | 2 +- - src/liblzma/lzma/lzma2_decoder.c | 8 ++++---- - src/liblzma/lzma/lzma_common.h | 3 ++- - src/liblzma/lzma/lzma_decoder.c | 16 ++++++++-------- - src/liblzma/simple/arm.c | 6 +++--- - src/liblzma/simple/armthumb.c | 8 ++++---- - src/liblzma/simple/ia64.c | 2 +- - src/liblzma/simple/powerpc.c | 9 +++++---- - src/liblzma/simple/x86.c | 2 +- - 11 files changed, 31 insertions(+), 29 deletions(-) + src/common/sysdefs.h | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) -commit 4ff87ddf80ed7cb233444cddd86ab1940b5b55ec +commit 65c59ad429aa59f9df0326d9fc82931ba4a9d123 Author: Lasse Collin -Date: 2019-06-23 19:33:55 +0300 +Date: 2023-01-10 08:50:26 +0200 - tuklib_integer: Silence warnings from -Wsign-conversion. + 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. - src/common/tuklib_integer.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + CMakeLists.txt | 32 +++++++++++++++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) -commit ed1a9d33984a3a37ae9a775a46859850d98ea4d0 +commit 43521e77acc907863fa4f94aae276366172cb9ee Author: Lasse Collin -Date: 2019-06-20 19:40:30 +0300 +Date: 2023-01-06 22:53:38 +0200 - tuklib_integer: Fix usage of conv macros. + Tests: test_filter_flags: Clean up minor issues. - Use a temporary variable instead of e.g. - conv32le(unaligned_read32ne(buf)) because the macro can - evaluate its argument multiple times. + 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 - src/common/tuklib_integer.h | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) + tests/test_filter_flags.c | 153 +++++++++++++++++++++++----------------------- + 1 file changed, 78 insertions(+), 75 deletions(-) -commit 612c88dfc08e2c572623954ecfde541d21c84882 -Author: Lasse Collin -Date: 2019-06-03 20:44:19 +0300 +commit 6b44cead95d767414272dc3a67898a36bfdf95b3 +Author: Jia Tan +Date: 2022-12-29 23:33:33 +0800 - Update THANKS. + Tests: Refactors existing filter flags tests. + + Converts the existing filter flags tests into tuktests. - THANKS | 1 + - 1 file changed, 1 insertion(+) + tests/test_filter_flags.c | 655 ++++++++++++++++++++++++++++++++-------------- + 1 file changed, 457 insertions(+), 198 deletions(-) -commit 85da31d8b882b8b9671ab3e3d74d88bd945cd0bb +commit 1bbefa9659b202ba31bd244a9d0e4f0d37ff3ed7 Author: Lasse Collin -Date: 2019-06-03 20:41:54 +0300 +Date: 2023-01-08 00:32:29 +0200 - liblzma: Fix comments. + Tests: tuktest.h: Support tuktest_malloc(0). - Thanks to Bruce Stark. + 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. - src/liblzma/common/alone_encoder.c | 4 ++-- - src/liblzma/common/block_util.c | 2 +- - src/liblzma/common/common.c | 2 +- - src/liblzma/common/filter_common.h | 2 +- - src/liblzma/common/filter_decoder.h | 2 +- - src/liblzma/common/filter_flags_encoder.c | 2 +- - 6 files changed, 7 insertions(+), 7 deletions(-) + tests/tuktest.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 6a73a7889587aa394e236c7e9e4f870b44851036 +commit ce3a3fbc7c2c399aeed644d54f3bd56ac914dfee Author: Lasse Collin -Date: 2019-06-02 00:50:59 +0300 +Date: 2023-01-07 21:57:11 +0200 - liblzma: Fix one more unaligned read to use unaligned_read16ne(). + 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. - src/liblzma/lz/lz_encoder_hash.h | 2 +- + CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit ce59b34ec9ac344d62a57cad5f94f695f42cdaee +commit 99fcd57f2ea35eaa94e09f674d5364329c880fa2 Author: Lasse Collin -Date: 2019-06-01 21:41:55 +0300 +Date: 2023-01-08 00:24:23 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 94aa3fb568fe41dd4925a961966ed5cf8213bd1f +commit c0c13d9d82eb8a4302c8bbb8b4c5178d285fe9ab Author: Lasse Collin -Date: 2019-06-01 21:36:13 +0300 +Date: 2023-01-07 19:50:35 +0200 - liblzma: memcmplen: Use ctz32() from tuklib_integer.h. - - The same compiler-specific #ifdefs are already in tuklib_integer.h + Update THANKS. - src/liblzma/common/memcmplen.h | 10 +--------- - 1 file changed, 1 insertion(+), 9 deletions(-) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 412791486dfb430219d8e30bcbebbfc57a99484a +commit 3d45987451b1c3bb42697b29341824c0e5484cba Author: Lasse Collin -Date: 2019-06-01 21:30:03 +0300 +Date: 2023-01-09 11:27:24 +0200 - tuklib_integer: Cleanup MSVC-specific code. + CMake: Fix a copypaste error in xzdec Windows resource file handling. + + It was my mistake. Thanks to Iouri Kharon for the bug report. - src/common/tuklib_integer.h | 20 +++++++++----------- - 1 file changed, 9 insertions(+), 11 deletions(-) + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit efbf6e5f0932e6c1a4250f91ee99059f449f2470 +commit 706bce5018d7cf83094e13454a0731169ec119b5 Author: Lasse Collin -Date: 2019-06-01 19:01:21 +0300 +Date: 2023-01-07 19:50:03 +0200 - liblzma: Use unaligned_readXXne functions instead of type punning. + CMake/Windows: Add resource files to xz.exe and xzdec.exe. - Now gcc -fsanitize=undefined should be clean. + The command line tools cannot be built with MSVC for now but + they can be built with MinGW-w64. - Thanks to Jeffrey Walton. + Thanks to Iouri Kharon for the bug report and the original patch. - src/liblzma/common/memcmplen.h | 12 ++++++------ - src/liblzma/lzma/lzma_encoder_private.h | 2 +- - 2 files changed, 7 insertions(+), 7 deletions(-) + CMakeLists.txt | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) -commit 29afef03486d461c23f57150ac5436684bff7811 +commit e96dee55df04113c33b387ccdb6cb70935422d91 Author: Lasse Collin -Date: 2019-06-01 18:41:16 +0300 +Date: 2023-01-09 12:22:05 +0200 - tuklib_integer: Improve unaligned memory access. + liblzma: CLMUL CRC64: Workaround a bug in MSVC (VS2015-2022). - Now memcpy() or GNU C packed structs for unaligned access instead - of type punning. See the comment in this commit for details. + 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. - Avoiding type punning with unaligned access is needed to - silence gcc -fsanitize=undefined. - - New functions: unaliged_readXXne and unaligned_writeXXne where - XX is 16, 32, or 64. + Thanks to Iouri Kharon for the bug report and the patch. - src/common/tuklib_integer.h | 180 +++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 168 insertions(+), 12 deletions(-) + src/liblzma/check/crc64_fast.c | 6 ++++++ + 1 file changed, 6 insertions(+) -commit 596ed3de4485a4b1d83b5fe506ae9d0a172139b4 +commit 52bc1ee34dda9bb6fb40175e5952863066681b77 Author: Lasse Collin -Date: 2019-05-13 20:05:17 +0300 +Date: 2023-01-07 19:31:15 +0200 - liblzma: Avoid memcpy(NULL, foo, 0) because it is undefined behavior. + Build: Require that _mm_set_epi64x() is usable to enable CLMUL support. - I should have always known this but I didn't. Here is an example - as a reminder to myself: + VS2013 doesn't have _mm_set_epi64x() so this way CLMUL gets + disabled with VS2013. - int mycopy(void *dest, void *src, size_t n) - { - memcpy(dest, src, n); - return dest == NULL; - } + Thanks to Iouri Kharon for the bug report. + + CMakeLists.txt | 3 ++- + configure.ac | 8 ++++++-- + 2 files changed, 8 insertions(+), 3 deletions(-) + +commit bad44cfe19e8be8ae76755369be2a34abcd2b4fa +Author: Jia Tan +Date: 2022-12-29 00:25:18 +0800 + + Tests: Creates test_index_hash.c - In the example, a compiler may assume that dest != NULL because - passing NULL to memcpy() would be undefined behavior. Testing - with GCC 8.2.1, mycopy(NULL, NULL, 0) returns 1 with -O0 and -O1. - With -O2 the return value is 0 because the compiler infers that - dest cannot be NULL because it was already used with memcpy() - and thus the test for NULL gets optimized out. + Tests all API functions exported from index_hash.h. Does not have a + dedicated test for lzma_index_hash_end. - In liblzma, if a null-pointer was passed to memcpy(), there were - no checks for NULL *after* the memcpy() call, so I cautiously - suspect that it shouldn't have caused bad behavior in practice, - but it's hard to be sure, and the problematic cases had to be - fixed anyway. - - Thanks to Jeffrey Walton. + [Minor edits were made by Lasse Collin.] - src/liblzma/common/common.c | 6 +++++- - src/liblzma/lz/lz_decoder.c | 12 +++++++++--- - src/liblzma/simple/simple_coder.c | 10 +++++++++- - 3 files changed, 23 insertions(+), 5 deletions(-) + .gitignore | 1 + + CMakeLists.txt | 2 + + tests/Makefile.am | 3 + + tests/test_index_hash.c | 388 ++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 394 insertions(+) -commit b4b83555c576e1d845a2b98a193b23c021437804 -Author: Lasse Collin -Date: 2019-05-11 20:56:08 +0300 +commit 692ccdf5516dfe55fb6e9c5cdfb31f4c02c1ecd1 +Author: Jia Tan +Date: 2023-01-05 20:57:25 +0800 - Update THANKS. + 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. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/common/index.c | 1 + + src/liblzma/common/index.h | 9 +++++++-- + src/liblzma/common/index_decoder.h | 1 + + src/liblzma/common/stream_buffer_encoder.c | 1 + + 4 files changed, 10 insertions(+), 2 deletions(-) -commit 8d4906262b45557ed164cd74adb270e6ef7f6f03 -Author: Lasse Collin -Date: 2019-05-11 20:54:12 +0300 +commit 2ac7bafc8f07c1edefe96a4a7a040ddfff0eb5bb +Author: Jia Tan +Date: 2022-08-17 20:20:16 +0800 - xz: Update xz man page date. + liblzma: Add NULL check to lzma_index_hash_append. + + This is for consistency with lzma_index_append. - src/xz/xz.1 | 2 +- + src/liblzma/common/index_hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 0d318402f8a022f707622c72f8f1894ea476cf89 -Author: Antoine Cœur -Date: 2019-05-08 13:30:57 +0800 +commit db714d30e0c74d1dd4af1a23ed62b44e0e8e4efc +Author: Jia Tan +Date: 2022-08-17 17:59:51 +0800 - spelling + liblzma: Replaced hardcoded 0x0 index indicator byte with macro - Doxyfile.in | 2 +- - NEWS | 2 +- - src/liblzma/api/lzma/block.h | 2 +- - src/liblzma/api/lzma/hardware.h | 2 +- - src/liblzma/api/lzma/lzma12.h | 2 +- - src/liblzma/api/lzma/vli.h | 2 +- - src/liblzma/common/hardware_physmem.c | 2 +- - src/liblzma/common/index.c | 4 ++-- - src/liblzma/common/stream_encoder_mt.c | 2 +- - src/liblzma/common/vli_decoder.c | 2 +- - src/liblzma/lz/lz_decoder.c | 2 +- - src/scripts/xzgrep.in | 2 +- - src/xz/args.c | 2 +- - src/xz/coder.c | 4 ++-- - src/xz/main.c | 2 +- - src/xz/mytime.h | 2 +- - src/xz/private.h | 2 +- - src/xz/xz.1 | 2 +- - windows/build.bash | 2 +- - 19 files changed, 21 insertions(+), 21 deletions(-) + src/liblzma/common/index.h | 3 +++ + src/liblzma/common/index_decoder.c | 2 +- + src/liblzma/common/index_encoder.c | 2 +- + src/liblzma/common/index_hash.c | 2 +- + src/liblzma/common/stream_decoder.c | 3 ++- + src/liblzma/common/stream_decoder_mt.c | 2 +- + 6 files changed, 9 insertions(+), 5 deletions(-) -commit aeb3be8ac4c4b06a745c3799b80b38159fb78b1a -Author: Lasse Collin -Date: 2019-03-04 22:49:04 +0200 +commit 39d2585dcd3e827cfc3c46025ab6708c4aeb36c6 +Author: Jia Tan +Date: 2023-01-06 20:43:31 +0800 - README: Update translation instructions. + Style: Change #if !defined() to #ifndef in mythread.h. + + src/common/mythread.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3f0130aa288e4ed57ace609517db9700a41223af +Author: Jia Tan +Date: 2023-01-06 20:35:55 +0800 + + Build: Add missing stream_decoder_mt.c to .vcxproj files. - XZ Utils is now part of the Translation Project - . + The line in the .vcxproj files for building with was missing in 5.4.0. + Thank to Hajin Jang for reporting the issue. - README | 32 +++++++++++++------------------- - 1 file changed, 13 insertions(+), 19 deletions(-) + windows/vs2013/liblzma.vcxproj | 1 + + windows/vs2013/liblzma_dll.vcxproj | 1 + + windows/vs2017/liblzma.vcxproj | 1 + + windows/vs2017/liblzma_dll.vcxproj | 1 + + windows/vs2019/liblzma.vcxproj | 1 + + windows/vs2019/liblzma_dll.vcxproj | 1 + + 6 files changed, 6 insertions(+) -commit 0c238dc3feb0a3eea1e713feb8d338c8dfba9f74 +commit f204d1050a515d17851eed9049862ce5a9c729c1 Author: Lasse Collin -Date: 2018-12-20 20:42:29 +0200 +Date: 2023-01-04 22:40:54 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 3ca432d9cce4bf7e793de173dd22025b68611c42 +commit 34a9c2d650d6c30bd88e1b21910dd863209aa884 Author: Lasse Collin -Date: 2018-12-14 20:34:30 +0200 +Date: 2023-01-04 18:40:28 +0200 - xz: Fix a crash in progress indicator when in passthru mode. + Tests: Adjust style in test_compress.sh. + + tests/test_compress.sh | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit 761c208d58e0c3daa0f46e68b406adfc318d2a46 +Author: Jia Tan +Date: 2023-01-04 23:58:58 +0800 + + Tests: Replace non portable shell parameter expansion - "xz -dcfv not_an_xz_file" crashed (all four options are - required to trigger it). It caused xz to call - lzma_get_progress(&strm, ...) when no coder was initialized - in strm. In this situation strm.internal is NULL which leads - to a crash in lzma_get_progress(). + 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. + + tests/create_compress_files.c | 2 +- + tests/test_compress.sh | 20 +++++++++++++------- + tests/test_compress_prepared_bcj_sparc | 2 +- + tests/test_compress_prepared_bcj_x86 | 2 +- + 4 files changed, 16 insertions(+), 10 deletions(-) + +commit 8a7cbc074547e55e57f4f3696f69bedeb05e14c4 +Author: Jia Tan +Date: 2023-01-03 21:02:38 +0800 + + Translations: Add Korean translation of man pages. - The bug was introduced when xz started using lzma_get_progress() - to get progress info for multi-threaded compression, so the - bug is present in versions 5.1.3alpha and higher. - - Thanks to Filip Palian for - the bug report. + Thanks to Seong-ho Cho - src/xz/coder.c | 11 +++++++---- - src/xz/message.c | 18 ++++++++++++++++-- - src/xz/message.h | 3 ++- - 3 files changed, 25 insertions(+), 7 deletions(-) + po4a/ko.po | 5552 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po4a/po4a.conf | 2 +- + 2 files changed, 5553 insertions(+), 1 deletion(-) -commit fcc419e3c3f77a8b6fc5056a86b1b8abbe266e62 -Author: Lasse Collin -Date: 2018-11-22 17:20:31 +0200 +commit ca2af49bb8be5995eb0e6a3abf457622626d49a7 +Author: Jia Tan +Date: 2023-01-03 20:47:27 +0800 - xz: Update man page timestamp. + Translations: Update the Esperanto translation. - src/xz/xz.1 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + po/eo.po | 620 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 332 insertions(+), 288 deletions(-) -commit 5a2fc3cd0194e55df329dd29f805299aaca5f32f -Author: Pavel Raiskup -Date: 2018-11-22 15:14:34 +0100 +commit bfba3394aed03311fe9a746d3141b2e16d8b9325 +Author: Lasse Collin +Date: 2023-01-02 17:05:07 +0200 - 'have have' typos + Build: Fix config.h comments. - src/xz/signals.c | 2 +- - src/xz/xz.1 | 2 +- + configure.ac | 2 +- + m4/tuklib_progname.m4 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -commit 7143b04fe49390807f355b1dad686a3d8c4dbdcf +commit 507648ad114c2ae0cd6d181063e1ac07e8106718 +Author: Jia Tan +Date: 2023-01-02 22:33:48 +0800 + + 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. + + cmake/tuklib_progname.cmake | 5 ++--- + m4/tuklib_progname.m4 | 5 ++++- + src/common/tuklib_progname.c | 2 +- + src/common/tuklib_progname.h | 2 +- + 4 files changed, 8 insertions(+), 6 deletions(-) + +commit ab5229d32adfec1f3fbc95228d9dd6f560732ab5 Author: Lasse Collin -Date: 2018-07-27 18:10:44 +0300 +Date: 2022-12-30 20:10:08 +0200 - xzless: Rename unused variables to silence static analysers. + Tests: test_check: Test corner cases of CLMUL CRC64. + + tests/test_check.c | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit 8791826f31733fda0a13b411c2ed930faaeb25aa +Author: Lasse Collin +Date: 2022-12-30 19:36:49 +0200 + + Tests: Clarify a comment in test_lzip_decoder.c. + + tests/test_lzip_decoder.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit c410d812ea12bfc74f6b727c1a799478c79f19ca +Author: Jia Tan +Date: 2022-12-29 01:55:19 +0800 + + xz: Includes and conditionally in mytime.c. - In this particular case I don't see this affecting readability - of the code. + Previously, mytime.c depended on mythread.h for to be included. + + src/xz/mytime.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 501c6013d4a59fae5d4368e9657c4885493db809 +Author: Jia Tan +Date: 2022-12-29 01:15:27 +0800 + + liblzma: Includes sys/time.h conditionally in mythread - Thanks to Pavel Raiskup. + Previously, was always included, even if mythread only used + clock_gettime. is still needed even if clock_gettime is not used + though because struct timespec is needed for mythread_condtime. - src/scripts/xzless.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/common/mythread.h | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) -commit 273c33297bb69621045ed19665eaf8338bcf4a50 -Author: Lasse Collin -Date: 2018-07-27 16:02:58 +0300 +commit 9e3cb514b5b95bd235dcdff3db4436f57444ee4f +Author: Jia Tan +Date: 2022-12-29 01:10:53 +0800 - liblzma: Remove an always-true condition from lzma_index_cat(). + Build: No longer require HAVE_DECL_CLOCK_MONOTONIC to always be set. - This should help static analysis tools to see that newg - isn't leaked. + 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. + + CMakeLists.txt | 8 +++----- + configure.ac | 5 ++++- + src/common/mythread.h | 4 ++-- + src/xz/mytime.c | 5 ++--- + 4 files changed, 11 insertions(+), 11 deletions(-) + +commit 6fc3e5467911572fa9af4021ea46396261aae796 +Author: Jia Tan +Date: 2022-12-28 01:14:07 +0800 + + Translations: Add Ukrainian translations of man pages. - Thanks to Pavel Raiskup. + Thanks to Yuri Chornoivan - src/liblzma/common/index.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + po4a/po4a.conf | 2 +- + po4a/uk.po | 3676 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 3677 insertions(+), 1 deletion(-) -commit 65b4aba6d06d2cd24ba9ad01fa389c238ad8f352 -Author: Lasse Collin -Date: 2018-05-19 21:23:25 +0300 +commit e84f2ab7f8bc38cd8f8befa0bb398656c3c11f8e +Author: Jia Tan +Date: 2022-12-22 23:14:53 +0800 - liblzma: Improve lzma_properties_decode() API documentation. + liblzma: Update documentation for lzma_filter_encoder. - src/liblzma/api/lzma/filter.h | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) + src/liblzma/common/filter_encoder.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) -commit 531e78e5a253a3e2c4d4dd1505acaccee48f4083 -Author: Lasse Collin -Date: 2019-05-01 16:52:36 +0300 +commit b14b8dbba9a3b232787ae218b46430b9246383dd +Author: Jia Tan +Date: 2022-12-21 21:12:03 +0800 - Update THANKS. + Tests: Adds lzip decoder tests - THANKS | 1 + - 1 file changed, 1 insertion(+) + .gitignore | 1 + + tests/Makefile.am | 2 + + tests/test_lzip_decoder.c | 471 ++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 474 insertions(+) -commit 905de7e93528ca5a47039e7e1e5270163f9fc67e -Author: Lasse Collin -Date: 2019-05-01 16:43:16 +0300 +commit 09a114805e1d4f9a02a06cee7dbf2f5014d1f710 +Author: Jia Cheong Tan +Date: 2022-12-20 22:05:21 +0800 - Windows: Update VS version in windows/vs2019/config.h. + Doxygen: Update .gitignore for generating docs for in source build. + + In source builds are not recommended, but we should still ignore + the generated artifacts. - windows/vs2019/config.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .gitignore | 2 ++ + 1 file changed, 2 insertions(+) -commit 0ffd30e172fd18cc619823b2a86448bf56a67e22 -Author: Julien Marrec -Date: 2019-04-25 17:44:06 +0200 +commit d3e6fe44196bf9478ad193522e2b48febf2eca6b +Author: Jia Tan +Date: 2022-12-20 20:46:44 +0800 - Windows: Upgrade solution itself + 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. - windows/vs2019/xz_win.sln | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) + src/liblzma/common/microlzma_encoder.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit c2ef96685fc7ca36311649eeb2284b9808292040 -Author: Julien Marrec -Date: 2019-04-25 17:40:24 +0200 +commit b55a27b46f52524a4a8d9cdef03e6689cefc1375 +Author: Lasse Collin +Date: 2022-12-16 18:30:02 +0200 - Windows: Upgrade solution with VS2019 + liblzma: Update authors list in arm64.c. - windows/vs2019/liblzma.vcxproj | 15 ++++++++------- - windows/vs2019/liblzma_dll.vcxproj | 15 ++++++++------- - 2 files changed, 16 insertions(+), 14 deletions(-) + src/liblzma/simple/arm64.c | 1 + + 1 file changed, 1 insertion(+) -commit 25fccaf00bea399d8aa026e5b8fa254ce196e6e0 -Author: Julien Marrec -Date: 2019-04-25 17:39:32 +0200 +commit 2fd28d2b7cec3468324a6f15eff7e73c285b1d7d +Author: Jia Tan +Date: 2022-12-16 20:58:55 +0800 - Windows: Duplicate windows/vs2017 before upgrading + 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. - windows/vs2019/config.h | 148 ++++++++++++++ - windows/vs2019/liblzma.vcxproj | 354 ++++++++++++++++++++++++++++++++++ - windows/vs2019/liblzma_dll.vcxproj | 383 +++++++++++++++++++++++++++++++++++++ - windows/vs2019/xz_win.sln | 48 +++++ - 4 files changed, 933 insertions(+) + .gitignore | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) -commit 1424078d6328291c7c524b64328ce9660617cb24 +commit b69da6d4bb6bb11fc0cf066920791990d2b22a06 Author: Lasse Collin -Date: 2019-01-13 17:29:23 +0200 +Date: 2022-12-13 20:37:17 +0200 - Windows/VS2017: Omit WindowsTargetPlatformVersion from project files. + Bump version to 5.4.0 and soname to 5.4.0. + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 6 +++--- + src/liblzma/liblzma_generic.map | 2 +- + src/liblzma/liblzma_linux.map | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 20869eb3fb280ff4f271ef527b12b6bf68b05e19 +Author: Lasse Collin +Date: 2022-12-13 20:29:39 +0200 + + Update INSTALL: CMake on Windows isn't experimental anymore. - I understood that if a WTPV is specified, it's often wrong - because different VS installations have different SDK version - installed. Omitting the WTPV tag makes VS2017 default to - Windows SDK 8.1 which often is also missing, so in any case - people may need to specify the WTPV before building. But some - day in the future a missing WTPV tag will start to default to - the latest installed SDK which sounds reasonable: + Using CMake to build liblzma should work on a few other OSes + but building the command line tools is still subtly broken. - https://developercommunity.visualstudio.com/content/problem/140294/windowstargetplatformversion-makes-it-impossible-t.html - - Thanks to "dom". + It is known that shared library versioning may differ between + CMake and Libtool builds on some OSes, most notably Darwin. - windows/INSTALL-MSVC.txt | 4 ++++ - windows/vs2017/liblzma.vcxproj | 1 - - windows/vs2017/liblzma_dll.vcxproj | 1 - - 3 files changed, 4 insertions(+), 2 deletions(-) + INSTALL | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) -commit b5be61cc06088bb07f488f9baf7d447ff47b37c1 +commit cbbd84451944e3e8c63acfaa3c923f6d8aff7852 Author: Lasse Collin -Date: 2018-04-29 19:00:06 +0300 +Date: 2022-12-13 19:47:53 +0200 - Bump version and soname for 5.2.4. + Add NEWS for 5.4.0. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + NEWS | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 202 insertions(+) -commit c47fa6d06745bb2e99866e76b81ac7a9c5a8bfec +commit c3e94d37e8d10a3e96019864b6f5d7b578db2c14 Author: Lasse Collin -Date: 2018-04-29 18:48:00 +0300 +Date: 2022-12-13 17:41:20 +0200 - extra/scanlzma: Fix compiler warnings. + Fix a typo in NEWS. - extra/scanlzma/scanlzma.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + NEWS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 7b350fe21aa4fd6495a3b6188a40e3f1ae7c0edf +commit 0d2a2e0a545c3da2b3e9500f1e531eb903087245 Author: Lasse Collin -Date: 2018-04-29 18:15:37 +0300 +Date: 2022-12-13 17:41:03 +0200 - Add NEWS for 5.2.4. + Add NEWS for 5.2.10. - NEWS | 27 +++++++++++++++++++++++++++ - 1 file changed, 27 insertions(+) + NEWS | 12 ++++++++++++ + 1 file changed, 12 insertions(+) -commit 5801591162a280aa52d156dfde42c531ec7fd8b6 +commit 177ece1c8eb007188fb1b04eff09ca2193fbdea6 Author: Lasse Collin -Date: 2018-02-06 19:36:30 +0200 +Date: 2022-12-13 12:30:45 +0200 - Update THANKS. + Tests: Fix a typo in tests/files/README. - THANKS | 2 ++ - 1 file changed, 2 insertions(+) + tests/files/README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit c4a616f4536146f8906e1b4412eefeec07b28fae -Author: Ben Boeckel -Date: 2018-01-29 13:58:18 -0500 +commit 60f45bdbaa6b07558b3f4baac285739b0c6342f5 +Author: Lasse Collin +Date: 2022-12-13 12:30:09 +0200 - nothrow: use noexcept for C++11 and newer - - In C++11, the `throw()` specifier is deprecated and `noexcept` is - preffered instead. + Tests: Add two ARM64 test files. - src/liblzma/api/lzma.h | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + tests/files/README | 7 +++++++ + tests/files/good-1-arm64-lzma2-1.xz | Bin 0 -> 512 bytes + tests/files/good-1-arm64-lzma2-2.xz | Bin 0 -> 488 bytes + tests/test_files.sh | 5 +++++ + 4 files changed, 12 insertions(+) -commit 0b8947782ff3c5ef830a7f85412e44dcf3cdeb77 +commit f5e419550619c548c7c35d7e367cf00580a56521 Author: Lasse Collin -Date: 2018-02-06 18:02:48 +0200 +Date: 2022-12-12 22:44:21 +0200 - liblzma: Remove incorrect #ifdef from range_common.h. - - In most cases it was harmless but it could affect some - custom build systems. - - Thanks to Pippijn van Steenhoven. + Translations: Update the Catalan translation. - src/liblzma/rangecoder/range_common.h | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) + po/ca.po | 657 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 306 insertions(+), 351 deletions(-) -commit 48f3b9f73ffea7f55d5678997aba0e79d2e82168 +commit 0fb9d355da3789b1757040af475b4e6bbc8b8af8 Author: Lasse Collin -Date: 2018-01-10 22:10:39 +0200 +Date: 2022-12-12 19:18:12 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit a3ce3e902342be37c626a561ce3d9ffcf27d0f94 +commit e5b6c161c61a37c54dcb76a99bbb83ac4abe02dc Author: Lasse Collin -Date: 2018-01-10 21:54:27 +0200 +Date: 2022-12-12 19:07:58 +0200 - tuklib_integer: New Intel C compiler needs immintrin.h. + Update AUTHORS. + + AUTHORS | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit f2d98e691099d82054d5f3071ef6f5e809932e44 +Author: Lasse Collin +Date: 2022-12-12 15:31:14 +0200 + + Docs: Omit multi-threaded decompress from TODO. - Thanks to Melanie Blower (Intel) for the patch. + The TODO file outdated still. - src/common/tuklib_integer.h | 11 +++++++++++ - 1 file changed, 11 insertions(+) + TODO | 2 -- + 1 file changed, 2 deletions(-) -commit 4505ca483985f88c6923c05a43b4327feaab83b1 +commit b42908c42a4cc091db45a7e5ba0e0ecceaa3f6da Author: Lasse Collin -Date: 2017-09-24 20:04:24 +0300 +Date: 2022-12-11 21:16:09 +0200 - Update THANKS. + Docs: Update xz-file-format.txt to 1.1.0 for ARM64 filter. - THANKS | 1 + - 1 file changed, 1 insertion(+) + doc/xz-file-format.txt | 29 ++++++++++++++++++++++------- + 1 file changed, 22 insertions(+), 7 deletions(-) -commit 1ef3cc226e3ce173575c218238b71a4eecabc470 +commit 854f2f5946b353cb0963fd6dfd54d363adc89b9f Author: Lasse Collin -Date: 2017-09-16 20:36:20 +0300 +Date: 2022-12-11 21:13:57 +0200 - Windows: Fix paths in VS project files. - - Some paths use slashes instead of backslashes as directory - separators... now it should work (I tested VS2013 version). + xz: Rename --experimental-arm64 to --arm64. - windows/vs2013/liblzma.vcxproj | 12 ++++++------ - windows/vs2013/liblzma_dll.vcxproj | 24 ++++++++++++------------ - windows/vs2017/liblzma.vcxproj | 12 ++++++------ - windows/vs2017/liblzma_dll.vcxproj | 24 ++++++++++++------------ - 4 files changed, 36 insertions(+), 36 deletions(-) + src/xz/args.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit e775d2a8189d24f60470e6e49d8af881df3a1680 +commit 31dbd1e5fb65831915a7bbb531c3f19aea8d57a5 Author: Lasse Collin -Date: 2017-09-16 12:54:23 +0300 +Date: 2022-12-11 21:13:06 +0200 - Windows: Add project files for VS2017. - - These files match the v5.2 branch (no file info decoder). + liblzma: Change LZMA_FILTER_ARM64 to the official Filter ID 0x0A. - windows/vs2017/config.h | 148 ++++++++++++++ - windows/vs2017/liblzma.vcxproj | 355 ++++++++++++++++++++++++++++++++++ - windows/vs2017/liblzma_dll.vcxproj | 384 +++++++++++++++++++++++++++++++++++++ - windows/vs2017/xz_win.sln | 48 +++++ - 4 files changed, 935 insertions(+) + src/liblzma/api/lzma/bcj.h | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) -commit 10e02e0fbb6e2173f8b41f6e39b7b570f47dd74d +commit 01b3549e523edac899ec4925b282ceddd20da116 Author: Lasse Collin -Date: 2017-09-16 12:39:43 +0300 +Date: 2022-12-08 19:24:22 +0200 - Windows: Move VS2013 files into windows/vs2013 directory. + xz: Make args_info.files_name a const pointer. - windows/{ => vs2013}/config.h | 0 - windows/{ => vs2013}/liblzma.vcxproj | 278 +++++++++++++++--------------- - windows/{ => vs2013}/liblzma_dll.vcxproj | 280 +++++++++++++++---------------- - windows/{ => vs2013}/xz_win.sln | 0 - 4 files changed, 279 insertions(+), 279 deletions(-) + src/xz/args.c | 2 +- + src/xz/args.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit 06eebd4543196ded36fa9b8b9544195b38b24ef2 +commit bc665b84ea6bf7946394a08122177efe41b26a5f Author: Lasse Collin -Date: 2017-08-14 20:08:33 +0300 +Date: 2022-12-08 19:18:16 +0200 - Fix or hide warnings from GCC 7's -Wimplicit-fallthrough. + xz: Don't modify argv[]. + + The code that parses --memlimit options and --block-list modified + the argv[] when parsing the option string from optarg. This was + visible in "ps auxf" and such and could be confusing. I didn't + understand it back in the day when I wrote that code. Now a copy + is allocated when modifiable strings are needed. - src/liblzma/lzma/lzma_decoder.c | 6 ++++++ - src/xz/list.c | 2 ++ - 2 files changed, 8 insertions(+) + src/xz/args.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) -commit ea4ea1dffafebaa8b2770bf3eca46900e4dd22dc -Author: Alexey Tourbin -Date: 2017-05-16 23:56:35 +0300 +commit a13064e1c290de7933db72b6dffbd65cfce59c9f +Author: Lasse Collin +Date: 2022-12-08 18:18:57 +0200 - Docs: Fix a typo in a comment in doc/examples/02_decompress.c. + Translations: Update the German man page translations. - doc/examples/02_decompress.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + po4a/de.po | 4570 ++++++++++++++++++------------------------------------------ + 1 file changed, 1374 insertions(+), 3196 deletions(-) -commit eb2ef4c79bf405ea0d215f3b1df3d0eaf5e1d27b +commit 8bdbe42a8d0d75dff70206b923fc4bce5c69a40a +Author: Jia Tan +Date: 2022-12-06 23:05:56 +0800 + + Translations: Update the German translation. + + po/de.po | 586 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 315 insertions(+), 271 deletions(-) + +commit 5c304b57c24ef40ff57f864301065f0244c05bde +Author: Jia Tan +Date: 2022-12-06 23:04:25 +0800 + + Translations: Update the Turkish translation. + + po/tr.po | 221 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 108 insertions(+), 113 deletions(-) + +commit 6d86781fdb937970486500447ebb49b98244235b +Author: Jia Tan +Date: 2022-12-06 23:02:11 +0800 + + Translations: Update the Croatian translation. + + po/hr.po | 228 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 113 insertions(+), 115 deletions(-) + +commit 7a5b4b8075eb36026b1796f04ffed5830c42396a +Author: Jia Tan +Date: 2022-12-06 22:56:30 +0800 + + Translations: Add Romanian translation of man pages. + + Thanks to Remus-Gabriel Chelu. + + po4a/po4a.conf | 2 +- + po4a/ro.po | 3692 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 3693 insertions(+), 1 deletion(-) + +commit c6977e7400088177556e8771bcb839eb7d90caa3 +Author: Jia Tan +Date: 2022-12-06 22:52:13 +0800 + + Translations: Update the Romanian translation. + + po/ro.po | 294 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 147 insertions(+), 147 deletions(-) + +commit ac2a747e939c2cbccff7a49c399769af5e02d2ab Author: Lasse Collin -Date: 2017-05-23 18:34:43 +0300 +Date: 2022-12-08 17:30:09 +0200 - xz: Fix "xz --list --robot missing_or_bad_file.xz". + liblzma: Check for unexpected NULL pointers in block_header_decode(). - It ended up printing an uninitialized char-array when trying to - print the check names (column 7) on the "totals" line. + The API docs gave an impression that such checks are done + but they actually weren't done. In practice it made little + difference since the calling code has a bug if these are NULL. - This also changes the column 12 (minimum xz version) to - 50000002 (xz 5.0.0) instead of 0 when there are no valid - input files. - - Thanks to kidmin for the bug report. + Thanks to Jia Tan for the original patch that checked for + block->filters == NULL. - src/xz/list.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) + src/liblzma/common/block_header_decoder.c | 4 ++++ + 1 file changed, 4 insertions(+) -commit 3ea5dbd9b0d79048e336e40cef3b6d814fb74e13 +commit 24790f49ae66938c1c7574315e1c0aba1ed5ed25 Author: Lasse Collin -Date: 2017-04-24 19:48:47 +0300 +Date: 2022-12-01 20:59:32 +0200 - Build: Omit pre-5.0.0 entries from the generated ChangeLog. + Bump version number for 5.3.5beta. - It makes ChangeLog significantly smaller. + This also sorts the symbol names alphabetically in liblzma_*.map. - Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/liblzma/api/lzma/version.h | 4 ++-- + src/liblzma/liblzma_generic.map | 10 +++++----- + src/liblzma/liblzma_linux.map | 10 +++++----- + 3 files changed, 12 insertions(+), 12 deletions(-) -commit bae24675936df99064de1502593c006bd902594b +commit 7e53c5bcb3c2c17f47c096c06ff6b1481e6ecafa Author: Lasse Collin -Date: 2017-04-24 19:30:22 +0300 +Date: 2022-12-01 20:57:26 +0200 - Update the Git repository URL to HTTPS in ChangeLog. + Add NEWS for 5.3.5beta. - ChangeLog | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + NEWS | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) -commit 70f479211973b5361f4d7cb08ba5be69b4266e7a +commit 5865f2aaac326fcbd9f8a7d62defa230e4cb644e Author: Lasse Collin -Date: 2017-04-19 22:17:35 +0300 +Date: 2022-12-01 20:57:09 +0200 - Update the home page URLs to HTTPS. + Update THANKS. - COPYING | 2 +- - README | 2 +- - configure.ac | 2 +- - doc/faq.txt | 4 ++-- - dos/config.h | 2 +- - src/common/common_w32res.rc | 2 +- - src/xz/xz.1 | 6 +++--- - src/xzdec/xzdec.1 | 4 ++-- - windows/README-Windows.txt | 2 +- - windows/config.h | 2 +- - 10 files changed, 14 insertions(+), 14 deletions(-) + THANKS | 3 +++ + 1 file changed, 3 insertions(+) -commit 2a4b2fa75d06a097261a02ecd3cf2b6d449bf754 +commit 62b270988ec67314d69976df484d2974c6eacfda Author: Lasse Collin -Date: 2017-03-30 22:01:54 +0300 +Date: 2022-12-01 20:04:17 +0200 - xz: Use POSIX_FADV_RANDOM for in "xz --list" mode. + liblzma: Use __has_attribute(__symver__) to fix Clang detection. - xz --list is random access so POSIX_FADV_SEQUENTIAL was clearly - wrong. + If someone sets up Clang to define __GNUC__ to 10 or greater + then symvers broke. __has_attribute is supported by such GCC + and Clang versions that don't support __symver__ so this should + be much better and simpler way to detect if __symver__ is + actually supported. + + Thanks to Tomasz Gajc for the bug report. - src/xz/file_io.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) + src/liblzma/common/common.h | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) -commit eb25743ade39170cffd9566a1aae272098cce216 +commit f9ca7d45162664ddd9fb70e19335c2426e5d75bb Author: Lasse Collin -Date: 2017-03-30 19:47:45 +0300 +Date: 2022-12-01 18:51:52 +0200 - liblzma: Fix lzma_memlimit_set(strm, 0). + liblzma: Omit zero-skipping from ARM64 filter. - The 0 got treated specially in a buggy way and as a result - the function did nothing. The API doc said that 0 was supposed - to return LZMA_PROG_ERROR but it didn't. + It has some complicated downsides and its usefulness is more limited + than I originally thought. So this change is bad for certain very + specific situations but a generic solution that works for other + filters (and is otherwise better too) is planned anyway. And this + way 7-Zip can use the same compatible filter for the .7z format. - Now 0 is treated as if 1 had been specified. This is done because - 0 is already used to indicate an error from lzma_memlimit_get() - and lzma_memusage(). - - In addition, lzma_memlimit_set() no longer checks that the new - limit is at least LZMA_MEMUSAGE_BASE. It's counter-productive - for the Index decoder and was actually needed only by the - auto decoder. Auto decoder has now been modified to check for - LZMA_MEMUSAGE_BASE. + This is still marked as experimental with a new temporary Filter ID. - src/liblzma/api/lzma/base.h | 7 ++++++- - src/liblzma/common/auto_decoder.c | 3 +++ - src/liblzma/common/common.c | 6 ++++-- - 3 files changed, 13 insertions(+), 3 deletions(-) + src/liblzma/api/lzma/bcj.h | 2 +- + src/liblzma/simple/arm64.c | 81 +++++++++++++--------------------------------- + 2 files changed, 24 insertions(+), 59 deletions(-) -commit ef36c6362f3f3853f21b8a6359bcd06576ebf207 +commit 5baec3f0a9c85e6abf45c0f652f699b074129a8b Author: Lasse Collin -Date: 2017-03-30 19:16:55 +0300 +Date: 2022-12-01 18:13:27 +0200 - liblzma: Similar memlimit fix for stream_, alone_, and auto_decoder. + xz: Omit the special notes about ARM64 filter on the man page. - src/liblzma/api/lzma/container.h | 21 +++++++++++++++++---- - src/liblzma/common/alone_decoder.c | 5 +---- - src/liblzma/common/auto_decoder.c | 5 +---- - src/liblzma/common/stream_decoder.c | 5 +---- - 4 files changed, 20 insertions(+), 16 deletions(-) + src/xz/xz.1 | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) -commit 57616032650f03840480b696d7878acdd2065521 +commit 0c3627b51862eb0dcdd4fc283d046250571991c6 Author: Lasse Collin -Date: 2017-03-30 18:58:18 +0300 +Date: 2022-12-01 18:12:03 +0200 - liblzma: Fix handling of memlimit == 0 in lzma_index_decoder(). - - It returned LZMA_PROG_ERROR, which was done to avoid zero as - the limit (because it's a special value elsewhere), but using - LZMA_PROG_ERROR is simply inconvenient and can cause bugs. - - The fix/workaround is to treat 0 as if it were 1 byte. It's - effectively the same thing. The only weird consequence is - that then lzma_memlimit_get() will return 1 even when 0 was - specified as the limit. - - This fixes a very rare corner case in xz --list where a specific - memory usage limit and a multi-stream file could print the - error message "Internal error (bug)" instead of saying that - the memory usage limit is too low. + liblzma: Don't be over-specific in lzma_str_to_filters API doc. - src/liblzma/api/lzma/index.h | 18 +++++++++++------- - src/liblzma/common/index_decoder.c | 4 ++-- - 2 files changed, 13 insertions(+), 9 deletions(-) + src/liblzma/api/lzma/filter.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) -commit 3d566cd519017eee1a400e7961ff14058dfaf33c +commit 94adf057f27b1970f493dc99cd166407d7255639 Author: Lasse Collin -Date: 2016-12-30 13:26:36 +0200 +Date: 2022-12-01 17:54:23 +0200 - Bump version and soname for 5.2.3. + liblzma: Silence unused variable warning when BCJ filters are disabled. + + Thanks to Jia Tan for the original patch. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + src/liblzma/common/string_conversion.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) -commit 053e624fe33795e779ff736f16ce44a129c829b5 +commit c68af4441744e5ffc41a472e1be9c9d53a1d9780 Author: Lasse Collin -Date: 2016-12-30 13:25:10 +0200 +Date: 2022-12-01 17:38:03 +0200 - Update NEWS for 5.2.3. + Translations: Update the Chinese (simplified) translation. - NEWS | 39 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 39 insertions(+) + po/zh_CN.po | 608 ++++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 348 insertions(+), 260 deletions(-) -commit cae412b2b77d7fd88d187ed7659331709311f80d +commit 3be6942e5c27d29995d41da52fbe274e4ce4a537 Author: Lasse Collin -Date: 2015-04-01 14:45:25 +0300 +Date: 2022-11-30 18:55:03 +0200 - xz: Fix the Capsicum rights on user_abort_pipe. + Add NEWS for 5.2.9. - src/xz/file_io.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + NEWS | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) -commit 9ccbae41000572193b9a09e7102f9e84dc6d96de -Author: Lasse Collin -Date: 2016-12-28 21:05:22 +0200 +commit 7c16e312cb2f40b81154c0e5be13a3c6b8da485d +Author: Jia Tan +Date: 2022-11-30 23:33:08 +0800 - Mention potential sandboxing bugs in INSTALL. + xz: Remove message_filters_to_str function prototype from message.h. + + This was forgotten from 7484744af6cbabe81e92af7d9e061dfd597fff7b. - INSTALL | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) + src/xz/message.h | 16 ---------------- + 1 file changed, 16 deletions(-) -commit e013a337d3de77cce24360dffe956ea2339489b6 +commit 764955e2d4f2a5e8d6d6fec63af694f799e050e7 Author: Lasse Collin -Date: 2016-11-21 20:24:50 +0200 +Date: 2022-11-30 18:08:34 +0200 - liblzma: Avoid multiple definitions of lzma_coder structures. + Change the bug report address. - Only one definition was visible in a translation unit. - It avoided a few casts and temp variables but seems that - this hack doesn't work with link-time optimizations in compilers - as it's not C99/C11 compliant. + It forwards to me and Jia Tan. - Fixes: - http://www.mail-archive.com/xz-devel@tukaani.org/msg00279.html + Also update the IRC reference in README as #tukaani was moved + to Libera Chat long ago. - src/liblzma/common/alone_decoder.c | 44 +++++---- - src/liblzma/common/alone_encoder.c | 34 ++++--- - src/liblzma/common/auto_decoder.c | 35 ++++--- - src/liblzma/common/block_decoder.c | 41 ++++---- - src/liblzma/common/block_encoder.c | 40 ++++---- - src/liblzma/common/common.h | 18 ++-- - src/liblzma/common/index_decoder.c | 33 ++++--- - src/liblzma/common/index_encoder.c | 16 ++-- - src/liblzma/common/stream_decoder.c | 50 +++++----- - src/liblzma/common/stream_encoder.c | 56 ++++++----- - src/liblzma/common/stream_encoder_mt.c | 124 ++++++++++++++----------- - src/liblzma/delta/delta_common.c | 25 ++--- - src/liblzma/delta/delta_decoder.c | 6 +- - src/liblzma/delta/delta_encoder.c | 12 ++- - src/liblzma/delta/delta_private.h | 4 +- - src/liblzma/lz/lz_decoder.c | 60 ++++++------ - src/liblzma/lz/lz_decoder.h | 13 ++- - src/liblzma/lz/lz_encoder.c | 57 +++++++----- - src/liblzma/lz/lz_encoder.h | 9 +- - src/liblzma/lzma/lzma2_decoder.c | 32 ++++--- - src/liblzma/lzma/lzma2_encoder.c | 51 +++++----- - src/liblzma/lzma/lzma_decoder.c | 27 +++--- - src/liblzma/lzma/lzma_encoder.c | 29 +++--- - src/liblzma/lzma/lzma_encoder.h | 9 +- - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 3 +- - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 23 ++--- - src/liblzma/lzma/lzma_encoder_private.h | 6 +- - src/liblzma/simple/arm.c | 2 +- - src/liblzma/simple/armthumb.c | 2 +- - src/liblzma/simple/ia64.c | 2 +- - src/liblzma/simple/powerpc.c | 2 +- - src/liblzma/simple/simple_coder.c | 61 ++++++------ - src/liblzma/simple/simple_private.h | 12 +-- - src/liblzma/simple/sparc.c | 2 +- - src/liblzma/simple/x86.c | 15 +-- - 35 files changed, 532 insertions(+), 423 deletions(-) + CMakeLists.txt | 2 +- + README | 11 +++++------ + configure.ac | 2 +- + dos/config.h | 2 +- + windows/README-Windows.txt | 2 +- + 5 files changed, 9 insertions(+), 10 deletions(-) -commit 8e0f1af3dcaec00a3879cce8ad7441edc6359d1c +commit c21983c76031e01da01ad3c6cc716fe4b8a75070 Author: Lasse Collin -Date: 2016-12-26 20:50:25 +0200 +Date: 2022-11-30 17:50:17 +0200 - Document --enable-sandbox configure option in INSTALL. + Build: Add string_conversion.c to CMake, DOS, and VS files. - INSTALL | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) + CMakeLists.txt | 1 + + dos/Makefile | 1 + + windows/vs2013/liblzma.vcxproj | 1 + + windows/vs2013/liblzma_dll.vcxproj | 1 + + windows/vs2017/liblzma.vcxproj | 1 + + windows/vs2017/liblzma_dll.vcxproj | 1 + + windows/vs2019/liblzma.vcxproj | 1 + + windows/vs2019/liblzma_dll.vcxproj | 1 + + 8 files changed, 8 insertions(+) -commit ce2542d220de06acd618fd9f5c0a6683029fb4eb +commit 30be0c35d24eb5175459d69dbf7d92e2b087ef82 Author: Lasse Collin -Date: 2015-03-31 22:19:34 +0300 +Date: 2022-11-30 17:38:32 +0200 - xz: Add support for sandboxing with Capsicum (disabled by default). - - In the v5.2 branch this feature is considered experimental - and thus disabled by default. - - The sandboxing is used conditionally as described in main.c. - This isn't optimal but it was much easier to implement than - a full sandboxing solution and it still covers the most common - use cases where xz is writing to standard output. This should - have practically no effect on performance even with small files - as fork() isn't needed. - - C and locale libraries can open files as needed. This has been - fine in the past, but it's a problem with things like Capsicum. - io_sandbox_enter() tries to ensure that various locale-related - files have been loaded before cap_enter() is called, but it's - possible that there are other similar problems which haven't - been seen yet. - - Currently Capsicum is available on FreeBSD 10 and later - and there is a port to Linux too. - - Thanks to Loganaden Velvindron for help. + Update to HTTPS URLs in AUTHORS. - configure.ac | 41 +++++++++++++++++++++++++++ - src/xz/Makefile.am | 2 +- - src/xz/file_io.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/file_io.h | 6 ++++ - src/xz/main.c | 18 ++++++++++++ - src/xz/private.h | 4 +++ - 6 files changed, 151 insertions(+), 1 deletion(-) + AUTHORS | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit 3ca1d5e6320111043e19434da881065fadafa0e4 +commit 0a72b9ca2fe20082da9b7128fe0d908af947a851 +Author: Jia Tan +Date: 2022-11-30 00:52:06 +0800 + + liblzma: Improve documentation for string to filter functions. + + src/liblzma/api/lzma/filter.h | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +commit a6e21fcede3b196160a52dd294d965c508a4bb33 Author: Lasse Collin -Date: 2015-03-31 21:12:30 +0300 +Date: 2022-11-29 22:27:42 +0200 - Fix bugs and otherwise improve ax_check_capsicum.m4. + liblzma: Two fixes to lzma_str_list_filters() API docs. - AU_ALIAS was removed because the new version is incompatible - with the old version. - - It no longer checks for separately. - It's enough to test for it as part of AC_CHECK_DECL. - The defines HAVE_CAPSICUM_SYS_CAPSICUM_H and - HAVE_CAPSICUM_SYS_CAPABILITY_H were removed as unneeded. - HAVE_SYS_CAPSICUM_H from AC_CHECK_HEADERS is enough. - - It no longer does a useless search for the Capsicum library - if the header wasn't found. - - Fixed a bug in ACTION-IF-FOUND (the first argument). Specifying - the argument omitted the default action but the given action - wasn't used instead. - - AC_DEFINE([HAVE_CAPSICUM]) is now always called when Capsicum - support is found. Previously it was part of the default - ACTION-IF-FOUND which a custom action would override. Now - the default action only prepends ${CAPSICUM_LIB} to LIBS. - - The documentation was updated. - - Since there as no serial number, "#serial 2" was added. + Thanks to Jia Tan. - m4/ax_check_capsicum.m4 | 103 ++++++++++++++++++++++++------------------------ - 1 file changed, 51 insertions(+), 52 deletions(-) + src/liblzma/api/lzma/filter.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit 5f3a742b64197fe8bedb6f05fc6ce5d177d11145 +commit 7484744af6cbabe81e92af7d9e061dfd597fff7b Author: Lasse Collin -Date: 2015-03-31 19:20:24 +0300 +Date: 2022-11-28 21:57:47 +0200 - Add m4/ax_check_capsicum.m4 for detecting Capsicum support. + xz: Use lzma_str_from_filters(). - The file was loaded from this web page: - https://github.com/google/capsicum-test/blob/dev/autoconf/m4/ax_check_capsicum.m4 - - Thanks to Loganaden Velvindron for pointing it out for me. + Two uses: Displaying encoder filter chain when compressing with -vv, + and displaying the decoder filter chain in --list -vv. - m4/ax_check_capsicum.m4 | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 86 insertions(+) + src/xz/list.c | 28 ++++++--- + src/xz/message.c | 175 +++---------------------------------------------------- + 2 files changed, 28 insertions(+), 175 deletions(-) -commit d74377e62b4c649e40294dd441de72c0f092e67c +commit cedeeca2ea6ada5b0411b2ae10d7a859e837f203 Author: Lasse Collin -Date: 2015-10-12 20:29:09 +0300 +Date: 2022-11-28 21:37:48 +0200 - liblzma: Fix a memory leak in error path of lzma_index_dup(). + liblzma: Add lzma_str_to_filters, _from_filters, and _list_filters. - lzma_index_dup() calls index_dup_stream() which, in case of - an error, calls index_stream_end() to free memory allocated - by index_stream_init(). However, it illogically didn't - actually free the memory. To make it logical, the tree - handling code was modified a bit in addition to changing - index_stream_end(). - - Thanks to Evan Nemerson for the bug report. + lzma_str_to_filters() uses static error messages which makes + them not very precise. It tells the position in the string + where an error occurred though which helps quite a bit if + applications take advantage of it. Dynamic error messages can + be added later with a new flag if it seems important enough. - src/liblzma/common/index.c | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) + src/liblzma/api/lzma/filter.h | 258 +++++++ + src/liblzma/common/Makefile.inc | 1 + + src/liblzma/common/string_conversion.c | 1302 ++++++++++++++++++++++++++++++++ + src/liblzma/liblzma_generic.map | 3 + + src/liblzma/liblzma_linux.map | 3 + + 5 files changed, 1567 insertions(+) -commit f580732216dcf971f3f006fe8e01cd4979e1d964 +commit 072ebf7b1335421193ffa9d4a70d5533786b8995 Author: Lasse Collin -Date: 2016-10-24 18:53:25 +0300 +Date: 2022-11-28 21:02:19 +0200 - Update THANKS. + liblzma: Make lzma_validate_chain() available outside filter_common.c. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/common/filter_common.c | 8 ++++---- + src/liblzma/common/filter_common.h | 3 +++ + 2 files changed, 7 insertions(+), 4 deletions(-) -commit 88d7a7fd153bf1355cdf798ffdac7443d0169afc +commit 5f22bd2d37e3bd01a5d701b51750eb51f09c11bf Author: Lasse Collin -Date: 2016-10-24 18:51:36 +0300 +Date: 2022-11-28 10:51:03 +0200 - tuklib_cpucores: Add support for sched_getaffinity(). + liblzma: Remove lzma_lz_decoder_uncompressed() as it's now unused. + + src/liblzma/lz/lz_decoder.c | 14 -------------- + src/liblzma/lz/lz_decoder.h | 3 --- + 2 files changed, 17 deletions(-) + +commit cee83206465b95729ab649aa2f57fdbde8dcaf89 +Author: Lasse Collin +Date: 2022-11-28 10:48:53 +0200 + + liblzma: Use LZMA1EXT feature in lzma_microlzma_decoder(). - It's available in glibc (GNU/Linux, GNU/kFreeBSD). It's better - than sysconf(_SC_NPROCESSORS_ONLN) because sched_getaffinity() - gives the number of cores available to the process instead of - the total number of cores online. + Here too this avoids the slightly ugly method to set + the uncompressed size. - As a side effect, this commit fixes a bug on GNU/kFreeBSD where - configure would detect the FreeBSD-specific cpuset_getaffinity() - but it wouldn't actually work because on GNU/kFreeBSD it requires - using -lfreebsd-glue when linking. Now the glibc-specific function - will be used instead. + Also moved the setting of dict_size to the struct initializer. + + src/liblzma/common/microlzma_decoder.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit e310e8b6a490dfb468f4ed68feff246d776b323c +Author: Lasse Collin +Date: 2022-11-28 10:28:20 +0200 + + liblzma: Use LZMA1EXT feature in lzma_alone_decoder(). - Thanks to Sebastian Andrzej Siewior for the original patch - and testing. + This avoids the need to use the slightly ugly method to + set the uncompressed size. - m4/tuklib_cpucores.m4 | 30 +++++++++++++++++++++++++++++- - src/common/tuklib_cpucores.c | 9 +++++++++ - 2 files changed, 38 insertions(+), 1 deletion(-) + src/liblzma/common/alone_decoder.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) -commit 51baf684376903dbeddd840582bfdf9fa91b311b +commit 33b8a24b6646a9dbfd8358405aec466b13078559 Author: Lasse Collin -Date: 2016-06-30 20:27:36 +0300 +Date: 2022-11-27 23:16:21 +0200 - xz: Fix copying of timestamps on Windows. + liblzma: Add LZMA_FILTER_LZMA1EXT to support LZMA1 without end marker. - xz used to call utime() on Windows, but its result gets lost - on close(). Using _futime() seems to work. + Some file formats need support for LZMA1 streams that don't use + the end of payload marker (EOPM) alias end of stream (EOS) marker. + So far liblzma API has supported decompressing such streams via + lzma_alone_decoder() when .lzma header specifies a known + uncompressed size. Encoding support hasn't been available in the API. - Thanks to Martok for reporting the bug: - http://www.mail-archive.com/xz-devel@tukaani.org/msg00261.html + Instead of adding a new LZMA1-only API for this purpose, this commit + adds a new filter ID for use with raw encoder and decoder. The main + benefit of this approach is that then also filter chains are possible, + for example, if someone wants to implement support for .7z files that + use the x86 BCJ filter with LZMA1 (not BCJ2 as that isn't supported + in liblzma). - configure.ac | 2 +- - src/xz/file_io.c | 18 ++++++++++++++++++ - 2 files changed, 19 insertions(+), 1 deletion(-) + src/liblzma/api/lzma/lzma12.h | 123 ++++++++++++++++++++++++++++++-- + src/liblzma/common/filter_common.c | 7 ++ + src/liblzma/common/filter_decoder.c | 6 ++ + src/liblzma/common/filter_encoder.c | 9 +++ + src/liblzma/lzma/lzma2_encoder.c | 2 +- + src/liblzma/lzma/lzma_decoder.c | 26 ++++++- + src/liblzma/lzma/lzma_encoder.c | 40 +++++++++-- + src/liblzma/lzma/lzma_encoder.h | 3 +- + src/liblzma/lzma/lzma_encoder_private.h | 3 + + 9 files changed, 204 insertions(+), 15 deletions(-) -commit 1ddc479851139d6e8202e5835421bfe6578d9e07 +commit 9a304bf1e45b3ddf61aaeaa7c764915b34618ede Author: Lasse Collin -Date: 2016-06-16 22:46:02 +0300 +Date: 2022-11-27 18:43:07 +0200 - xz: Silence warnings from -Wlogical-op. - - Thanks to Evan Nemerson. + liblzma: Avoid unneeded use of void pointer in LZMA decoder. - src/xz/file_io.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) + src/liblzma/lzma/lzma_decoder.c | 3 +-- + src/liblzma/lzma/lzma_decoder.h | 2 +- + 2 files changed, 2 insertions(+), 3 deletions(-) -commit be647ff5ed5a1c244a65722af6ce250259f3b14a +commit 218394958c7683f892275bb40eae880620feebcc Author: Lasse Collin -Date: 2016-04-10 20:55:49 +0300 +Date: 2022-11-27 18:20:33 +0200 - Build: Fix = to += for xz_SOURCES in src/xz/Makefile.am. + liblzma: Pass the Filter ID to LZ encoder and decoder. - Thanks to Christian Kujau. + This allows using two Filter IDs with the same + initialization function and data structures. - src/xz/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/common/alone_decoder.c | 1 + + src/liblzma/common/alone_encoder.c | 1 + + src/liblzma/common/common.h | 7 +++++-- + src/liblzma/common/lzip_decoder.c | 1 + + src/liblzma/common/microlzma_decoder.c | 1 + + src/liblzma/common/microlzma_encoder.c | 1 + + src/liblzma/lz/lz_decoder.c | 5 +++-- + src/liblzma/lz/lz_decoder.h | 3 ++- + src/liblzma/lz/lz_encoder.c | 5 +++-- + src/liblzma/lz/lz_encoder.h | 3 ++- + src/liblzma/lzma/lzma2_decoder.c | 3 ++- + src/liblzma/lzma/lzma2_encoder.c | 3 ++- + src/liblzma/lzma/lzma_decoder.c | 2 +- + src/liblzma/lzma/lzma_encoder.c | 2 +- + 14 files changed, 26 insertions(+), 12 deletions(-) -commit fb6d50c15343831f35305982cefa82053099191d +commit 1663c7676b76f4c514031797f3db1896e8100f7f Author: Lasse Collin -Date: 2016-04-10 20:54:17 +0300 +Date: 2022-11-27 01:03:16 +0200 - Build: Bump GNU Gettext version requirement to 0.19. - - It silences a few warnings and most people probably have - 0.19 even on stable distributions. - - Thanks to Christian Kujau. + liblzma: Remove two FIXME comments. - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/common/filter_encoder.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 74f8dad9f912a2993768d93d108ea2b0b2c196e0 +commit 11fe708db783ac36ebeeb85da164e29e8c300910 Author: Lasse Collin -Date: 2016-03-13 20:21:49 +0200 +Date: 2022-11-26 22:25:30 +0200 - liblzma: Disable external SHA-256 by default. - - This is the sane thing to do. The conflict with OpenSSL - on some OSes and especially that the OS-provided versions - can be significantly slower makes it clear that it was - a mistake to have the external SHA-256 support enabled by - default. - - Those who want it can now pass --enable-external-sha256 to - configure. INSTALL was updated with notes about OSes where - this can be a bad idea. - - The SHA-256 detection code in configure.ac had some bugs that - could lead to a build failure in some situations. These were - fixed, although it doesn't matter that much now that the - external SHA-256 is disabled by default. - - MINIX >= 3.2.0 uses NetBSD's libc and thus has SHA256_Init - in libc instead of libutil. Support for the libutil version - was removed. + xz: Use lzma_filters_free(). - INSTALL | 36 ++++++++++++++++++++++ - configure.ac | 76 +++++++++++++++++++++++------------------------ - src/liblzma/check/check.h | 16 ++++------ - 3 files changed, 79 insertions(+), 49 deletions(-) + src/xz/list.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) -commit ea7f6ff04cb5bb1498088eb09960a4c3f13dfe39 +commit e782af9110d8499c7ac2929bc871540eefea5ea1 Author: Lasse Collin -Date: 2016-03-10 20:27:05 +0200 +Date: 2022-11-26 22:21:13 +0200 - Update THANKS. + liblzma: Use lzma_filters_free() in more places. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/common/block_header_decoder.c | 20 ++------------------ + src/liblzma/common/stream_decoder.c | 4 +--- + src/liblzma/common/stream_decoder_mt.c | 22 +++++----------------- + 3 files changed, 8 insertions(+), 38 deletions(-) -commit d0e018016b311232e82d9a98dc68f1e3dabce794 +commit 90caaded2dc6db1d6a55b01160d7e87f4a423628 Author: Lasse Collin -Date: 2016-03-10 20:26:49 +0200 +Date: 2022-11-25 18:04:37 +0200 - Build: Avoid SHA256_Init on FreeBSD and MINIX 3. + liblzma: Omit simple coder init functions if they are disabled. + + src/liblzma/simple/arm.c | 4 ++++ + src/liblzma/simple/armthumb.c | 4 ++++ + src/liblzma/simple/ia64.c | 4 ++++ + src/liblzma/simple/powerpc.c | 4 ++++ + src/liblzma/simple/sparc.c | 4 ++++ + src/liblzma/simple/x86.c | 4 ++++ + 6 files changed, 24 insertions(+) + +commit 5cd9f0df78cc4f8a7807bf6104adea13034fbb45 +Author: Lasse Collin +Date: 2022-11-24 23:24:59 +0200 + + xz: Allow nice_len 2 and 3 even if match finder requires 3 or 4. - On FreeBSD 10 and older, SHA256_Init from libmd conflicts - with libcrypto from OpenSSL. The OpenSSL version has - different sizeof(SHA256_CTX) and it can cause weird - problems if wrong SHA256_Init gets used. + Now that liblzma accepts these, we avoid the extra check and + there's one message less for translators too. + + src/xz/options.c | 5 ----- + 1 file changed, 5 deletions(-) + +commit 3be88ae071371caa279b44e13f4836fb178fe4ae +Author: Lasse Collin +Date: 2022-11-24 23:23:55 +0200 + + liblzma: Allow nice_len 2 and 3 even if match finder requires 3 or 4. - Looking at the source, MINIX 3 seems to have a similar issue but - I'm not sure. To be safe, I disabled SHA256_Init on MINIX 3 too. - - NetBSD has SHA256_Init in libc and they had a similar problem, - but they already fixed it in 2009. - - Thanks to Jim Wilcoxson for the bug report that helped - in finding the problem. + That is, if the specified nice_len is smaller than the minimum + of the match finder, silently use the match finder's minimum value + instead of reporting an error. The old behavior is annoying to users + and it complicates xz options handling too. - configure.ac | 27 +++++++++++++++++++++------ - 1 file changed, 21 insertions(+), 6 deletions(-) + src/liblzma/lz/lz_encoder.c | 14 +++++++++----- + src/liblzma/lz/lz_encoder.h | 9 +++++++++ + src/liblzma/lzma/lzma_encoder.c | 11 ++++++++--- + 3 files changed, 26 insertions(+), 8 deletions(-) -commit 5daae123915f32a4ed6dc948b831533c2d1beec3 +commit 93439cfafe1768b3b18d67d2356ef7e7559bba59 Author: Lasse Collin -Date: 2015-11-08 20:16:10 +0200 +Date: 2022-11-24 16:25:10 +0200 - tuklib_physmem: Hopefully silence a warning on Windows. + liblzma: Add lzma_filters_update() support to the multi-threaded encoder. + + A tiny downside of this is that now a 1-4 tiny allocations are made + for every Block because each worker thread needs its own copy of + the filter chain. - src/common/tuklib_physmem.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/liblzma/api/lzma/filter.h | 36 +++++++------ + src/liblzma/common/stream_encoder_mt.c | 96 +++++++++++++++++++++++++++++++--- + 2 files changed, 109 insertions(+), 23 deletions(-) -commit 491acc406e098167ccb7fce0728b94c2f32cff9f +commit 17ac51e689794eb41cab3e80946fec689caea2d2 Author: Lasse Collin -Date: 2015-11-04 23:17:43 +0200 +Date: 2022-11-24 14:53:22 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 8173ff8790ad3502d04e1c07d014cb84a3b8187b +commit 06824396b2b6c84f3a235cb7c19c2a9701167797 Author: Lasse Collin -Date: 2015-11-04 23:14:00 +0200 +Date: 2022-11-24 14:52:44 +0200 - liblzma: Make Valgrind happier with optimized (gcc -O2) liblzma. + Build: Don't put GNU/Linux-specific symbol versions into static liblzma. - When optimizing, GCC can reorder code so that an uninitialized - value gets used in a comparison, which makes Valgrind unhappy. - It doesn't happen when compiled with -O0, which I tend to use - when running Valgrind. + It not only makes no sense to put symbol versions into a static library + but it can also cause breakage. - Thanks to Rich Prohaska. I remember this being mentioned long - ago by someone else but nothing was done back then. + By default Libtool #defines PIC if building a shared library and + doesn't define it for static libraries. This is documented in the + Libtool manual. It can be overriden using --with-pic or --without-pic. + configure.ac detects if --with-pic or --without-pic is used and then + gives an error if neither --disable-shared nor --disable-static was + used at the same time. Thus, in normal situations it works to build + both shared and static library at the same time on GNU/Linux, + only --with-pic or --without-pic requires that only one type of + library is built. + + Thanks to John Paul Adrian Glaubitz from Debian for reporting + the problem that occurred on ia64: + https://www.mail-archive.com/xz-devel@tukaani.org/msg00610.html - src/liblzma/lz/lz_encoder.c | 4 ++++ - 1 file changed, 4 insertions(+) + CMakeLists.txt | 5 +- + configure.ac | 143 +++++++++++++++++++++++++++++--------------- + src/liblzma/common/common.h | 12 ++++ + 3 files changed, 111 insertions(+), 49 deletions(-) -commit 013de2b5ab8094d2c82a2771f3d143eeb656eda9 +commit e1acf7107291f8b3d6d609a7133331ff36d35d14 Author: Lasse Collin -Date: 2015-11-03 20:55:45 +0200 +Date: 2022-11-24 01:32:16 +0200 - liblzma: Rename lzma_presets.c back to lzma_encoder_presets.c. + liblzma: Refactor to use lzma_filters_free(). - It would be too annoying to update other build systems - just because of this. + lzma_filters_free() sets the options to NULL and ids to + LZMA_VLI_UNKNOWN so there is no need to do it by caller; + the filter arrays will always be left in a safe state. + + Also use memcpy() instead of a loop to copy a filter chain + when it is known to be safe to copy LZMA_FILTERS_MAX + 1 + (even if the elements past the terminator might be uninitialized). - src/liblzma/lzma/Makefile.inc | 2 +- - src/liblzma/lzma/{lzma_presets.c => lzma_encoder_presets.c} | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + src/liblzma/common/stream_encoder.c | 16 ++++------------ + src/liblzma/common/stream_encoder_mt.c | 11 ++--------- + 2 files changed, 6 insertions(+), 21 deletions(-) -commit a322f70ad96de88968c2c36e6a36bc08ae30bd20 +commit cb05dbcf8b868441ec805016222f3fd77f1c5caa Author: Lasse Collin -Date: 2015-11-03 20:47:07 +0200 +Date: 2022-11-24 01:26:37 +0200 - Build: Disable xzdec, lzmadec, and lzmainfo when they cannot be built. + liblzma: Fix another invalid free() after memory allocation failure. - They all need decoder support and if that isn't available, - there's no point trying to build them. + This time it can happen when lzma_stream_encoder_mt() is used + to reinitialize an existing multi-threaded Stream encoder + and one of 1-4 tiny allocations in lzma_filters_copy() fail. + + It's very similar to the previous bug + 10430fbf3820dafd4eafd38ec8be161a6978ed2b, happening with + an array of lzma_filter structures whose old options are freed + but the replacement never arrives due to a memory allocation + failure in lzma_filters_copy(). - configure.ac | 3 +++ - 1 file changed, 3 insertions(+) + src/liblzma/common/stream_encoder_mt.c | 4 ++++ + 1 file changed, 4 insertions(+) -commit 8ea49606cf6427e32319de7693eca9e43f1c8ad6 -Author: Lasse Collin -Date: 2015-11-03 20:35:19 +0200 +commit 75f1a6c26df4ce329da0882786403e3ccf5cd898 +Author: Jia Tan +Date: 2022-05-05 20:53:42 +0800 - Build: Simplify $enable_{encoders,decoders} usage a bit. + liblzma: Add support for LZMA_SYNC_FLUSH in the Block encoder. + + The documentation mentions that lzma_block_encoder() supports + LZMA_SYNC_FLUSH but it was never added to supported_actions[] + in the internal structure. Because of this, LZMA_SYNC_FLUSH could + not be used with the Block encoder unless it was the next coder + after something like stream_encoder() or stream_encoder_mt(). - configure.ac | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) + src/liblzma/common/block_encoder.c | 1 + + 1 file changed, 1 insertion(+) -commit 42131a25e52bfe400acfa7df93469a96bb78bb78 +commit d0901645170b638c517f5c50866b6ef48f491c65 Author: Lasse Collin -Date: 2015-11-03 20:31:31 +0200 +Date: 2022-11-24 01:02:50 +0200 - Windows/MSVC: Update config.h. + liblzma: Add new API function lzma_filters_free(). + + This is small but convenient and should have been added + a long time ago. - windows/config.h | 6 ++++++ - 1 file changed, 6 insertions(+) + src/liblzma/api/lzma/filter.h | 21 +++++++++++++++++++++ + src/liblzma/common/filter_common.c | 26 ++++++++++++++++++++++++++ + src/liblzma/liblzma_generic.map | 1 + + src/liblzma/liblzma_linux.map | 1 + + 4 files changed, 49 insertions(+) -commit e9184e87cc989d14c7413e6adb3eca98f6ae0290 +commit ae1f8a723dcde2f2c5cf444bcbb5fc5026b3c3c5 Author: Lasse Collin -Date: 2015-11-03 20:29:58 +0200 +Date: 2022-11-24 00:02:31 +0200 - DOS: Update config.h. + CMake: Don't use symbol versioning with static library. - dos/config.h | 6 ++++++ - 1 file changed, 6 insertions(+) + CMakeLists.txt | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) -commit 2296778f3c9a1e3a8699973b09dd3610b8baa402 +commit 48c1b99dc537a27e1ca929d8837e778e5ba32191 Author: Lasse Collin -Date: 2015-11-03 20:29:33 +0200 +Date: 2022-11-23 21:55:22 +0200 - xz: Make xz buildable even when encoders or decoders are disabled. - - The patch is quite long but it's mostly about adding new #ifdefs - to omit code when encoders or decoders have been disabled. - - This adds two new #defines to config.h: HAVE_ENCODERS and - HAVE_DECODERS. + liblzma: Add lzma_attr_warn_unused_result to lzma_filters_copy(). - configure.ac | 4 ++++ - src/xz/Makefile.am | 8 ++++++-- - src/xz/args.c | 16 ++++++++++++++++ - src/xz/coder.c | 33 +++++++++++++++++++++++++-------- - src/xz/main.c | 9 +++++++-- - src/xz/private.h | 5 ++++- - 6 files changed, 62 insertions(+), 13 deletions(-) + src/liblzma/api/lzma/filter.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) -commit 97a3109281e475d9cf1b5095237d672fa0ad25e5 +commit 10430fbf3820dafd4eafd38ec8be161a6978ed2b Author: Lasse Collin -Date: 2015-11-03 18:06:40 +0200 +Date: 2022-11-23 21:26:21 +0200 - Build: Build LZMA1/2 presets also when only decoder is wanted. + liblzma: Fix invalid free() after memory allocation failure. - People shouldn't rely on the presets when decoding raw streams, - but xz uses the presets as the starting point for raw decoder - options anyway. + The bug was in the single-threaded .xz Stream encoder + in the code that is used for both re-initialization and for + lzma_filters_update(). To trigger it, an application had + to either re-initialize an existing encoder instance with + lzma_stream_encoder() or use lzma_filters_update(), and + then one of the 1-4 tiny allocations in lzma_filters_copy() + (called from stream_encoder_update()) must fail. An error + was correctly reported but the encoder state was corrupted. - lzma_encocder_presets.c was renamed to lzma_presets.c to - make it clear it's not used solely by the encoder code. + This is related to the recent fix in + f8ee61e74eb40600445fdb601c374d582e1e9c8a which is good but + it wasn't enough to fix the main problem in stream_encoder.c. - src/liblzma/lzma/Makefile.inc | 6 +++++- - src/liblzma/lzma/{lzma_encoder_presets.c => lzma_presets.c} | 3 ++- - 2 files changed, 7 insertions(+), 2 deletions(-) + src/liblzma/common/stream_encoder.c | 39 +++++++++++++++++++++++++++++-------- + 1 file changed, 31 insertions(+), 8 deletions(-) -commit dc6b78d7f0f6fe43e9d4215146e8581feb8090e7 +commit cafd6dc397ca8b5b5f7775e8d6876b8fe70f8e70 Author: Lasse Collin -Date: 2015-11-03 17:54:48 +0200 +Date: 2022-11-22 16:37:15 +0200 - Build: Fix configure to handle LZMA1 dependency with LZMA2. - - Now it gives an error if LZMA1 encoder/decoder is missing - when LZMA2 encoder/decoder was requested. Even better would - be LZMA2 implicitly enabling LZMA1 but it would need more code. + liblzma: Fix language in a comment. - configure.ac | 5 ----- - 1 file changed, 5 deletions(-) + src/liblzma/common/stream_encoder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 46d76c9cd3cb26a31f5ae6c3a8bbcf38e6da1add +commit c392bf8ccba857baaf50399c4b460119befacd54 Author: Lasse Collin -Date: 2015-11-03 17:41:54 +0200 +Date: 2022-11-22 11:20:17 +0200 - Build: Don't omit lzma_cputhreads() unless using --disable-threads. + liblzma: Fix infinite loop in LZMA encoder init with dict_size >= 2 GiB. - Previously it was omitted if encoders were disabled - with --disable-encoders. It didn't make sense and - it also broke the build. + The encoder doesn't support dictionary sizes larger than 1536 MiB. + This is validated, for example, when calculating the memory usage + via lzma_raw_encoder_memusage(). It is also enforced by the LZ + part of the encoder initialization. However, LZMA encoder with + LZMA_MODE_NORMAL did an unsafe calculation with dict_size before + such validation and that results in an infinite loop if dict_size + was 2 << 30 or greater. - src/liblzma/common/Makefile.inc | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) + src/liblzma/lzma/lzma_encoder.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) -commit 16d68f874d89f1e4a1919786a35bbaef7d71a077 +commit f50534c973a591ccf65485adfc827a8a7126ca6c Author: Lasse Collin -Date: 2015-11-02 18:16:51 +0200 +Date: 2022-11-21 13:02:33 +0200 - liblzma: Fix a build failure related to external SHA-256 support. + liblzma: Fix two Doxygen commands in the API headers. - If an appropriate header and structure were found by configure, - but a library with a usable SHA-256 functions wasn't, the build - failed. + These were caught by clang -Wdocumentation. - src/liblzma/check/check.h | 32 +++++++++++++++++++++++--------- - 1 file changed, 23 insertions(+), 9 deletions(-) + src/liblzma/api/lzma/hardware.h | 2 +- + src/liblzma/api/lzma/index_hash.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit d9311647fc1ab512a3394596221ab8039c00af6b +commit 649d4872ed2f55196114a061d45b416fc4353569 Author: Lasse Collin -Date: 2015-11-02 15:19:10 +0200 +Date: 2022-11-19 19:09:55 +0200 - xz: Always close the file before trying to delete it. - - unlink() can return EBUSY in errno for open files on some - operating systems and file systems. + xz: Refactor duplicate code from hardware_memlimit_mtenc_get(). - src/xz/file_io.c | 25 ++++++++++++------------- - 1 file changed, 12 insertions(+), 13 deletions(-) + src/xz/hardware.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit f59c4183f3c9066626ce45dc3db4642fa603fa21 +commit d327743bb547a53364e5951a16e5f1663fe4b9ff Author: Lasse Collin -Date: 2015-10-12 21:08:42 +0300 +Date: 2022-11-19 19:06:13 +0200 - Update THANKS. + xz: Add support --threads=+N so that -T+1 gives threaded mode. - THANKS | 1 + + src/xz/args.c | 18 +++++++++++++++--- + src/xz/hardware.c | 17 +++++++++++++++-- + src/xz/hardware.h | 1 + + src/xz/xz.1 | 21 ++++++++++++++++++++- + 4 files changed, 51 insertions(+), 6 deletions(-) + +commit a11a2b8b5e830ba682c1d81aaa7078842b296995 +Author: Jia Tan +Date: 2022-11-19 23:18:04 +0800 + + CMake: Adds test_memlimit to CMake tests + + CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) -commit 35f189673e280c12e4c5129f9f97e54eef3bbc04 +commit 2af8d9e9b3f44f62d19e7c39297ec63af2e8c64f Author: Lasse Collin -Date: 2015-10-12 21:07:41 +0300 +Date: 2022-11-15 19:10:21 +0200 - Tests: Add tests for the two bugs fixed in index.c. + Translations: Update the Korean translation. - tests/test_index.c | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) + po/ko.po | 652 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 371 insertions(+), 281 deletions(-) -commit e10bfdb0fcaff12f3a6dadee51e0a022aadccb51 +commit 16ac05677292f7e21a4feaddcfb2ab062ea5f385 Author: Lasse Collin -Date: 2015-10-12 20:45:15 +0300 +Date: 2022-11-15 19:09:28 +0200 - liblzma: Fix lzma_index_dup() for empty Streams. - - Stream Flags and Stream Padding weren't copied from - empty Streams. + Translations: Update the Turkish translation. - src/liblzma/common/index.c | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) + po/tr.po | 568 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 310 insertions(+), 258 deletions(-) -commit 06f434bd8980f25ca23232eb7bb7df7e37dc8448 +commit b9a67d9a5fa207062d4aa8a01639234609315d31 Author: Lasse Collin -Date: 2015-10-12 20:31:44 +0300 +Date: 2022-11-15 10:58:39 +0200 - liblzma: Add a note to index.c for those using static analyzers. + Bump version number for 5.3.4alpha. - src/liblzma/common/index.c | 3 +++ - 1 file changed, 3 insertions(+) + src/liblzma/api/lzma/version.h | 2 +- + src/liblzma/liblzma_generic.map | 2 +- + src/liblzma/liblzma_linux.map | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) -commit 9815cdf6987ef91a85493bfcfd1ce2aaf3b47a0a +commit 5b999ba289b3280457b7386b9ac65dbbdf1575a5 Author: Lasse Collin -Date: 2015-09-29 13:59:35 +0300 +Date: 2022-11-15 10:54:40 +0200 - Bump version and soname for 5.2.2. + Add NEWS for 5.3.4alpha. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + NEWS | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 96 insertions(+) -commit cbe0cec8476bdd0416c7ca9bc83895c9bea1cf78 +commit ce8db9e37da4f6c87691c5066f51f91f2411c44a Author: Lasse Collin -Date: 2015-09-29 13:57:28 +0300 +Date: 2022-11-15 10:54:08 +0200 - Update NEWS for 5.2.2. + Add NEWS for 5.2.8. - NEWS | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) + NEWS | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 79 insertions(+) -commit 49427ce7eececdd18bbd35dab23c81910d083e1c -Author: Andre Noll -Date: 2015-05-28 15:50:00 +0200 +commit b56bc8251d2736224af6bdaaae734ceb8926a879 +Author: Lasse Collin +Date: 2022-11-14 23:19:57 +0200 - Fix typo in German translation. + Revert "liblzma: Simple/BCJ filters: Allow disabling generic BCJ options." - As pointed out by Robert Pollak, there's a typo in the German - translation of the compression preset option (-0 ... -9) help text. - "The compressor" translates to "der Komprimierer", and the genitive - form is "des Komprimierers". The old word makes no sense at all. + This reverts commit 177bdc922cb17bd0fd831ab8139dfae912a5c2b8 + and also does equivalent change to arm64.c. + + Now that ARM64 filter will use lzma_options_bcj, this change + is not needed anymore. - po/de.po | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/simple/arm.c | 2 +- + src/liblzma/simple/arm64.c | 2 +- + src/liblzma/simple/armthumb.c | 2 +- + src/liblzma/simple/ia64.c | 2 +- + src/liblzma/simple/powerpc.c | 2 +- + src/liblzma/simple/simple_coder.c | 4 ++-- + src/liblzma/simple/simple_private.h | 2 +- + src/liblzma/simple/sparc.c | 2 +- + src/liblzma/simple/x86.c | 3 +-- + 9 files changed, 10 insertions(+), 11 deletions(-) -commit 608d6f06c940e7f28c25de005e8b99bdff42d27c -Author: Hauke Henningsen -Date: 2015-08-17 04:59:54 +0200 +commit 8370ec8edf9ddf8d1d9fef03d8d1027503ec4c35 +Author: Lasse Collin +Date: 2022-11-14 23:14:41 +0200 - Update German translation, mostly wrt orthography + Replace the experimental ARM64 filter with a new experimental version. - Provide an update of the German translation. - * A lot of compound words were previously written with spaces, while - German orthography is relatively clear in that the components - should not be separated. - * When referring to the actual process of (de)compression rather than the - concept, replace “(De-)Kompression” with “(De-)Komprimierung”. - Previously, both forms were used in this context and are now used in a - manner consistent with “Komprimierung” being more likely to refer to - a process. - * Consistently translate “standard input”/“output” - * Use “Zeichen” instead of false friend “Charakter” for “character” - * Insert commas around relative clauses (as required in German) - * Some other minor corrections - * Capitalize “ß” as “ẞ” - * Consistently start option descriptions in --help with capital letters + This is incompatible with the previous version. - Acked-By: Andre Noll - - * Update after msgmerge + This has space/tab fixes in filter_*.c and bcj.h too. - po/de.po | 383 ++++++++++++++++++++++++++++++++------------------------------- - 1 file changed, 196 insertions(+), 187 deletions(-) + src/liblzma/api/lzma/bcj.h | 41 +----- + src/liblzma/common/filter_common.c | 14 +- + src/liblzma/common/filter_decoder.c | 12 +- + src/liblzma/common/filter_encoder.c | 17 +-- + src/liblzma/simple/arm64.c | 283 ++++++++++++++---------------------- + src/liblzma/simple/simple_decoder.h | 4 - + src/liblzma/simple/simple_encoder.h | 2 - + src/xz/args.c | 2 +- + src/xz/message.c | 13 +- + src/xz/options.c | 39 ----- + src/xz/options.h | 7 - + 11 files changed, 147 insertions(+), 287 deletions(-) -commit c8988414e5b67b8ef2fe0ba7b1ccdd0ec73c60d3 +commit f644473a211394447824ea00518d0a214ff3f7f2 Author: Lasse Collin -Date: 2015-08-11 13:23:04 +0300 +Date: 2022-11-14 21:34:57 +0200 - Build: Minor Cygwin cleanup. + liblzma: Add fast CRC64 for 32/64-bit x86 using SSSE3 + SSE4.1 + CLMUL. - Some tests used "cygwin*" and some used "cygwin". I changed - them all to use "cygwin". Shouldn't affect anything in practice. + It also works on E2K as it supports these intrinsics. + + On x86-64 runtime detection is used so the code keeps working on + older processors too. A CLMUL-only build can be done by using + -msse4.1 -mpclmul in CFLAGS and this will reduce the library + size since the generic implementation and its 8 KiB lookup table + will be omitted. + + On 32-bit x86 this isn't used by default for now because by default + on 32-bit x86 the separate assembly file crc64_x86.S is used. + If --disable-assembler is used then this new CLMUL code is used + the same way as on 64-bit x86. However, a CLMUL-only build + (-msse4.1 -mpclmul) won't omit the 8 KiB lookup table on + 32-bit x86 due to a currently-missing check for disabled + assembler usage. + + The configure.ac check should be such that the code won't be + built if something in the toolchain doesn't support it but + --disable-clmul-crc option can be used to unconditionally + disable this feature. + + CLMUL speeds up decompression of files that have compressed very + well (assuming CRC64 is used as a check type). It is know that + the CLMUL code is significantly slower than the generic code for + tiny inputs (especially 1-8 bytes but up to 16 bytes). If that + is a real-world problem then there is already a commented-out + variant that uses the generic version for small inputs. + + Thanks to Ilya Kurdyukov for the original patch which was + derived from a white paper from Intel [1] (published in 2009) + and public domain code from [2] (released in 2016). + + [1] https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf + [2] https://github.com/rawrunprotected/crc - configure.ac | 6 +++--- + CMakeLists.txt | 26 ++- + INSTALL | 12 ++ + configure.ac | 59 +++++- + src/liblzma/check/crc64_fast.c | 449 +++++++++++++++++++++++++++++++++++++++- + src/liblzma/check/crc64_table.c | 21 +- + 5 files changed, 554 insertions(+), 13 deletions(-) + +commit 3b466bc79672bb2b06d1245a500588e6026e0ba0 +Author: Lasse Collin +Date: 2022-11-14 20:14:34 +0200 + + Translations: Update the Swedish translation one more time. + + po/sv.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -commit 85a6dfed53477906bfe9a7c0123dd412e391cb48 +commit e963379a8622ebdff6ce78e76b803bcd1e1d16d6 Author: Lasse Collin -Date: 2015-08-11 13:21:52 +0300 +Date: 2022-11-14 19:34:15 +0200 - Build: Support building of MSYS2 binaries. + Translations: Update the Swedish translation again. - configure.ac | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) + po/sv.po | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) -commit 77f270be8432df2e4516a0c48814b6976d6618c5 +commit a4bc689a823a2254f29ac9d233170add5121b307 Author: Lasse Collin -Date: 2015-08-09 21:06:26 +0300 +Date: 2022-11-14 19:07:45 +0200 - Windows: Define DLL_EXPORT when building liblzma.dll with MSVC. - - src/liblzma/common/common.h uses it to set __declspec(dllexport) - for the API symbols. - - Thanks to Adam Walling. + Translations: Update the Swedish translation. - windows/liblzma_dll.vcxproj | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) + po/sv.po | 671 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 382 insertions(+), 289 deletions(-) -commit 8c975446c5903090a5a8493b5b96b71003056a88 +commit bbf2073d824ab4ba33bed4b77f467435abd333a5 Author: Lasse Collin -Date: 2015-08-09 21:02:20 +0300 +Date: 2022-11-14 18:58:09 +0200 - Windows: Omit unneeded header files from MSVC project files. + Translations: Update the Ukrainian translation. - windows/liblzma.vcxproj | 5 ----- - windows/liblzma_dll.vcxproj | 5 ----- - 2 files changed, 10 deletions(-) + po/uk.po | 618 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 354 insertions(+), 264 deletions(-) -commit 119a00434954726ca58e4a578e6469f530fca30e +commit ac10b1b3622e70881595586edfb8a3ebdcd76bb6 Author: Lasse Collin -Date: 2015-07-12 20:48:19 +0300 +Date: 2022-11-14 17:58:07 +0200 - liblzma: A MSVC-specific hack isn't needed with MSVC 2013 and newer. + Build: Omit x86_64 from --enable-assembler. + + It didn't do anything. There are only 32-bit x86 assembly files + and it feels likely that new files won't be added as intrinsics + in C are more portable across toolchains and OSes. - src/liblzma/api/lzma.h | 18 +++++++++++++----- - 1 file changed, 13 insertions(+), 5 deletions(-) + configure.ac | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) -commit d4e7c557fcab353539c9481a8d95cb04bcb15c7c +commit eb0f1450ad9f23dac03050d9c8375980240aee21 Author: Lasse Collin -Date: 2015-06-19 20:38:55 +0300 +Date: 2022-11-14 16:00:52 +0200 - Update THANKS. + liblzma: Use __attribute__((__constructor__)) if available. + + This uses it for CRC table initializations when using --disable-small. + It avoids mythread_once() overhead. It also means that then + --disable-small --disable-threads is thread-safe if this attribute + is supported. - THANKS | 2 ++ - 1 file changed, 2 insertions(+) + CMakeLists.txt | 15 +++++++++++++++ + INSTALL | 4 +++- + configure.ac | 31 ++++++++++++++++++++++++++++--- + src/liblzma/check/crc32_small.c | 7 +++++++ + src/liblzma/check/crc64_small.c | 5 +++++ + src/liblzma/lz/lz_encoder.c | 2 +- + 6 files changed, 59 insertions(+), 5 deletions(-) -commit 98001740ca56c894a7bd32eb47e9857a8a7d878d +commit 6553f49b11dafad35c73b05f12e14865ea1fd8a1 Author: Lasse Collin -Date: 2015-06-19 20:21:30 +0300 +Date: 2022-11-12 21:19:52 +0200 - Windows: Update the docs. + Translations: Update the Romanian translation. - INSTALL | 29 ++++++++----- - windows/INSTALL-MSVC.txt | 47 ++++++++++++++++++++++ - windows/{INSTALL-Windows.txt => INSTALL-MinGW.txt} | 2 +- - 3 files changed, 67 insertions(+), 11 deletions(-) + po/ro.po | 651 +++++++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 380 insertions(+), 271 deletions(-) -commit 28195e4c877007cc760ecea1d17f740693d66873 +commit db97e69e12393becc29f8febd53133d0d36989bd Author: Lasse Collin -Date: 2015-06-19 17:25:31 +0300 +Date: 2022-11-12 21:17:45 +0200 - Windows: Add MSVC project files for building liblzma. - - Thanks to Adam Walling for creating these files. + Translations: Update the Hungarian translation. - windows/liblzma.vcxproj | 359 ++++++++++++++++++++++++++++++++++++++++ - windows/liblzma_dll.vcxproj | 388 ++++++++++++++++++++++++++++++++++++++++++++ - windows/xz_win.sln | 48 ++++++ - 3 files changed, 795 insertions(+) + po/hu.po | 625 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 357 insertions(+), 268 deletions(-) -commit 960440f3230dc628f6966d9f7614fc1b28baf44e +commit 2bbb9c0f3829a8b121b36998d273a6c6f92000f4 Author: Lasse Collin -Date: 2015-05-13 20:57:55 +0300 +Date: 2022-11-11 17:58:57 +0200 - Tests: Fix a memory leak in test_bcj_exact_size. - - Thanks to Cristian Rodríguez. + Translations: Update the Finnish translation. - tests/test_bcj_exact_size.c | 1 + - 1 file changed, 1 insertion(+) + po/fi.po | 610 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 348 insertions(+), 262 deletions(-) -commit 68cd35acafbdcdf4e8ea8b5bb843c736939d6f8b +commit 3c8cbb8137b6f8ed9416c1209d73cdbcb015251f Author: Lasse Collin -Date: 2015-05-12 18:08:24 +0300 +Date: 2022-11-11 17:58:18 +0200 - Fix NEWS about threading in 5.2.0. - - Thanks to Andy Hochhaus. + Translations: Update the Croatian translation. - NEWS | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + po/hr.po | 680 +++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 381 insertions(+), 299 deletions(-) -commit ff96ed6d25786728356017a13baf8c14731b4f1e +commit 26c3359eac0988d6f3986735cd1363bec1678e8e Author: Lasse Collin -Date: 2015-05-11 21:26:16 +0300 +Date: 2022-11-11 17:57:18 +0200 - xz: Document that threaded decompression hasn't been implemented yet. + Translations: Update the Polish translation. - src/xz/xz.1 | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) + po/pl.po | 569 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 309 insertions(+), 260 deletions(-) -commit 00d37b64a64ea8597fd2422d5187afd761ab9531 +commit 577e467b137c735afb8de6ae71ac7a73c2960cc4 Author: Lasse Collin -Date: 2015-04-20 20:20:29 +0300 +Date: 2022-11-11 17:56:44 +0200 + Translations: Update the Spanish translation. + + po/es.po | 598 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 344 insertions(+), 254 deletions(-) + +commit f9b4ff6e9a0f1678650775582d3e4fe782abce97 +Author: Lasse Collin +Date: 2022-11-11 17:16:03 +0200 + Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit db190a832c49ca3aed6d69cc992fa5583cae7b11 +commit a39961ef211e1bf030b17edeea3cff29fe263b67 Author: Lasse Collin -Date: 2015-04-20 19:59:18 +0300 +Date: 2022-11-11 17:15:25 +0200 - Revert "xz: Use pipe2() if available." + liblzma: Fix building with Intel ICC (the classic compiler). - This reverts commit 7a11c4a8e5e15f13d5fa59233b3172e65428efdd. - It is a problem when libc has pipe2() but the kernel is too - old to have pipe2() and thus pipe2() fails. In xz it's pointless - to have a fallback for non-functioning pipe2(); it's better to - avoid pipe2() completely. + It claims __GNUC__ >= 10 but doesn't support __symver__ attribute. - Thanks to Michael Fox for the bug report. + Thanks to Stephen Sachs. - configure.ac | 4 ++-- - src/xz/file_io.c | 9 +-------- - 2 files changed, 3 insertions(+), 10 deletions(-) + src/liblzma/common/common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit eccd8155e107c5ada03d13e7730675cdf1a44ddc +commit c715f683dcb1a817d565da292cddfbceda643e12 Author: Lasse Collin -Date: 2015-03-29 22:14:47 +0300 +Date: 2022-11-11 14:35:58 +0200 - Update THANKS. + liblzma: Fix incorrect #ifdef for x86 SSE2 support. + + __SSE2__ is the correct macro for SSE2 support with GCC, Clang, + and ICC. __SSE2_MATH__ means doing floating point math with SSE2 + instead of 387. Often the latter macro is defined if the first + one is but it was still a bug. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/common/memcmplen.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) -commit 25263fd9e7a8a913395cb93d7c104cd48c2b4a00 +commit bd334ae56afe7f642ad4d0f1ac19e74e82daa1ce Author: Lasse Collin -Date: 2015-03-29 22:13:48 +0300 +Date: 2022-11-11 13:27:06 +0200 - Fix the detection of installed RAM on QNX. + Add NEWS for 5.2.7 (forgotten cherry-pick from v5.2). + + NEWS | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 74 insertions(+) + +commit 3c7860cf49de6f81046b3a4034a89f3a4803a576 +Author: Lasse Collin +Date: 2022-11-11 13:16:21 +0200 + + xzdiff: Add support for .lz files. - The earlier version compiled but didn't actually work - since sysconf(_SC_PHYS_PAGES) always fails (or so I was told). + The other scripts don't need changes for .lz support because + in those scripts it is enough that xz supports .lz. + + src/scripts/xzdiff.in | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit d76c752a6d77052e5ad57ade555082585f7ac5d8 +Author: Lasse Collin +Date: 2022-11-11 12:23:58 +0200 + + Scripts: Ignore warnings from xz. - Thanks to Ole André Vadla Ravnås for the patch and testing. + In practice this means making the scripts work when + the input files have an unsupported check type which + isn't a problem in practice unless support for + some check types has been disabled at build time. - m4/tuklib_physmem.m4 | 6 +++--- - src/common/tuklib_physmem.c | 14 +++++++++++++- - 2 files changed, 16 insertions(+), 4 deletions(-) + src/scripts/xzdiff.in | 5 +++-- + src/scripts/xzgrep.in | 2 +- + src/scripts/xzless.in | 4 ++-- + src/scripts/xzmore.in | 4 ++-- + 4 files changed, 8 insertions(+), 7 deletions(-) -commit 4c544d2410903d38402221cb783ed85585b6a007 +commit 6552535afd1fe29d726ab6e68cf14ce3624fd48c Author: Lasse Collin -Date: 2015-03-27 22:39:07 +0200 +Date: 2022-11-10 12:34:43 +0200 - Fix CPU core count detection on QNX. + Translations: Rename poa4/fr_FR.po to po4a/fr.po. - It tried to use sysctl() on QNX but - - it broke the build because sysctl() needs -lsocket on QNX; - - sysctl() doesn't work for detecting the core count on QNX - even if it compiled. + That's how it is preferred at the Translation Project. + On my system /usr/share/man/fr_FR doesn't contain any + other man pages than XZ Utils while /usr/share/man/fr + has quite a few, so this will fix that too. - sysconf() works. An alternative would have been to use - QNX-specific SYSPAGE_ENTRY(num_cpu) from . - - Thanks to Ole André Vadla Ravnås. + Thanks to Benno Schulenberg from the Translation Project. - m4/tuklib_cpucores.m4 | 15 +++++++++++---- - 1 file changed, 11 insertions(+), 4 deletions(-) + po4a/{fr_FR.po => fr.po} | 0 + po4a/po4a.conf | 2 +- + 2 files changed, 1 insertion(+), 1 deletion(-) -commit e0ea6737b03e83ccaff4514d00e31bb926f8f0f3 +commit 0918159ce4c75bfb60aff0193b559f8a9f41d25a Author: Lasse Collin -Date: 2015-03-07 22:05:57 +0200 +Date: 2022-11-09 18:48:50 +0200 - xz: size_t/uint32_t cleanup in options.c. + xz: Update the man page about BCJ filters, including upcoming --arm64. + + The --arm64 isn't actually implemented yet in the form + described in this commit. + + Thanks to Jia Tan. - src/xz/options.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) + src/xz/xz.1 | 66 +++++++++++++++++++++++++++---------------------------------- + 1 file changed, 29 insertions(+), 37 deletions(-) -commit 8bcca29a65335fd679c13814b70b35b68fa5daed +commit ba2ae3596f6be1587495f33b367488f6e00e56f1 Author: Lasse Collin -Date: 2015-03-07 22:04:23 +0200 +Date: 2022-11-09 18:14:14 +0200 - xz: Fix a comment and silence a warning in message.c. + xz: Add --arm64 to --long-help and omit endianness from ARM(-Thumb). + + Modern 32-bit ARM in big endian mode use little endian for + instruction encoding still, so the filters work on such + executables too. It's likely less confusing for users this way. + + The --arm64 option hasn't been implemented yet (there is + --experimental-arm64 but it's different). The --arm64 option + is added now anyway because this is the likely result and the + strings need to be ready for translators. + + Thanks to Jia Tan. src/xz/message.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) -commit f243f5f44c6b19a7c289a0ec73a03ee08364cb5b +commit 802d57d9215d9c81dbee86edb43c9e93a7f7ec55 Author: Lasse Collin -Date: 2015-03-07 22:01:00 +0200 +Date: 2022-11-09 15:12:13 +0200 - liblzma: Silence more uint32_t vs. size_t warnings. + Windows: Update the VS project files for ARM64 and .lz support. - src/liblzma/lz/lz_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + windows/vs2013/config.h | 9 +++++++++ + windows/vs2013/liblzma.vcxproj | 5 ++++- + windows/vs2013/liblzma_dll.vcxproj | 5 ++++- + windows/vs2017/config.h | 9 +++++++++ + windows/vs2017/liblzma.vcxproj | 3 +++ + windows/vs2017/liblzma_dll.vcxproj | 3 +++ + windows/vs2019/config.h | 9 +++++++++ + windows/vs2019/liblzma.vcxproj | 5 ++++- + windows/vs2019/liblzma_dll.vcxproj | 5 ++++- + 9 files changed, 49 insertions(+), 4 deletions(-) -commit 7f0a4c50f4a374c40acf4b86848f301ad1e82d34 +commit 5846aeda05972bc803c6094821ae836229ebe691 Author: Lasse Collin -Date: 2015-03-07 19:54:00 +0200 +Date: 2022-11-09 14:57:48 +0200 - xz: Make arg_count an unsigned int to silence a warning. - - Actually the value of arg_count cannot exceed INT_MAX - but it's nicer as an unsigned int. + DOS: Update Makefile and config.h to include ARM64 and .lz support. - src/xz/args.h | 2 +- - src/xz/main.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + dos/Makefile | 2 ++ + dos/config.h | 9 +++++++++ + 2 files changed, 11 insertions(+) -commit f6ec46801588b1be29c07c9db98558b521304002 +commit 781da8d6c44de6aa278c916375250668a0b107f2 Author: Lasse Collin -Date: 2015-03-07 19:33:17 +0200 +Date: 2022-11-09 14:45:05 +0200 - liblzma: Fix a warning in index.c. + CMake: Add lzip decoder files and #define to the build. - src/liblzma/common/index.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) -commit a24518971cc621315af142dd3bb7614fab04ad27 +commit df8ad4af65a9c4846b108550d0083770a69dee64 Author: Lasse Collin -Date: 2015-02-26 20:46:14 +0200 +Date: 2022-11-09 14:41:56 +0200 - Build: Fix a CR+LF problem when running autoreconf -fi on OS/2. + Docs: Update INSTALL and also add new prohibited options to PACKAGERS. - build-aux/version.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + INSTALL | 49 +++++++++++++++++++++++++++++++++++++++++-------- + PACKAGERS | 2 ++ + 2 files changed, 43 insertions(+), 8 deletions(-) -commit dec11497a71518423b5ff0e759100cf8aadf6c7b +commit c8ef089c149afaab413c3a51be827dd1d11afe0e Author: Lasse Collin -Date: 2015-02-26 16:53:44 +0200 +Date: 2022-10-20 17:39:06 +0300 - Bump version and soname for 5.2.1. + Tests: Test the .lz files in test_files.sh. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + tests/test_files.sh | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) -commit 29e39c79975ab89ee5dd671e97064534a9f3a649 +commit c8f70ebb4628ceb6cb29cc9195d9deadf69d2bd7 Author: Lasse Collin -Date: 2015-02-26 13:01:09 +0200 +Date: 2022-10-20 15:35:59 +0300 - Update NEWS for 5.2.1. + Tests: Add .lz (lzip) test files. - NEWS | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) + tests/files/README | 109 +++++++++++++++++++++++++++++---- + tests/files/bad-1-v0-uncomp-size.lz | Bin 0 -> 42 bytes + tests/files/bad-1-v1-crc32.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-dict-1.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-dict-2.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-magic-1.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-magic-2.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-member-size.lz | Bin 0 -> 50 bytes + tests/files/bad-1-v1-trailing-magic.lz | Bin 0 -> 54 bytes + tests/files/bad-1-v1-uncomp-size.lz | Bin 0 -> 50 bytes + tests/files/good-1-v0-trailing-1.lz | Bin 0 -> 59 bytes + tests/files/good-1-v0.lz | Bin 0 -> 42 bytes + tests/files/good-1-v1-trailing-1.lz | Bin 0 -> 67 bytes + tests/files/good-1-v1-trailing-2.lz | Bin 0 -> 70 bytes + tests/files/good-1-v1.lz | Bin 0 -> 50 bytes + tests/files/good-2-v0-v1.lz | Bin 0 -> 78 bytes + tests/files/good-2-v1-v0.lz | Bin 0 -> 78 bytes + tests/files/good-2-v1-v1.lz | Bin 0 -> 86 bytes + tests/files/unsupported-1-v234.lz | Bin 0 -> 50 bytes + 19 files changed, 98 insertions(+), 11 deletions(-) -commit 7a11c4a8e5e15f13d5fa59233b3172e65428efdd +commit 731db13e6fa3ad3e3fc786c0ccf6eac4cce6865f Author: Lasse Collin -Date: 2015-02-22 19:38:48 +0200 +Date: 2022-10-19 22:32:51 +0300 - xz: Use pipe2() if available. + xz: Remove the commented-out FORMAT_GZIP, gzip, .gz, and .tgz. - configure.ac | 4 ++-- - src/xz/file_io.c | 9 ++++++++- - 2 files changed, 10 insertions(+), 3 deletions(-) + src/xz/args.c | 2 -- + src/xz/coder.h | 1 - + src/xz/suffix.c | 9 --------- + 3 files changed, 12 deletions(-) -commit 117d962685c72682c63edc9bb765367189800202 +commit 3176f992c55b8d788c4633809aaf9447376a5a12 Author: Lasse Collin -Date: 2015-02-21 23:40:26 +0200 +Date: 2022-10-08 21:28:15 +0300 - liblzma: Fix a compression-ratio regression in LZMA1/2 in fast mode. + xz: Add .lz (lzip) decompression support. - The bug was added in the commit - f48fce093b07aeda95c18850f5e086d9f2383380 and thus - affected 5.1.4beta and 5.2.0. Luckily the bug cannot - cause data corruption or other nasty things. + If configured with --disable-lzip-decoder then --long-help will + still list `lzip' in --format but I left it like that since + due to translations it would be messy to have two help strings. + Features are disabled only in special situations so wrong help + in such a situation shouldn't matter much. + + Thanks to Michał Górny for the original patch. - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/xz/args.c | 9 ++++++++ + src/xz/coder.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/xz/coder.h | 3 +++ + src/xz/message.c | 2 +- + src/xz/suffix.c | 26 ++++++++++++++++++---- + src/xz/xz.1 | 46 +++++++++++++++++++++++++++++++++----- + 6 files changed, 141 insertions(+), 13 deletions(-) -commit ae984e31c167d3bc52972ec422dd1ebd5f5d5719 +commit 034086e1ae1459210837a24e04878435c86dc41b Author: Lasse Collin -Date: 2015-02-21 23:00:19 +0200 +Date: 2022-10-08 00:29:20 +0300 - xz: Fix the fcntl() usage when creating a pipe for the self-pipe trick. + liblzma: Add .lz support to lzma_auto_decoder(). - Now it reads the old flags instead of blindly setting O_NONBLOCK. - The old code may have worked correctly, but this is better. + Thanks to Michał Górny for the original patch. - src/xz/file_io.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) + src/liblzma/api/lzma/container.h | 10 ++++++---- + src/liblzma/common/Makefile.inc | 3 ++- + src/liblzma/common/auto_decoder.c | 23 +++++++++++++++++------ + src/liblzma/common/lzip_decoder.h | 22 ++++++++++++++++++++++ + 4 files changed, 47 insertions(+), 11 deletions(-) -commit 2205bb5853098aea36a56df6f5747037175f66b4 +commit 0538db038f3cdc352007dacb42454aa1806b8e40 Author: Lasse Collin -Date: 2015-02-10 15:29:34 +0200 +Date: 2022-10-06 15:50:20 +0300 - Update THANKS. + liblzma: Add .lz (lzip) decompression support (format versions 0 and 1). + + Support for format version 0 was removed from lzip 1.18 for some + reason. .lz format version 0 files are rare (and old) but some + source packages were released in this format, and some people might + have personal files in this format too. It's very little extra code + to support it along side format version 1 so this commits adds + support for both. + + The Sync Flush marker extentension to the original .lz format + version 1 isn't supported. It would require changes to the + LZMA decoder itself. Such files are very rare anyway. + + See the API doc for lzma_lzip_decoder() for more details about + the .lz format support. + + Thanks to Michał Górny for the original patch. - THANKS | 1 + - 1 file changed, 1 insertion(+) + configure.ac | 21 ++ + src/liblzma/api/lzma/container.h | 62 +++++- + src/liblzma/common/Makefile.inc | 5 + + src/liblzma/common/lzip_decoder.c | 413 ++++++++++++++++++++++++++++++++++++++ + src/liblzma/liblzma_generic.map | 1 + + src/liblzma/liblzma_linux.map | 1 + + 6 files changed, 501 insertions(+), 2 deletions(-) -commit d935b0cdf3db440269b9d952b2b281b18f8c7b08 +commit 633d48a075b9ce4b9c08a7a56a7eb4cabc18100c Author: Lasse Collin -Date: 2015-02-10 15:28:30 +0200 +Date: 2022-11-09 14:17:23 +0200 - tuklib_cpucores: Use cpuset_getaffinity() on FreeBSD if available. + liblzma: Add the missing Makefile.inc change for --disable-microlzma. - In FreeBSD, cpuset_getaffinity() is the preferred way to get - the number of available cores. + This was forgotten from commit 59c4d6e1390f6f4176f43ac1dad1f7ac03c449b8. + + src/liblzma/common/Makefile.inc | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit 724285dadbdc88765c8fb83eab9816575a260966 +Author: Lasse Collin +Date: 2022-11-09 14:10:52 +0200 + + xz: Add comments about stdin and src_st.st_size. - Thanks to Rui Paulo for the patch. I edited it slightly, but - hopefully I didn't break anything. + "xz -v < regular_file > out.xz" doesn't display the percentage + and estimated remaining time because it doesn't even try to + check the input file size when input is read from stdin. + This could be improved but for now there's just a comment + to remind about it. - m4/tuklib_cpucores.m4 | 23 ++++++++++++++++++++++- - src/common/tuklib_cpucores.c | 18 ++++++++++++++++++ - 2 files changed, 40 insertions(+), 1 deletion(-) + src/xz/coder.c | 9 +++++++++ + src/xz/file_io.c | 4 ++++ + 2 files changed, 13 insertions(+) -commit eb61bc58c20769cac4d05f363b9c0e8c9c71a560 +commit f723eec68b0e44234910f669a29119de33018967 Author: Lasse Collin -Date: 2015-02-09 22:08:37 +0200 +Date: 2022-11-09 12:48:22 +0200 - xzdiff: Make the mktemp usage compatible with FreeBSD's mktemp. + xz: Fix displaying of file sizes in progress indicator in passthru mode. - Thanks to Rui Paulo for the fix. + It worked for one input file since the counters are zero when + xz starts but they weren't reset when starting a new file in + passthru mode. For example, if files A, B, and C are one byte each, + then "xz -dcvf A B C" would show file sizes as 1, 2, and 3 bytes + instead of 1, 1, and 1 byte. - src/scripts/xzdiff.in | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) + src/xz/coder.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) -commit b9a5b6b7a29029680af733082b6a46e0fc01623a +commit 69265d0f223ddf1d66f799b8b047df22923e376f Author: Lasse Collin -Date: 2015-02-03 21:45:53 +0200 +Date: 2022-11-09 11:27:20 +0200 - Add a few casts to tuklib_integer.h to silence possible warnings. + xz: Add a comment why --to-stdout is not in --help. - I heard that Visual Studio 2013 gave warnings without the casts. - - Thanks to Gabi Davar. + It is on the man page still. - src/common/tuklib_integer.h | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) + src/xz/message.c | 3 +++ + 1 file changed, 3 insertions(+) -commit c45757135f40e4a0de730ba5fff0100219493982 +commit fe6b8852a3c6a0eb5a3c33512e0a69af257d3bc7 Author: Lasse Collin -Date: 2015-01-26 21:24:39 +0200 +Date: 2022-11-08 23:05:37 +0200 - liblzma: Set LZMA_MEMCMPLEN_EXTRA depending on the compare method. + xz: Make xz -lvv show that the upcoming --arm64 needs 5.4.0 to decompress. - src/liblzma/common/memcmplen.h | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) + src/xz/list.c | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) -commit 3c500174ed5485f550972a2a6109c361e875f069 +commit fb3f05ac9f2b4b0e3643401960fbeab31997ac7a Author: Lasse Collin -Date: 2015-01-26 20:40:16 +0200 +Date: 2022-11-08 22:26:54 +0200 - Update THANKS. + Docs: Update faq.txt a little. - THANKS | 1 + - 1 file changed, 1 insertion(+) + doc/faq.txt | 66 ++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 43 insertions(+), 23 deletions(-) -commit fec88d41e672d9e197c9442aecf02bd0dfa6d516 +commit 05331f091ec3b68eccbfb2a9a7a576072768fb4b Author: Lasse Collin -Date: 2015-01-26 20:39:28 +0200 +Date: 2022-11-08 16:57:17 +0200 - liblzma: Silence harmless Valgrind errors. - - Thanks to Torsten Rupp for reporting this. I had - forgotten to run Valgrind before the 5.2.0 release. + Translations: Update Turkish translation. - src/liblzma/lz/lz_encoder.c | 6 ++++++ - 1 file changed, 6 insertions(+) + po/tr.po | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit a9b45badfec0928d20a27c7176c005fa637f7d1e +commit ed3a4822963b4940d84e6f44d47277c394fc046d Author: Lasse Collin -Date: 2015-01-09 21:50:19 +0200 +Date: 2022-11-08 14:55:32 +0200 - xz: Fix comments. + Translations: Update Croatian translation. - src/xz/file_io.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) + po/hr.po | 190 ++++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 96 insertions(+), 94 deletions(-) -commit 541aee6dd4aa97a809aba281475a21b641bb89e2 +commit 4746f5ec721316bc4c6fec9905b2902e0360e0af Author: Lasse Collin -Date: 2015-01-09 21:35:06 +0200 +Date: 2022-11-08 14:13:03 +0200 - Update THANKS. + liblzma: Update API docs about decoder flags. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/api/lzma/container.h | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) -commit 4170edc914655310d2363baccf5e615e09b04911 +commit 8779a9db5d0cec00c9dc9e9965dd2dda04f9d80d Author: Lasse Collin -Date: 2015-01-09 21:34:06 +0200 +Date: 2022-11-08 14:01:50 +0200 - xz: Don't fail if stdout doesn't support O_NONBLOCK. + liblzma: Use the return_if_error() macro in alone_decoder.c. + + src/liblzma/common/alone_decoder.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 3f4990b6822961e75cd9b4e2e82b1df63f6f8fcc +Author: Lasse Collin +Date: 2022-11-08 14:00:58 +0200 + + liblzma: Fix a comment in auto_decoder.c. + + src/liblzma/common/auto_decoder.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 026a5897c72a2041ae08ceec54ce8b1cdeb51334 +Author: Lasse Collin +Date: 2022-11-08 13:43:19 +0200 + + xz: Initialize the pledge(2) sandbox at the very beginning of main(). - This is similar to the case with stdin. + It feels better that the initializations are sandboxed too. + They don't do anything that the pledge() call wouldn't allow. + + src/xz/main.c | 27 ++++++++++++++------------- + 1 file changed, 14 insertions(+), 13 deletions(-) + +commit 49a59f6ca001c3ce9affa2c162b437aad021b4d5 +Author: Lasse Collin +Date: 2022-11-07 22:51:16 +0200 + + xz: Extend --robot --info-memory output. - Thanks to Brad Smith for the bug report and testing - on OpenBSD. + Now it includes everything that the human-readable --info-memory shows. - src/xz/file_io.c | 36 +++++++++++++++--------------------- - 1 file changed, 15 insertions(+), 21 deletions(-) + src/xz/hardware.c | 24 +++++++++++++++--------- + src/xz/xz.1 | 47 +++++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 56 insertions(+), 15 deletions(-) -commit 04bbc0c2843c50c8ad1cba42b937118e38b0508d +commit 5e2450c75cbac966c62cf2231c824f2cc91ddba8 Author: Lasse Collin -Date: 2015-01-07 19:18:20 +0200 +Date: 2022-11-07 17:22:04 +0200 - xz: Fix a memory leak in DOS-specific code. + liblzma: Include cached memory in reported memusage in threaded decoder. + + This affects lzma_memusage() and lzma_memlimit_set() when used + with the threaded decompressor. Now all allocations are reported + by lzma_memusage() (so it's not misleading) and lzma_memlimit_set() + cannot lower the limit below that value. + + The alternative would have been to allow lowering the limit if + doing so is possible by freeing the cached memory but since + the primary use case of lzma_memlimit_set() is to increase + memlimit after LZMA_MEMLIMIT_ERROR this simple approach + was selected. + + The cached memory was always included when enforcing + the memory usage limit while decoding. + + Thanks to Jia Tan. - src/xz/file_io.c | 2 ++ - 1 file changed, 2 insertions(+) + src/liblzma/common/stream_decoder_mt.c | 22 +++++++++++++++++++--- + 1 file changed, 19 insertions(+), 3 deletions(-) -commit f0f1f6c7235ffa901cf76fe18e33749e200b3eea +commit 1fc6e7dd1fabdb60124d449b99273330ccab3ff1 +Author: Jia Tan +Date: 2022-11-07 16:24:14 +0200 + + xz: Avoid a compiler warning in progress_speed() in message.c. + + This should be smaller too since it avoids the string constants. + + src/xz/message.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +commit cf118c014683069b5dbe91898acdc40f2f0a1f5d Author: Lasse Collin -Date: 2015-01-07 19:08:06 +0200 +Date: 2022-10-31 16:26:05 +0200 - xz: Don't fail if stdin doesn't support O_NONBLOCK. + Build: Clarify comment in configure.ac about SSE2. + + configure.ac | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit aad3c609ffb72f581a7a2b67be3ad70b2b327840 +Author: Lasse Collin +Date: 2022-10-31 16:16:37 +0200 + + Build: Remove obsolete commented-out lines from configure.ac. + + configure.ac | 4 ---- + 1 file changed, 4 deletions(-) + +commit e53e0e2186c6b8ce866bd19aec52f1c318ed31ba +Author: Lasse Collin +Date: 2022-10-31 13:31:58 +0200 + + Windows: Fix mythread_once() macro with Vista threads. - It's a problem at least on OpenBSD which doesn't support - O_NONBLOCK on e.g. /dev/null. I'm not surprised if it's - a problem on other OSes too since this behavior is allowed - in POSIX-1.2008. + Don't call InitOnceComplete() if initialization was already done. - The code relying on this behavior was committed in June 2013 - and included in 5.1.3alpha released on 2013-10-26. Clearly - the development releases only get limited testing. + So far mythread_once() has been needed only when building + with --enable-small. windows/build.bash does this together + with --disable-threads so the Vista-specific mythread_once() + is never needed by those builds. VS project files or + CMake-builds don't support HAVE_SMALL builds at all. - src/xz/file_io.c | 18 +++++++----------- - 1 file changed, 7 insertions(+), 11 deletions(-) + src/common/mythread.h | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit d2d484647d9d9d679f03c75abb0404f67069271c +commit 48dde3bab9dc04081acb5aa7cf7c5044b8a49f58 Author: Lasse Collin -Date: 2015-01-06 20:30:15 +0200 +Date: 2022-10-31 11:54:44 +0200 - Tests: Don't hide unexpected error messages in test_files.sh. + liblzma: Silence -Wconversion warning from crc64_fast.c. + + src/liblzma/check/crc64_fast.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit a243c617ff249d915ac123de4f536b80322c1fdb +Author: Lasse Collin +Date: 2022-10-31 11:49:47 +0200 + + CMake: Sync tuklib_cpucores.cmake with tuklib_cpucores.m4. - Hiding them makes no sense since normally there's no error - when testing the "good" files. With "bad" files errors are - expected and then it makes sense to keep the messages hidden. + This was forgotten from commit 2611c4d90535652d3eb7ef4a026a6691276fab43. - tests/test_files.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + cmake/tuklib_cpucores.cmake | 5 +++++ + 1 file changed, 5 insertions(+) -commit aae6a6aeda51cf94a47e39ad624728f9bee75e30 +commit 05c72de06fcaaedc78f8abba7d5ec568ddcf1e75 Author: Lasse Collin -Date: 2014-12-30 11:17:16 +0200 +Date: 2022-10-27 15:49:18 +0300 - Update Solaris notes in INSTALL. + Tests: test_files.sh: Make it not fail if features were disabled at build. - Mention the possible "make check" failure on Solaris in the - Solaris-specific section of INSTALL. It was already in - section 4.5 but it is better mention it in the OS-specific - section too. + It now tries to test as many files as easily possible. + The exit status indicates skipping if any of the files were + skipped. This way it is easy to notice if something is being + skipped when it isn't expected. - INSTALL | 4 ++++ - 1 file changed, 4 insertions(+) + tests/test_files.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 46 insertions(+), 4 deletions(-) -commit 7815112153178800a3521b9f31960e7cdc26cfba +commit b3459327a51f4b8239d19e6c34b4e0c6bc2d81de Author: Lasse Collin -Date: 2014-12-26 12:00:05 +0200 +Date: 2022-10-27 15:30:13 +0300 - Build: POSIX shell isn't required if scripts are disabled. + Tests: test_files.sh: Suppress an expected warning from the log. + + xz (but not xzdec) will normally warn about unsupported check + but since we are testing specifically such a file, it's better + to silence that warning so that it doesn't look suspicious in + test_files.sh.log. + + The use of -q and -Q in xzdec is just for consistency and + doesn't affect the result at least for now. - INSTALL | 3 ++- - configure.ac | 2 +- - 2 files changed, 3 insertions(+), 2 deletions(-) + tests/test_files.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit a0cd05ee71d330b79ead6eb9222e1b24e1559d3a +commit 798c86e4231e0835ab76ccd0810c8ea30833b2ce Author: Lasse Collin -Date: 2014-12-21 20:48:37 +0200 +Date: 2022-10-27 15:27:50 +0300 - DOS: Update Makefile. + Tests: test_files.sh: Print the reason for skipping if xz & xzdec missing. - dos/Makefile | 1 + + tests/test_files.sh | 1 + 1 file changed, 1 insertion(+) -commit b85ee0905ec4ab7656d22e63519fdd3bedb21f2e +commit c1dd8524e1af07f16b790463899de06a6a5fcc08 Author: Lasse Collin -Date: 2014-12-21 19:50:38 +0200 +Date: 2022-10-27 01:12:40 +0300 - Windows: Fix bin_i486 to bin_i686 in build.bash. + Tests: Keep test_compress_* working when some filters are unavailable. - windows/build.bash | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + tests/test_compress.sh | 34 ++++++++++++++++++++-------------- + 1 file changed, 20 insertions(+), 14 deletions(-) -commit cbafa710918195dbba3db02c3fab4f0538235206 -Author: Lasse Collin -Date: 2014-12-21 18:58:44 +0200 +commit ce30ada91951d0746879ae438da11f1ee8a90aa0 +Author: Jia Tan +Date: 2022-10-23 21:01:08 +0800 - Docs: Use lzma_cputhreads() in 04_compress_easy_mt.c. + Tests: test_bcj_exact_size skips properly now if PowerPC filter disabled. - doc/examples/04_compress_easy_mt.c | 30 ++++++++++++++++++++++++++---- - 1 file changed, 26 insertions(+), 4 deletions(-) + tests/test_bcj_exact_size.c | 3 +++ + 1 file changed, 3 insertions(+) -commit 8dbb57238d372c7263cfeb3e7f7fd9a73173156a +commit 89c5cfcacaca7130509fac836e2f30c46b824502 Author: Lasse Collin -Date: 2014-12-21 18:56:44 +0200 +Date: 2022-10-26 00:05:57 +0300 - Docs: Update docs/examples/00_README.txt. + Tests: Test also unsupported-*.xz. - doc/examples/00_README.txt | 4 ++++ - 1 file changed, 4 insertions(+) + tests/test_files.sh | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) -commit 6060f7dc76fd6c2a8a1f8e85d0e4d86bb78273e6 +commit a4b214b93ac741edef9c41e55865b0b867ca2587 Author: Lasse Collin -Date: 2014-12-21 18:11:17 +0200 +Date: 2022-10-25 23:45:03 +0300 - Bump version and soname for 5.2.0. + Build: Use AC_CONFIG_HEADERS instead of the ancient AC_CONFIG_HEADER. - I know that soname != app version, but I skip AGE=1 - in -version-info to make the soname match the liblzma - version anyway. It doesn't hurt anything as long as - it doesn't conflict with library versioning rules. + We require Autoconf >= 2.69 and that has AC_CONFIG_HEADERS. + + There is a warning about AC_PROG_CC_C99 being obsolete but + it cannot be removed because it is needed with Autoconf 2.69. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 6 +++--- - src/liblzma/liblzma.map | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 3e8bd1d15e417f2d588e9be50ce027ee3d48b2da +commit 04f299b64e73f50afc188c2590ebebc6b73ed744 Author: Lasse Collin -Date: 2014-12-21 18:05:03 +0200 +Date: 2022-10-25 23:31:44 +0300 - Avoid variable-length arrays in the debug programs. + Build: Update m4/ax_pthread.m4 from Autoconf Archive. - debug/full_flush.c | 3 ++- - debug/sync_flush.c | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) + m4/ax_pthread.m4 | 29 ++++++++++++++++++++++------- + 1 file changed, 22 insertions(+), 7 deletions(-) -commit 72f7307cfdceb941aeb2bf30d424cc0d13621786 +commit 59c4d6e1390f6f4176f43ac1dad1f7ac03c449b8 Author: Lasse Collin -Date: 2014-12-21 18:01:45 +0200 +Date: 2022-10-25 23:28:34 +0300 - Build: Include 04_compress_easy_mt.c in the tarball. + Build: Add configure option --disable-microlzma. + + MicroLZMA was made for EROFS and used by erofs-utils. + It might be used by something else in the future but + those wanting a smaller build for specific situations + can now disable this rarely-needed feature. - Makefile.am | 1 + - 1 file changed, 1 insertion(+) + configure.ac | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) -commit 2cb82ff21c62def11f3683a8bb0aaf363102aaa0 +commit 054ccd6d14b2cc6eddc56897af280d3221414150 Author: Lasse Collin -Date: 2014-12-21 18:00:38 +0200 +Date: 2022-10-25 23:09:11 +0300 - Fix build when --disable-threads is used. + xz: Fix --single-stream with an empty .xz Stream. + + Example: + + $ xz -dc --single-stream good-0-empty.xz + xz: good-0-empty.xz: Internal error (bug) + + The code, that is tries to catch some input file issues early, + didn't anticipate LZMA_STREAM_END which is possible in that + code only when --single-stream is used. - src/common/mythread.h | 2 ++ - 1 file changed, 2 insertions(+) + src/xz/coder.c | 9 +++++++++ + 1 file changed, 9 insertions(+) -commit 9b9e3536e458ef958f66b0e8982efc9d36de4d17 -Author: Adrien Nader -Date: 2014-12-21 15:56:15 +0100 +commit 563288ea705e83ff5cb292adf794650c263bca1d +Author: Lasse Collin +Date: 2022-10-25 21:11:58 +0300 - po/fr: improve wording for help for --lzma1/--lzma2. + xz: Add support for OpenBSD's pledge() sandbox. - po/fr.po | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + configure.ac | 12 +++++++++--- + src/xz/file_io.c | 11 +++++++++++ + src/xz/main.c | 13 +++++++++++++ + src/xz/private.h | 2 +- + 4 files changed, 34 insertions(+), 4 deletions(-) -commit a8b6b569e7fadbf5b5b9139d53bc764015c15027 -Author: Adrien Nader -Date: 2014-12-21 15:55:48 +0100 +commit f9913e8ee2ba0b1e4ff4d0aa4c001aae305ed944 +Author: Lasse Collin +Date: 2022-10-25 19:07:17 +0300 - po/fr: missing line in translation of --extreme. + xz: Fix decompressor behavior if input uses an unsupported check type. + + Now files with unsupported check will make xz display + a warning, set the exit status to 2 (unless --no-warn is used), + and then decompress the file normally. This is how it was + supposed to work since the beginning but this was broken by + the commit 231c3c7098f1099a56abb8afece76fc9b8699f05, that is, + a little before 5.0.0 was released. The buggy behavior displayed + a message, set exit status 1 (error), and xz didn't attempt to + to decompress the file. + + This doesn't matter today except for special builds that disable + CRC64 or SHA-256 at build time (but such builds should be used + in special situations only). The bug matters if new check type + is added in the future and an old xz version is used to decompress + such a file; however, it's likely that such files would use a new + filter too and an old xz wouldn't be able to decompress the file + anyway. + + The first hunk in the commit is the actual fix. The second hunk + is a cleanup since LZMA_TELL_ANY_CHECK isn't used in xz. + + There is a test file for unsupported check type but it wasn't + used by test_files.sh, perhaps due to different behavior between + xz and the simpler xzdec. - po/fr.po | 1 + - 1 file changed, 1 insertion(+) + src/xz/coder.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) -commit f168a6fd1a888cf4f0caaddcafcb21dadc6ab6e9 +commit aa4fe145b9486adc454f44fd3e09be9add808a0f Author: Lasse Collin -Date: 2014-12-21 14:32:33 +0200 +Date: 2022-10-25 18:36:19 +0300 - Update NEWS for 5.2.0. + xz: Clarify the man page: input file isn't removed if an error occurs. - NEWS | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 65 insertions(+) + src/xz/xz.1 | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) -commit cec2ee863b3a88f4bf039cb00f73c4a4fc93a429 +commit 8b46ae8cdeddfd7dc01fec92971b8696e9a96c5d Author: Lasse Collin -Date: 2014-12-21 14:32:22 +0200 +Date: 2022-10-25 18:30:55 +0300 - Update NEWS for 5.0.8. + xz: Refactor to remove is_empty_filename(). + + Long ago it was used in list.c too but nowadays it's needed + only in io_open_src() so it's nicer to avoid a separate function. - NEWS | 12 ++++++++++++ - 1 file changed, 12 insertions(+) + src/xz/file_io.c | 4 +++- + src/xz/util.c | 12 ------------ + src/xz/util.h | 4 ---- + 3 files changed, 3 insertions(+), 17 deletions(-) -commit 42e97a32649bf53ce43be2258b902a417c6e7fa1 +commit 85624015978b0de294cff3df79006df987c552b1 Author: Lasse Collin -Date: 2014-12-21 14:07:54 +0200 +Date: 2022-10-25 18:23:54 +0300 - xz: Fix a comment. + xz: If input file cannot be removed, treat it as a warning, not error. + + Treating it as a warning (message + exit status 2) matches gzip + and it seems more logical as at that point the output file has + already been successfully closed. When it's a warning it is + possible to suppress it with --no-warn. - src/xz/options.c | 4 ++-- + src/xz/file_io.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -commit 29b95d5d6665cedffa6a9d6d3d914f981e852182 +commit fda9f85f52c546f7ca0313cf89481da4707fecb3 Author: Lasse Collin -Date: 2014-12-20 20:43:14 +0200 +Date: 2022-10-24 16:25:09 +0300 - Update INSTALL about the dependencies of the scripts. + liblzma: Threaded decoder: Stop the worker threads on errors. + + It's waste of CPU time and electricity to leave the unfinished + worker threads running when it is known that their output will + get ignored. - INSTALL | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) + src/liblzma/common/stream_decoder_mt.c | 33 ++++++++++++++++++++++++++------- + 1 file changed, 26 insertions(+), 7 deletions(-) -commit 3af91040bb42c21afbb81f5568c3313125e61192 +commit 2611c4d90535652d3eb7ef4a026a6691276fab43 Author: Lasse Collin -Date: 2014-12-20 20:42:33 +0200 +Date: 2022-10-20 20:22:50 +0300 - Windows: Update build instructions. + tuklib_cpucores: Use HW_NCPUONLINE on OpenBSD. + + On OpenBSD the number of cores online is often less + than what HW_NCPU would return because OpenBSD disables + simultaneous multi-threading (SMT) by default. + + Thanks to Christian Weisgerber. - INSTALL | 15 +++++++++------ - windows/INSTALL-Windows.txt | 44 +++++++++++++++++++++----------------------- - 2 files changed, 30 insertions(+), 29 deletions(-) + m4/tuklib_cpucores.m4 | 5 +++++ + src/common/tuklib_cpucores.c | 9 +++++++++ + 2 files changed, 14 insertions(+) -commit 0152f72bf6289d744823dc6c849538f3a139ad70 +commit 424ac91c7e0419393ff2bde4f62e21fa611c776d Author: Lasse Collin -Date: 2014-12-20 20:41:48 +0200 +Date: 2022-10-19 19:39:35 +0300 - Windows: Update the build script and README-Windows.txt. + Tests: Skip tests in test_*.sh if encoders and/or decoders are disabled. - The 32-bit build is now for i686 or newer because the - prebuilt MinGW-w64 toolchains include i686 code in the - executables even if one uses -march=i486. + This isn't perfect as the scripts can still fail if only + certain filters are disabled. This is still an improvement + as now "make check" has better behavior when all encoders + or decoders are disabled. - The build script builds 32-bit SSE2 enabled version too. - Run-time detection of SSE2 support would be nice (on any OS) - but it's not implemented in XZ Utils yet. + Grepping ../config.h is simple and fairly clean but it only + works if config.h was created. CMake builds don't create + config.h but they don't use these test scripts either. + + Thanks to Sebastian Andrzej Siewior for reporting the problem. + Thanks to Jia Tan for the original patch which grepped xz + error messages instead of config.h. - windows/README-Windows.txt | 30 ++++++++++++++++-------------- - windows/build.bash | 23 ++++++++++++++--------- - 2 files changed, 30 insertions(+), 23 deletions(-) + tests/test_compress.sh | 12 ++++++++++++ + tests/test_files.sh | 11 +++++++++++ + tests/test_scripts.sh | 11 +++++++++++ + 3 files changed, 34 insertions(+) -commit 4a1f6133ee5533cee8d91e06fcc22443e5f1881a +commit ca8bf9d7c5a30be8ba1eeb106fd892f19e83ed09 Author: Lasse Collin -Date: 2014-12-19 15:51:50 +0200 +Date: 2022-10-19 18:54:34 +0300 - Windows: Define TUKLIB_SYMBOL_PREFIX in config.h. + Test: Remove the (exit 1) lines. - It is to keep all symbols in the lzma_ namespace. + I suspect that I used these in the original version because + Autoconf's manual describes that such a trick is needed in + some specific situations for portability reasons. None of those + situations listed on Autoconf 2.71 manual apply to these test + scripts though so this cleans them up. - windows/config.h | 3 +++ - 1 file changed, 3 insertions(+) + tests/test_compress.sh | 10 ---------- + tests/test_files.sh | 9 --------- + tests/test_scripts.sh | 6 ------ + 3 files changed, 25 deletions(-) -commit 7f7d093de79eee0c7dbfd7433647e46302f19f82 +commit 82fcb7cfc17ce62f79ebc7ca2374e1daca5e4d5e Author: Lasse Collin -Date: 2014-12-16 21:00:09 +0200 +Date: 2022-10-19 17:14:57 +0300 - xz: Update the man page about --threads. + Tests: Fix a warning in test_memlimit.c when decoders are disabled. - src/xz/xz.1 | 5 ----- - 1 file changed, 5 deletions(-) + tests/test_memlimit.c | 3 +++ + 1 file changed, 3 insertions(+) -commit 009823448b82aa5f465668878a544c5842885407 +commit b5f8271b45b9b0e59485ffba3640ca3418835ec4 Author: Lasse Collin -Date: 2014-12-16 20:57:43 +0200 +Date: 2022-10-19 17:11:46 +0300 - xz: Update the man page about --block-size. + Tests: Add test_memlimit to .gitignore. + + Thanks to Jia Tan. - src/xz/xz.1 | 41 +++++++++++++++++++++++++++++++++-------- - 1 file changed, 33 insertions(+), 8 deletions(-) + .gitignore | 1 + + 1 file changed, 1 insertion(+) -commit 7dddfbeb499e528940bc12047355c184644aafe9 -Author: Adrien Nader -Date: 2014-12-10 22:26:57 +0100 +commit 6a86e81cab202d0a812a7b2e9efacaf70c58ba38 +Author: Jia Tan +Date: 2022-10-06 21:53:09 +0300 - po/fr: several more translation updates: reword and handle --ignore-check. + Tests: Refactor test_stream_flags.c. + + Converts test_stream_flags to tuktest. Also the test will now + compile and skip properly if encoders or decoders are disabled. + + Thanks to Sebastian Andrzej Siewior. - po/fr.po | 50 ++++++++++++++++++++++++++------------------------ - 1 file changed, 26 insertions(+), 24 deletions(-) + tests/test_stream_flags.c | 533 ++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 416 insertions(+), 117 deletions(-) -commit 6eca5be40e04ddc4b738d493e4e56835956d8b69 -Author: Adrien Nader -Date: 2014-12-10 22:23:01 +0100 +commit 827ac5b4821491fd3afe0d0e1ddac326253aeb66 +Author: Jia Tan +Date: 2022-10-06 17:00:38 +0800 - po/fr: yet another place where my email address had to be updated. + Tests: Refactor test_block_header.c. + + test_block_header now achieves higher test coverage. Also the + test will now compile and skip properly if encoders or decoders + are disabled. + + Thanks to Sebastian Andrzej Siewior. - po/fr.po | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + tests/test_block_header.c | 486 +++++++++++++++++++++++++++++++++++----------- + 1 file changed, 370 insertions(+), 116 deletions(-) -commit d1003673e92ba47edd6aeeb3dbea05c18269d0e7 -Author: Adrien Nader -Date: 2014-12-10 22:22:20 +0100 +commit 84963318952064a93bfc52edd6b0ef70593384ee +Author: Jia Tan +Date: 2022-10-05 23:54:12 +0800 - po/fr: fix several typos that have been around since the beginning. + Tests: Fix compilation issues. + + test_bcj_exact_size, test_check, test_hardware, and test_index will + all now compile and skip properly if encoders or decoders are disabled. + + Also fixed a small typo (disabed -> disabled). + + Thanks to Sebastian Andrzej Siewior. - po/fr.po | 22 +++++++++++----------- - 1 file changed, 11 insertions(+), 11 deletions(-) + tests/test_bcj_exact_size.c | 20 ++++++++++++++------ + tests/test_check.c | 8 +++++++- + tests/test_hardware.c | 2 +- + tests/test_index.c | 6 ++++++ + tests/test_memlimit.c | 16 +++++++++++++++- + tests/test_vli.c | 13 +++++++++++++ + 6 files changed, 56 insertions(+), 9 deletions(-) -commit 4c5aa911a0df027e46171e368debc543d2fa72b2 -Author: Adrien Nader -Date: 2014-12-03 20:02:31 +0100 +commit 7dcabeec63d46b436fa5f043c3d1f09d0e15be16 +Author: Lasse Collin +Date: 2022-10-05 16:20:47 +0300 - po/fr: last batch of new translations for now. + Tests: Include mythread.h in the tests that use MYTHREAD_ENABLED. + + tests/test_check.c | 1 + + tests/test_hardware.c | 1 + + tests/test_memlimit.c | 1 + + 3 files changed, 3 insertions(+) + +commit 14af758a770c7781af18fb66d6d21ee5b1c27f04 +Author: Jia Tan +Date: 2022-10-05 20:57:16 +0800 + + liblzma: Fix a compilation issue when encoders are disabled. - Four new error messages. + When encoders were disabled and threading enabled, outqueue.c and + outqueue.h were not compiled. The multi threaded decoder required + these files, so compilation failed. - po/fr.po | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) + src/liblzma/common/Makefile.inc | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit 3e3099e36d27059499e7996fb38a62e8ab01d356 -Author: Adrien Nader -Date: 2014-12-03 20:01:32 +0100 +commit 6ca5c354bd4620aa7f81da68870eef1b1f26288f +Author: Jia Tan +Date: 2022-10-05 16:41:38 +0800 - po/fr: translations for --threads, --block-size and --block-list. + Tests: Fix compilation error when threading support has been disabled. + + Now tests that require threading are skipped when threading + support has been disabled. + + Thanks to Sebastian Andrzej Siewior. - po/fr.po | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) + tests/test_check.c | 4 ++++ + tests/test_hardware.c | 4 ++++ + tests/test_memlimit.c | 4 ++++ + 3 files changed, 12 insertions(+) -commit e7d96a5933eec4e9d4a62569ee88df0ebb0f1d53 -Author: Adrien Nader -Date: 2014-12-03 20:00:53 +0100 +commit fae37ad2affd8fe8871f4ff93d5cab5ec14d5e58 +Author: Lasse Collin +Date: 2022-10-05 14:26:00 +0300 - po/fr: remove fuzzy marker for error messages that will be kept in English. + tuklib_integer: Add 64-bit endianness-converting reads and writes. - The following is a copy of a comment inside fr.po: + Also update the comment in liblzma's memcmplen.h. - Note from translator on "file status flags". - The following entry is kept un-translated on purpose. It is difficult to - translate and should only happen in exceptional circumstances which means - that translating would: - - lose some of the meaning - - make it more difficult to look up in search engines; it might happen one - in - a million times, if we dilute the error message in 20 languages, it will be - almost impossible to find an explanation and support for the error. + Thanks to Michał Górny for the original patch for the reads. - po/fr.po | 22 ++++++++++++++++------ - 1 file changed, 16 insertions(+), 6 deletions(-) + m4/tuklib_integer.m4 | 8 ++++---- + src/common/tuklib_integer.h | 46 ++++++++++++++++++++++++++++++++++++++++-- + src/liblzma/common/memcmplen.h | 9 +++------ + 3 files changed, 51 insertions(+), 12 deletions(-) -commit 46cbb9033af8a21fafe543302d6919746e0d72af -Author: Adrien Nader -Date: 2014-12-03 19:58:25 +0100 +commit 508a44372c5b0dede8863fd0d358d4a9d8645c95 +Author: Lasse Collin +Date: 2022-09-30 12:06:13 +0300 - po/fr: several minor updates and better wording. + liblzma: Add API doc note about the .xz decoder LZMA_MEMLIMIT_ERROR bug. - Meaning doesn't change at all: it's only for better wording and/or - formatting of a few strings. + The bug was fixed in 660739f99ab211edec4071de98889fb32ed04e98. - po/fr.po | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) + src/liblzma/api/lzma/base.h | 11 +++++++++++ + 1 file changed, 11 insertions(+) -commit 7ce49d444f04e73145f79c832eb4d510594b074a -Author: Adrien Nader -Date: 2014-12-03 19:56:12 +0100 +commit 8cc9874a7974cd575aee44f218836f7acdbeb0ed +Author: Jia Tan +Date: 2022-09-21 16:15:50 +0800 - po/fr: update my email address and copyright years. + liblzma: Add dest and src NULL checks to lzma_index_cat. + + The documentation states LZMA_PROG_ERROR can be returned from + lzma_index_cat. Previously, lzma_index_cat could not return + LZMA_PROG_ERROR. Now, the validation is similar to + lzma_index_append, which does a NULL check on the index + parameter. - po/fr.po | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + src/liblzma/common/index.c | 3 +++ + 1 file changed, 3 insertions(+) -commit 214c553ebc3047cd720da1ce5c80cf7c38118d3c -Author: Adrien Nader -Date: 2014-11-26 10:08:26 +0100 +commit afd5a8bf5374eba82804a999e1ea7af680784086 +Author: Jia Tan +Date: 2022-09-21 20:29:28 +0800 - fr.po: commit file after only "update-po" so actual is readable. + Tests: Create a test for the lzma_index_cat bug. - po/fr.po | 311 ++++++++++++++++++++++++++++++++++++++++----------------------- - 1 file changed, 199 insertions(+), 112 deletions(-) + tests/test_index.c | 43 ++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 42 insertions(+), 1 deletion(-) -commit 1190c641af09cde85f8bd0fbe5c4906f4a29431b +commit 3d5a99ca373a4e86faf671226ca6487febb9eeac +Author: Jia Tan +Date: 2022-09-21 19:28:53 +0800 + + liblzma: Fix copying of check type statistics in lzma_index_cat(). + + The check type of the last Stream in dest was never copied to + dest->checks (the code tried to copy it but it was done too late). + This meant that the value returned by lzma_index_checks() would + only include the check type of the last Stream when multiple + lzma_indexes had been concatenated. + + In xz --list this meant that the summary would only list the + check type of the last Stream, so in this sense this was only + a visual bug. However, it's possible that some applications + use this information for purposes other than merely showing + it to the users in an informational message. I'm not aware of + such applications though and it's quite possible that such + applications don't exist. + + Regular streamed decompression in xz or any other application + doesn't use lzma_index_cat() and so this bug cannot affect them. + + src/liblzma/common/index.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit a61d32172789735350a941e23baf6b587c49e5d9 Author: Lasse Collin -Date: 2014-12-02 20:04:07 +0200 +Date: 2022-09-28 12:20:41 +0300 - liblzma: Document how lzma_mt.block_size affects memory usage. + tuklib_physmem: Fix Unicode builds on Windows. + + Thanks to ArSaCiA Game. - src/liblzma/api/lzma/container.h | 4 ++++ - 1 file changed, 4 insertions(+) + src/common/tuklib_physmem.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit e4fc1d2f9571fba79ce383595be2ea2a9257def0 +commit 5a4d3548ab214fdca364d5c734baf1d1fab47308 Author: Lasse Collin -Date: 2014-11-28 20:07:18 +0200 +Date: 2022-09-28 11:12:07 +0300 - Update INSTALL about a "make check" failure in test_scripts.sh. + Tests: Add test_memlimit.c to test restarting after LZMA_MEMLIMIT_ERROR. - INSTALL | 24 +++++++++++++++++------- - 1 file changed, 17 insertions(+), 7 deletions(-) + tests/Makefile.am | 2 + + tests/test_memlimit.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 153 insertions(+) -commit 34f9e40a0a0c3bd2c2730cdb9cd550bbb8a3f2fe +commit 660739f99ab211edec4071de98889fb32ed04e98 Author: Lasse Collin -Date: 2014-11-26 20:12:27 +0200 +Date: 2022-09-28 11:05:15 +0300 - Remove LZMA_UNSTABLE macro. + liblzma: Stream decoder: Fix restarting after LZMA_MEMLIMIT_ERROR. + + If lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible + to use lzma_memlimit_set() to increase the limit and continue + decoding. This was supposed to work from the beginning but + there was a bug. With other decoders (.lzma or threaded .xz) + this already worked correctly. - src/liblzma/api/lzma/container.h | 4 ---- - src/liblzma/common/common.h | 2 -- - src/xz/private.h | 1 - - 3 files changed, 7 deletions(-) + src/liblzma/common/stream_decoder.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) -commit 6d9c0ce9f2677b159e32b224aba5b535b304a705 +commit 7e68fda58c74ad9e5b876cc22fcbe80fc0e4747b Author: Lasse Collin -Date: 2014-11-26 20:10:33 +0200 +Date: 2022-09-28 11:00:23 +0300 - liblzma: Update lzma_stream_encoder_mt() API docs. + liblzma: Stream decoder: Fix comments. - src/liblzma/api/lzma/container.h | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) + src/liblzma/common/stream_decoder.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) -commit 2301f3f05dd9742f42cda8f0f318864f5dc39ab3 +commit f664cb25841fc1c478b819034a224a558e2ac6e7 Author: Lasse Collin -Date: 2014-11-25 12:32:05 +0200 +Date: 2022-09-20 16:58:22 +0300 - liblzma: Verify the filter chain in threaded encoder initialization. + liblzma: ARM64: Add comments. + + src/liblzma/simple/arm64.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit b557b4a0eea05470fae8ba5ef4ad5a6dfb36ac41 +Author: Lasse Collin +Date: 2022-09-20 16:27:50 +0300 + + liblzma: ARM64: Fix wrong comment in API doc. - This way an invalid filter chain is detected at the Stream - encoder initialization instead of delaying it to the first - call to lzma_code() which triggers the initialization of - the actual filter encoder(s). + Thanks to Jia Tan. - src/liblzma/common/stream_encoder_mt.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) + src/liblzma/api/lzma/bcj.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 107a263d5bb63cd3593fd6a5c938706539f84523 +commit d5b0906fa55157f48c200188a3951d80df9cb308 Author: Lasse Collin -Date: 2014-11-17 19:11:49 +0200 +Date: 2022-09-19 20:24:26 +0300 - Build: Update m4/ax_pthread.m4 from Autoconf Archive. + xz: Add --experimental-arm64[=width=WIDTH]. + + It will be renamed to --arm64 once it is stable. + + Man page or --long-help weren't updated yet. - m4/ax_pthread.m4 | 71 +++++++++++++++++++++++++++++++++++++------------------- - 1 file changed, 47 insertions(+), 24 deletions(-) + src/xz/args.c | 7 +++++++ + src/xz/message.c | 7 +++++++ + src/xz/options.c | 39 +++++++++++++++++++++++++++++++++++++++ + src/xz/options.h | 7 +++++++ + 4 files changed, 60 insertions(+) -commit b13a781833399ff5726cfc997f3cb2f0acbdbf31 +commit ecb966de308c255bb4735a7307ef9901c643a9de Author: Lasse Collin -Date: 2014-11-17 18:52:21 +0200 +Date: 2022-09-19 19:34:56 +0300 - Build: Replace obsolete AC_HELP_STRING with AS_HELP_STRING. + liblzma: Add experimental ARM64 BCJ filter with a temporary Filter ID. + + That is, the Filter ID will be changed once the design is final. + The current version will be removed. So files created with the + tempoary Filter ID won't be supported in the future. - configure.ac | 36 ++++++++++++++++++------------------ - m4/tuklib_integer.m4 | 2 +- - 2 files changed, 19 insertions(+), 19 deletions(-) + CMakeLists.txt | 3 + + configure.ac | 4 +- + src/liblzma/api/lzma/bcj.h | 35 +++++- + src/liblzma/common/filter_common.c | 9 ++ + src/liblzma/common/filter_decoder.c | 8 ++ + src/liblzma/common/filter_encoder.c | 11 ++ + src/liblzma/simple/Makefile.inc | 4 + + src/liblzma/simple/arm64.c | 227 ++++++++++++++++++++++++++++++++++++ + src/liblzma/simple/simple_coder.h | 9 ++ + src/liblzma/simple/simple_decoder.h | 4 + + src/liblzma/simple/simple_encoder.h | 2 + + 11 files changed, 313 insertions(+), 3 deletions(-) -commit 542cac122ed3550148a2af0033af22b757491378 +commit 177bdc922cb17bd0fd831ab8139dfae912a5c2b8 Author: Lasse Collin -Date: 2014-11-17 18:43:19 +0200 +Date: 2022-09-17 22:42:18 +0300 - Build: Fix Autoconf warnings about escaped backquotes. + liblzma: Simple/BCJ filters: Allow disabling generic BCJ options. - Thanks to Daniel Richard G. for pointing out that it's - good to sometimes run autoreconf -fi with -Wall. + This will be needed for the ARM64 BCJ filter as it will use + its own options struct. - configure.ac | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) + src/liblzma/simple/arm.c | 2 +- + src/liblzma/simple/armthumb.c | 2 +- + src/liblzma/simple/ia64.c | 2 +- + src/liblzma/simple/powerpc.c | 2 +- + src/liblzma/simple/simple_coder.c | 4 ++-- + src/liblzma/simple/simple_private.h | 2 +- + src/liblzma/simple/sparc.c | 2 +- + src/liblzma/simple/x86.c | 3 ++- + 8 files changed, 10 insertions(+), 9 deletions(-) -commit 7b03a15cea8cd4f19ed680b51c4bcbae3ce4142f +commit c3592d0a55114144686ecf960cb516d6b31c98e9 Author: Lasse Collin -Date: 2014-11-10 18:54:40 +0200 +Date: 2022-09-16 17:08:53 +0300 - xzdiff: Use mkdir if mktemp isn't available. + Tests: Add a test file for lzma_index_append() integer overflow bug. + + This test fails before commit 18d7facd3802b55c287581405c4d49c98708c136. + + test_files.sh now runs xz -l for bad-3-index-uncomp-overflow.xz + because only then the previously-buggy code path gets tested. + Normal decompression doesn't use lzma_index_append() at all. + Instead, lzma_index_hash functions are used and those already + did the overflow check. - src/scripts/xzdiff.in | 17 ++++++++++++++++- - 1 file changed, 16 insertions(+), 1 deletion(-) + tests/files/README | 10 ++++++++++ + tests/files/bad-3-index-uncomp-overflow.xz | Bin 0 -> 132 bytes + tests/test_files.sh | 8 ++++++++ + 3 files changed, 18 insertions(+) -commit f8c13e5e3609581d5dd9f8777985ca07f2390ad7 +commit 982b29f828079a2a26253a40e975127a40a7d2bd Author: Lasse Collin -Date: 2014-11-10 18:45:01 +0200 +Date: 2022-09-16 15:10:07 +0300 - xzdiff: Create a temporary directory to hold a temporary file. + Translations: Add Turkish translation. + + po/LINGUAS | 1 + + po/tr.po | 977 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 978 insertions(+) + +commit 1fc088d9f6d1697924aaeac8cd1fb9918d1532e2 +Author: Lasse Collin +Date: 2022-09-16 14:09:07 +0300 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 097c7b67ce86ff16a7cef7631b39e5ca4ee3d420 +Author: Lasse Collin +Date: 2022-09-16 14:07:03 +0300 + + xzgrep: Fix compatibility with old shells. - This avoids the possibility of "File name too long" when - creating a temp file when the input file name is very long. + Running the current xzgrep on Slackware 10.1 with GNU bash 3.00.15: - This also means that other users on the system can no longer - see the input file names in /tmp (or whatever $TMPDIR is) - since the temporary directory will have a generic name. This - usually doesn't matter since on many systems one can see - the arguments given to all processes anyway. + xzgrep: line 231: syntax error near unexpected token `;;' - The number X chars to mktemp where increased from 6 to 10. + On SCO OpenServer 5.0.7 with Korn Shell 93r: - Note that with some shells temp files or dirs won't be used at all. + syntax error at line 231 : `;;' unexpected + + Turns out that some old shells don't like apostrophes (') inside + command substitutions. For example, the following fails: + + x=$(echo foo + # asdf'zxcv + echo bar) + printf '%s\n' "$x" + + The problem was introduced by commits + 69d1b3fc29677af8ade8dc15dba83f0589cb63d6 (2022-03-29), + bd7b290f3fe4faeceb7d3497ed9bf2e6ed5e7dc5 (2022-07-18), and + a648978b20495b7aa4a8b029c5a810b5ad9d08ff (2022-07-19). + 5.2.6 is the only stable release that included + this problem. + + Thanks to Kevin R. Bulgrien for reporting the problem + on SCO OpenServer 5.0.7 and for providing the fix. - src/scripts/xzdiff.in | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) + src/scripts/xzgrep.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit 7716dcf9df7f457500cb657314e7a9aea5fedb06 +commit f2d084fe3f0d6d71488bfc6987f26542f67bfd99 Author: Lasse Collin -Date: 2014-11-10 15:38:47 +0200 +Date: 2022-09-09 14:12:30 +0300 - liblzma: Fix lzma_mt.preset in lzma_stream_encoder_mt_memusage(). + Tests: Silence warnings about unused functions from tuktest.h. - It read the filter chain from a wrong variable. This is a similar - bug that was fixed in 9494fb6d0ff41c585326f00aa8f7fe58f8106a5e. + Warnings about unused tuktest_run_test conveniently tell which + test programs haven't been converted to tuktest.h yet but I + silenced that warning too for now anyway. + + It is fine to use __attribute__((__unused__)) even when the + function is actually used because the attribute only means + that the function might be unused. - src/liblzma/common/stream_encoder_mt.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) + tests/tuktest.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) -commit 230fa4a605542c84b4178a57381695a0af4e779b +commit f8ee61e74eb40600445fdb601c374d582e1e9c8a Author: Lasse Collin -Date: 2014-11-10 14:49:55 +0200 +Date: 2022-09-09 13:51:57 +0300 + liblzma: lzma_filters_copy: Keep dest[] unmodified if an error occurs. + + lzma_stream_encoder() and lzma_stream_encoder_mt() always assumed + this. Before this patch, failing lzma_filters_copy() could result + in free(invalid_pointer) or invalid memory reads in stream_encoder.c + or stream_encoder_mt.c. + + To trigger this, allocating memory for a filter options structure + has to fail. These are tiny allocations so in practice they very + rarely fail. + + Certain badness in the filter chain array could also make + lzma_filters_copy() fail but both stream_encoder.c and + stream_encoder_mt.c validate the filter chain before + trying to copy it, so the crash cannot occur this way. + + src/liblzma/api/lzma/filter.h | 4 +++- + src/liblzma/common/filter_common.c | 18 ++++++++++++------ + 2 files changed, 15 insertions(+), 7 deletions(-) + +commit 18d7facd3802b55c287581405c4d49c98708c136 +Author: Jia Tan +Date: 2022-09-02 20:18:55 +0800 + + liblzma: lzma_index_append: Add missing integer overflow check. + + The documentation in src/liblzma/api/lzma/index.h suggests that + both the unpadded (compressed) size and the uncompressed size + are checked for overflow, but only the unpadded size was checked. + The uncompressed check is done first since that is more likely to + occur than the unpadded or index field size overflows. + + src/liblzma/common/index.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9ac06cb5b85274d18f9f70d82cf2d8c9c1151bd4 +Author: Lasse Collin +Date: 2022-09-08 15:11:08 +0300 + Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 4e4ae08bc7c1711e399c9f2d26eb375d39d08101 +commit ba3e4ba2de034ae93a513f9c3a0823b80cdb66dc +Author: Jia Tan +Date: 2022-09-08 15:07:00 +0300 + + CMake: Clarify a comment about Windows symlinks without file extension. + + CMakeLists.txt | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +commit 17485e884ce5c74315f29a8a1507bc706cd5cd1d Author: Lasse Collin -Date: 2014-10-29 21:28:25 +0200 +Date: 2022-09-08 15:02:41 +0300 - Update .gitignore files. + CMake: Update for liblzma_*.map files and fix wrong common_w32res.rc dep. + + The previous commit split liblzma.map into liblzma_linux.map and + liblzma_generic.map. This commit updates the CMake build for those. + + common_w32res.rc dependency was listed under Linux/FreeBSD while + obviously it belongs to Windows when building a DLL. - .gitignore | 2 ++ - m4/.gitignore | 3 +++ - 2 files changed, 5 insertions(+) + CMakeLists.txt | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) -commit c923b140b27d1a055db6284e10fd546ad1a7fcdb +commit 913ddc5572b9455fa0cf299be2e35c708840e922 Author: Lasse Collin -Date: 2014-10-29 21:15:35 +0200 +Date: 2022-09-04 23:23:00 +0300 - Build: Prepare to support Automake's subdir-objects. + liblzma: Vaccinate against an ill patch from RHEL/CentOS 7. - Due to a bug in Automake, subdir-objects won't be enabled - for now. + RHEL/CentOS 7 shipped with 5.1.2alpha, including the threaded + encoder that is behind #ifdef LZMA_UNSTABLE in the API headers. + In 5.1.2alpha these symbols are under XZ_5.1.2alpha in liblzma.map. + API/ABI compatibility tracking isn't done between development + releases so newer releases didn't have XZ_5.1.2alpha anymore. - http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354 + Later RHEL/CentOS 7 updated xz to 5.2.2 but they wanted to keep + the exported symbols compatible with 5.1.2alpha. After checking + the ABI changes it turned out that >= 5.2.0 ABI is backward + compatible with the threaded encoder functions from 5.1.2alpha + (but not vice versa as fixes and extensions to these functions + were made between 5.1.2alpha and 5.2.0). - Thanks to Daniel Richard G. for the original patches. + In RHEL/CentOS 7, XZ Utils 5.2.2 was patched with + xz-5.2.2-compat-libs.patch to modify liblzma.map: + + - XZ_5.1.2alpha was added with lzma_stream_encoder_mt and + lzma_stream_encoder_mt_memusage. This matched XZ Utils 5.1.2alpha. + + - XZ_5.2 was replaced with XZ_5.2.2. It is clear that this was + an error; the intention was to keep using XZ_5.2 (XZ_5.2.2 + has never been used in XZ Utils). So XZ_5.2.2 lists all + symbols that were listed under XZ_5.2 before the patch. + lzma_stream_encoder_mt and _mt_memusage are included too so + they are listed both here and under XZ_5.1.2alpha. + + The patch didn't add any __asm__(".symver ...") lines to the .c + files. Thus the resulting liblzma.so exports the threaded encoder + functions under XZ_5.1.2alpha only. Listing the two functions + also under XZ_5.2.2 in liblzma.map has no effect without + matching .symver lines. + + The lack of XZ_5.2 in RHEL/CentOS 7 means that binaries linked + against unpatched XZ Utils 5.2.x won't run on RHEL/CentOS 7. + This is unfortunate but this alone isn't too bad as the problem + is contained within RHEL/CentOS 7 and doesn't affect users + of other distributions. It could also be fixed internally in + RHEL/CentOS 7. + + The second problem is more serious: In XZ Utils 5.2.2 the API + headers don't have #ifdef LZMA_UNSTABLE for obvious reasons. + This is true in RHEL/CentOS 7 version too. Thus now programs + using new APIs can be compiled without an extra #define. However, + the programs end up depending on symbol version XZ_5.1.2alpha + (and possibly also XZ_5.2.2) instead of XZ_5.2 as they would + with an unpatched XZ Utils 5.2.2. This means that such binaries + won't run on other distributions shipping XZ Utils >= 5.2.0 as + they don't provide XZ_5.1.2alpha or XZ_5.2.2; they only provide + XZ_5.2 (and XZ_5.0). (This includes RHEL/CentOS 8 as the patch + luckily isn't included there anymore with XZ Utils 5.2.4.) + + Binaries built by RHEL/CentOS 7 users get distributed and then + people wonder why they don't run on some other distribution. + Seems that people have found out about the patch and been copying + it to some build scripts, seemingly curing the symptoms but + actually spreading the illness further and outside RHEL/CentOS 7. + + The ill patch seems to be from late 2016 (RHEL 7.3) and in 2017 it + had spread at least to EasyBuild. I heard about the events only + recently. :-( + + This commit splits liblzma.map into two versions: one for + GNU/Linux and another for other OSes that can use symbol versioning + (FreeBSD, Solaris, maybe others). The Linux-specific file and the + matching additions to .c files add full compatibility with binaries + that have been built against a RHEL/CentOS-patched liblzma. Builds + for OSes other than GNU/Linux won't get the vaccine as they should + be immune to the problem (I really hope that no build script uses + the RHEL/CentOS 7 patch outside GNU/Linux). + + The RHEL/CentOS compatibility symbols XZ_5.1.2alpha and XZ_5.2.2 + are intentionally put *after* XZ_5.2 in liblzma_linux.map. This way + if one forgets to #define HAVE_SYMBOL_VERSIONS_LINUX when building, + the resulting liblzma.so.5 will have lzma_stream_encoder_mt@@XZ_5.2 + since XZ_5.2 {...} is the first one that lists that function. + Without HAVE_SYMBOL_VERSIONS_LINUX @XZ_5.1.2alpha and @XZ_5.2.2 + will be missing but that's still a minor problem compared to + only having lzma_stream_encoder_mt@@XZ_5.1.2alpha! + + The "local: *;" line was moved to XZ_5.0 so that it doesn't need + to be moved around. It doesn't matter where it is put. + + Having two similar liblzma_*.map files is a bit silly as it is, + at least for now, easily possible to generate the generic one + from the Linux-specific file. But that adds extra steps and + increases the risk of mistakes when supporting more than one + build system. So I rather maintain two files in parallel and let + validate_map.sh check that they are in sync when "make mydist" + is run. + + This adds .symver lines for lzma_stream_encoder_mt@XZ_5.2.2 and + lzma_stream_encoder_mt_memusage@XZ_5.2.2 even though these + weren't exported by RHEL/CentOS 7 (only @@XZ_5.1.2alpha was + for these two). I added these anyway because someone might + misunderstand the RHEL/CentOS 7 patch and think that @XZ_5.2.2 + (@@XZ_5.2.2) versions were exported too. + + At glance one could suggest using __typeof__ to copy the function + prototypes when making aliases. However, this doesn't work trivially + because __typeof__ won't copy attributes (lzma_nothrow, lzma_pure) + and it won't change symbol visibility from hidden to default (done + by LZMA_API()). Attributes could be copied with __copy__ attribute + but that needs GCC 9 and a fallback method would be needed anyway. + + This uses __symver__ attribute with GCC >= 10 and + __asm__(".symver ...") with everything else. The attribute method + is required for LTO (-flto) support with GCC. Using -flto with + GCC older than 10 is now broken on GNU/Linux and will not be fixed + (can silently result in a broken liblzma build that has dangerously + incorrect symbol versions). LTO builds with Clang seem to work + with the traditional __asm__(".symver ...") method. + + Thanks to Boud Roukema for reporting the problem and discussing + the details and testing the fix. - configure.ac | 7 ++++++- - src/Makefile.am | 22 +++++++++++++++++++++- - src/liblzma/Makefile.am | 4 ++-- - src/lzmainfo/Makefile.am | 4 ++-- - src/xz/Makefile.am | 10 +++++----- - src/xzdec/Makefile.am | 8 ++++---- - 6 files changed, 40 insertions(+), 15 deletions(-) + configure.ac | 23 +++- + src/liblzma/Makefile.am | 10 +- + src/liblzma/common/block_buffer_encoder.c | 18 ++++ + src/liblzma/common/common.c | 14 +++ + src/liblzma/common/common.h | 28 +++++ + src/liblzma/common/hardware_cputhreads.c | 12 +++ + src/liblzma/common/stream_encoder_mt.c | 42 ++++++++ + src/liblzma/{liblzma.map => liblzma_generic.map} | 6 +- + src/liblzma/liblzma_linux.map | 131 +++++++++++++++++++++++ + src/liblzma/validate_map.sh | 113 +++++++++++++++++-- + 10 files changed, 382 insertions(+), 15 deletions(-) -commit 08c2aa16bea0df82828f665d51fba2e0a5e8997f +commit 80a1a8bb838842a2be343bd88ad1462c21c5e2c9 Author: Lasse Collin -Date: 2014-10-24 20:09:29 +0300 +Date: 2022-08-31 16:42:04 +0300 - Translations: Update the Italian translation. + CMake: Add xz symlinks. - Thanks to Milo Casagrande. + These are a minor thing especially since the xz build has + some real problems still like lack of large file support + on 32-bit systems but I'll commit this since the code exists. + + Thanks to Jia Tan. - po/it.po | 452 ++++++++++++++++++++++++++++++++++++++------------------------- - 1 file changed, 275 insertions(+), 177 deletions(-) + CMakeLists.txt | 38 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 37 insertions(+), 1 deletion(-) -commit 2f9f61aa83539c54ff6c118a2693890f0519b3dd +commit a4193bb6d85d7765b1b87faeab3e50106d3ab2e9 Author: Lasse Collin -Date: 2014-10-18 18:51:45 +0300 +Date: 2022-08-31 16:29:38 +0300 - Translations: Update the Polish translation. + CMake: Put xz man page install under if(UNIX) like is for xzdec. - Thanks to Jakub Bogusz. + Thanks to Jia Tan. - po/pl.po | 332 ++++++++++++++++++++++++++++++++++++++++----------------------- - 1 file changed, 214 insertions(+), 118 deletions(-) + CMakeLists.txt | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) -commit 4f9d233f67aea25e532824d11b7642cf7dee7a76 -Author: Andre Noll -Date: 2014-10-14 17:30:30 +0200 +commit c1555b1a221a1427d4d650647531016d754bc4da +Author: Lasse Collin +Date: 2022-08-22 18:16:40 +0300 - l10n: de.po: Change translator email address. - - Although the old address is still working, the new one should - be preferred. So this commit changes all three places in de.po - accordingly. - - Signed-off-by: Andre Noll + Bump version number for 5.3.3alpha. - po/de.po | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + src/liblzma/api/lzma/version.h | 2 +- + src/liblzma/liblzma.map | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit 00502b2bedad43f0cc167ac17ae0608837ee196b -Author: Andre Noll -Date: 2014-10-14 17:30:29 +0200 +commit 44fedddc11c3f6ec2f7fe35a3e38f15ca93f90eb +Author: Lasse Collin +Date: 2022-08-22 18:13:56 +0300 - l10n: de.po: Update German translation - - Signed-off-by: Andre Noll + Add NEWS for 5.3.3alpha. - po/de.po | 531 +++++++++++++++++++++++++++++++++------------------------------ - 1 file changed, 281 insertions(+), 250 deletions(-) + NEWS | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 119 insertions(+) -commit 706b0496753fb609e69f1570ec603f11162189d1 -Author: Andre Noll -Date: 2014-10-14 17:30:28 +0200 +commit a93e235d7ca764cc19f8f9f9063b40ff361c3cfa +Author: Lasse Collin +Date: 2022-07-12 17:59:41 +0300 - l10n: de.po: Fix typo: Schießen -> Schließen. + Translations: Add Portuguese translation. - That's a funny one since "schießen" means to shoot :) + Jia Tan made white-space changes and also changed "Language: pt_BR\n" + to pt. The translator wasn't reached so I'm hoping these changes + are OK and will commit it without translator's approval. - Signed-off-by: Andre Noll + Thanks to Pedro Albuquerque and Jia Tan. - po/de.po | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + po/LINGUAS | 1 + + po/pt.po | 1001 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1002 insertions(+) -commit 7c32e6a935c3d7ee366abad1679bd5f322f0c7d4 +commit e7cf5a946f25e40d77f45e41f0dee7d42a04e9ae Author: Lasse Collin -Date: 2014-10-09 19:42:26 +0300 +Date: 2022-07-10 21:16:40 +0300 - Update THANKS. + Translations: Add Serbian translation. + + Quite a few white-space changes were made by Jia Tan to make + this look good. Contacting the translator didn't succeed so + I'm committing this without getting translator's approval. + + Thanks to Мирослав Николић (Miroslav Nikolic) and Jia Tan. - THANKS | 1 + - 1 file changed, 1 insertion(+) + po/LINGUAS | 1 + + po/sr.po | 987 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 988 insertions(+) -commit 076258cc458f1e705041ac7a729b15ffe8c5214a +commit cc8617ab53b1f2a4da212fa76c92fe538269c5de Author: Lasse Collin -Date: 2014-10-09 19:41:51 +0300 +Date: 2022-07-04 23:51:36 +0300 - Add support for AmigaOS/AROS to tuklib_physmem(). + Translations: Add Swedish translation. - Thanks to Fredrik Wikstrom. + Thanks to Sebastian Rasmussen and Jia Tan. - m4/tuklib_physmem.m4 | 3 ++- - src/common/tuklib_physmem.c | 7 +++++++ - 2 files changed, 9 insertions(+), 1 deletion(-) + po/LINGUAS | 1 + + po/sv.po | 983 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 984 insertions(+) -commit efa7b0a210e1baa8e128fc98c5443a944c39ad24 +commit c613598c358b640682d0ca2aed38fa7df763e8c7 Author: Lasse Collin -Date: 2014-10-09 18:42:14 +0300 +Date: 2022-07-04 23:40:27 +0300 - xzgrep: Avoid passing both -q and -l to grep. + Translations: Add Esperanto translation. - The behavior of grep -ql varies: - - GNU grep behaves like grep -q. - - OpenBSD grep behaves like grep -l. - - POSIX doesn't make it 100 % clear what behavior is expected. - Anyway, using both -q and -l at the same time makes no sense - so both options simply should never be used at the same time. - - Thanks to Christian Weisgerber. + Thanks to Keith Bowes and Jia Tan. - src/scripts/xzgrep.in | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) + po/LINGUAS | 1 + + po/eo.po | 984 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 985 insertions(+) -commit 9c5f76098c9986b48d2fc574a0b764f4cde0c538 -Author: Trần Ngọc Quân -Date: 2014-09-25 09:22:45 +0700 +commit 659a587d678f21e98e91d2751c31d4ce050c081a +Author: Lasse Collin +Date: 2022-07-01 00:22:33 +0300 - l10n: vi.po: Update Vietnamese translation + Translations: Add Catalan translation. - Signed-off-by: Trần Ngọc Quân + Thanks to Jordi Mas and Jia Tan. - po/vi.po | 136 +++++++++++++++++++++++++++++++++++++++------------------------ - 1 file changed, 84 insertions(+), 52 deletions(-) + po/LINGUAS | 1 + + po/ca.po | 1076 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1077 insertions(+) -commit c4911f2db36d811896c73c008b4218d8fa9a4730 +commit 739fd8c9bdf1d85f57d56642aad87148d4779530 Author: Lasse Collin -Date: 2014-09-25 18:38:48 +0300 +Date: 2022-06-30 17:47:08 +0300 - Build: Detect supported compiler warning flags better. + Translations: Add Ukrainian translation. - Clang and nowadays also GCC accept any -Wfoobar option - but then may give a warning that an unknown warning option - was specified. To avoid adding unsupported warning options, - the options are now tested with -Werror. - - Thanks to Charles Diza. + Thanks to Yuri Chornoivan and Jia Tan. - configure.ac | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) + po/LINGUAS | 1 + + po/uk.po | 996 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 997 insertions(+) -commit 76e75522ed6f5c228d55587dee5a997893f6e474 +commit 73280550b111930c62a667e56add8fd574f80bc8 Author: Lasse Collin -Date: 2014-09-20 21:01:21 +0300 +Date: 2022-06-30 17:45:26 +0300 - Update NEWS for 5.0.7. + Translators: Add Romanian translation. + + Thanks to Remus-Gabriel Chelu and Jia Tan. - NEWS | 11 +++++++++++ - 1 file changed, 11 insertions(+) + po/LINGUAS | 1 + + po/ro.po | 1016 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1017 insertions(+) -commit d62028b4c1174fc67b6929f126f5eb24c018c700 +commit 2465f5b825152714b2c357d96c2422c31109d320 Author: Lasse Collin -Date: 2014-09-20 19:42:56 +0300 +Date: 2022-06-29 18:33:32 +0300 - liblzma: Fix a portability problem in Makefile.am. + Translations: Update Brazilian Portuguese translation. - POSIX supports $< only in inference rules (suffix rules). - Using it elsewhere is a GNU make extension and doesn't - work e.g. with OpenBSD make. + One msgstr was changed. The diff is long due to changes + in the source code line numbers in the comments. - Thanks to Christian Weisgerber for the patch. + Thanks to Rafael Fontenelle. - src/liblzma/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + po/pt_BR.po | 186 ++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 92 insertions(+), 94 deletions(-) -commit c35de31d4283edad3e57d37ffe939406542cb7bb +commit 434e1ffd3e62719d509da10b646216f5ef53fe4d Author: Lasse Collin -Date: 2014-09-14 21:54:09 +0300 +Date: 2022-06-29 18:04:44 +0300 - Bump the version number to 5.1.4beta. + Translations: Add Croatian translation. + + Thanks to Božidar Putanec and Jia Tan. - src/liblzma/api/lzma/version.h | 4 ++-- - src/liblzma/liblzma.map | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) + po/LINGUAS | 1 + + po/hr.po | 987 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 988 insertions(+) -commit e9e097e22cacdaa23e5414fea7913535449cb340 +commit 0732d0f7065c9bd48bfe4f5983144ae970c4a499 Author: Lasse Collin -Date: 2014-09-14 21:50:13 +0300 +Date: 2022-06-29 17:58:48 +0300 - Update NEWS for 5.0.6 and 5.1.4beta. + Translations: Add Spanish translation. + + Thanks to Cristian Othón Martínez Vera and Jia Tan. - NEWS | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 50 insertions(+) + po/LINGUAS | 1 + + po/es.po | 984 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 985 insertions(+) -commit 642f856bb8562ab66704b1e01ac7bc08b6d0a663 +commit 9899b0f82bc130998d1f1f618a6ab805b73f2696 Author: Lasse Collin -Date: 2014-09-14 21:02:41 +0300 +Date: 2022-06-29 17:49:43 +0300 - Update TODO. + Translations: Add Korean translation. + + Thanks to Seong-ho Cho and Jia Tan. - TODO | 38 ++++++++++++++++++++++++++++++++++---- - 1 file changed, 34 insertions(+), 4 deletions(-) + po/LINGUAS | 1 + + po/ko.po | 972 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 973 insertions(+) -commit 6b5e3b9eff5b8cedb2aac5f524d4d60fc8a48124 +commit 65217eaf6bd195f3ef027d4ac55d57b7d133d69f Author: Lasse Collin -Date: 2014-08-05 22:32:36 +0300 +Date: 2020-03-16 21:57:21 +0200 - xz: Add --ignore-check. + Translations: Rebuild cs.po to avoid incorrect fuzzy strings. + + "make dist" updates the .po files and the fuzzy strings would + result in multiple very wrong translations. - src/xz/args.c | 7 +++++++ - src/xz/args.h | 1 + - src/xz/coder.c | 10 +++++++++- - src/xz/message.c | 2 ++ - src/xz/xz.1 | 19 +++++++++++++++++++ - 5 files changed, 38 insertions(+), 1 deletion(-) + po/cs.po | 592 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 322 insertions(+), 270 deletions(-) -commit 9adbc2ff373f979c917cdfd3679ce0ebd59f1040 +commit e56ff423ee7af9e648e16b132f0d835d2cb4db26 Author: Lasse Collin -Date: 2014-08-05 22:15:07 +0300 +Date: 2020-03-16 17:30:39 +0200 - liblzma: Add support for LZMA_IGNORE_CHECK. + Translations: Add partial Danish translation. + + I made a few minor white space changes without getting them + approved by the Danish translation team. - src/liblzma/api/lzma/container.h | 24 ++++++++++++++++++++++++ - src/liblzma/common/common.h | 1 + - src/liblzma/common/stream_decoder.c | 14 ++++++++++++-- - 3 files changed, 37 insertions(+), 2 deletions(-) + po/LINGUAS | 1 + + po/da.po | 896 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 897 insertions(+) -commit 0e0f34b8e4f1c60ecaec15c2105982381cc9c3e6 +commit 43e09c62e77cb8807d932c81de4decbdb956e184 Author: Lasse Collin -Date: 2014-08-05 22:03:30 +0300 +Date: 2020-03-11 22:37:54 +0200 - liblzma: Add support for lzma_block.ignore_check. + Translations: Add hu, zh_CN, and zh_TW. - Note that this slightly changes how lzma_block_header_decode() - has been documented. Earlier it said that the .version is set - to the lowest required value, but now it says that the .version - field is kept unchanged if possible. In practice this doesn't - affect any old code, because before this commit the only - possible .version was 0. + I made a few white space changes to these without getting them + approved by the translation teams. (I tried to contact the hu and + zh_TW teams but didn't succeed. I didn't contact the zh_CN team.) - src/liblzma/api/lzma/block.h | 50 ++++++++++++++++++++++++------- - src/liblzma/common/block_buffer_encoder.c | 2 +- - src/liblzma/common/block_decoder.c | 18 ++++++++--- - src/liblzma/common/block_encoder.c | 2 +- - src/liblzma/common/block_header_decoder.c | 12 ++++++-- - src/liblzma/common/block_header_encoder.c | 2 +- - src/liblzma/common/block_util.c | 2 +- - 7 files changed, 68 insertions(+), 20 deletions(-) + po/LINGUAS | 3 + + po/hu.po | 985 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po/zh_CN.po | 963 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po/zh_TW.po | 956 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 2907 insertions(+) -commit 71e1437ab585b46f7a25f5a131557d3d1c0cbaa2 +commit 982b6b198ae1ffe6093236dd8a3d03d1415b912b Author: Lasse Collin -Date: 2014-08-04 19:25:58 +0300 +Date: 2020-03-11 14:33:30 +0200 - liblzma: Use lzma_memcmplen() in the BT3 match finder. + Translations: Update vi.po to match the file from the TP. - I had missed this when writing the commit - 5db75054e900fa06ef5ade5f2c21dffdd5d16141. + The translated strings haven't been updated but word wrapping + is different. + + po/vi.po | 407 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 179 insertions(+), 228 deletions(-) + +commit 801f39691fc4abc6dd33d7653d498781b593f3eb +Author: Lasse Collin +Date: 2020-03-11 14:18:03 +0200 + + Translations: Add fi and pt_BR, and update de, fr, it, and pl. - Thanks to Jun I Jin. + The German translation isn't identical to the file in + the Translation Project but the changes (white space changes + only) were approved by the translator Mario Blättermann. - src/liblzma/lz/lz_encoder_mf.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) + po/LINGUAS | 2 + + po/de.po | 476 ++++++++++++++-------------- + po/fi.po | 974 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po/fr.po | 272 ++++++++-------- + po/it.po | 479 ++++++++++++---------------- + po/pl.po | 239 +++++++------- + po/pt_BR.po | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 7 files changed, 2697 insertions(+), 746 deletions(-) -commit 41dc9ea06e1414ebe8ef52afc8fc15b6e3282b04 +commit 311e4f85ede5d2f0bb71f3ad70b5b7db1b5adf33 Author: Lasse Collin -Date: 2014-08-04 00:25:44 +0300 +Date: 2022-08-22 17:27:19 +0300 - Update THANKS. + xz: Try to clarify --memlimit-mt-decompress vs. --memlimit-compress. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/xz/xz.1 | 31 +++++++++++++++++++------------ + 1 file changed, 19 insertions(+), 12 deletions(-) -commit 5dcffdbcc23a68abc3ac3539b30be71bc9b5af84 +commit df23c31000283c00e5ef1ca32a0bc3bb757bd707 Author: Lasse Collin -Date: 2014-08-03 21:32:25 +0300 +Date: 2022-08-22 16:46:18 +0300 - liblzma: SHA-256: Optimize the Maj macro slightly. + CMake: Add liblzma tests. - The Maj macro is used where multiple things are added - together, so making Maj a sum of two expressions allows - some extra freedom for the compiler to schedule the - instructions. - - I learned this trick from - . + Thanks to Jia Tan for the patch. - src/liblzma/check/sha256.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + CMakeLists.txt | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 52 insertions(+), 1 deletion(-) -commit a9477d1e0c6fd0e47e637d051e7b9e2a5d9af517 +commit 02a777f9c422d3b5ec895078530bb1a2b6f7bdf5 Author: Lasse Collin -Date: 2014-08-03 21:08:12 +0300 +Date: 2022-08-19 23:32:22 +0300 - liblzma: SHA-256: Optimize the way rotations are done. + xz: Revise --info-memory output. - This looks weird because the rotations become sequential, - but it helps quite a bit on both 32-bit and 64-bit x86: + The strings could be more descriptive but it's good + to have some version of this committed now. - - It requires fewer instructions on two-operand - instruction sets like x86. - - - It requires one register less which matters especially - on 32-bit x86. - - I hope this doesn't hurt other archs. - - I didn't invent this idea myself, but I don't remember where - I saw it first. + --robot mode wasn't changed yet. - src/liblzma/check/sha256.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) + src/xz/hardware.c | 32 ++++++++++++++++++++++++++------ + src/xz/xz.1 | 1 + + 2 files changed, 27 insertions(+), 6 deletions(-) -commit 5a76c7c8ee9a0afbeedb1c211db9224260404347 +commit f864f6d42eab57ea8ed82cc2dd19a03b51377442 Author: Lasse Collin -Date: 2014-08-03 20:38:13 +0300 +Date: 2022-08-19 23:12:02 +0300 - liblzma: SHA-256: Remove the GCC #pragma that became unneeded. + xz: Update the man page for threaded decompression and memlimits. - The unrolling in the previous commit should avoid the - situation where a compiler may think that an uninitialized - variable might be accessed. + This documents the changes made in commits + 6c6da57ae2aa962aabde6892442227063d87e88c, + cad299008cf73ec566f0662a9cf2b94f86a99659, and + 898faa97287a756231c663a3ed5165672b417207. + + The --info-memory bit hasn't been finished yet + even though it's already mentioned in this commit + under --memlimit-mt-decompress and --threads. - src/liblzma/check/sha256.c | 5 ----- - 1 file changed, 5 deletions(-) + src/xz/xz.1 | 148 +++++++++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 121 insertions(+), 27 deletions(-) -commit 9a096f8e57509775c331950b8351bbca77bdcfa8 +commit d13bfcc0056617dd648f655a01653932fad7067f Author: Lasse Collin -Date: 2014-08-03 20:33:38 +0300 +Date: 2022-08-18 17:49:16 +0300 - liblzma: SHA-256: Unroll a little more. + Build: Include the CMake files in the distribution. - This way a branch isn't needed for each operation - to choose between blk0 and blk2, and still the code - doesn't grow as much as it would with full unrolling. + This was supposed to be done in 2020 with 5.2.5 release + already but it was noticed only today. 5.2.5 and 5.2.6 + even mention experiemental CMake support in the NEWS entries. + + Thanks to Olivier B. for reporting the problem. - src/liblzma/check/sha256.c | 25 ++++++++++++++++--------- - 1 file changed, 16 insertions(+), 9 deletions(-) + Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) -commit bc7650d87bf27f85f1a2a806dc2db1780e09e6a5 +commit e66787bcfefdb93f19c974f895f65969a77937b0 Author: Lasse Collin -Date: 2014-08-03 19:56:43 +0300 +Date: 2022-08-18 17:38:05 +0300 - liblzma: SHA-256: Do the byteswapping without a temporary buffer. + Windows: Fix broken liblzma.dll build with Visual Studio project files. + + The bug was introduced in 352ba2d69af2136bc814aa1df1a132559d445616 + "Windows: Fix building of resource files when config.h isn't used." + + That commit fixed liblzma.dll build with CMake while keeping it + working with Autotools on Windows but the VS project files were + forgotten. + + I haven't tested these changes. + + Thanks to Olivier B. for reporting the bug and for the initial patch. - src/liblzma/check/sha256.c | 13 +------------ - 1 file changed, 1 insertion(+), 12 deletions(-) + windows/vs2013/liblzma_dll.vcxproj | 6 ++++++ + windows/vs2017/liblzma_dll.vcxproj | 6 ++++++ + windows/vs2019/liblzma_dll.vcxproj | 6 ++++++ + 3 files changed, 18 insertions(+) -commit 544aaa3d13554e8640f9caf7db717a96360ec0f6 +commit c4e8e5fb311225b8b48d34157891a640b2535e0c Author: Lasse Collin -Date: 2014-07-25 22:38:28 +0300 +Date: 2022-08-18 17:16:49 +0300 - liblzma: Use lzma_memcmplen() in normal mode of LZMA. + liblzma: Threaded decoder: Improve LZMA_FAIL_FAST when LZMA_FINISH is used. - Two locations were not changed yet because the simplest change - assumes that the initial "len" may be greater than "limit". + It will now return LZMA_DATA_ERROR (not LZMA_OK or LZMA_BUF_ERROR) + if LZMA_FINISH is used and there isn't enough input to finish + decoding the Block Header or the Block. The use of LZMA_DATA_ERROR + is simpler and the less risky than LZMA_BUF_ERROR but this might + be changed before 5.4.0. - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 20 +++++--------------- - 1 file changed, 5 insertions(+), 15 deletions(-) + src/liblzma/api/lzma/container.h | 6 +++++ + src/liblzma/common/stream_decoder_mt.c | 42 ++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+) -commit f48fce093b07aeda95c18850f5e086d9f2383380 +commit 6dcf606e7efa2b259f0262f9e2f61e00116842d3 Author: Lasse Collin -Date: 2014-07-25 22:30:38 +0300 +Date: 2022-08-12 18:31:47 +0300 - liblzma: Simplify LZMA fast mode code by using memcmp(). + Add NEWS for 5.2.6. - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 11 +---------- - 1 file changed, 1 insertion(+), 10 deletions(-) + NEWS | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 121 insertions(+) -commit 6bf5308e34e23dede5b301b1b9b4f131dacd9218 +commit 413b86fcf8934fae5a004f378a9483d37d8fcaab Author: Lasse Collin -Date: 2014-07-25 22:29:49 +0300 +Date: 2022-08-12 14:28:41 +0300 - liblzma: Use lzma_memcmplen() in fast mode of LZMA. + Add Jia Tan to AUTHORS. - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + AUTHORS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 353212137e51e45b105a3a3fc2e6879f1cf0d492 +commit 352672732c346c546ff3c26d0605bc0ed1c8b7c7 Author: Lasse Collin -Date: 2014-07-25 21:16:23 +0300 +Date: 2022-07-25 19:28:26 +0300 - Update THANKS. + Build: Start the generated ChangeLog from around 5.2.0 instead of 5.0.0. + + This makes ChangeLog smaller. - THANKS | 1 + - 1 file changed, 1 insertion(+) + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 5db75054e900fa06ef5ade5f2c21dffdd5d16141 +commit 6f6d11225d6016be2bbb55d845b66f6b04d048df Author: Lasse Collin -Date: 2014-07-25 21:15:07 +0300 +Date: 2022-07-25 19:11:05 +0300 - liblzma: Use lzma_memcmplen() in the match finders. + Translations: Change the copyright comment string to use with po4a. - This doesn't change the match finder output. + This affects the second line in po4a/xz-man.pot. The man pages of + xzdiff, xzgrep, and xzmore are from GNU gzip and under GNU GPLv2+ + while the rest of the man pages are in the public domain. - src/liblzma/lz/lz_encoder.c | 13 ++++++++++++- - src/liblzma/lz/lz_encoder_mf.c | 33 +++++++++++---------------------- - 2 files changed, 23 insertions(+), 23 deletions(-) + po4a/update-po | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit e1c8f1d01f4a4e2136173edab2dc63c71ef038f4 -Author: Lasse Collin -Date: 2014-07-25 20:57:20 +0300 +commit 61f8ec804abdb4c5dac01e8ae9b90c7be58a5c24 +Author: Jia Tan +Date: 2022-07-25 18:30:05 +0300 - liblzma: Add lzma_memcmplen() for fast memory comparison. + liblzma: Refactor lzma_mf_is_supported() to use a switch-statement. + + src/liblzma/lz/lz_encoder.c | 32 ++++++++++++++------------------ + 1 file changed, 14 insertions(+), 18 deletions(-) + +commit 4d80b463a1251aa22eabc87d2732fec13b1adda6 +Author: Jia Tan +Date: 2022-07-25 18:20:01 +0300 + + Build: Don't allow empty LIST in --enable-match-finders=LIST. - This commit just adds the function. Its uses will be in - separate commits. - - This hasn't been tested much yet and it's perhaps a bit early - to commit it but if there are bugs they should get found quite - quickly. - - Thanks to Jun I Jin from Intel for help and for pointing out - that string comparison needs to be optimized in liblzma. + It's enforced only when a match finder is needed, that is, + when LZMA1 or LZMA2 encoder is enabled. - configure.ac | 13 +++ - src/liblzma/common/Makefile.inc | 1 + - src/liblzma/common/memcmplen.h | 170 ++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 184 insertions(+) + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) -commit 765735cf52e5123586e74a51b9c073b5257f631f +commit 9cc721af5436908f2d5a828aebbc4050a32a3487 Author: Lasse Collin -Date: 2014-07-12 21:10:09 +0300 +Date: 2022-07-24 13:27:48 +0300 + xz: Update the man page that change to --keep will be in 5.2.6. + + src/xz/xz.1 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b81bf0c7d1873e52a4086a9abb494471d652cb55 +Author: Lasse Collin +Date: 2022-07-19 23:23:54 +0300 + Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 59da01785ef66c7e62f36e70ca808fd2824bb995 -Author: Lasse Collin -Date: 2014-07-12 20:06:08 +0300 +commit 340cf1ec3927767046b8293a49da3db4e393f426 +Author: Nicholas Jackson +Date: 2022-07-17 17:39:23 -0700 - Translations: Add Vietnamese translation. - - Thanks to Trần Ngọc Quân. + CMake: Add missing source file to liblzma build - po/LINGUAS | 1 + - po/vi.po | 1007 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 1008 insertions(+) + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) -commit 17215f751c354852700e7f8592ccf319570a0721 +commit d796b6d7fdb8b7238b277056cf9146cce25db604 Author: Lasse Collin -Date: 2014-06-29 20:54:14 +0300 +Date: 2022-07-19 23:19:49 +0300 - xz: Update the help message of a few options. - - Updated: --threads, --block-size, and --block-list - Added: --flush-timeout + xzgrep man page: Document exit statuses. - src/xz/message.c | 18 +++++++++++------- - 1 file changed, 11 insertions(+), 7 deletions(-) + src/scripts/xzgrep.1 | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) -commit 96864a6ddf91ad693d102ea165f3d7918744d582 +commit 923bf96b55e5216a6c8df9d8331934f54784390e Author: Lasse Collin -Date: 2014-06-18 22:07:06 +0300 +Date: 2022-07-19 23:13:24 +0300 - xz: Use lzma_cputhreads() instead of own copy of tuklib_cpucores(). + xzgrep: Improve error handling, especially signals. + + xzgrep wouldn't exit on SIGPIPE or SIGQUIT when it clearly + should have. It's quite possible that it's not perfect still + but at least it's much better. + + If multiple exit statuses compete, now it tries to pick + the largest of value. + + Some comments were added. + + The exit status handling of signals is still broken if the shell + uses values larger than 255 in $? to indicate that a process + died due to a signal ***and*** their "exit" command doesn't take + this into account. This seems to work well with the ksh and yash + versions I tried. However, there is a report in gzip/zgrep that + OpenSolaris 5.11 (not 5.10) has a problem with "exit" truncating + the argument to 8 bits: + + https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22900#25 + + Such a bug would break xzgrep but I didn't add a workaround + at least for now. 5.11 is old and I don't know if the problem + exists in modern descendants, or if the problem exists in other + ksh implementations in use. - src/xz/Makefile.am | 1 - - src/xz/hardware.c | 12 +++++++++--- - 2 files changed, 9 insertions(+), 4 deletions(-) + src/scripts/xzgrep.in | 72 +++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 53 insertions(+), 19 deletions(-) -commit a115cc3748482e277f42a968baa3cd266f031dba +commit a648978b20495b7aa4a8b029c5a810b5ad9d08ff Author: Lasse Collin -Date: 2014-06-18 22:04:24 +0300 +Date: 2022-07-19 00:10:55 +0300 - liblzma: Add lzma_cputhreads(). + xzgrep: Make the fix for ZDI-CAN-16587 more robust. + + I don't know if this can make a difference in the real world + but it looked kind of suspicious (what happens with sed + implementations that cannot process very long lines?). + At least this commit shouldn't make it worse. - src/liblzma/Makefile.am | 8 +++++++- - src/liblzma/api/lzma/hardware.h | 14 ++++++++++++++ - src/liblzma/common/Makefile.inc | 1 + - src/liblzma/common/hardware_cputhreads.c | 22 ++++++++++++++++++++++ - src/liblzma/liblzma.map | 1 + - 5 files changed, 45 insertions(+), 1 deletion(-) + src/scripts/xzgrep.in | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) -commit 3ce3e7976904fbab4e6482bafa442856f77a51fa +commit bd7b290f3fe4faeceb7d3497ed9bf2e6ed5e7dc5 Author: Lasse Collin -Date: 2014-06-18 19:11:52 +0300 +Date: 2022-07-18 21:52:31 +0300 - xz: Check for filter chain compatibility for --flush-timeout. + xzgrep: Use grep -H --label when available (GNU, *BSDs). - This avoids LZMA_PROG_ERROR from lzma_code() with filter chains - that don't support LZMA_SYNC_FLUSH. + It avoids the use of sed for prefixing filenames to output lines. + Using sed for that is slower and prone to security bugs so now + the sed method is only used as a fallback. + + This also fixes an actual bug: When grepping a binary file, + GNU grep nowadays prints its diagnostics to stderr instead of + stdout and thus the sed-method for prefixing the filename doesn't + work. So with this commit grepping binary files gives reasonable + output with GNU grep now. + + This was inspired by zgrep but the implementation is different. - src/xz/coder.c | 30 +++++++++++++++++++++--------- - 1 file changed, 21 insertions(+), 9 deletions(-) + src/scripts/xzgrep.in | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) -commit 381ac14ed79e5d38809f251705be8b3193bba417 +commit b56729af9f1a596e57aeefd7570d8d7dce5c9f52 Author: Lasse Collin -Date: 2014-06-13 19:21:54 +0300 +Date: 2022-07-18 21:10:25 +0300 - xzgrep: List xzgrep_expected_output in tests/Makefile.am. + xzgrep: Use -e to specify the pattern to grep. + + Now we don't need the separate test for adding the -q option + as it can be added directly in the two places where it's needed. - tests/Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/scripts/xzgrep.in | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) -commit 4244b65b06d5ecaf6f9dd0387ac7e3166bd2364e +commit bad61b5997e6647911974022bfb72f3d4818a594 Author: Lasse Collin -Date: 2014-06-13 18:58:22 +0300 +Date: 2022-07-18 19:18:48 +0300 - xzgrep: Improve the test script. + Scripts: Use printf instead of echo in a few places. - Now it should be close to the functionality of the original - version by Pavel Raiskup. + It's a good habbit as echo has some portability corner cases + when the string contents can be anything. - tests/Makefile.am | 3 ++- - tests/test_scripts.sh | 24 ++++++++++++++---------- - tests/xzgrep_expected_output | 39 +++++++++++++++++++++++++++++++++++++++ - 3 files changed, 55 insertions(+), 11 deletions(-) + src/scripts/xzdiff.in | 6 +++--- + src/scripts/xzgrep.in | 4 ++-- + src/scripts/xzless.in | 4 ++-- + src/scripts/xzmore.in | 8 ++++---- + 4 files changed, 11 insertions(+), 11 deletions(-) -commit 1e60f2c0a0ee6c18b02943ce56214799a70aac26 +commit 6a4a4a7d2667837dc824c26fcb19ed6ca5aff645 Author: Lasse Collin -Date: 2014-06-11 21:03:25 +0300 +Date: 2022-07-17 21:36:25 +0300 - xzgrep: Add a test for the previous fix. + xzgrep: Add more LC_ALL=C to avoid bugs with multibyte characters. - This is a simplified version of Pavel Raiskup's - original patch. + Also replace one use of expr with printf. + + The rationale for LC_ALL=C was already mentioned in + 69d1b3fc29677af8ade8dc15dba83f0589cb63d6 that fixed a security + issue. However, unrelated uses weren't changed in that commit yet. + + POSIX says that with sed and such tools one should use LC_ALL=C + to ensure predictable behavior when strings contain byte sequences + that aren't valid multibyte characters in the current locale. See + under "Application usage" in here: + + https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html + + With GNU sed invalid multibyte strings would work without this; + it's documented in its Texinfo manual. Some other implementations + aren't so forgiving. - tests/test_scripts.sh | 26 ++++++++++++++++++++++---- - 1 file changed, 22 insertions(+), 4 deletions(-) + src/scripts/xzgrep.in | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) -commit ceca37901783988204caaf40dff4623d535cc789 +commit b48f9d615f2c2e8d2f6e253d0e48ee66d0652b68 Author: Lasse Collin -Date: 2014-06-11 20:43:28 +0300 +Date: 2022-07-17 20:55:16 +0300 - xzgrep: exit 0 when at least one file matches. + xzgrep: Fix parsing of certain options. - Mimic the original grep behavior and return exit_success when - at least one xz compressed file matches given pattern. + Fix handling of "xzgrep -25 foo" (in GNU grep "grep -25 foo" is + an alias for "grep -C25 foo"). xzgrep would treat "foo" as filename + instead of as a pattern. This bug was fixed in zgrep in gzip in 2012. - Original bugreport: - https://bugzilla.redhat.com/show_bug.cgi?id=1108085 + Add -E, -F, -G, and -P to the "no argument required" list. - Thanks to Pavel Raiskup for the patch. + Add -X to "argument required" list. It is an + intentionally-undocumented GNU grep option so this isn't + an important option for xzgrep but it seems that other grep + implementations (well, those that I checked) don't support -X + so I hope this change is an improvement still. + + grep -d (grep --directories=ACTION) requires an argument. In + contrast to zgrep, I kept -d in the "no argument required" list + because it's not supported in xzgrep (or zgrep). This way + "xzgrep -d" gives an error about option being unsupported instead + of telling that it requires an argument. Both zgrep and xzgrep + tell that it's unsupported if an argument is specified. + + Add comments. - src/scripts/xzgrep.in | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) + src/scripts/xzgrep.in | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) -commit 8c19216baccb92d011694590df8a1262da2e980c +commit 2d2201bc6315deda4d43625aa510972467bd51d4 Author: Lasse Collin -Date: 2014-06-09 21:21:24 +0300 +Date: 2022-07-14 20:33:05 +0300 - xz: Force single-threaded mode when --flush-timeout is used. + Tests: Add the .lzma files to test_files.sh. - src/xz/coder.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) + tests/test_files.sh | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) -commit 87f1a24810805187d7bbc8ac5512e7eec307ddf5 +commit ce5549a591bf126300618879f5b24023351baff6 Author: Lasse Collin -Date: 2014-05-25 22:05:39 +0300 +Date: 2022-07-14 19:37:42 +0300 + Tests: Add .lzma test files. + + tests/files/README | 63 ++++++++++++++++----- + tests/files/bad-too_big_size-with_eopm.lzma | Bin 0 -> 37 bytes + tests/files/bad-too_small_size-without_eopm-1.lzma | Bin 0 -> 31 bytes + tests/files/bad-too_small_size-without_eopm-2.lzma | Bin 0 -> 31 bytes + tests/files/bad-too_small_size-without_eopm-3.lzma | Bin 0 -> 36 bytes + tests/files/bad-unknown_size-without_eopm.lzma | Bin 0 -> 31 bytes + tests/files/good-known_size-with_eopm.lzma | Bin 0 -> 37 bytes + tests/files/good-known_size-without_eopm.lzma | Bin 0 -> 31 bytes + tests/files/good-unknown_size-with_eopm.lzma | Bin 0 -> 37 bytes + 9 files changed, 50 insertions(+), 13 deletions(-) + +commit 107c93ee5cad51a6ea0cee471209bfe8d76deaa3 +Author: Lasse Collin +Date: 2022-07-14 18:12:38 +0300 + + liblzma: Rename a variable and improve a comment. + + src/liblzma/lzma/lzma_decoder.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit 511feb5eadb988d641b025d597f4fac7502003b8 +Author: Lasse Collin +Date: 2022-07-13 22:24:41 +0300 + Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit da1718f266fcfc091e7bf08aae1bc986d0e6cc6b +commit 9595a3119b9faf0ce01375329cad8bbf85c35ea2 Author: Lasse Collin -Date: 2014-05-25 21:45:56 +0300 +Date: 2022-07-13 22:24:07 +0300 - liblzma: Use lzma_alloc_zero() in LZ encoder initialization. + liblzma: Add optional autodetection of LZMA end marker. - This avoids a memzero() call for a newly-allocated memory, - which can be expensive when encoding small streams with - an over-sized dictionary. + Turns out that this is needed for .lzma files as the spec in + LZMA SDK says that end marker may be present even if the size + is stored in the header. Such files are rare but exist in the + real world. The code in liblzma is so old that the spec didn't + exist in LZMA SDK back then and I had understood that such + files weren't possible (the lzma tool in LZMA SDK didn't + create such files). - To avoid using lzma_alloc_zero() for memory that doesn't - need to be zeroed, lzma_mf.son is now allocated separately, - which requires handling it separately in normalize() too. + This modifies the internal API so that LZMA decoder can be told + if EOPM is allowed even when the uncompressed size is known. + It's allowed with .lzma and not with other uses. - Thanks to Vincenzo Innocente for reporting the problem. + Thanks to Karl Beldan for reporting the problem. - src/liblzma/lz/lz_encoder.c | 84 ++++++++++++++++++++++-------------------- - src/liblzma/lz/lz_encoder.h | 2 +- - src/liblzma/lz/lz_encoder_mf.c | 31 +++++++++------- - 3 files changed, 62 insertions(+), 55 deletions(-) + doc/lzma-file-format.txt | 11 +++- + src/liblzma/common/alone_decoder.c | 2 +- + src/liblzma/common/microlzma_decoder.c | 2 +- + src/liblzma/lz/lz_decoder.c | 10 +++- + src/liblzma/lz/lz_decoder.h | 8 +-- + src/liblzma/lzma/lzma2_decoder.c | 2 +- + src/liblzma/lzma/lzma_decoder.c | 99 ++++++++++++++++++++++++---------- + 7 files changed, 95 insertions(+), 39 deletions(-) -commit 28af24e9cf2eb259997c85dce13d4c97b3daa47a +commit 0c0f8e9761eb6eaf199082cf144db7ac5f9d8cb2 Author: Lasse Collin -Date: 2014-05-25 19:25:57 +0300 +Date: 2022-07-12 18:53:04 +0300 - liblzma: Add the internal function lzma_alloc_zero(). + xz: Document the special memlimit case of 2000 MiB on MIPS32. + + See commit fc3d3a7296ef58bb799a73943636b8bfd95339f7. - src/liblzma/common/common.c | 21 +++++++++++++++++++++ - src/liblzma/common/common.h | 6 ++++++ - 2 files changed, 27 insertions(+) + src/xz/xz.1 | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) -commit ed9ac85822c490e34b68c259afa0b385d21d1c40 -Author: Lasse Collin -Date: 2014-05-08 18:03:09 +0300 +commit d1bfa3dc703325ecd974167e864a8712fdfe936e +Author: Jia Tan +Date: 2022-07-01 21:19:26 +0800 - xz: Fix uint64_t vs. size_t which broke 32-bit build. + Created script to generate code coverage reports. - Thanks to Christian Hesse. + The script uses lcov and genhtml after running the tests + to show the code coverage statistics. The script will create + a coverage directory where it is run. It can be run both in + and out of the source directory. - src/xz/coder.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .gitignore | 4 +++ + tests/code_coverage.sh | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+) -commit d716acdae3fa7996f9e68a7bac012e6d8d13dd02 -Author: Lasse Collin -Date: 2014-05-04 11:09:11 +0300 +commit 86a30b0255d8064169fabfd213d907016d2f9f2a +Author: Jia Tan +Date: 2022-06-16 17:32:19 +0300 - Docs: Update comments to refer to lzma/lzma12.h in example programs. + Tests: Add more tests into test_check. - doc/examples/03_compress_custom.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + tests/test_check.c | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++-- + tests/tests.h | 23 +++++ + 2 files changed, 295 insertions(+), 7 deletions(-) -commit 4d5b7b3fda31241ca86ed35e08e73f776ee916e0 +commit 82e30fed66a89706388a8c15dc954d84e63f38fa Author: Lasse Collin -Date: 2014-05-04 11:07:17 +0300 +Date: 2022-06-16 15:02:57 +0300 - liblzma: Rename the private API header lzma/lzma.h to lzma/lzma12.h. + Tests: Use char[][24] array for enum_strings_lzma_ret. - It can be confusing that two header files have the same name. - The public API file is still lzma.h. + Array of pointers to short strings is a bit pointless here + and now it's fully const. - src/liblzma/api/Makefile.am | 2 +- - src/liblzma/api/lzma.h | 2 +- - src/liblzma/api/lzma/{lzma.h => lzma12.h} | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) + tests/tests.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 1555a9c5664afc7893a2b75e9970105437f01ef1 +commit 5ba9459e6c4a29f6870ca78ce8ac6e519d59c41e Author: Lasse Collin -Date: 2014-04-25 17:53:42 +0300 +Date: 2022-06-16 14:12:14 +0300 - Build: Fix the combination of --disable-xzdec --enable-lzmadec. - - In this case "make install" could fail if the man page directory - didn't already exist at the destination. If it did exist, a - dangling symlink was created there. Now the link is omitted - instead. This isn't the best fix but it's better than the old - behavior. + Tests: tuktest.h: Add tuktest_error_impl to help with error conditions. - src/xzdec/Makefile.am | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) + tests/tuktest.h | 72 +++++++++++++++++++++++++-------------------------------- + 1 file changed, 32 insertions(+), 40 deletions(-) -commit 56056571df3377eaa6ae6233b3ccc5d72e81d43d +commit b339892668da20aea22a93668c82b87a38e4a97f Author: Lasse Collin -Date: 2014-04-25 17:44:26 +0300 +Date: 2022-06-16 13:29:59 +0300 - Build: Add --disable-doc to configure. + Tests: tuktest.h: Rename file_from_* and use tuktest_malloc there. - INSTALL | 6 ++++++ - Makefile.am | 2 ++ - configure.ac | 6 ++++++ - 3 files changed, 14 insertions(+) + tests/test_bcj_exact_size.c | 4 +--- + tests/tuktest.h | 52 +++++++++++++++++++++------------------------ + 2 files changed, 25 insertions(+), 31 deletions(-) -commit 6de61d8721097a6214810841aa85b08e303ac538 +commit d8b63a0ad68d1c461eb373466679ebc41fbc207d Author: Lasse Collin -Date: 2014-04-24 18:06:24 +0300 +Date: 2022-06-16 13:08:19 +0300 - Update INSTALL. - - Add a note about failing "make check". The source of - the problem should be fixed in libtool (if it really is - a libtool bug and not mine) but I'm unable to spend time - on that for now. Thanks to Nelson H. F. Beebe for reporting - the issue. - - Add a note about a possible need to run "ldconfig" after - "make install". + Tests: tuktest.h: Add malloc wrapper with automatic freeing. - INSTALL | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) + tests/tuktest.h | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 124 insertions(+) -commit 54df428799a8d853639b753d0e6784694d73eb3e +commit 1d51536a4b19a8fae768f8eb462fc2238cb36d53 Author: Lasse Collin -Date: 2014-04-09 17:26:10 +0300 +Date: 2022-06-16 11:47:37 +0300 - xz: Rename a variable to avoid a namespace collision on Solaris. - - I don't know the details but I have an impression that there's - no problem in practice if using GCC since people have built xz - with GCC (without patching xz), but renaming the variable cannot - hurt either. - - Thanks to Mark Ashley. + Tests: tuktest.h: Move a function. - src/xz/signals.c | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) + tests/tuktest.h | 44 ++++++++++++++++++++++---------------------- + 1 file changed, 22 insertions(+), 22 deletions(-) -commit 5876ca27daa1429676b1160007d9688266907f00 +commit 70c7555f6403553ee35539e869de0025592d8564 Author: Lasse Collin -Date: 2014-01-29 20:19:41 +0200 +Date: 2022-06-14 22:21:15 +0300 - Docs: Add example program for threaded encoding. + Tests: test_vli: Remove an invalid test-assertion. - I didn't add -DLZMA_UNSTABLE to Makefile so one has to - specify it manually as long as LZMA_UNSTABLE is needed. + lzma_vli is unsigned so trying a signed value results in + a compiler warning from -Wsign-conversion. (lzma_vli)-1 + equals to LZMA_VLI_UNKNOWN anyway which is the next assertion. - doc/examples/04_compress_easy_mt.c | 184 +++++++++++++++++++++++++++++++++++++ - doc/examples/Makefile | 3 +- - 2 files changed, 186 insertions(+), 1 deletion(-) + tests/test_vli.c | 2 -- + 1 file changed, 2 deletions(-) -commit 9494fb6d0ff41c585326f00aa8f7fe58f8106a5e +commit 154b73c5a1092c3f785e01666b564ad7ff1be555 Author: Lasse Collin -Date: 2014-01-29 20:13:51 +0200 +Date: 2022-06-14 22:10:10 +0300 - liblzma: Fix lzma_mt.preset not working with lzma_stream_encoder_mt(). + Tests: test_vli: Add const where appropriate. + + tests/test_vli.c | 53 ++++++++++++++++++++++++++++------------------------- + 1 file changed, 28 insertions(+), 25 deletions(-) + +commit 0354d6cce3ff98ea6f927107baf216253f6ce2bb +Author: Jia Tan +Date: 2022-06-13 20:27:03 +0800 + + Added vli tests to .gitignore + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit a08f5ccf6bdc20ef70e41f6f3321618ef146f96e +Author: Jia Tan +Date: 2022-06-12 11:31:40 +0800 + + Created tests for all functions exported in vli.h - It read the filter chain from a wrong variable. + Achieved 100% code coverage vli_encoder.c, vli_decoder.c, and vli_size.c - src/liblzma/common/stream_encoder_mt.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + tests/Makefile.am | 4 +- + tests/test_vli.c | 308 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 311 insertions(+), 1 deletion(-) -commit 673a4cb53de3a715685cb1b836da57a3c7dcd43c -Author: Lasse Collin -Date: 2014-01-20 11:20:40 +0200 +commit 1e3eb61815a91c0a1bfbb802e2d95593f523491f +Author: jiat75 +Date: 2022-06-03 21:24:54 +0800 - liblzma: Fix typo in a comment. + Added parallel test artifacts to .gitignore - src/liblzma/api/lzma/block.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .gitignore | 2 ++ + 1 file changed, 2 insertions(+) -commit ad96a871a1470eb76d6233d3890ce9338047b7a3 +commit 00e3613f1212eaa84e721585fdb4de6967cf2476 Author: Lasse Collin -Date: 2014-01-12 19:38:43 +0200 +Date: 2022-06-14 21:29:21 +0300 - Windows: Add config.h for building liblzma with MSVC 2013. + Tests: Use good-1-empty-bcj-lzma2.xz in test_bcj_exact_size. - This is for building liblzma. Building xz tool too requires - a little more work. Maybe it will be supported, but for most - MSVC users it's enough to be able to build liblzma. - - C99 support in MSVC 2013 is almost usable which is a big - improvement over earlier versions. It's "almost" because - there's a dumb bug that breaks mixed declarations after - an "if" statements unless the "if" statement uses braces: - - https://connect.microsoft.com/VisualStudio/feedback/details/808650/visual-studio-2013-c99-compiler-bug - https://connect.microsoft.com/VisualStudio/feedback/details/808472/c99-support-of-mixed-declarations-and-statements-fails-with-certain-types-and-constructs - - Hopefully it will get fixed. Then liblzma should be - compilable with MSVC 2013 without patching. + It's much nicer this way so that the test data isn't a hardcoded + table inside the C file. - windows/config.h | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 139 insertions(+) + tests/test_bcj_exact_size.c | 19 +++++++------------ + 1 file changed, 7 insertions(+), 12 deletions(-) -commit 3d5c090872fab4212b57c290e8ed4d02c78c1737 +commit 86bab755be252bfd3e0a9aee8e7b83a9bbb23ed0 Author: Lasse Collin -Date: 2014-01-12 17:41:14 +0200 +Date: 2022-06-14 21:26:13 +0300 - xz: Fix a comment. + Tests: Add file reading helpers to tuktest.h. - src/xz/coder.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + tests/tuktest.h | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 176 insertions(+), 7 deletions(-) -commit 69fd4e1c932c7975476a0143c86e45d81b60d3f9 +commit 83d2337b72dbf391c6f3b41889eea99e51679105 Author: Lasse Collin -Date: 2014-01-12 17:04:33 +0200 +Date: 2022-06-14 18:21:57 +0300 - Windows: Add MSVC defines for inline and restrict keywords. + Tests: tuktest.h: Move a printf from a macro to a helper function. - src/common/sysdefs.h | 10 ++++++++++ - 1 file changed, 10 insertions(+) + tests/tuktest.h | 26 ++++++++++++++++++-------- + 1 file changed, 18 insertions(+), 8 deletions(-) -commit a19d9e8575ee6647cd9154cf1f20203f1330485f +commit f9e8176ea7d520797a2db2d49a5a632c285674a8 Author: Lasse Collin -Date: 2014-01-12 16:44:52 +0200 +Date: 2022-06-14 17:20:49 +0300 - liblzma: Avoid C99 compound literal arrays. + Tests: Add test file good-1-empty-bcj-lzma2.xz. - MSVC 2013 doesn't like them. Maybe they aren't so good - for readability either since many aren't used to them. + This is from test_bcj_exact_size.c. + It's good to have it as a standalone file. - src/liblzma/lzma/lzma_encoder_presets.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) + tests/files/README | 5 +++++ + tests/files/good-1-empty-bcj-lzma2.xz | Bin 0 -> 52 bytes + 2 files changed, 5 insertions(+) -commit e28528f1c867b2ed4ac91195ad08efb9bb8a6263 -Author: Lasse Collin -Date: 2014-01-12 12:50:30 +0200 +commit aa75c5563a760aea3aa23d997d519e702e82726b +Author: Jia Tan +Date: 2022-06-10 21:35:18 +0800 - liblzma: Remove a useless C99ism from sha256.c. + Tests: Created tests for hardware functions. - Unsurprisingly it makes no difference in compiled output. + Created tests for all API functions exported in + src/liblzma/api/lzma/hardware.h. The tests are fairly trivial + but are helpful because they will inform users if their machines + cannot support these functions. They also improve the code + coverage metrics. - src/liblzma/check/sha256.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .gitignore | 1 + + tests/Makefile.am | 2 ++ + tests/test_hardware.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 48 insertions(+) -commit 5ad1effc45adfb7dabc9a98e79736077e6b7e2d5 +commit 5c8ffdca20813939818843476fb212dfae8838a3 Author: Lasse Collin -Date: 2014-01-12 12:17:08 +0200 +Date: 2022-06-02 21:01:45 +0300 - xz: Fix use of wrong variable. + Tests: Convert test_check to tuktest. - Since the only call to suffix_set() uses optarg - as the argument, fixing this bug doesn't change - the behavior of the program. + Thanks to Jia Tan for help with all the tests. - src/xz/suffix.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + tests/test_check.c | 67 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 33 insertions(+), 34 deletions(-) -commit 3e62c68d75b5a3fdd46dbb34bb335d73289860d5 +commit faf5ff8899d539b4dcd2a7e5280cb820a4746c86 Author: Lasse Collin -Date: 2014-01-12 12:11:36 +0200 +Date: 2022-06-02 20:31:03 +0300 - Fix typos in comments. + Tests: Convert test_block_header to tuktest. - src/common/mythread.h | 2 +- - src/liblzma/check/crc32_fast.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + tests/test_block_header.c | 89 +++++++++++++++++++++++++++-------------------- + 1 file changed, 52 insertions(+), 37 deletions(-) -commit e90ea601fb72867ec04adf456cbe4bf9520fd412 +commit 754d39fbebee3782258d42f154a223d3c5770ec7 Author: Lasse Collin -Date: 2013-11-26 18:20:16 +0200 +Date: 2022-06-02 20:28:23 +0300 - Update THANKS. + Tests: Convert test_bcj_exact_size to tuktest. + + The compress() and decompress() functions were merged because + the later depends on the former so they need to be a single + test case. - THANKS | 1 + - 1 file changed, 1 insertion(+) + tests/test_bcj_exact_size.c | 75 +++++++++++++++++++++++++-------------------- + 1 file changed, 41 insertions(+), 34 deletions(-) -commit b22e94d8d15764416354e04729382a7371ae2c30 +commit 96da21470f9570cd08286906a050a7c22631775b Author: Lasse Collin -Date: 2013-11-26 18:20:09 +0200 +Date: 2022-06-02 20:27:00 +0300 - liblzma: Document the need for block->check for lzma_block_header_decode(). + Tests: Include tuktest.h in tests.h. - Thanks to Tomer Chachamu. + This breaks -Werror because none of the tests so far use + tuktest.h and thus there are warnings about unused variables + and functions. - src/liblzma/api/lzma/block.h | 3 +++ - 1 file changed, 3 insertions(+) + tests/tests.h | 47 +++++++++++++++++++++++------------------------ + 1 file changed, 23 insertions(+), 24 deletions(-) -commit d1cd8b1cb824b72421d1ee370e628024d2fcbec4 +commit df71ba1c991f60c3269aaadd398247e632714626 Author: Lasse Collin -Date: 2013-11-12 16:38:57 +0200 +Date: 2022-06-02 20:25:21 +0300 - xz: Update the man page about --block-size and --block-list. + Tests: Add tuktest.h mini-test-framework. - src/xz/xz.1 | 24 +++++++++++++++--------- - 1 file changed, 15 insertions(+), 9 deletions(-) + tests/Makefile.am | 1 + + tests/tuktest.h | 752 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 753 insertions(+) -commit 76be7c612e6bcc38724488ccc3b8bcb1cfec9f0a +commit 4773608554d1b684a05ff9c1d879cf5c42266d33 Author: Lasse Collin -Date: 2013-11-12 16:30:53 +0200 +Date: 2022-05-23 21:31:36 +0300 - Update THANKS. + Build: Enable Automake's parallel test harness. + + It has been the default for quite some time already and + the old serial harness isn't discouraged. The downside is + that with parallel tests one cannot print progress info or + other diagnostics to the terminal; all output from the tests + will be in the log files only. But now that the compression + tests are separated the parallel tests will speed things up. - THANKS | 1 + - 1 file changed, 1 insertion(+) + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit dd750acbe2259d75444ef0f8da2d4bacc90d7afc +commit 9a6dd6d46f7f256a5573e5d874c1052033ed7b05 Author: Lasse Collin -Date: 2013-11-12 16:29:48 +0200 +Date: 2022-05-23 21:17:47 +0300 - xz: Make --block-list and --block-size work together in single-threaded. + Tests: Split test_compress.sh into separate test unit for each file. - Previously, --block-list and --block-size only worked together - in threaded mode. Boundaries are specified by --block-list, but - --block-size specifies the maximum size for a Block. Now this - works in single-threaded mode too. + test_compress.sh now takes one command line argument: + a filename to be tested. If it begins with "compress_generated_" + the file will be created with create_compress_files. - Thanks to James M Leddy for the original patch. + This will allow parallel execution of the slow tests. - src/xz/coder.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 75 insertions(+), 15 deletions(-) + tests/Makefile.am | 11 +++- + tests/test_compress.sh | 91 +++++++++++++++++++--------------- + tests/test_compress_generated_abc | 3 ++ + tests/test_compress_generated_random | 3 ++ + tests/test_compress_generated_text | 3 ++ + tests/test_compress_prepared_bcj_sparc | 3 ++ + tests/test_compress_prepared_bcj_x86 | 3 ++ + 7 files changed, 77 insertions(+), 40 deletions(-) -commit ae222fe9805d0161d022d75ba8485dab8bf6d7d5 +commit c7758ac9c734707514dd34f254173ebac5eea7f8 Author: Lasse Collin -Date: 2013-10-26 13:26:14 +0300 +Date: 2022-05-23 20:32:49 +0300 - Bump the version number to 5.1.3alpha. + Test: Make create_compress_files.c a little more flexible. + + If a command line argument is given, then only the test file + of that type is created. It's quite dumb in sense that unknown + names don't give an error but it's good enough here. + + Also use EXIT_FAILURE instead of 1 as exit status for errors. - src/liblzma/api/lzma/version.h | 2 +- - src/liblzma/liblzma.map | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + tests/create_compress_files.c | 25 +++++++++++++++---------- + 1 file changed, 15 insertions(+), 10 deletions(-) -commit 2193837a6a597cd3bf4e9ddf49421a5697d8e155 +commit 4a8e4a7b0ad4b03c0ac6862716c3457452cdaf8c Author: Lasse Collin -Date: 2013-10-26 13:25:02 +0300 +Date: 2022-05-23 20:17:42 +0300 - Update NEWS for 5.1.3alpha. + Tests: Remove unneeded commented lines from test_compress.sh. - NEWS | 35 +++++++++++++++++++++++++++++++++++ - 1 file changed, 35 insertions(+) + tests/test_compress.sh | 13 ------------- + 1 file changed, 13 deletions(-) -commit ed48e75e2763876173aef8902da407a8eb28854b +commit 2ee50d150ee009f36135540b459e6ff328549725 Author: Lasse Collin -Date: 2013-10-26 12:47:04 +0300 +Date: 2022-05-23 20:16:00 +0300 - Update TODO. + Tests: Remove progress indicator from test_compress.sh. + + It will be useless with Automake's parallel tests. - TODO | 4 ---- - 1 file changed, 4 deletions(-) + tests/test_compress.sh | 9 --------- + 1 file changed, 9 deletions(-) -commit 841da0352d79a56a44796a4c39163429c9f039a3 +commit 2ce4f36f179a81d0c6e182a409f363df759d1ad0 Author: Lasse Collin -Date: 2013-10-25 22:41:28 +0300 +Date: 2022-05-23 19:37:18 +0300 - xz: Document behavior of --block-list with threads. + liblzma: Silence a warning. - This needs to be updated before 5.2.0. + The actual initialization is done via mythread_sync and seems + that GCC doesn't necessarily see that it gets initialized there. - src/xz/xz.1 | 24 +++++++++++++++++++++--- - 1 file changed, 21 insertions(+), 3 deletions(-) + src/liblzma/common/stream_decoder_mt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 56feb8665b78c1032aabd53c619c62af51defe64 +commit 5d8f3764ef43c35910e6d7003c0900a961ef6544 Author: Lasse Collin -Date: 2013-10-22 20:03:12 +0300 +Date: 2022-04-14 20:53:16 +0300 - xz: Document --flush-timeout=TIMEOUT on the man page. + xz: Fix build with --disable-threads. - src/xz/xz.1 | 37 ++++++++++++++++++++++++++++++++++++- - 1 file changed, 36 insertions(+), 1 deletion(-) + src/xz/hardware.c | 4 ++++ + 1 file changed, 4 insertions(+) -commit ba413da1d5bb3324287cf3174922acd921165971 +commit 1d592897278b172d8549aa29c3a1f3a4f432a9b9 Author: Lasse Collin -Date: 2013-10-22 19:51:55 +0300 +Date: 2022-04-14 14:50:17 +0300 - xz: Take advantage of LZMA_FULL_BARRIER with --block-list. + xz: Change the cap of the default -T0 memlimit for 32-bit xz. - Now if --block-list is used in threaded mode, the encoder - won't need to flush at each Block boundary specified via - --block-list. This improves performance a lot, making - threading helpful with --block-list. + The SIZE_MAX / 3 was 1365 MiB. 1400 MiB gives little more room + and it looks like a round (artificial) number in --info-memory + once --info-memory is made to display it. - The flush timer was reset after LZMA_FULL_FLUSH but since - LZMA_FULL_BARRIER doesn't flush, resetting the timer is - no longer done. + Also, using #if avoids useless code on 64-bit builds. - src/xz/coder.c | 32 +++++++++++++++----------------- - 1 file changed, 15 insertions(+), 17 deletions(-) + src/xz/hardware.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) -commit 0cd45fc2bc5537de287a0bc005e2d67467a92148 +commit c77fe55ddb7752ed0fec46967c5ec9a72632ea0c Author: Lasse Collin -Date: 2013-10-02 20:05:23 +0300 +Date: 2022-04-14 14:20:46 +0300 - liblzma: Support LZMA_FULL_FLUSH and _BARRIER in threaded encoder. + xz: Add a default soft memory usage limit for --threads=0. - Now --block-list=SIZES works with in the threaded mode too, - although the performance is still bad due to the use of - LZMA_FULL_FLUSH instead of the new LZMA_FULL_BARRIER. + This is a soft limit in sense that it only affects the number of + threads. It never makes xz fail and it never makes xz change + settings that would affect the compressed output. + + The idea is to make -T0 have more reasonable behavior when + the system has very many cores or when a memory-hungry + compression options are used. This also helps with 32-bit xz, + preventing it from running out of address space. + + The downside of this commit is that now the number of threads + might become too low compared to what the user expected. I + hope this to be an acceptable compromise as the old behavior + has been a source of well-argued complaints for a long time. - src/liblzma/common/stream_encoder_mt.c | 55 ++++++++++++++++++++++++---------- - 1 file changed, 39 insertions(+), 16 deletions(-) + src/xz/coder.c | 28 ++++++++++++++++++++++++++-- + src/xz/hardware.c | 38 +++++++++++++++++++++++++++++--------- + src/xz/hardware.h | 27 +++++++++++++++++++++++++++ + 3 files changed, 82 insertions(+), 11 deletions(-) -commit 97bb38712f414fabecca908af2e38a12570293fd +commit 0adc13bfe32c14f3e4c6ce9f2d4fdf4112ab53f4 Author: Lasse Collin -Date: 2013-10-02 12:55:11 +0300 +Date: 2022-04-14 12:59:09 +0300 - liblzma: Add LZMA_FULL_BARRIER support to single-threaded encoder. + xz: Make -T0 use multithreaded mode on single-core systems. - In the single-threaded encoder LZMA_FULL_BARRIER is simply - an alias for LZMA_FULL_FLUSH. + The main problem withi the old behavior is that the compressed + output is different on single-core systems vs. multicore systems. + This commit fixes it by making -T0 one thread in multithreaded mode + on single-core systems. + + The downside of this is that it uses more memory. However, if + --memlimit-compress is used, xz can (thanks to the previous commit) + drop to the single-threaded mode still. - src/liblzma/api/lzma/base.h | 37 ++++++++++++++++++++++++++++++------- - src/liblzma/common/common.c | 17 +++++++++++++++-- - src/liblzma/common/common.h | 7 ++++++- - src/liblzma/common/stream_encoder.c | 4 +++- - 4 files changed, 54 insertions(+), 11 deletions(-) + src/xz/coder.c | 18 +++++++++--------- + src/xz/hardware.c | 14 ++++++++++++++ + src/xz/hardware.h | 4 ++++ + 3 files changed, 27 insertions(+), 9 deletions(-) -commit fef0c6b410c08e581c9178700a4e7599f0895ff9 +commit 898faa97287a756231c663a3ed5165672b417207 Author: Lasse Collin -Date: 2013-09-17 11:57:51 +0300 +Date: 2022-04-14 12:38:00 +0300 - liblzma: Add block_buffer_encoder.h into Makefile.inc. + xz: Changes to --memlimit-compress and --no-adjust. - This should have been in b465da5988dd59ad98fda10c2e4ea13d0b9c73bc. + In single-threaded mode, --memlimit-compress can make xz scale down + the LZMA2 dictionary size to meet the memory usage limit. This + obviously affects the compressed output. However, if xz was in + threaded mode, --memlimit-compress could make xz reduce the number + of threads but it wouldn't make xz switch from multithreaded mode + to single-threaded mode or scale down the LZMA2 dictionary size. + This seemed illogical and there was even a "FIXME?" about it. + + Now --memlimit-compress can make xz switch to single-threaded + mode if one thread in multithreaded mode uses too much memory. + If memory usage is still too high, then the LZMA2 dictionary + size can be scaled down too. + + The option --no-adjust was also changed so that it no longer + prevents xz from scaling down the number of threads as that + doesn't affect compressed output (only performance). After + this commit --no-adjust only prevents adjustments that affect + compressed output, that is, with --no-adjust xz won't switch + from multithreaded mode to single-threaded mode and won't + scale down the LZMA2 dictionary size. + + The man page wasn't updated yet. - src/liblzma/common/Makefile.inc | 1 + - 1 file changed, 1 insertion(+) + src/xz/coder.c | 63 +++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 20 deletions(-) -commit 8083e03291b6d21c0f538163e187b4e8cd5594e4 +commit cad299008cf73ec566f0662a9cf2b94f86a99659 Author: Lasse Collin -Date: 2013-09-17 11:55:38 +0300 +Date: 2022-04-11 22:20:49 +0300 - xz: Add a missing test for TUKLIB_DOSLIKE. - - src/xz/file_io.c | 2 ++ - 1 file changed, 2 insertions(+) - -commit 6b44b4a775fe29ecc7bcb7996e086e3bc09e5fd0 -Author: Lasse Collin -Date: 2013-09-17 11:52:28 +0300 - - Add native threading support on Windows. + xz: Add --memlimit-mt-decompress along with a default limit value. - Now liblzma only uses "mythread" functions and types - which are defined in mythread.h matching the desired - threading method. + --memlimit-mt-decompress allows specifying the limit for + multithreaded decompression. This matches memlimit_threading in + liblzma. This limit can only affect the number of threads being + used; it will never prevent xz from decompressing a file. The + old --memlimit-decompress option is still used at the same time. - Before Windows Vista, there is no direct equivalent to - pthread condition variables. Since this package doesn't - use pthread_cond_broadcast(), pre-Vista threading can - still be kept quite simple. The pre-Vista code doesn't - use anything that wasn't already available in Windows 95, - so the binaries should run even on Windows 95 if someone - happens to care. + If the value of --memlimit-decompress (the default value or + one specified by the user) is less than the value of + --memlimit-mt-decompress , then --memlimit-mt-decompress is + reduced to match --memlimit-decompress. + + Man page wasn't updated yet. - INSTALL | 41 ++- - configure.ac | 118 ++++++-- - src/common/mythread.h | 513 ++++++++++++++++++++++++++------- - src/liblzma/common/stream_encoder_mt.c | 83 +++--- - src/xz/coder.c | 8 +- - windows/README-Windows.txt | 2 +- - windows/build.bash | 23 +- - 7 files changed, 573 insertions(+), 215 deletions(-) + src/xz/args.c | 24 +++++++++++++++------- + src/xz/coder.c | 34 ++++++++++--------------------- + src/xz/hardware.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++----- + src/xz/hardware.h | 17 ++++++++++------ + src/xz/message.c | 4 +++- + 5 files changed, 97 insertions(+), 42 deletions(-) -commit ae0ab74a88d5b9b15845f1d9a24ade4349a54f9f +commit fe87b4cd5364f5bbb6a75a0299f1500c852d7c9a Author: Lasse Collin -Date: 2013-09-11 14:40:35 +0300 +Date: 2022-04-06 23:11:59 +0300 - Build: Remove a comment about Automake 1.10 from configure.ac. + liblzma: Threaded decoder: Improve setting of pending_error. - The previous commit supports silent rules and that requires - Automake 1.11. + It doesn't need to be done conditionally. The comments try + to explain it. - configure.ac | 2 -- - 1 file changed, 2 deletions(-) + src/liblzma/common/stream_decoder_mt.c | 51 +++++++++++++++++++++++----------- + 1 file changed, 35 insertions(+), 16 deletions(-) -commit 72975df6c8c59aaf849138ab3606e8fb6970596a +commit 90621da7f6e1bfd6d91d60415eae04b2bca274c2 Author: Lasse Collin -Date: 2013-09-09 20:37:03 +0300 +Date: 2022-04-06 12:39:49 +0300 - Build: Create liblzma.pc in a src/liblzma/Makefile.am. + liblzma: Add a new flag LZMA_FAIL_FAST for threaded decoder. - Previously it was done in configure, but doing that goes - against the Autoconf manual. Autoconf requires that it is - possible to override e.g. prefix after running configure - and that doesn't work correctly if liblzma.pc is created - by configure. + In most cases if the input file is corrupt the application won't + care about the uncompressed content at all. With this new flag + the threaded decoder will return an error as soon as any thread + has detected an error; it won't wait to copy out the data before + the location of the error. - A potential downside of this change is that now e.g. - libdir in liblzma.pc is a standalone string instead of - being defined via ${prefix}, so if one overrides prefix - when running pkg-config the libdir won't get the new value. - I don't know if this matters in practice. - - Thanks to Vincent Torri. + I don't plan to use this in xz to keep the behavior consistent + between single-threaded and multi-threaded modes. - configure.ac | 1 - - src/liblzma/Makefile.am | 20 ++++++++++++++++++++ - 2 files changed, 20 insertions(+), 1 deletion(-) + src/liblzma/api/lzma/container.h | 25 ++++++++++++++++- + src/liblzma/common/common.h | 7 +++-- + src/liblzma/common/stream_decoder_mt.c | 50 +++++++++++++++++++--------------- + 3 files changed, 56 insertions(+), 26 deletions(-) -commit 1c2b6e7e8382ed390f53e140f160488bb2205ecc +commit 64b6d496dc815a176d8307f418f6834a26783484 Author: Lasse Collin -Date: 2013-08-04 15:24:09 +0300 +Date: 2022-04-05 12:24:57 +0300 - Fix the previous commit which broke the build. + liblzma: Threaded decoder: Always wait for output if LZMA_FINISH is used. - Apparently I didn't even compile-test the previous commit. + This makes the behavior consistent with the single-threaded + decoder when handling truncated .xz files. - Thanks to Christian Hesse. + Thanks to Jia Tan for finding this issue. - src/common/tuklib_cpucores.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/common/stream_decoder_mt.c | 26 ++++++++++++++++++++++++-- + 1 file changed, 24 insertions(+), 2 deletions(-) -commit 124eb69c7857f618b4807588c51bc9ba21bf8691 +commit e671bc8828b9c0c5406c3a22c541301d0eb54518 Author: Lasse Collin -Date: 2013-08-03 13:52:58 +0300 +Date: 2022-04-02 21:49:59 +0300 - Windows: Add Windows support to tuklib_cpucores(). + liblzma: Threaded decoder: Support zpipe.c-style decoding loop. - It is used for Cygwin too. I'm not sure if that is - a good or bad idea. + This makes it possible to call lzma_code() in a loop that only + reads new input when lzma_code() didn't fill the output buffer + completely. That isn't the calling style suggested by the + liblzma example program 02_decompress.c so perhaps the usefulness + of this feature is limited. - Thanks to Vincent Torri. + Also, it is possible to write such a loop so that it works + with the single-threaded decoder but not with the threaded + decoder even after this commit, or so that it works only if + lzma_mt.timeout = 0. + + The zlib tutorial is a well-known + example of a loop where more input is read only when output isn't + full. Porting this as is to liblzma would work with the + single-threaded decoder (if LZMA_CONCATENATED isn't used) but it + wouldn't work with threaded decoder even after this commit because + the loop assumes that no more output is possible when it cannot + read more input ("if (strm.avail_in == 0) break;"). This cannot + be fixed at liblzma side; the loop has to be modified at least + a little. + + I'm adding this in any case because the actual code is simple + and short and should have no harmful side-effects in other + situations. - m4/tuklib_cpucores.m4 | 19 +++++++++++++++++-- - src/common/tuklib_cpucores.c | 13 ++++++++++++- - 2 files changed, 29 insertions(+), 3 deletions(-) + src/liblzma/common/stream_decoder_mt.c | 77 +++++++++++++++++++++++++++++----- + 1 file changed, 67 insertions(+), 10 deletions(-) -commit eada8a875ce3fd521cb42e4ace2624d3d49c5f35 -Author: Anders F Bjorklund -Date: 2013-08-02 15:59:46 +0200 +commit 2ba8173e27be4793edb46497e499ac2ae753a316 +Author: Lasse Collin +Date: 2022-03-31 00:05:07 +0300 - macosx: separate liblzma package + Update THANKS. - macosx/build.sh | 23 +++++++++++++++-------- - 1 file changed, 15 insertions(+), 8 deletions(-) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit be0100d01ca6a75899d051bee00acf17e6dc0c15 -Author: Anders F Bjorklund -Date: 2013-08-02 15:58:44 +0200 +commit 69d1b3fc29677af8ade8dc15dba83f0589cb63d6 +Author: Lasse Collin +Date: 2022-03-29 19:19:12 +0300 - macosx: set minimum to leopard + xzgrep: Fix escaping of malicious filenames (ZDI-CAN-16587). + + Malicious filenames can make xzgrep to write to arbitrary files + or (with a GNU sed extension) lead to arbitrary code execution. + + xzgrep from XZ Utils versions up to and including 5.2.5 are + affected. 5.3.1alpha and 5.3.2alpha are affected as well. + This patch works for all of them. + + This bug was inherited from gzip's zgrep. gzip 1.12 includes + a fix for zgrep. + + The issue with the old sed script is that with multiple newlines, + the N-command will read the second line of input, then the + s-commands will be skipped because it's not the end of the + file yet, then a new sed cycle starts and the pattern space + is printed and emptied. So only the last line or two get escaped. + + One way to fix this would be to read all lines into the pattern + space first. However, the included fix is even simpler: All lines + except the last line get a backslash appended at the end. To ensure + that shell command substitution doesn't eat a possible trailing + newline, a colon is appended to the filename before escaping. + The colon is later used to separate the filename from the grep + output so it is fine to add it here instead of a few lines later. + + The old code also wasn't POSIX compliant as it used \n in the + replacement section of the s-command. Using \ is the + POSIX compatible method. + + LC_ALL=C was added to the two critical sed commands. POSIX sed + manual recommends it when using sed to manipulate pathnames + because in other locales invalid multibyte sequences might + cause issues with some sed implementations. In case of GNU sed, + these particular sed scripts wouldn't have such problems but some + other scripts could have, see: + + info '(sed)Locale Considerations' + + This vulnerability was discovered by: + cleemy desu wayo working with Trend Micro Zero Day Initiative + + Thanks to Jim Meyering and Paul Eggert discussing the different + ways to fix this and for coordinating the patch release schedule + with gzip. - macosx/build.sh | 13 ++++++++----- - 1 file changed, 8 insertions(+), 5 deletions(-) + src/scripts/xzgrep.in | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) -commit 416729e2d743f4b2fe9fd438eedeb98adce033c3 -Author: Anders F Bjorklund -Date: 2011-08-07 13:13:30 +0200 +commit bd93b776c1bd15e90661033c918cdeb354dbcc38 +Author: Lasse Collin +Date: 2022-03-26 01:02:44 +0200 - move configurables into variables + liblzma: Fix a deadlock in threaded decoder. + + If a worker thread has consumed all input so far and it's + waiting on thr->cond and then the main thread enables + partial update for that thread, the code used to deadlock. + This commit allows one dummy decoding pass to occur in this + situation which then also does the partial update. + + As part of the fix, this moves thr->progress_* updates to + avoid the second thr->mutex locking. + + Thanks to Jia Tan for finding, debugging, and reporting the bug. - macosx/build.sh | 25 ++++++++++++++++++------- - 1 file changed, 18 insertions(+), 7 deletions(-) + src/liblzma/common/stream_decoder_mt.c | 71 +++++++++++++++++++++++++--------- + 1 file changed, 52 insertions(+), 19 deletions(-) -commit 16581080e5f29f9a4e49efece21c5bf572323acc +commit e0394e94230f208682ac1e1f4c41f22f9ad79916 Author: Lasse Collin -Date: 2013-07-15 14:08:41 +0300 +Date: 2022-03-23 16:34:00 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 3e2b198ba37b624efd9c7caee2a435dc986b46c6 +commit 487c77d48760564b1949c5067630b675b87be4de Author: Lasse Collin -Date: 2013-07-15 14:08:02 +0300 +Date: 2022-03-23 16:28:55 +0200 - Build: Fix the detection of missing CRC32. + liblzma: Threaded decoder: Don't stop threads on LZMA_TIMED_OUT. - Thanks to Vincent Torri. + LZMA_TIMED_OUT is not an error and thus stopping threads on + LZMA_TIMED_OUT breaks the decoder badly. + + Thanks to Jia Tan for finding the bug and for the patch. - configure.ac | 2 +- + src/liblzma/common/stream_decoder_mt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit dee6ad3d5915422bc30a6821efeacaeb8ca8ef00 +commit 6c6da57ae2aa962aabde6892442227063d87e88c Author: Lasse Collin -Date: 2013-07-04 14:18:46 +0300 +Date: 2022-03-07 00:36:16 +0200 - xz: Add preliminary support for --flush-timeout=TIMEOUT. + xz: Add initial support for threaded decompression. - When --flush-timeout=TIMEOUT is used, xz will use - LZMA_SYNC_FLUSH if read() would block and at least - TIMEOUT milliseconds has elapsed since the previous flush. + If threading support is enabled at build time, this will + use lzma_stream_decoder_mt() even for single-threaded mode. + With memlimit_threading=0 the behavior should be identical. - This can be useful in realtime-like use cases where the - data is simultanously decompressed by another process - (possibly on a different computer). If new uncompressed - input data is produced slowly, without this option xz could - buffer the data for a long time until it would become - decompressible from the output. + This needs some work like adding --memlimit-threading=LIMIT. - If TIMEOUT is 0, the feature is disabled. This is the default. + The original patch from Sebastian Andrzej Siewior included + a method to get currently available RAM on Linux. It might + be one way to go but as it is Linux-only, the available-RAM + approach needs work for portability or using a fallback method + on other OSes. - This commit affects the compression side. Using xz for - the decompression side for the above purpose doesn't work - yet so well because there is quite a bit of input and - output buffering when decompressing. + The man page wasn't updated yet. + + src/xz/coder.c | 36 +++++++++++++++++++++++++++++++++++- + 1 file changed, 35 insertions(+), 1 deletion(-) + +commit 4cce3e27f529af33e0e7749a8cbcec59954946b5 +Author: Lasse Collin +Date: 2022-03-06 23:36:20 +0200 + + liblzma: Add threaded .xz decompressor. - The --long-help or man page were not updated yet. - The details of this feature may change. + I realize that this is about a decade late. + + Big thanks to Sebastian Andrzej Siewior for the original patch. + I made a bunch of smaller changes but after a while quite a few + things got rewritten. So any bugs in the commit were created by me. - src/xz/args.c | 7 +++++++ - src/xz/coder.c | 46 +++++++++++++++++++++++++++++++++++----------- - src/xz/file_io.c | 46 ++++++++++++++++++++++++++++++++++++---------- - 3 files changed, 78 insertions(+), 21 deletions(-) + src/liblzma/api/lzma/container.h | 90 +- + src/liblzma/common/Makefile.inc | 5 + + src/liblzma/common/common.h | 4 + + src/liblzma/common/stream_decoder_mt.c | 1814 ++++++++++++++++++++++++++++++++ + src/liblzma/liblzma.map | 1 + + 5 files changed, 1907 insertions(+), 7 deletions(-) -commit fa381acaf9a29a8114e1c0a97de99bab9adb014e +commit 717631b9788dc9c100ee0c87d3c14a2782638ff4 Author: Lasse Collin -Date: 2013-07-04 13:41:03 +0300 +Date: 2022-03-06 16:54:23 +0200 - xz: Don't set src_eof=true after an I/O error because it's useless. + liblzma: Fix docs: lzma_block_decoder() cannot return LZMA_UNSUPPORTED_CHECK. + + If Check is unsupported, it will be silently ignored. + It's the caller's job to handle it. - src/xz/file_io.c | 3 --- + src/liblzma/api/lzma/block.h | 3 --- 1 file changed, 3 deletions(-) -commit ea00545beace5b950f709ec21e46878e0f448678 +commit 1a4bb97a00936535e30ac61945aeee38882b5d1a Author: Lasse Collin -Date: 2013-07-04 13:25:11 +0300 +Date: 2022-03-06 16:41:19 +0200 - xz: Fix the test when to read more input. + liblzma: Add new output queue (lzma_outq) features. - Testing for end of file was no longer correct after full flushing - became possible with --block-size=SIZE and --block-list=SIZES. - There was no bug in practice though because xz just made a few - unneeded zero-byte reads. + Add lzma_outq_clear_cache2() which may leave one buffer allocated + in the cache. + + Add lzma_outq_outbuf_memusage() to get the memory needed for + a single lzma_outbuf. This is now used internally in outqueue.c too. + + Track both the total amount of memory allocated and the amount of + memory that is in active use (not in cache). + + In lzma_outbuf, allow storing the current input position that + matches the current output position. This way the main thread + can notice when no more output is possible without first providing + more input. + + Allow specifying return code for lzma_outq_read() in a finished + lzma_outbuf. - src/xz/coder.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + src/liblzma/common/outqueue.c | 43 +++++++++++++++++++++++++++++++++++------- + src/liblzma/common/outqueue.h | 44 ++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 79 insertions(+), 8 deletions(-) -commit 736903c64bef394c06685d79908e397bcb08b88f +commit ddbc6f58c2de388eed24cd7ea91b523d397da5f4 Author: Lasse Collin -Date: 2013-07-04 12:51:57 +0300 +Date: 2022-03-06 15:18:58 +0200 - xz: Move some of the timing code into mytime.[hc]. + liblzma: Index hash: Change return value type of hash_append() to void. + + src/liblzma/common/index_hash.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 20e7a33e2d59c6a814447d3991f21e2702174b20 +Author: Lasse Collin +Date: 2022-02-22 03:42:57 +0200 + + liblzma: Minor addition to lzma_vli_size() API doc. - This switches units from microseconds to milliseconds. + Thanks to Jia Tan. + + src/liblzma/api/lzma/vli.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 4f78f5fcf63592f2d77e921cfe0d5de300867374 +Author: Lasse Collin +Date: 2022-02-22 02:04:18 +0200 + + liblzma: Check the return value of lzma_index_append() in threaded encoder. - New clock_gettime(CLOCK_MONOTONIC) will be used if available. - There is still a fallback to gettimeofday(). + If lzma_index_append() failed (most likely memory allocation failure) + it could have gone unnoticed and the resulting .xz file would have + an incorrect Index. Decompressing such a file would produce the + correct uncompressed data but then an error would occur when + verifying the Index field. - src/xz/Makefile.am | 2 ++ - src/xz/coder.c | 5 +++ - src/xz/message.c | 54 +++++++++------------------------ - src/xz/mytime.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/mytime.h | 47 ++++++++++++++++++++++++++++ - src/xz/private.h | 1 + - 6 files changed, 158 insertions(+), 40 deletions(-) + src/liblzma/common/stream_encoder_mt.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) -commit 24edf8d807e24ffaa1e793114d94cca3b970027d +commit 5313ad66b40aab822ddca3e9905254cb99a4080d Author: Lasse Collin -Date: 2013-07-01 14:35:03 +0300 +Date: 2022-02-22 01:37:39 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit c0627b3fceacfa1ed162f5f55235360ea26f569a +commit 865e0a3689a25a7ee8eecae1a34c1775e3aa676e +Author: Ed Maste +Date: 2022-02-11 15:25:46 +0000 + + liblzma: Use non-executable stack on FreeBSD as on Linux + + src/liblzma/check/crc32_x86.S | 4 ++-- + src/liblzma/check/crc64_x86.S | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 1c9a5786d206b4abc8e427326651c8174baea753 Author: Lasse Collin -Date: 2013-07-01 14:34:11 +0300 +Date: 2022-02-20 20:36:27 +0200 - xz: Silence a warning seen with _FORTIFY_SOURCE=2. + liblzma: Make Block decoder catch certain types of errors better. - Thanks to Christian Hesse. + Now it limits the input and output buffer sizes that are + passed to a raw decoder. This way there's no need to check + if the sizes can grow too big or overflow when updating + Compressed Size and Uncompressed Size counts. This also means + that a corrupt file cannot cause the raw decoder to process + useless extra input or output that would exceed the size info + in Block Header (and thus cause LZMA_DATA_ERROR anyway). + + More importantly, now the size information is verified more + carefully in case raw decoder returns LZMA_OK. This doesn't + really matter with the current single-threaded .xz decoder + as the errors would be detected slightly later anyway. But + this helps avoiding corner cases in the upcoming threaded + decompressor, and it might help other Block decoder uses + outside liblzma too. + + The test files bad-1-lzma2-{9,10,11}.xz test these conditions. + With the single-threaded .xz decoder the only difference is + that LZMA_DATA_ERROR is detected in a difference place now. - src/xz/file_io.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) + src/liblzma/common/block_decoder.c | 79 ++++++++++++++++++++++++++------------ + 1 file changed, 54 insertions(+), 25 deletions(-) -commit 1936718bb38ee394bd89836fdd4eabc0beb02443 +commit 555de11873eb00c9b94a8be70645db502e5a9dbd Author: Lasse Collin -Date: 2013-06-30 19:40:11 +0300 +Date: 2022-02-20 19:38:55 +0200 - Update NEWS for 5.0.5. + Tests: Add bad-1-lzma2-11.xz. - NEWS | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 52 insertions(+) + tests/files/README | 5 +++++ + tests/files/bad-1-lzma2-11.xz | Bin 0 -> 64 bytes + 2 files changed, 5 insertions(+) -commit a37ae8b5eb6093a530198f109c6f7a538c80ecf0 +commit f0da507f22e7f4e3edb75b45b74d344244ca03fb Author: Lasse Collin -Date: 2013-06-30 18:02:27 +0300 +Date: 2022-02-18 18:51:10 +0200 - Man pages: Use similar syntax for synopsis as in xz. + Translations: Fix po4a failure with the French man page translations. - The man pages of lzmainfo, xzmore, and xzdec had similar - constructs as the man page of xz had before the commit - eb6ca9854b8eb9fbf72497c1cf608d6b19d2d494. Eric S. Raymond - didn't mention these man pages in his bug report, but - it's nice to be consistent. + Thanks to Mario Blättermann for the patch. - src/lzmainfo/lzmainfo.1 | 4 ++-- - src/scripts/xzmore.1 | 6 +++--- - src/xzdec/xzdec.1 | 10 +++++----- - 3 files changed, 10 insertions(+), 10 deletions(-) + po4a/fr_FR.po | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) -commit cdba9ddd870ae72fd6219a125662c20ec997f86c +commit f7711d228c3c32395460c82498c60a9f730d0239 Author: Lasse Collin -Date: 2013-06-29 15:59:13 +0300 +Date: 2022-02-07 01:14:37 +0200 - xz: Use non-blocking I/O for the output file. + Translations: Add French translation of man pages. - Now both reading and writing should be without - race conditions with signals. + This matches xz-utils 5.2.5-2 in Debian. - They might still be signal handling issues left. - Signals are blocked during many operations to avoid - EINTR but it may cause problems e.g. if writing to - stderr blocks when trying to display an error message. + The translation was done by "bubu", proofread by the debian-l10n-french + mailing list contributors, and submitted to me on the xz-devel mailing + list by Jean-Pierre Giraud. Thanks to everyone! - src/xz/file_io.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 49 insertions(+), 8 deletions(-) + po4a/fr_FR.po | 3541 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po4a/po4a.conf | 2 +- + 2 files changed, 3542 insertions(+), 1 deletion(-) -commit e61a5c95da3fe31281d959e5e842885a8ba2b5bd -Author: Lasse Collin -Date: 2013-06-28 23:56:17 +0300 +commit 6468f7e41a8e9c611e4ba8d34e2175c5dacdbeb4 +Author: jiat75 +Date: 2022-01-28 20:47:55 +0800 - xz: Fix return value type in io_write_buf(). + liblzma: Add NULL checks to LZMA and LZMA2 properties encoders. - It didn't affect the behavior of the code since -1 - becomes true anyway. + Previously lzma_lzma_props_encode() and lzma_lzma2_props_encode() + assumed that the options pointers must be non-NULL because the + with these filters the API says it must never be NULL. It is + good to do these checks anyway. - src/xz/file_io.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/lzma/lzma2_encoder.c | 3 +++ + src/liblzma/lzma/lzma_encoder.c | 3 +++ + 2 files changed, 6 insertions(+) -commit 9dc319eabb34a826f4945f91c71620f14a60e9e2 +commit 2523c30705f49eabd27b854aa656ae87cc224808 Author: Lasse Collin -Date: 2013-06-28 23:48:05 +0300 +Date: 2022-02-06 23:19:32 +0200 - xz: Use the self-pipe trick to avoid a race condition with signals. + liblzma: Fix uint64_t vs. size_t confusion. - It is possible that a signal to set user_abort arrives right - before a blocking system call is made. In this case the call - may block until another signal arrives, while the wanted - behavior is to make xz clean up and exit as soon as possible. + This broke 32-bit builds due to a pointer type mismatch. - After this commit, the race condition is avoided with the - input side which already uses non-blocking I/O. The output - side still uses blocking I/O and thus has the race condition. + This bug was introduced with the output-size-limited encoding + in 625f4c7c99b2fcc4db9e7ab2deb4884790e2e17c. + + Thanks to huangqinjin for the bug report. - src/xz/file_io.c | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ - src/xz/file_io.h | 8 ++++++++ - src/xz/signals.c | 5 +++++ - 3 files changed, 57 insertions(+), 12 deletions(-) + src/liblzma/rangecoder/range_encoder.h | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) -commit 3541bc79d0cfabc0ad155c99bfdad1289f17fec3 +commit 2bd36c91d03e03b31a4f12fd0afc100ae32d66e2 +Author: huangqinjin +Date: 2021-12-13 20:49:21 +0800 + + CMake: Keep compatible with Windows 95 for 32-bit build. + + CMakeLists.txt | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit 2024fbf2794885277d05378d40b2b8015a7c3b40 Author: Lasse Collin -Date: 2013-06-28 22:51:02 +0300 +Date: 2021-11-13 21:04:05 +0200 - xz: Use non-blocking I/O for the input file. + xzgrep: Update man page timestamp. - src/xz/file_io.c | 156 +++++++++++++++++++++++++++++++++++++++---------------- - 1 file changed, 111 insertions(+), 45 deletions(-) + src/scripts/xzgrep.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 78673a08bed5066c81e8a8e90d20e670c28ecfd5 +commit 400e7a239a53282cedaad927a41f3463d7f542e5 Author: Lasse Collin -Date: 2013-06-28 18:46:13 +0300 +Date: 2021-11-13 18:23:24 +0200 - xz: Remove an outdated NetBSD-specific comment. + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 3a512c7787b2642ca946f4adc6e9a0a5d9b0d5a0 +Author: Ville Skyttä +Date: 2021-11-13 10:11:57 +0200 + + xzgrep: use `grep -E/-F` instead of `egrep` and `fgrep` - Nowadays errno == EFTYPE is documented in open(2). + `egrep` and `fgrep` have been deprecated in GNU grep since 2007, and in + current post 3.7 Git they have been made to emit obsolescence warnings: + https://git.savannah.gnu.org/cgit/grep.git/commit/?id=a9515624709865d480e3142fd959bccd1c9372d1 - src/xz/file_io.c | 4 ---- - 1 file changed, 4 deletions(-) + src/scripts/xzgrep.1 | 8 ++++---- + src/scripts/xzgrep.in | 4 ++-- + 2 files changed, 6 insertions(+), 6 deletions(-) -commit a616fdad34b48b2932ef03fb87309dcc8b829527 +commit edf525e2b1840dcaf377df472c67d8f11f8ace1b Author: Lasse Collin -Date: 2013-06-28 18:09:47 +0300 +Date: 2021-10-28 23:02:11 +0300 - xz: Fix error detection of fcntl(fd, F_SETFL, flags) calls. - - POSIX says that fcntl(fd, F_SETFL, flags) returns -1 on - error and "other than -1" on success. This is how it is - documented e.g. on OpenBSD too. On Linux, success with - F_SETFL is always 0 (at least accorinding to fcntl(2) - from man-pages 3.51). + Bump the version number for 5.3.2alpha. - src/xz/file_io.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + src/liblzma/api/lzma/version.h | 2 +- + src/liblzma/liblzma.map | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit 4a08a6e4c61c65ab763ab314100a6d7a3bb89298 +commit ea8c948655a86290524efe59cff067e06a886709 Author: Lasse Collin -Date: 2013-06-28 17:36:47 +0300 +Date: 2021-10-28 22:59:52 +0300 - xz: Fix use of wrong variable in a fcntl() call. - - Due to a wrong variable name, when writing a sparse file - to standard output, *all* file status flags were cleared - (to the extent the operating system allowed it) instead of - only clearing the O_APPEND flag. In practice this worked - fine in the common situations on GNU/Linux, but I didn't - check how it behaved elsewhere. - - The original flags were still restored correctly. I still - changed the code to use a separate boolean variable to - indicate when the flags should be restored instead of - relying on a special value in stdout_flags. + Add NEWS for 5.3.2alpha. - src/xz/file_io.c | 24 +++++++++++++----------- - 1 file changed, 13 insertions(+), 11 deletions(-) + NEWS | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) -commit b790b435daa3351067f80a5973b647f8d55367a2 +commit 52435f302f4724157ec50b4210cbe42b285c3cbc Author: Lasse Collin -Date: 2013-06-28 14:55:37 +0300 +Date: 2021-10-27 23:27:48 +0300 - xz: Fix assertion related to posix_fadvise(). - - Input file can be a FIFO or something else that doesn't - support posix_fadvise() so don't check the return value - even with an assertion. Nothing bad happens if the call - to posix_fadvise() fails. + Update THANKS. - src/xz/file_io.c | 10 ++-------- - 1 file changed, 2 insertions(+), 8 deletions(-) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 84d2da6c9dc252f441deb7626c2522202b005d4d +commit f2aea1d5a504b2021bf47a238390e4f12bdd518d Author: Lasse Collin -Date: 2013-06-26 13:30:57 +0300 +Date: 2021-10-27 23:23:11 +0300 - xz: Check the value of lzma_stream_flags.version in --list. + xz: Change the coding style of the previous commit. - It is a no-op for now, but if an old xz version is used - together with a newer liblzma that supports something new, - then this check becomes important and will stop the old xz - from trying to parse files that it won't understand. + It isn't any better now but it's consistent with + the rest of the code base. - src/xz/list.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) + src/xz/file_io.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) -commit 9376f5f8f762296f2173d61af9101112c36f38c0 +commit 892b16cc282f5b4e1c49871b326f4db25c5b4d81 +Author: Alexander Bluhm +Date: 2021-10-05 23:33:16 +0200 + + xz: Avoid fchown(2) failure. + + OpenBSD does not allow to change the group of a file if the user + does not belong to this group. In contrast to Linux, OpenBSD also + fails if the new group is the same as the old one. Do not call + fchown(2) in this case, it would change nothing anyway. + + This fixes an issue with Perl Alien::Build module. + https://github.com/PerlAlien/Alien-Build/issues/62 + + src/xz/file_io.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 2b509c868cae3988bf21cd693fbf9021cdc85628 Author: Lasse Collin -Date: 2013-06-26 12:17:00 +0300 +Date: 2021-09-17 17:31:11 +0300 - Build: Require Automake 1.12 and use serial-tests option. + liblzma: Fix liblzma.map for the lzma_microlzma_* symbols. - It should actually still work with Automake 1.10 if - the serial-tests option is removed. Automake 1.13 started - using parallel tests by default and the option to get - the old behavior isn't supported before 1.12. + This should have been part of d267d109c370a40b502e73f8664b154b15e4f253. - At least for now, parallel tests don't improve anything - in XZ Utils but they hide the progress output from - test_compress.sh. + Thanks to Gao Xiang. - configure.ac | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + src/liblzma/liblzma.map | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit b7e200d7bd0a3c7c171c13ad37d68296d6f73374 +commit cacb06a954b58255dfc084a0bc9708f43a0fd6d6 Author: Lasse Collin -Date: 2013-06-23 18:59:13 +0300 +Date: 2021-09-09 22:21:07 +0300 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 46540e4c10923e363741ff5aab99e79fc0ce6ee8 +commit 6928aac9da6ba612780b9f72ba1d6ecbe1e8b54e Author: Lasse Collin -Date: 2013-06-23 18:57:23 +0300 +Date: 2021-09-09 21:41:51 +0300 - liblzma: Avoid a warning about a shadowed variable. + liblzma: Use _MSVC_LANG to detect when "noexcept" can be used with MSVC. - On Mac OS X wait() is declared in that - we include one way or other so don't use "wait" as - a variable name. + By default, MSVC always sets __cplusplus to 199711L. The real + C++ standard version is available in _MSVC_LANG (or one could + use /Zc:__cplusplus to set __cplusplus correctly). - Thanks to Christian Kujau. + Fixes . + + Thanks to Dan Weiss. - src/liblzma/common/stream_encoder_mt.c | 4 ++-- + src/liblzma/api/lzma.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d267d109c370a40b502e73f8664b154b15e4f253 +Author: Lasse Collin +Date: 2021-09-05 20:38:12 +0300 + + liblzma: Rename EROFS LZMA to MicroLZMA. + + It still exists primarily for EROFS but MicroLZMA is + a more generic name (that hopefully doesn't clash with + something that already exists). + + src/liblzma/api/lzma/container.h | 33 +++++++++++++--------- + src/liblzma/common/Makefile.inc | 4 +-- + .../{erofs_decoder.c => microlzma_decoder.c} | 32 ++++++++++----------- + .../{erofs_encoder.c => microlzma_encoder.c} | 30 ++++++++++---------- + 4 files changed, 52 insertions(+), 47 deletions(-) + +commit 3247e95115acb95bc27f41e8cf4501db5b0b4309 +Author: Lasse Collin +Date: 2021-06-04 19:02:38 +0300 + + xzdiff: Update the man page about the exit status. + + This was forgotten from 194029ffaf74282a81f0c299c07f73caca3232ca. + + src/scripts/xzdiff.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -commit ebb501ec73cecc546c67117dd01b5e33c90bfb4a +commit 96f5a28a46fc93ac4e296808ac0f8631d05498bc Author: Lasse Collin -Date: 2013-06-23 17:36:47 +0300 +Date: 2021-06-04 18:52:48 +0300 - xz: Validate Uncompressed Size from Block Header in list.c. + xzless: Fix less(1) version detection when it contains a dot. - This affects only "xz -lvv". Normal decompression with xz - already detected if Block Header and Index had mismatched - Uncompressed Size fields. So this just makes "xz -lvv" - show such files as corrupt instead of showing the - Uncompressed Size from Index. + Sometimes the version number from "less -V" contains a dot, + sometimes not. xzless failed detect the version number when + it does contain a dot. This fixes it. + + Thanks to nick87720z for reporting this. Apparently it had been + reported here in 2013. - src/xz/list.c | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) + src/scripts/xzless.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit c09e91dd236d3cabee0fc48312b3dc8cceae41ab +commit 5fb5212d816addbc523d0798cb482fdd0484f8fa Author: Lasse Collin -Date: 2013-06-21 22:08:11 +0300 +Date: 2021-04-11 19:58:10 +0300 Update THANKS. THANKS | 2 ++ 1 file changed, 2 insertions(+) -commit eb6ca9854b8eb9fbf72497c1cf608d6b19d2d494 -Author: Lasse Collin -Date: 2013-06-21 22:04:45 +0300 +commit fc3d3a7296ef58bb799a73943636b8bfd95339f7 +Author: Ivan A. Melnikov +Date: 2021-04-09 11:45:10 +0300 - xz: Make the man page more friendly to doclifter. + Reduce maximum possible memory limit on MIPS32 - Thanks to Eric S. Raymond. + Due to architectural limitations, address space available to a single + userspace process on MIPS32 is limited to 2 GiB, not 4, even on systems + that have more physical RAM -- e.g. 64-bit systems with 32-bit + userspace, or systems that use XPA (an extension similar to x86's PAE). + + So, for MIPS32, we have to impose stronger memory limits. I've chosen + 2000MiB to give the process some headroom. - src/xz/xz.1 | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) + src/xz/hardware.c | 6 ++++++ + 1 file changed, 6 insertions(+) -commit 0c0a1947e6ad90a0a10b7a5c39f6ab99a0aa5c93 +commit e7da44d5151e21f153925781ad29334ae0786101 Author: Lasse Collin -Date: 2013-06-21 21:54:59 +0300 +Date: 2021-02-13 23:31:27 +0200 - xz: A couple of man page fixes. + CMake: Use interface library for better FindLibLZMA compatibility. - Now the interaction of presets and custom filter chains - is described correctly. Earlier it contradicted itself. + https://www.mail-archive.com/xz-devel@tukaani.org/msg00446.html - Thanks to DevHC who reported these issues on IRC to me - on 2012-12-14. + Thanks to Markus Rickert. - src/xz/xz.1 | 35 +++++++++++++++++++++++------------ - 1 file changed, 23 insertions(+), 12 deletions(-) + CMakeLists.txt | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) -commit 2fcda89939c903106c429e109083d43d894049e0 +commit a61dd82ada39030f41b4ffca9ea551714908bedc Author: Lasse Collin -Date: 2013-06-21 21:50:26 +0300 +Date: 2021-01-30 18:36:04 +0200 - xz: Fix interaction between preset and custom filter chains. + CMake: Try to improve compatibility with the FindLibLZMA module. - There was somewhat illogical behavior when --extreme was - specified and mixed with custom filter chains. + The naming conflict with FindLibLZMA module gets worse. + Not avoiding it in the first place was stupid. - Before this commit, "xz -9 --lzma2 -e" was equivalent - to "xz --lzma2". After it is equivalent to "xz -6e" - (all earlier preset options get forgotten when a custom - filter chain is specified and the default preset is 6 - to which -e is applied). I find this less illogical. + Normally find_package(LibLZMA) will use the module and + find_package(liblzma 5.2.5 REQUIRED CONFIG) will use the config + file even with a case insensitive file system. However, if + CMAKE_FIND_PACKAGE_PREFER_CONFIG is TRUE and the file system + is case insensitive, find_package(LibLZMA) will find our liblzma + config file instead of using FindLibLZMA module. - This also affects the meaning of "xz -9e --lzma2 -7". - Earlier it was equivalent to "xz -7e" (the -e specified - before a custom filter chain wasn't forgotten). Now it - is "xz -7". Note that "xz -7e" still is the same as "xz -e7". + One big problem with this is that FindLibLZMA uses + LibLZMA::LibLZMA and we use liblzma::liblzma as the target + name. With target names CMake happens to be case sensitive. + To workaround this, this commit adds - Hopefully very few cared about this in the first place, - so pretty much no one should even notice this change. + add_library(LibLZMA::LibLZMA ALIAS liblzma::liblzma) - Thanks to Conley Moorhous. + to the config file. Then both spellings work. + + To make the behavior consistent between case sensitive and + insensitive file systems, the config and related files are + renamed from liblzmaConfig.cmake to liblzma-config.cmake style. + With this style CMake looks for lowercase version of the package + name so find_package(LiBLzmA 5.2.5 REQUIRED CONFIG) will work + to find our config file. + + There are other differences between our config file and + FindLibLZMA so it's still possible that things break for + reasons other than the spelling of the target name. Hopefully + those situations aren't too common. + + When the config file is available, it should always give as good or + better results as FindLibLZMA so this commit doesn't affect the + recommendation to use find_package(liblzma 5.2.5 REQUIRED CONFIG) + which explicitly avoids FindLibLZMA. + + Thanks to Markus Rickert. - src/xz/coder.c | 35 +++++++++++++++++++++-------------- - 1 file changed, 21 insertions(+), 14 deletions(-) + CMakeLists.txt | 21 +++++++++++++-------- + 1 file changed, 13 insertions(+), 8 deletions(-) -commit 97379c5ea758da3f8b0bc444d5f7fa43753ce610 +commit 5b7bc1b8ae766a76710ca1b99f909cf52c697f05 Author: Lasse Collin -Date: 2013-04-27 22:07:46 +0300 +Date: 2021-01-29 21:19:43 +0200 - Build: Use -Wvla with GCC if supported. - - Variable-length arrays are mandatory in C99 but optional in C11. - The code doesn't currently use any VLAs and it shouldn't in the - future either to stay compatible with C11 without requiring any - optional C11 features. + Update THANKS. - configure.ac | 1 + + THANKS | 1 + 1 file changed, 1 insertion(+) -commit 8957c58609d3987c58aa72b96c436cf565cc4917 +commit 6c6f0db340dcb8bb424411cedba713405d55f6b8 Author: Lasse Collin -Date: 2013-04-15 19:29:09 +0300 +Date: 2021-01-29 21:19:08 +0200 - xzdec: Improve the --help message. + liblzma: Fix unitialized variable. - The options are now ordered in the same order as in xz's help - message. + This was introduced two weeks ago in the commit + 625f4c7c99b2fcc4db9e7ab2deb4884790e2e17c. - Descriptions were added to the options that are ignored. - I left them in parenthesis even if it looks a bit weird - because I find it easier to spot the ignored vs. non-ignored - options from the list that way. + Thanks to Nathan Moinvaziri. - src/xzdec/xzdec.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) + src/liblzma/lzma/lzma_encoder.c | 1 + + 1 file changed, 1 insertion(+) -commit ed886e1a92534a24401d0e99c11f1dcff3b5220a +commit bb1d5c1fdd30550d4221ecd336e0be1206132a5c Author: Lasse Collin -Date: 2013-04-05 19:25:40 +0300 +Date: 2021-01-24 22:32:41 +0200 - Update THANKS. + Tests: Add bad-1-lzma2-10.xz and also modify -9.xz. - THANKS | 2 ++ - 1 file changed, 2 insertions(+) + tests/files/README | 11 +++++++++-- + tests/files/bad-1-lzma2-10.xz | Bin 0 -> 60 bytes + tests/files/bad-1-lzma2-9.xz | Bin 72 -> 72 bytes + 3 files changed, 9 insertions(+), 2 deletions(-) -commit 5019413a055ce29e660dbbf15e02443cb5a26c59 -Author: Jeff Bastian -Date: 2013-04-03 13:59:17 +0200 +commit 6b8abc84a5469792e0355d0bfc0784d41cfdfef7 +Author: Lasse Collin +Date: 2021-01-24 19:22:35 +0200 - xzgrep: make the '-h' option to be --no-filename equivalent - - * src/scripts/xzgrep.in: Accept the '-h' option in argument parsing. + liblzma: Fix a wrong comment in stream_encoder_mt.c. - src/scripts/xzgrep.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/common/stream_encoder_mt.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) -commit 5ea900cb5ad862bca81316729f92357c1fc040ce +commit 939fc5ed654aac25fe0c8684b2df8dbeadb2de1e Author: Lasse Collin -Date: 2013-03-23 22:25:15 +0200 +Date: 2021-01-24 18:51:51 +0200 - liblzma: Be less picky in lzma_alone_decoder(). - - To avoid false positives when detecting .lzma files, - rare values in dictionary size and uncompressed size fields - were rejected. They will still be rejected if .lzma files - are decoded with lzma_auto_decoder(), but when using - lzma_alone_decoder() directly, such files will now be accepted. - Hopefully this is an OK compromise. - - This doesn't affect xz because xz still has its own file - format detection code. This does affect lzmadec though. - So after this commit lzmadec will accept files that xz or - xz-emulating-lzma doesn't. - - NOTE: lzma_alone_decoder() still won't decode all .lzma files - because liblzma's LZMA decoder doesn't support lc + lp > 4. - - Reported here: - http://sourceforge.net/projects/lzmautils/forums/forum/708858/topic/7068827 + Tests: Add bad-1-lzma2-9.xz. - src/liblzma/common/alone_decoder.c | 22 ++++++++++++++-------- - src/liblzma/common/alone_decoder.h | 5 +++-- - src/liblzma/common/auto_decoder.c | 2 +- - 3 files changed, 18 insertions(+), 11 deletions(-) + tests/files/README | 4 ++++ + tests/files/bad-1-lzma2-9.xz | Bin 0 -> 72 bytes + 2 files changed, 4 insertions(+) -commit bb117fffa84604b6e3811b068c80db82bf7f7b05 +commit fdd30032f8531ac89519b48c21d810ecf06825f6 Author: Lasse Collin -Date: 2013-03-23 21:55:13 +0200 +Date: 2021-01-24 17:02:00 +0200 - liblzma: Use lzma_block_buffer_bound64() in threaded encoder. + Tests: Add bad-1-check-crc32-2.xz. + + tests/files/README | 7 +++++++ + tests/files/bad-1-check-crc32-2.xz | Bin 0 -> 72 bytes + 2 files changed, 7 insertions(+) + +commit db465419ae26ec7fb9b9472183911ff521620c77 +Author: Lasse Collin +Date: 2021-01-17 19:20:50 +0200 + + liblzma: In EROFS LZMA decoder, verify that comp_size matches at the end. - Now it uses lzma_block_uncomp_encode() if the data doesn't - fit into the space calculated by lzma_block_buffer_bound64(). + When the uncompressed size is known to be exact, after decompressing + the stream exactly comp_size bytes of input must have been consumed. + This is a minor improvement to error detection. - src/liblzma/common/stream_encoder_mt.c | 66 +++++++++++++++++++++++++--------- - 1 file changed, 50 insertions(+), 16 deletions(-) + src/liblzma/common/erofs_decoder.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) -commit e572e123b55b29527e54ce5f0807f115481d78b9 +commit 774cc0118ba2496581cb2621505a04bb6598cc75 Author: Lasse Collin -Date: 2013-03-23 21:51:38 +0200 +Date: 2021-01-17 18:53:34 +0200 - liblzma: Fix another deadlock in the threaded encoder. + liblzma: Make EROFS LZMA decoder work when exact uncomp_size isn't known. - This race condition could cause a deadlock if lzma_end() was - called before finishing the encoding. This can happen with - xz with debugging enabled (non-debugging version doesn't - call lzma_end() before exiting). + The caller must still not specify an uncompressed size bigger + than the actual uncompressed size. + + As a downside, this now needs the exact compressed size. - src/liblzma/common/stream_encoder_mt.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) + src/liblzma/api/lzma/container.h | 23 ++++++++--- + src/liblzma/common/erofs_decoder.c | 80 ++++++++++++++++++++++++++++++++++---- + 2 files changed, 91 insertions(+), 12 deletions(-) -commit b465da5988dd59ad98fda10c2e4ea13d0b9c73bc +commit 421b0aa352da244075db10205cf33712f91b9835 Author: Lasse Collin -Date: 2013-03-23 19:17:33 +0200 +Date: 2021-01-14 20:57:11 +0200 - liblzma: Add lzma_block_uncomp_encode(). + liblzma: Fix missing normalization in rc_encode_dummy(). - This also adds a new internal function - lzma_block_buffer_bound64() which is similar to - lzma_block_buffer_bound() but uses uint64_t instead - of size_t. + Without this fix it could attempt to create too much output. - src/liblzma/api/lzma/block.h | 18 ++++++ - src/liblzma/common/block_buffer_encoder.c | 94 +++++++++++++++++++++---------- - src/liblzma/common/block_buffer_encoder.h | 24 ++++++++ - src/liblzma/liblzma.map | 1 + - 4 files changed, 106 insertions(+), 31 deletions(-) + src/liblzma/rangecoder/range_encoder.h | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) -commit 9e6dabcf22ef4679f4faaae15ebd5b137ae2fad1 +commit 601ec0311e769fc704daaaa7dac0ca840aff080e Author: Lasse Collin -Date: 2013-03-05 19:14:50 +0200 +Date: 2021-01-14 20:07:01 +0200 - Avoid unneeded use of awk in xzless. + liblzma: Add EROFS LZMA encoder and decoder. - Use "read" instead of "awk" in xzless to get the version - number of "less". The need for awk was introduced in - the commit db5c1817fabf7cbb9e4087b1576eb26f0747338e. + Right now this is just a planned extra-compact format for use + in the EROFS file system in Linux. At this point it's possible + that the format will either change or be abandoned and removed + completely. - Thanks to Ariel P for the patch. + The special thing about the encoder is that it uses the + output-size-limited encoding added in the previous commit. + EROFS uses fixed-sized blocks (e.g. 4 KiB) to hold compressed + data so the compressors must be able to create valid streams + that fill the given block size. - src/scripts/xzless.in | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) + src/liblzma/api/lzma/container.h | 76 +++++++++++++++++++ + src/liblzma/common/Makefile.inc | 2 + + src/liblzma/common/erofs_decoder.c | 148 +++++++++++++++++++++++++++++++++++++ + src/liblzma/common/erofs_encoder.c | 139 ++++++++++++++++++++++++++++++++++ + src/liblzma/liblzma.map | 2 + + 5 files changed, 367 insertions(+) -commit e7b424d267a34803db8d92a3515528be2ed45abd +commit 625f4c7c99b2fcc4db9e7ab2deb4884790e2e17c Author: Lasse Collin -Date: 2012-12-14 20:13:32 +0200 +Date: 2021-01-13 19:16:32 +0200 - Make the progress indicator smooth in threaded mode. + liblzma: Add rough support for output-size-limited encoding in LZMA1. - This adds lzma_get_progress() to liblzma and takes advantage - of it in xz. + With this it is possible to encode LZMA1 data without EOPM so that + the encoder will encode as much input as it can without exceeding + the specified output size limit. The resulting LZMA1 stream will + be a normal LZMA1 stream without EOPM. The actual uncompressed size + will be available to the caller via the uncomp_size pointer. - lzma_get_progress() collects progress information from - the thread-specific structures so that fairly accurate - progress information is available to applications. Adding - a new function seemed to be a better way than making the - information directly available in lzma_stream (like total_in - and total_out are) because collecting the information requires - locking mutexes. It's waste of time to do it more often than - the up to date information is actually needed by an application. + One missing thing is that the LZMA layer doesn't inform the LZ layer + when the encoding is finished and thus the LZ may read more input + when it won't be used. However, this doesn't matter if encoding is + done with a single call (which is the planned use case for now). + For proper multi-call encoding this should be improved. + + This commit only adds the functionality for internal use. + Nothing uses it yet. - src/liblzma/api/lzma/base.h | 22 +++++++++- - src/liblzma/common/common.c | 16 +++++++ - src/liblzma/common/common.h | 6 +++ - src/liblzma/common/stream_encoder_mt.c | 77 +++++++++++++++++++++++++++++++--- - src/liblzma/liblzma.map | 1 + - src/xz/message.c | 20 +++++---- - 6 files changed, 129 insertions(+), 13 deletions(-) + src/liblzma/common/common.h | 11 +++ + src/liblzma/lz/lz_encoder.c | 16 ++++ + src/liblzma/lz/lz_encoder.h | 4 + + src/liblzma/lzma/lzma_encoder.c | 127 +++++++++++++++++++++++--------- + src/liblzma/lzma/lzma_encoder_private.h | 12 +++ + src/liblzma/rangecoder/range_encoder.h | 111 ++++++++++++++++++++++++++++ + 6 files changed, 246 insertions(+), 35 deletions(-) -commit 2ebbb994e367f55f2561aa7c9e7451703c171f2f +commit 9cdabbeea891e8f1e7741b076f7db6ac05ae392a Author: Lasse Collin -Date: 2012-12-14 11:01:41 +0200 +Date: 2021-01-11 23:57:11 +0200 - liblzma: Fix mythread_sync for nested locking. + Scripts: Add zstd support to xzdiff. - src/common/mythread.h | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) + src/scripts/xzdiff.1 | 6 ++++-- + src/scripts/xzdiff.in | 16 +++++++++++----- + 2 files changed, 15 insertions(+), 7 deletions(-) -commit 4c7e28705f6de418d19cc77324ef301f996e01ff +commit d9ec3add97cf4c999a7f594c6529680227b6c274 Author: Lasse Collin -Date: 2012-12-13 21:05:36 +0200 +Date: 2021-01-11 23:41:30 +0200 - xz: Mention --threads in --help. - - Thanks to Olivier Delhomme for pointing out that this - was still missing. + Update THANKS. - src/xz/message.c | 4 ++++ - 1 file changed, 4 insertions(+) + THANKS | 2 ++ + 1 file changed, 2 insertions(+) -commit db5c1817fabf7cbb9e4087b1576eb26f0747338e -Author: Jonathan Nieder -Date: 2012-11-19 00:10:10 -0800 +commit 074259f4f3966aeac6edb205fecbc1a8d2b58bb2 +Author: Lasse Collin +Date: 2021-01-11 23:41:16 +0200 - xzless: Make "less -V" parsing more robust + xz: Make --keep accept symlinks, hardlinks, and setuid/setgid/sticky. - In v4.999.9beta~30 (xzless: Support compressed standard input, - 2009-08-09), xzless learned to parse ‘less -V’ output to figure out - whether less is new enough to handle $LESSOPEN settings starting - with “|-”. That worked well for a while, but the version string from - ‘less’ versions 448 (June, 2012) is misparsed, producing a warning: + Previously this required using --force but that has other + effects too which might be undesirable. Changing the behavior + of --keep has a small risk of breaking existing scripts but + since this is a fairly special corner case I expect the + likehood of breakage to be low enough. - $ xzless /tmp/test.xz; echo $? - /usr/bin/xzless: line 49: test: 456 (GNU regular expressions): \ - integer expression expected - 0 + I think the new behavior is more logical. The only reason for + the old behavior was to be consistent with gzip and bzip2. - More precisely, modern ‘less’ lists the regexp implementation along - with its version number, and xzless passes the entire version number - with attached parenthetical phrase as a number to "test $a -gt $b", - producing the above confusing message. + Thanks to Vincent Lefevre and Sebastian Andrzej Siewior. + + src/xz/file_io.c | 9 +++++---- + src/xz/xz.1 | 16 +++++++++++++++- + 2 files changed, 20 insertions(+), 5 deletions(-) + +commit 73c555b3077c19dda29b6f4592ced2af876f8333 +Author: Lasse Collin +Date: 2021-01-11 23:28:52 +0200 + + Scripts: Fix exit status of xzgrep. - $ less-444 -V | head -1 - less 444 - $ less -V | head -1 - less 456 (no regular expressions) + Omit the -q option from xz, gzip, and bzip2. With xz this shouldn't + matter. With gzip it's important because -q makes gzip replace SIGPIPE + with exit status 2. With bzip2 it's important because with -q bzip2 + is completely silent if input is corrupt while other decompressors + still give an error message. - So relax the pattern matched --- instead of expecting "less ", - look for a line of the form "less [ (extra parenthetical)]". - While at it, improve the behavior when no matching line is found --- - instead of producing a cryptic message, we can fall back on a LESSPIPE - setting that is supported by all versions of ‘less’. + Avoiding exit status 2 from gzip is important because bzip2 uses + exit status 2 to indicate corrupt input. Before this commit xzgrep + didn't recognize corrupt .bz2 files because xzgrep was treating + exit status 2 as SIGPIPE for gzip compatibility. - The implementation uses "awk" for simplicity. Hopefully that’s - portable enough. + zstd still needs -q because otherwise it is noisy in normal + operation. - Reported-by: Jörg-Volker Peetz - Signed-off-by: Jonathan Nieder + The code to detect real SIGPIPE didn't check if the exit status + was due to a signal (>= 128) and so could ignore some other exit + status too. - src/scripts/xzless.in | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/scripts/xzgrep.in | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) -commit 65536214a31ecd33b6b03b68a351fb597d3703d6 +commit 194029ffaf74282a81f0c299c07f73caca3232ca Author: Lasse Collin -Date: 2012-10-03 15:54:24 +0300 +Date: 2021-01-11 22:01:51 +0200 - xz: Fix the note about --rsyncable on the man page. + Scripts: Fix exit status of xzdiff/xzcmp. + + This is a minor fix since this affects only the situation when + the files differ and the exit status is something else than 0. + In such case there could be SIGPIPE from a decompression tool + and that would result in exit status of 2 from xzdiff/xzcmp + while the correct behavior would be to return 1 or whatever + else diff or cmp may have returned. + + This commit omits the -q option from xz/gzip/bzip2/lzop arguments. + I'm not sure why the -q was used in the first place, perhaps it + hides warnings in some situation that I cannot see at the moment. + Hopefully the removal won't introduce a new bug. + + With gzip the -q option was harmful because it made gzip return 2 + instead of >= 128 with SIGPIPE. Ignoring exit status 2 (warning + from gzip) isn't practical because bzip2 uses exit status 2 to + indicate corrupt input file. It's better if SIGPIPE results in + exit status >= 128. + + With bzip2 the removal of -q seems to be good because with -q + it prints nothing if input is corrupt. The other tools aren't + silent in this situation even with -q. On the other hand, if + zstd support is added, it will need -q since otherwise it's + noisy in normal situations. + + Thanks to Étienne Mollier and Sebastian Andrzej Siewior. - src/xz/xz.1 | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) + src/scripts/xzdiff.in | 35 +++++++++++++++++++++-------------- + 1 file changed, 21 insertions(+), 14 deletions(-) -commit 3d93b6354927247a1569caf22ad27b07e97ee904 +commit f7fa309e1f7178d04c7bedc03b73077639371e97 Author: Lasse Collin -Date: 2012-09-28 20:11:09 +0300 +Date: 2021-01-09 21:14:36 +0200 - xz: Improve handling of failed realloc in xrealloc. + liblzma: Make lzma_outq usable for threaded decompression too. - Thanks to Jim Meyering. + Before this commit all output queue buffers were allocated as + a single big allocation. Now each buffer is allocated separately + when needed. Used buffers are cached to avoid reallocation + overhead but the cache will keep only one buffer size at a time. + This should make things work OK in the decompression where most + of the time the buffer sizes will be the same but with some less + common files the buffer sizes may vary. + + While this should work fine, it's still a bit preliminary + and may even get reverted if it turns out to be useless for + decompression. - src/xz/util.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) + src/liblzma/common/outqueue.c | 268 +++++++++++++++++++++------------ + src/liblzma/common/outqueue.h | 138 ++++++++++++----- + src/liblzma/common/stream_encoder_mt.c | 52 ++++--- + 3 files changed, 301 insertions(+), 157 deletions(-) -commit ab225620664e235637833be2329935f9d290ba80 +commit a35a69d693ce37d4ba7c1855bda7d9cfa13d1778 Author: Lasse Collin -Date: 2012-08-24 16:27:31 +0300 +Date: 2020-12-23 17:15:49 +0200 - A few typo fixes to comments and the xz man page. + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 4fd79b90c52396d70e0b1206ceb1a873a0ad2589 +Author: H.J. Lu +Date: 2020-12-23 06:49:04 -0800 + + liblzma: Enable Intel CET in x86 CRC assembly codes - Thanks to Jim Meyering. + When Intel CET is enabled, we need to include in assembly codes + to mark Intel CET support and add _CET_ENDBR to indirect jump targets. + + Tested on Intel Tiger Lake under CET enabled Linux. - configure.ac | 2 +- - src/liblzma/check/sha256.c | 1 - - src/xz/xz.1 | 4 ++-- - 3 files changed, 3 insertions(+), 4 deletions(-) + src/liblzma/check/crc32_x86.S | 9 +++++++++ + src/liblzma/check/crc64_x86.S | 9 +++++++++ + 2 files changed, 18 insertions(+) -commit f3c1ec69d910175ffd431fd82968dd35cec806ed +commit bb3b8c6a23e25db79f862b1de325c56052e0354b Author: Lasse Collin -Date: 2012-08-13 21:40:09 +0300 +Date: 2020-12-16 18:33:29 +0200 - xz: Add a warning to --help about alpha and beta versions. + Update THANKS. - src/xz/message.c | 5 +++++ - 1 file changed, 5 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit d8eaf9d8278c23c2cf2b7ca5562d4de570d3b5db +commit 21588ca34af98738954fc12ded1b89d7294ef646 Author: Lasse Collin -Date: 2012-08-02 17:13:30 +0300 +Date: 2020-12-16 18:30:14 +0200 - Build: Bump gettext version requirement to 0.18. + Build: Don't build bundles on Apple OSes. - Otherwise too old version of m4/lib-link.m4 gets included - when autoreconf -fi is run. + Thanks to Daniel Packard. - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) -commit 96e08902b09f0f304d4ff80c6e83ef7fff883f34 +commit d05b0c42dd8b38d8c6b8193c8af50e9bd3d16f28 Author: Lasse Collin -Date: 2012-07-17 18:29:08 +0300 +Date: 2020-12-05 22:44:03 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 3778db1be53e61ff285c573af5ee468803008456 -Author: Lasse Collin -Date: 2012-07-17 18:19:59 +0300 +commit 1890351f3423627ba5c4c495402f32d7e9ed90b7 +Author: Adam Borowski +Date: 2020-09-25 03:35:18 +0200 - liblzma: Make the use of lzma_allocator const-correct. + Scripts: Add zstd support to xzgrep. - There is a tiny risk of causing breakage: If an application - assigns lzma_stream.allocator to a non-const pointer, such - code won't compile anymore. I don't know why anyone would do - such a thing though, so in practice this shouldn't cause trouble. - - Thanks to Jan Kratochvil for the patch. + Thanks to Adam Borowski. - src/liblzma/api/lzma/base.h | 4 +++- - src/liblzma/api/lzma/block.h | 6 ++--- - src/liblzma/api/lzma/container.h | 9 +++++--- - src/liblzma/api/lzma/filter.h | 13 ++++++----- - src/liblzma/api/lzma/index.h | 16 ++++++------- - src/liblzma/api/lzma/index_hash.h | 4 ++-- - src/liblzma/common/alone_decoder.c | 6 ++--- - src/liblzma/common/alone_decoder.h | 2 +- - src/liblzma/common/alone_encoder.c | 8 +++---- - src/liblzma/common/auto_decoder.c | 6 ++--- - src/liblzma/common/block_buffer_decoder.c | 2 +- - src/liblzma/common/block_buffer_encoder.c | 4 ++-- - src/liblzma/common/block_decoder.c | 6 ++--- - src/liblzma/common/block_decoder.h | 2 +- - src/liblzma/common/block_encoder.c | 8 +++---- - src/liblzma/common/block_encoder.h | 2 +- - src/liblzma/common/block_header_decoder.c | 4 ++-- - src/liblzma/common/common.c | 10 ++++----- - src/liblzma/common/common.h | 20 +++++++++-------- - src/liblzma/common/easy_buffer_encoder.c | 4 ++-- - src/liblzma/common/filter_buffer_decoder.c | 3 ++- - src/liblzma/common/filter_buffer_encoder.c | 7 +++--- - src/liblzma/common/filter_common.c | 4 ++-- - src/liblzma/common/filter_common.h | 2 +- - src/liblzma/common/filter_decoder.c | 7 +++--- - src/liblzma/common/filter_decoder.h | 2 +- - src/liblzma/common/filter_encoder.c | 2 +- - src/liblzma/common/filter_encoder.h | 2 +- - src/liblzma/common/filter_flags_decoder.c | 2 +- - src/liblzma/common/index.c | 26 ++++++++++----------- - src/liblzma/common/index_decoder.c | 12 +++++----- - src/liblzma/common/index_encoder.c | 6 ++--- - src/liblzma/common/index_encoder.h | 2 +- - src/liblzma/common/index_hash.c | 6 +++-- - src/liblzma/common/outqueue.c | 4 ++-- - src/liblzma/common/outqueue.h | 5 +++-- - src/liblzma/common/stream_buffer_decoder.c | 2 +- - src/liblzma/common/stream_buffer_encoder.c | 3 ++- - src/liblzma/common/stream_decoder.c | 9 ++++---- - src/liblzma/common/stream_decoder.h | 5 +++-- - src/liblzma/common/stream_encoder.c | 10 ++++----- - src/liblzma/common/stream_encoder_mt.c | 16 ++++++------- - src/liblzma/delta/delta_common.c | 4 ++-- - src/liblzma/delta/delta_decoder.c | 6 ++--- - src/liblzma/delta/delta_decoder.h | 5 +++-- - src/liblzma/delta/delta_encoder.c | 6 ++--- - src/liblzma/delta/delta_encoder.h | 3 ++- - src/liblzma/delta/delta_private.h | 2 +- - src/liblzma/lz/lz_decoder.c | 8 +++---- - src/liblzma/lz/lz_decoder.h | 7 +++--- - src/liblzma/lz/lz_encoder.c | 19 ++++++++-------- - src/liblzma/lz/lz_encoder.h | 6 ++--- - src/liblzma/lzma/lzma2_decoder.c | 8 +++---- - src/liblzma/lzma/lzma2_decoder.h | 5 +++-- - src/liblzma/lzma/lzma2_encoder.c | 6 ++--- - src/liblzma/lzma/lzma2_encoder.h | 2 +- - src/liblzma/lzma/lzma_decoder.c | 8 +++---- - src/liblzma/lzma/lzma_decoder.h | 7 +++--- - src/liblzma/lzma/lzma_encoder.c | 7 +++--- - src/liblzma/lzma/lzma_encoder.h | 5 +++-- - src/liblzma/simple/arm.c | 8 ++++--- - src/liblzma/simple/armthumb.c | 8 ++++--- - src/liblzma/simple/ia64.c | 8 ++++--- - src/liblzma/simple/powerpc.c | 8 ++++--- - src/liblzma/simple/simple_coder.c | 10 ++++----- - src/liblzma/simple/simple_coder.h | 36 ++++++++++++++++++++---------- - src/liblzma/simple/simple_decoder.c | 2 +- - src/liblzma/simple/simple_decoder.h | 2 +- - src/liblzma/simple/simple_private.h | 3 ++- - src/liblzma/simple/sparc.c | 8 ++++--- - src/liblzma/simple/x86.c | 8 ++++--- - 71 files changed, 269 insertions(+), 219 deletions(-) + src/scripts/xzgrep.1 | 9 ++++++--- + src/scripts/xzgrep.in | 1 + + 2 files changed, 7 insertions(+), 3 deletions(-) -commit d625c7cf824fd3b61c6da84f56179e94917ff603 +commit 2f108abb3d82e4e2313b438dae9c0c7c7a6366f2 Author: Lasse Collin -Date: 2012-07-05 07:36:28 +0300 +Date: 2020-11-17 20:51:48 +0200 - Tests: Remove tests/test_block.c that had gotten committed accidentally. + CMake: Fix compatibility with CMake 3.13. + + The syntax "if(DEFINED CACHE{FOO})" requires CMake 3.14. + In some other places the code treats the cache variables + like normal variables already (${FOO} or if(FOO) is used, + not ${CACHE{FOO}). + + Thanks to ygrek for reporting the bug on IRC. - tests/test_block.c | 52 ---------------------------------------------------- - 1 file changed, 52 deletions(-) + CMakeLists.txt | 2 +- + cmake/tuklib_cpucores.cmake | 4 ++-- + cmake/tuklib_physmem.cmake | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) -commit 0b09d266cce72bc4841933b171e79551e488927c +commit 5af726a79273fafa5de5745b117e567f21c90e49 Author: Lasse Collin -Date: 2012-07-05 07:33:35 +0300 +Date: 2020-11-01 22:56:43 +0200 - Build: Include macosx/build.sh in the distribution. - - It has been in the Git repository since 2010 but probably - few people have seen it since it hasn't been included in - the release tarballs. :-( + Update THANKS. - Makefile.am | 1 + - 1 file changed, 1 insertion(+) + THANKS | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) -commit d6e0b23d4613b9f417893dd96cc168c8005ece3d +commit 4575d9d365c756ec189899f9f743e0b3515ce72d Author: Lasse Collin -Date: 2012-07-05 07:28:53 +0300 +Date: 2020-11-01 22:34:25 +0200 - Build: Include validate_map.sh in the distribution. + xz: Avoid unneeded \f escapes on the man page. - It's required by "make mydist". + I don't want to use \c in macro arguments but groff_man(7) + suggests that \f has better portability. \f would be needed + for the .TP strings for portability reasons anyway. - Fix also the location of EXTRA_DIST+= so that those files - get distributed also if symbol versioning isn't enabled. + Thanks to Bjarni Ingi Gislason. - src/liblzma/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/xz/xz.1 | 31 ++++++++++++++++++++++--------- + 1 file changed, 22 insertions(+), 9 deletions(-) -commit 19de545d86097c3954d69ab5d12820387f6a09bc +commit 620b32f5339f86710cb4435e01ecdac972ccac73 Author: Lasse Collin -Date: 2012-07-05 07:24:45 +0300 +Date: 2020-11-01 19:09:53 +0200 - Docs: Fix the name LZMA Utils -> XZ Utils in debug/README. + xz: Use non-breaking spaces when intentionally using more than one space. + + This silences some style checker warnings. Seems that spaces + in the beginning of a line don't need this treatment. + + Thanks to Bjarni Ingi Gislason. - debug/README | 2 +- + src/xz/xz.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 672eccf57c31a40dfb956b7662db06d43e18618e +commit cb1f34988c8a4130485091b2f8b641303d8f701b Author: Lasse Collin -Date: 2012-07-05 07:23:17 +0300 +Date: 2020-11-01 18:49:37 +0200 - Include debug/translation.bash in the distribution. + xz: Protect the ellipsis (...) on the man page with \&. - Also fix the script name mentioned in README. + This does it only when ... appears outside macro calls. + + Thanks to Bjarni Ingi Gislason. - README | 4 ++-- - debug/Makefile.am | 3 +++ - 2 files changed, 5 insertions(+), 2 deletions(-) + src/xz/xz.1 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit cafb523adac1caf305e70a04bc37f25602bf990c +commit 5d224da3da87400f2fab313abbd7c710e7169ef9 Author: Lasse Collin -Date: 2012-07-04 22:31:58 +0300 +Date: 2020-11-01 18:41:21 +0200 - xz: Document --block-list better. + xz: Avoid the abbreviation "e.g." on the man page. - Thanks to Jonathan Nieder. + A few are simply omitted, most are converted to "for example" + and surrounded with commas. Sounds like that this is better + style, for example, man-pages(7) recommends avoiding such + abbreviations except in parenthesis. + + Thanks to Bjarni Ingi Gislason. - src/xz/xz.1 | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) + src/xz/xz.1 | 66 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 33 insertions(+), 33 deletions(-) -commit c7ff218528bc8f7c65e7ef73c6515777346c6794 +commit 90457dbe3e5717660f5b81f8c604860fc5137c0c Author: Lasse Collin -Date: 2012-07-04 20:01:49 +0300 +Date: 2020-07-12 23:10:03 +0300 - Bump the version number to 5.1.2alpha. + xz man page: Change \- (minus) to \(en (en-dash) for a numeric range. + + Docs of ancient troff/nroff mention \(em (em-dash) but not \(en + and \- was used for both minus and en-dash. I don't know how + portable \(en is nowadays but it can be changed back if someone + complains. At least GNU groff and OpenBSD's mandoc support it. + + Thanks to Bjarni Ingi Gislason for the patch. - src/liblzma/api/lzma/version.h | 2 +- - src/liblzma/liblzma.map | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + src/xz/xz.1 | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) -commit 8f3c1d886f93e6478ad509ff52102b2ce7faa999 +commit 352ba2d69af2136bc814aa1df1a132559d445616 Author: Lasse Collin -Date: 2012-07-04 20:01:19 +0300 +Date: 2020-07-12 20:46:24 +0300 - Update NEWS for 5.1.2alpha. + Windows: Fix building of resource files when config.h isn't used. + + Now CMake + Visual Studio works for building liblzma.dll. + + Thanks to Markus Rickert. - NEWS | 41 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 41 insertions(+) + src/common/common_w32res.rc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) -commit 0d5fa05466e580fbc458820f87013ae7644e20e5 +commit a9e2a87f1d61dcf684d809bf08c8ebea93f8a480 Author: Lasse Collin -Date: 2012-07-04 19:58:23 +0300 +Date: 2020-04-06 19:31:50 +0300 - xz: Fix the version number printed by xz -lvv. + src/scripts/xzgrep.1: Filenames to xzgrep are optional. - The decoder bug was fixed in 5.0.2 instead of 5.0.3. + xzgrep --help was correct already. - src/xz/list.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + src/scripts/xzgrep.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit df11317985a4165731dde12bb0f0028da0e7b77f -Author: Lasse Collin -Date: 2012-07-04 17:11:31 +0300 +commit a7ba275d9b855d186abb29eb7a4f4cb6d9ca6fe0 +Author: Bjarni Ingi Gislason +Date: 2020-03-26 22:17:31 +0000 - Build: Add a comment to configure.ac about symbol versioning. + src/script/xzgrep.1: Remove superfluous '.RB' + + Output is from: test-groff -b -e -mandoc -T utf8 -rF0 -t -w w -z + + [ "test-groff" is a developmental version of "groff" ] + + Input file is ./src/scripts/xzgrep.1 + + :20 (macro RB): only 1 argument, but more are expected + :23 (macro RB): only 1 argument, but more are expected + :26 (macro RB): only 1 argument, but more are expected + :29 (macro RB): only 1 argument, but more are expected + :32 (macro RB): only 1 argument, but more are expected + + "abc..." does not mean the same as "abc ...". + + The output from nroff and troff is unchanged except for the space + between "file" and "...". + + Signed-off-by: Bjarni Ingi Gislason - configure.ac | 4 ++++ - 1 file changed, 4 insertions(+) + src/scripts/xzgrep.1 | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) -commit bd9cc179e8be3ef515201d3ed9c7dd79ae88869d -Author: Lasse Collin -Date: 2012-07-04 17:06:49 +0300 +commit 133d498db0f4b14f066d192d64dbcade45deae6b +Author: Bjarni Ingi Gislason +Date: 2020-03-30 21:56:36 +0000 - Update TODO. + xzgrep.1: Delete superfluous '.PP' + + Summary: + + mandoc -T lint xzgrep.1 : + mandoc: xzgrep.1:79:2: WARNING: skipping paragraph macro: PP empty + + There is no change in the output of "nroff" and "troff". + + Signed-off-by: Bjarni Ingi Gislason - TODO | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) + src/scripts/xzgrep.1 | 1 - + 1 file changed, 1 deletion(-) -commit 4a238dd9b22f462cac5e199828bf1beb0df05884 -Author: Lasse Collin -Date: 2012-07-04 17:05:46 +0300 +commit 057839ca982f886387b66746bffe749cb14fd8cd +Author: Bjarni Ingi Gislason +Date: 2020-03-26 21:16:18 +0000 - Document --enable-symbol-versions in INSTALL. + src/xz/xz.1: Correct misused two-fonts macros + + Output is from: test-groff -b -e -mandoc -T utf8 -rF0 -t -w w -z + + [ "test-groff" is a developmental version of "groff" ] + + Input file is ./src/xz/xz.1 + + :408 (macro BR): only 1 argument, but more are expected + :1009 (macro BR): only 1 argument, but more are expected + :1743 (macro BR): only 1 argument, but more are expected + :1920 (macro BR): only 1 argument, but more are expected + :2213 (macro BR): only 1 argument, but more are expected + + Output from nroff and troff is unchanged, except for a font change of a + full stop (.). + + Signed-off-by: Bjarni Ingi Gislason - INSTALL | 5 +++++ - 1 file changed, 5 insertions(+) + src/xz/xz.1 | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) -commit 88ccf47205d7f3aa314d358c72ef214f10f68b43 +commit b8e12f5ab4c9fd3cb09a4330b2861f6b979ababd Author: Lasse Collin -Date: 2012-07-03 21:16:39 +0300 +Date: 2020-03-23 18:07:50 +0200 - xz: Add incomplete support for --block-list. + Typo fixes from fossies.org. - It's broken with threads and when also --block-size is used. + https://fossies.org/linux/misc/xz-5.2.5.tar.xz/codespell.html - src/xz/args.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/args.h | 1 + - src/xz/coder.c | 48 ++++++++++++++++++++++++++++------ - src/xz/coder.h | 4 +++ - src/xz/main.c | 1 + - src/xz/message.c | 6 +++++ - src/xz/xz.1 | 23 +++++++++++++++-- - 7 files changed, 151 insertions(+), 10 deletions(-) + Makefile.am | 2 +- + doc/examples/01_compress_easy.c | 2 +- + src/liblzma/api/lzma/base.h | 2 +- + src/liblzma/check/crc32_x86.S | 2 +- + src/liblzma/common/index.c | 2 +- + src/xz/xz.1 | 4 ++-- + 6 files changed, 7 insertions(+), 7 deletions(-) -commit 972179cdcdf5d8949c48ee31737d87d3050b44af +commit 869b9d1b4edd6df07f819d360d306251f8147353 Author: Lasse Collin -Date: 2012-07-01 18:44:33 +0300 +Date: 2020-03-17 16:24:28 +0200 - xz: Update the man page about the new field in --robot -lvv. + Update NEWS for 5.2.5. - src/xz/xz.1 | 18 +++++++++++++++++- - 1 file changed, 17 insertions(+), 1 deletion(-) + NEWS | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 105 insertions(+) -commit 1403707fc64a70976aebe66f8d9a9bd12f73a2c5 +commit a048e3a92d238c65f050a765174d9c75417231d4 Author: Lasse Collin -Date: 2012-06-28 10:47:49 +0300 +Date: 2020-03-16 20:01:37 +0200 - liblzma: Check that the first byte of range encoded data is 0x00. - - It is just to be more pedantic and thus perhaps catch broken - files slightly earlier. + README: Update outdated sections. - src/liblzma/lzma/lzma_decoder.c | 8 ++++++-- - src/liblzma/rangecoder/range_decoder.h | 12 +++++++++--- - 2 files changed, 15 insertions(+), 5 deletions(-) + README | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) -commit eccd8017ffe2c5de473222c4963ec53c62f7fda2 +commit 29aed815ad4f98f3e4d355faa76a244ecd8ce716 Author: Lasse Collin -Date: 2012-06-22 19:00:23 +0300 +Date: 2020-03-16 19:39:45 +0200 - Update NEWS from 5.0.4. + README: Mention that man pages can be translated. - NEWS | 37 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 37 insertions(+) + README | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit 2e6754eac26a431e8d340c28906f63bcd1e177e8 +commit 7fa7653940cc9dcfcbce2fbc5166ea343ad4e3c1 Author: Lasse Collin -Date: 2012-06-22 14:34:03 +0300 +Date: 2020-03-16 16:43:29 +0200 - xz: Update man page date to match the latest update. + Update INSTALL.generic from Automake 1.16.1. - src/xz/xz.1 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + INSTALL.generic | 321 ++++++++++++++++++++++++++++---------------------------- + 1 file changed, 162 insertions(+), 159 deletions(-) -commit b3235a0b1af45d5e1244cbe3191516966c076fa0 +commit 9bd317ef03ab9b3e6a927c27c2e9c4ac041182f0 Author: Lasse Collin -Date: 2012-06-18 21:27:47 +0300 +Date: 2020-03-15 15:27:22 +0200 - Docs: Language fix to 01_compress_easy.c. - - Thanks to Jonathan Nieder. + Update INSTALL for Windows and DOS and add preliminary info for z/OS. - doc/examples/01_compress_easy.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + INSTALL | 51 +++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 41 insertions(+), 10 deletions(-) -commit f1675f765fe228cb5a5f904f853445a03e33cfe9 +commit a3148c0446dc7fa96363752df414d22539c9007b Author: Lasse Collin -Date: 2012-06-14 20:15:30 +0300 +Date: 2020-03-15 15:26:20 +0200 - Fix the top-level Makefile.am for the new example programs. + Build: Update m4/ax_pthread.m4 from Autoconf Archive (again). - Makefile.am | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) + m4/ax_pthread.m4 | 219 +++++++++++++++++++++++++++++-------------------------- + 1 file changed, 117 insertions(+), 102 deletions(-) -commit 3a0c5378abefaf86aa39a62a7c9682bdb21568a1 +commit 7812002dd3ed319e42a14662a8531802cca8ca67 Author: Lasse Collin -Date: 2012-06-14 10:52:33 +0300 +Date: 2020-03-11 21:15:35 +0200 - Docs: Add new example programs. + xz: Never use thousand separators in DJGPP builds. - These have more comments than the old examples and - human-readable error messages. More tutorial-like examples - are needed but these are a start. + DJGPP 2.05 added support for thousands separators but it's + broken at least under WinXP with Finnish locale that uses + a non-breaking space as the thousands separator. Workaround + by disabling thousands separators for DJGPP builds. - doc/examples/00_README.txt | 27 ++++ - doc/examples/01_compress_easy.c | 297 ++++++++++++++++++++++++++++++++++++++ - doc/examples/02_decompress.c | 287 ++++++++++++++++++++++++++++++++++++ - doc/examples/03_compress_custom.c | 193 +++++++++++++++++++++++++ - doc/examples/Makefile | 23 +++ - 5 files changed, 827 insertions(+) + src/xz/util.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) -commit 1bd2c2c553e30c4a73cfb82abc6908efd6be6b8d +commit 7c8f688bf7fccd65d396e0130cbf4ea5dff5c56f Author: Lasse Collin -Date: 2012-06-14 10:33:27 +0300 +Date: 2020-03-11 19:38:08 +0200 - Docs: Move xz_pipe_comp.c and xz_pipe_decomp.c to doc/examples_old. + DOS: Update dos/Makefile for DJGPP 2.05. - It is good to keep these around to so that if someone has - copied the decompressor bug from xz_pipe_decomp.c he has - an example how to easily fix it. + It doesn't need -fgnu89-inline like 2.04beta did. - doc/{examples => examples_old}/xz_pipe_comp.c | 0 - doc/{examples => examples_old}/xz_pipe_decomp.c | 0 - 2 files changed, 0 insertions(+), 0 deletions(-) + dos/Makefile | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) -commit 905f0ab5b5ce544d4b68a2ed6077df0f3d021292 +commit 319ca928d73de87940c54e30bffe69f9fa65efdf Author: Lasse Collin -Date: 2012-06-14 10:33:01 +0300 +Date: 2020-03-11 19:36:07 +0200 - Docs: Fix a bug in xz_pipe_decomp.c example program. + DOS: Update instructions in dos/INSTALL.txt. - doc/examples/xz_pipe_decomp.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) + dos/INSTALL.txt | 59 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 29 insertions(+), 30 deletions(-) -commit 4bd1a3bd5fdf4870b2f96dd0b8a21657c8a58ad8 +commit cb6b227ce39932824812ccd8a0647bd968de27d2 Author: Lasse Collin -Date: 2012-05-30 23:14:33 +0300 +Date: 2020-03-11 17:58:51 +0200 - Translations: Update the French translation. + DOS: Update config.h. - Thanks to Adrien Nader. + The added defines assume GCC >= 4.8. - po/fr.po | 148 ++++++++++++++++++++++++++++++++++----------------------------- - 1 file changed, 79 insertions(+), 69 deletions(-) + dos/config.h | 8 ++++++++ + 1 file changed, 8 insertions(+) -commit d2e836f2f3a87df6fe6bb0589b037db51205d910 +commit 4572d53e16e87eee375bc5624de2fd59bb0ae9cd Author: Lasse Collin -Date: 2012-05-29 23:42:37 +0300 +Date: 2020-03-02 13:54:33 +0200 - Translations: Update the German translation. + liblzma: Fix a comment and RC_SYMBOLS_MAX. - The previous only included the new strings in v5.0. + The comment didn't match the value of RC_SYMBOLS_MAX and the value + itself was slightly larger than actually needed. The only harm + about this was that memory usage was a few bytes larger. - po/de.po | 229 +++++++++++++++++++++++++++++++++++++-------------------------- - 1 file changed, 133 insertions(+), 96 deletions(-) + src/liblzma/rangecoder/range_encoder.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit c9a16151577ba459afd6e3528df23bc0ddb95171 +commit 265daa873c0d871f5f23f9b56e133a6f20045a0a Author: Lasse Collin -Date: 2012-05-29 22:26:27 +0300 +Date: 2020-02-27 20:58:52 +0200 - Translations: Update the German translation. + Build: Make CMake build fail if tuklib_cpucores or tuklib_physmem fails. - po/de.po | 169 ++++++++++++++++++++++++++++++++++----------------------------- - 1 file changed, 91 insertions(+), 78 deletions(-) + CMakeLists.txt | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) -commit 1530a74fd48f8493372edad137a24541efe24713 +commit 7c8b904527cdbe61248c80edcc2e20d840c4fef9 Author: Lasse Collin -Date: 2012-05-29 22:14:21 +0300 +Date: 2020-02-27 20:24:27 +0200 - Translations: Update Polish translation. - - po/pl.po | 283 +++++++++++++++++++++++++++++++++++++-------------------------- - 1 file changed, 165 insertions(+), 118 deletions(-) - -commit d8db706acb8316f9861abd432cfbe001dd6d0c5c -Author: Lasse Collin -Date: 2012-05-28 20:42:11 +0300 - - liblzma: Fix possibility of incorrect LZMA_BUF_ERROR. + Build: Add support for --no-po4a option to autogen.sh. - lzma_code() could incorrectly return LZMA_BUF_ERROR if - all of the following was true: - - - The caller knows how many bytes of output to expect - and only provides that much output space. - - - When the last output bytes are decoded, the - caller-provided input buffer ends right before - the LZMA2 end of payload marker. So LZMA2 won't - provide more output anymore, but it won't know it - yet and thus won't return LZMA_STREAM_END yet. - - - A BCJ filter is in use and it hasn't left any - unfiltered bytes in the temp buffer. This can happen - with any BCJ filter, but in practice it's more likely - with filters other than the x86 BCJ. - - Another situation where the bug can be triggered happens - if the uncompressed size is zero bytes and no output space - is provided. In this case the decompression can fail even - if the whole input file is given to lzma_code(). - - A similar bug was fixed in XZ Embedded on 2011-09-19. + Normally, if po4a isn't available, autogen.sh will return + with non-zero exit status. The option --no-po4a can be useful + when one knows that po4a isn't available but wants autogen.sh + to still return with zero exit status. - src/liblzma/simple/simple_coder.c | 2 +- - tests/Makefile.am | 4 +- - tests/test_bcj_exact_size.c | 112 ++++++++++++++++++++++++++++++++++++++ - 3 files changed, 116 insertions(+), 2 deletions(-) + autogen.sh | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) -commit 3f94b6d87f1b8f1c421ba548f8ebb83dca9c8cda +commit 292a5c0f9c9b3a66f5a5c652dc46381836d4537f Author: Lasse Collin -Date: 2012-05-28 15:38:32 +0300 +Date: 2020-02-25 21:35:14 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 7769ea051d739a38a1640fd448cf5eb83cb119c6 +commit 474320e9908786ba2021035f9013191e16cde08a Author: Lasse Collin -Date: 2012-05-28 15:37:43 +0300 +Date: 2020-02-25 20:42:31 +0200 - xz: Don't show a huge number in -vv when memory limit is disabled. + Build: Fix bugs in the CMake files. + + Seems that the phrase "add more quotes" from sh/bash scripting + applies to CMake as well. E.g. passing an unquoted list ${FOO} + to a function that expects one argument results in only the + first element of the list being passed as an argument and + the rest get ignored. Adding quotes helps ("${FOO}"). + + list(INSERT ...) is weird. Inserting an empty string to an empty + variable results in empty list, but inserting it to a non-empty + variable does insert an empty element to the list. + + Since INSERT requires at least one element, + "${CMAKE_THREAD_LIBS_INIT}" needs to be quoted in CMakeLists.txt. + It might result in an empty element in the list. It seems to not + matter as empty elements consistently get ignored in that variable. + In fact, calling cmake_check_push_state() and cmake_check_pop_state() + will strip the empty elements from CMAKE_REQUIRED_LIBRARIES! + + In addition to quoting fixes, this fixes checks for the cache + variables in tuklib_cpucores.cmake and tuklib_physmem.cmake. + + Thanks to Martin Matuška for testing and reporting the problems. + These fixes aren't tested yet but hopefully they soon will be. - src/xz/message.c | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) + CMakeLists.txt | 52 ++++++++++++++++++++++----------------------- + cmake/tuklib_common.cmake | 8 ++++--- + cmake/tuklib_cpucores.cmake | 30 ++++++++++++++------------ + cmake/tuklib_integer.cmake | 34 +++++++++++++++-------------- + cmake/tuklib_mbstr.cmake | 6 +++--- + cmake/tuklib_physmem.cmake | 29 +++++++++++++------------ + cmake/tuklib_progname.cmake | 4 ++-- + 7 files changed, 85 insertions(+), 78 deletions(-) -commit ec921105725e4d3ef0a683dd83eee6f24ab60ccd +commit 7e3493d40eac0c3fa3d5124097745a70e15c41f6 Author: Lasse Collin -Date: 2012-05-27 22:30:17 +0300 +Date: 2020-02-24 23:38:16 +0200 - xz: Document the "summary" lines of --robot -lvv. + Build: Add very limited experimental CMake support. - This documents only the columns that are in v5.0. - The new columns added in the master branch aren't - necessarily stable yet. + This does *NOT* replace the Autotools-based build system in + the foreseeable future. See the comment in the beginning + of CMakeLists.txt. + + So far this has been tested only on GNU/Linux but I commit + it anyway to make it easier for others to test. Since I + haven't played much with CMake before, it's likely that + there are things that have been done in a silly or wrong + way and need to be fixed. - src/xz/xz.1 | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) + CMakeLists.txt | 643 ++++++++++++++++++++++++++++++++++++++++++++ + cmake/tuklib_common.cmake | 47 ++++ + cmake/tuklib_cpucores.cmake | 173 ++++++++++++ + cmake/tuklib_integer.cmake | 100 +++++++ + cmake/tuklib_mbstr.cmake | 20 ++ + cmake/tuklib_physmem.cmake | 149 ++++++++++ + cmake/tuklib_progname.cmake | 19 ++ + 7 files changed, 1151 insertions(+) -commit 27d24eb0a9f6eed96d6a4594c2b0bf7a91d29f9a +commit 21bd4701fca3e9002ce78bc135debca369ed8545 Author: Lasse Collin -Date: 2012-05-27 21:53:20 +0300 +Date: 2020-02-24 23:37:07 +0200 - xz: Fix output of verbose --robot --list modes. - - It printed the filename in "filename (x/y)" format - which it obviously shouldn't do in robot mode. + Update m4/.gitignore. - src/xz/message.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + m4/.gitignore | 1 + + 1 file changed, 1 insertion(+) -commit ab25b82a91754d9388c89abddf806424671d9431 +commit e094d1d0f196a91ec703e8d0055948feef349ae8 Author: Lasse Collin -Date: 2012-05-24 18:33:54 +0300 +Date: 2020-02-24 23:29:35 +0200 - Build: Upgrade m4/acx_pthread.m4 to the latest version. + tuklib: Omit an unneeded from a tests. + + tuklib_cpucores.c and tuklib_physmem.c don't include + even via other files in this package, so clearly that header isn't + needed in the tests either (no one has reported build problems due + to a missing header in a .c file). - m4/ax_pthread.m4 | 98 +++++++++++++++++++++++++++++++++++--------------------- - 1 file changed, 62 insertions(+), 36 deletions(-) + m4/tuklib_cpucores.m4 | 1 - + m4/tuklib_physmem.m4 | 1 - + 2 files changed, 2 deletions(-) -commit d05d6d65c41a4bc83f162fa3d67c5d84e8751634 +commit b3ed19a55fe99a45bd77614e149d39d18498075c Author: Lasse Collin -Date: 2012-05-10 21:15:17 +0300 +Date: 2020-02-24 23:01:00 +0200 - Update THANKS. + liblzma: Remove unneeded from fastpos_tablegen.c. + + This file only generates fastpos_table.c. + It isn't built as a part of liblzma. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/liblzma/lzma/fastpos_tablegen.c | 1 - + 1 file changed, 1 deletion(-) -commit e077391982f9f28dbfe542bba8800e7c5b916666 +commit 7b8982b29179b3c586e0456dc9ecbd4f58dcea59 Author: Lasse Collin -Date: 2012-05-10 21:14:16 +0300 +Date: 2020-02-22 14:15:07 +0200 - Docs: Cleanup line wrapping a bit. - - README | 12 ++++++------ - doc/history.txt | 49 +++++++++++++++++++++++++------------------------ - 2 files changed, 31 insertions(+), 30 deletions(-) - -commit fc39849c350225c6a1cd7f6e6adff1020521eabc -Author: Benno Schulenberg -Date: 2012-03-13 22:04:04 +0100 - - Fix a few typos and add some missing articles in some documents. + Use defined(__GNUC__) before __GNUC__ in preprocessor lines. - Also hyphenate several compound adjectives. - - Signed-off-by: Benno Schulenberg + This should silence the equivalent of -Wundef in compilers that + don't define __GNUC__. - AUTHORS | 6 +++--- - README | 42 ++++++++++++++++++++--------------------- - doc/faq.txt | 24 ++++++++++++------------ - doc/history.txt | 58 ++++++++++++++++++++++++++++----------------------------- - 4 files changed, 65 insertions(+), 65 deletions(-) + src/common/sysdefs.h | 3 ++- + src/liblzma/api/lzma.h | 5 +++-- + 2 files changed, 5 insertions(+), 3 deletions(-) -commit 29fa0566d5df199cb9acb2d17bf7eea61acc7fa1 +commit 43dfe04e6209c691cf4fbe3072d4ee91271748f1 Author: Lasse Collin -Date: 2012-04-29 11:51:25 +0300 +Date: 2020-02-21 17:40:02 +0200 - Windows: Update notes about static linking with MSVC. + liblzma: Add more uses of lzma_memcmplen() to the normal mode of LZMA. + + This gives a tiny encoder speed improvement. This could have been done + in 2014 after the commit 544aaa3d13554e8640f9caf7db717a96360ec0f6 but + it was forgotten. - windows/README-Windows.txt | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) + src/liblzma/lzma/lzma_encoder_optimum_normal.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) -commit aac1b31ea4e66cf5a7a8c116bdaa15aa45e6c56e +commit 59e6eb4840b9f52fa3a61544974017279b448216 Author: Lasse Collin -Date: 2012-04-19 15:25:26 +0300 +Date: 2020-02-21 17:01:15 +0200 - liblzma: Remove outdated comments. + Build: Add visibility.m4 from gnulib. + + Appears that this file used to get included as a side effect of + gettext. After the change to gettext version requirements this file + no longer got copied to the package and so the build was broken. - src/liblzma/simple/simple_coder.c | 3 --- - src/liblzma/simple/simple_private.h | 3 +-- - 2 files changed, 1 insertion(+), 5 deletions(-) + m4/.gitignore | 1 - + m4/visibility.m4 | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 77 insertions(+), 1 deletion(-) -commit df14a46013bea70c0bd35be7821b0b9108f97de7 +commit 7fe3ef2eaa53d439cec043727ea1998f4ff0e22a Author: Lasse Collin -Date: 2012-04-19 14:17:52 +0300 +Date: 2020-02-21 16:10:44 +0200 - DOS: Link against DJGPP's libemu to support FPU emulation. + xz: Silence a warning when sig_atomic_t is long int. - This way xz should work on 386SX and 486SX. Floating point - only is needed for verbose output in xz. + It can be true at least on z/OS. - dos/Makefile | 2 +- + src/xz/signals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 03ed742a3a4931bb5c821357832083b26f577b13 +commit b0a2a77d10940c42b449d47a005bfc2e50ab5db8 Author: Lasse Collin -Date: 2012-04-19 14:02:25 +0300 +Date: 2020-02-21 15:59:26 +0200 - liblzma: Fix Libs.private in liblzma.pc to include -lrt when needed. + xz: Avoid unneeded access of a volatile variable. - src/liblzma/liblzma.pc.in | 2 +- + src/xz/signals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 8c5b13ad59df70f49429bfdfd6ac120b8f892fda +commit 524c2f12c762032b819757aeda8af7c47c4cabce Author: Lasse Collin -Date: 2012-04-19 13:58:55 +0300 +Date: 2020-02-21 01:24:18 +0200 - Docs: Update MINIX 3 information in INSTALL. + tuklib_integer.m4: Optimize the check order. + + The __builtin byteswapping is the preferred one so check for it first. - INSTALL | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) + m4/tuklib_integer.m4 | 56 +++++++++++++++++++++++++++------------------------- + 1 file changed, 29 insertions(+), 27 deletions(-) -commit c7376fc415a1566f38b2de4b516a17013d516a8b +commit 57360bb4fd79b358b36d2877db26ac828d1fdfcb Author: Lasse Collin -Date: 2012-02-22 14:23:13 +0200 +Date: 2020-02-20 18:54:04 +0200 - Update THANKS. + tuklib_exit: Add missing header. + + strerror() needs which happened to be included via + tuklib_common.h -> tuklib_config.h -> sysdefs.h if HAVE_CONFIG_H + was defined. This wasn't tested without config.h before so it + had worked fine. - THANKS | 1 + + src/common/tuklib_exit.c | 1 + 1 file changed, 1 insertion(+) -commit cff070aba6281ba743d29a62b8c0c66e5da4b2a6 +commit fddd31175e74a538997a939d930462fde17d2dd4 Author: Lasse Collin -Date: 2012-02-22 14:02:34 +0200 +Date: 2020-02-18 19:12:35 +0200 - Fix exit status of xzgrep when grepping binary files. + Revert the previous commit and add a comment. - When grepping binary files, grep may exit before it has - read all the input. In this case, gzip -q returns 2 (eating - SIGPIPE), but xz and bzip2 show SIGPIPE as the exit status - (e.g. 141). This causes wrong exit status when grepping - xz- or bzip2-compressed binary files. + The previous commit broke crc32_tablegen.c. - The fix checks for the special exit status that indicates SIGPIPE. - It uses kill -l which should be supported everywhere since it - is in both SUSv2 (1997) and POSIX.1-2008. - - Thanks to James Buren for the bug report. + If the whole package is built without config.h (with defines + set on the compiler command line) this should still work fine + as long as these headers conform to C99 well enough. - src/scripts/xzgrep.in | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/common/tuklib_config.h | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) -commit 41cafb2bf9beea915710ee68f05fe929cd17759c +commit 4e4e9fbb7e66d45319525ac224bff48fbdd0cf6e Author: Lasse Collin -Date: 2012-02-22 12:08:43 +0200 +Date: 2020-02-17 23:37:20 +0200 - Update THANKS. + Do not check for HAVE_CONFIG_H in tuklib_config.h. + + In XZ Utils sysdefs.h takes care of it and the required headers. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/common/tuklib_config.h | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) -commit 2dcea03712fa881930d69ec9eff70855c3d126d9 +commit 2d4cef954feba82073951358466a1d614141cf33 Author: Lasse Collin -Date: 2012-02-22 12:00:16 +0200 +Date: 2020-02-16 11:18:28 +0200 - Fix compiling with IBM XL C on AIX. + sysdefs.h: Omit the conditionals around string.h and limits.h. + + string.h is used unconditionally elsewhere in the project and + configure has always stopped if limits.h is missing, so these + headers must have been always available even on the weirdest + systems. - INSTALL | 36 ++++++++++++++++++++++-------------- - configure.ac | 6 +++++- - 2 files changed, 27 insertions(+), 15 deletions(-) + src/common/sysdefs.h | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) -commit 7db6bdf4abcf524115be2cf5659ed540cef074c5 +commit feb9c1969bc3eb33d4ecb72cfa897f92dae84939 Author: Lasse Collin -Date: 2012-01-10 17:13:03 +0200 +Date: 2020-02-15 15:07:11 +0200 - Tests: Fix a compiler warning with _FORTIFY_SOURCE. + Build: Bump Autoconf and Libtool version requirements. - Reported here: - http://sourceforge.net/projects/lzmautils/forums/forum/708858/topic/4927385 + There is no specific reason for this other than blocking + the most ancient versions. These are still old: + + Autoconf 2.69 (2012) + Automake 1.12 (2012) + gettext 0.19.6 (2015) + Libtool 2.4 (2010) - tests/create_compress_files.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit 694952d545b6cf056547893ced69486eff9ece55 +commit 3d576cf92158d62790017ad7f2dd6dc1dd6b42bb Author: Lasse Collin -Date: 2011-12-19 21:21:29 +0200 +Date: 2020-02-15 03:08:32 +0200 - Docs: Explain the stable releases better in README. + Build: Use AM_GNU_GETTEXT_REQUIRE_VERSION and require 0.19.6. + + This bumps the version requirement from 0.19 (from 2014) to + 0.19.6 (2015). + + Using only the old AM_GNU_GETTEXT_VERSION results in old + gettext infrastructure being placed in the package. By using + both macros we get the latest gettext files while the other + programs in the Autotools family can still see the old macro. - README | 6 +++++- + configure.ac | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) -commit 418fe668b3c53a9a20020b6cc652aaf25c734b29 +commit fa792b8befaf7cb3960b655e0a9410da866d756f Author: Lasse Collin -Date: 2011-11-07 13:07:52 +0200 +Date: 2020-02-14 20:42:06 +0200 - xz: Show minimum required XZ Utils version in xz -lvv. + Translations: Add German translation of the man pages. - Man page wasn't updated yet. + Thanks to Mario Blättermann. - src/xz/list.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ - 1 file changed, 57 insertions(+), 6 deletions(-) + po4a/de.po | 5532 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + po4a/po4a.conf | 2 +- + 2 files changed, 5533 insertions(+), 1 deletion(-) -commit 7081d82c37326bac97184e338345fa1c327e3580 +commit 6f7211b6bb47a895b47f533282dba9ee9a1b0c8b Author: Lasse Collin -Date: 2011-11-04 17:57:16 +0200 +Date: 2020-02-07 15:32:21 +0200 - xz: Fix a typo in a comment. + Build: Add support for translated man pages using po4a. - Thanks to Bela Lubkin. + The dependency on po4a is optional. It's never required to install + the translated man pages when xz is built from a release tarball. + If po4a is missing when building from xz.git, the translated man + pages won't be generated but otherwise the build will work normally. + + The translations are only updated automatically by autogen.sh and + by "make mydist". This makes it easy to keep po4a as an optional + dependency and ensures that I won't forget to put updated + translations to a release tarball. + + The translated man pages aren't installed if --disable-nls is used. + + The installation of translated man pages abuses Automake internals + by calling "install-man" with redefined dist_man_MANS and man_MANS. + This makes the hairy script code slightly less hairy. If it breaks + some day, this code needs to be fixed; don't blame Automake developers. + + Also, this adds more quotes to the existing shell script code in + the Makefile.am "-hook"s. - src/xz/args.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + Makefile.am | 4 ++++ + autogen.sh | 8 ++++--- + po4a/.gitignore | 2 ++ + po4a/po4a.conf | 14 +++++++++++ + po4a/update-po | 45 ++++++++++++++++++++++++++++++++++ + src/scripts/Makefile.am | 64 +++++++++++++++++++++++++++++++++++++------------ + src/xz/Makefile.am | 50 +++++++++++++++++++++++++++----------- + src/xzdec/Makefile.am | 55 ++++++++++++++++++++++++++++++++---------- + 8 files changed, 197 insertions(+), 45 deletions(-) -commit 232fe7cd70ad258d6a37f17e860e0f1b1891eeb5 +commit 426f9e5819ff7710a5ff573a96c02940be65d52f Author: Lasse Collin -Date: 2011-11-03 17:08:02 +0200 +Date: 2020-02-06 17:31:38 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit 74d2bae4d3449c68453b0473dd3430ce91fd90c1 +commit e3a4481d020e4de89efa037f335cf50f3ca55592 Author: Lasse Collin -Date: 2011-11-03 17:07:22 +0200 +Date: 2020-02-05 22:35:06 +0200 - xz: Fix xz on EBCDIC systems. - - Thanks to Chris Donawa. + Update tests/.gitignore. - src/xz/coder.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) + .gitignore | 4 ++++ + 1 file changed, 4 insertions(+) -commit 4ac4923f47cc0ef97dd9ca5cfcc44fc53eeab34a +commit 07208de92f2d5bca764f6d0ebe9d9866051dc4ef Author: Lasse Collin -Date: 2011-10-23 17:09:10 +0300 +Date: 2020-02-05 22:28:51 +0200 - Update THANKS. + Update m4/.gitignore. - THANKS | 1 + + m4/.gitignore | 1 + 1 file changed, 1 insertion(+) -commit ab50ae3ef40c81e5bf613905ca3fd636548b75e7 +commit c91fbf223db46c3b3cb9df769863a1a60cd9c908 Author: Lasse Collin -Date: 2011-10-23 17:08:14 +0300 +Date: 2020-02-05 20:47:38 +0200 - liblzma: Fix invalid free() in the threaded encoder. - - It was triggered if initialization failed e.g. due to - running out of memory. - - Thanks to Arkadiusz Miskiewicz. + Update THANKS. - src/liblzma/common/outqueue.c | 4 ++++ - 1 file changed, 4 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 6b620a0f0813d28c3c544b4ff8cb595b38a6e908 +commit 15a133b6d1a3eab4faf6eb52a71fdc56bd65846f Author: Lasse Collin -Date: 2011-10-23 17:05:55 +0300 +Date: 2020-02-05 20:40:14 +0200 - liblzma: Fix a deadlock in the threaded encoder. + xz: Make it a fatal error if enabling the sandbox fails. - It was triggered when reinitializing the encoder, - e.g. when encoding two files. + Perhaps it's too drastic but on the other hand it will let me + learn about possible problems if people report the errors. + This won't be backported to the v5.2 branch. - src/liblzma/common/stream_encoder_mt.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + src/xz/file_io.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit bd52cf150ecd51e3ab63a9cc1a3cff6a77500178 +commit af0fb386ef55db66654ae39e2deec6e04190c4ff Author: Lasse Collin -Date: 2011-09-06 12:03:41 +0300 +Date: 2020-02-05 20:33:50 +0200 - Build: Fix "make check" on Windows. + xz: Comment out annoying sandboxing messages. - tests/Makefile.am | 7 +++++-- - windows/build.bash | 2 ++ - 2 files changed, 7 insertions(+), 2 deletions(-) + src/xz/file_io.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) -commit 5c5b2256969ac473001b7d67615ed3bd0a54cc82 +commit 986d8c9b52b824474088e5bb3b6940651660f0e2 Author: Lasse Collin -Date: 2011-08-09 21:19:13 +0300 +Date: 2020-02-05 19:33:37 +0200 - Update THANKS. + Build: Workaround a POSIX shell detection problem on Solaris. + + I don't know if the problem is in gnulib's gl_POSIX_SHELL macro + or if xzgrep does something that isn't in POSIX. The workaround + adds a special case for Solaris: if /usr/xpg4/bin/sh exists and + gl_cv_posix_shell wasn't overriden on the configure command line, + use that shell for xzgrep and other scripts. That shell is known + to work and exists on most Solaris systems. - THANKS | 2 ++ - 1 file changed, 2 insertions(+) + configure.ac | 10 ++++++++++ + 1 file changed, 10 insertions(+) -commit 5b1e1f10741af9e4bbe4cfc3261fb7c7b04f7809 +commit 6629ed929cc7d45a11e385f357ab58ec15e7e4ad Author: Lasse Collin -Date: 2011-08-09 21:16:44 +0300 +Date: 2020-02-03 22:03:50 +0200 - Workaround unusual SIZE_MAX on SCO OpenServer. + Build: Update m4/ax_pthread.m4 from Autoconf Archive. - src/common/sysdefs.h | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) + m4/ax_pthread.m4 | 398 ++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 279 insertions(+), 119 deletions(-) -commit e9ed88126eee86e2511fa42681a5c7104820cf0a +commit 353970510895f6a80adfe60cf71b70a95adfa8bc Author: Lasse Collin -Date: 2011-08-06 20:37:28 +0300 +Date: 2020-02-01 19:56:18 +0200 - Run the scripts with the correct shell in test_scripts.sh. + xz: Limit --memlimit-compress to at most 4020 MiB for 32-bit xz. - The scripts are now made executable in the build tree. - This way the scripts can be run like programs in - test_scripts.sh. Previously test_scripts.sh always - used sh but it's not correct if @POSIX_SHELL@ is set - to something else by configure. + See the code comment for reasoning. It's far from perfect but + hopefully good enough for certain cases while hopefully doing + nothing bad in other situations. - Thanks to Jonathan Nieder for the patch. + At presets -5 ... -9, 4020 MiB vs. 4096 MiB makes no difference + on how xz scales down the number of threads. + + The limit has to be a few MiB below 4096 MiB because otherwise + things like "xz --lzma2=dict=500MiB" won't scale down the dict + size enough and xz cannot allocate enough memory. With + "ulimit -v $((4096 * 1024))" on x86-64, the limit in xz had + to be no more than 4085 MiB. Some safety margin is good though. + + This is hack but it should be useful when running 32-bit xz on + a 64-bit kernel that gives full 4 GiB address space to xz. + Hopefully this is enough to solve this: + + https://bugzilla.redhat.com/show_bug.cgi?id=1196786 + + FreeBSD has a patch that limits the result in tuklib_physmem() + to SIZE_MAX on 32-bit systems. While I think it's not the way + to do it, the results on --memlimit-compress have been good. This + commit should achieve practically identical results for compression + while leaving decompression and tuklib_physmem() and thus + lzma_physmem() unaffected. - configure.ac | 8 ++++---- - tests/test_scripts.sh | 8 ++++---- - 2 files changed, 8 insertions(+), 8 deletions(-) + src/xz/hardware.c | 32 +++++++++++++++++++++++++++++++- + src/xz/xz.1 | 21 ++++++++++++++++++++- + 2 files changed, 51 insertions(+), 2 deletions(-) -commit 1c673e5681720491a74fc4b2992e075f47302c22 +commit ba76d67585f88677af9f48b48e7bdc3bb7687def Author: Lasse Collin -Date: 2011-07-31 11:01:47 +0300 +Date: 2020-01-26 20:53:25 +0200 - Fix exit status of "xzdiff foo.xz bar.xz". + xz: Set the --flush-timeout deadline when the first input byte arrives. - xzdiff was clobbering the exit status from diff in a case - statement used to analyze the exit statuses from "xz" when - its operands were two compressed files. Save and restore - diff's exit status to fix this. + xz --flush-timeout=2000, old version: - The bug is inherited from zdiff in GNU gzip and was fixed - there on 2009-10-09. + 1. xz is started. The next flush will happen after two seconds. + 2. No input for one second. + 3. A burst of a few kilobytes of input. + 4. No input for one second. + 5. Two seconds have passed and flushing starts. - Thanks to Jonathan Nieder for the patch and - to Peter Pallinger for reporting the bug. + The first second counted towards the flush-timeout even though + there was no pending data. This can cause flushing to occur more + often than needed. + + xz --flush-timeout=2000, after this commit: + + 1. xz is started. + 2. No input for one second. + 3. A burst of a few kilobytes of input. The next flush will + happen after two seconds counted from the time when the + first bytes of the burst were read. + 4. No input for one second. + 5. No input for another second. + 6. Two seconds have passed and flushing starts. - src/scripts/xzdiff.in | 2 ++ - tests/Makefile.am | 4 +++- - tests/test_scripts.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 59 insertions(+), 1 deletion(-) + src/xz/coder.c | 6 +----- + src/xz/file_io.c | 6 +++++- + src/xz/mytime.c | 1 - + 3 files changed, 6 insertions(+), 7 deletions(-) -commit 324cde7a864f4506c32ae7846d688c359a83fe65 +commit fd47fd62bbb1bfd13ab63869137971d8b390025f Author: Lasse Collin -Date: 2011-06-16 12:15:29 +0300 +Date: 2020-01-26 20:19:19 +0200 - liblzma: Remove unneeded semicolon. + xz: Move flush_needed from mytime.h to file_pair struct in file_io.h. - src/liblzma/lz/lz_encoder_hash.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/xz/coder.c | 3 ++- + src/xz/file_io.c | 3 ++- + src/xz/file_io.h | 3 +++ + src/xz/mytime.c | 3 --- + src/xz/mytime.h | 4 ---- + 5 files changed, 7 insertions(+), 9 deletions(-) -commit 492c86345551a51a29bf18e55fe55a5e86f169ce +commit 815035681063d5774d3640fc20b8ede783dd574e Author: Lasse Collin -Date: 2011-05-28 19:24:56 +0300 +Date: 2020-01-26 14:49:22 +0200 - Build: Make configure print if symbol versioning is enabled or not. + xz: coder.c: Make writing output a separate function. + + The same code sequence repeats so it's nicer as a separate function. + Note that in one case there was no test for opt_mode != MODE_TEST, + but that was only because that condition would always be true, so + this commit doesn't change the behavior there. - configure.ac | 2 ++ - 1 file changed, 2 insertions(+) + src/xz/coder.c | 30 +++++++++++++++++------------- + 1 file changed, 17 insertions(+), 13 deletions(-) -commit fc4d4436969bd4d71b704d400a165875e596034a +commit 5a49e081a098455bcdbd95cefb90e9b18780fe58 Author: Lasse Collin -Date: 2011-05-28 16:43:26 +0300 +Date: 2020-01-26 14:13:42 +0200 - Don't call close(-1) in tuklib_open_stdxxx() on error. + xz: Fix semi-busy-waiting in xz --flush-timeout. - Thanks to Jim Meyering. + When input blocked, xz --flush-timeout=1 would wake up every + millisecond and initiate flushing which would have nothing to + flush and thus would just waste CPU time. The fix disables the + timeout when no input has been seen since the previous flush. - src/common/tuklib_open_stdxxx.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + src/xz/coder.c | 4 ++++ + src/xz/file_io.c | 15 +++++++++++---- + src/xz/file_io.h | 4 ++++ + 3 files changed, 19 insertions(+), 4 deletions(-) -commit bd35d903a04c4d388adb4065b0fa271302380895 +commit dcca70fe9fa3c4bec56cf9c79e966166c9a9cf6a Author: Lasse Collin -Date: 2011-05-28 15:55:39 +0300 +Date: 2020-01-26 13:47:31 +0200 - liblzma: Use symbol versioning. - - Symbol versioning is enabled by default on GNU/Linux, - other GNU-based systems, and FreeBSD. - - I'm not sure how stable this is, so it may need - backward-incompatible changes before the next release. - - The idea is that alpha and beta symbols are considered - unstable and require recompiling the applications that - use those symbols. Once a symbol is stable, it may get - extended with new features in ways that don't break - compatibility with older ABI & API. - - The mydist target runs validate_map.sh which should - catch some probable problems in liblzma.map. Otherwise - I would forget to update the map file for new releases. + xz: Refactor io_read() a bit. - Makefile.am | 1 + - configure.ac | 21 +++++++++ - src/liblzma/Makefile.am | 6 +++ - src/liblzma/liblzma.map | 105 ++++++++++++++++++++++++++++++++++++++++++++ - src/liblzma/validate_map.sh | 68 ++++++++++++++++++++++++++++ - 5 files changed, 201 insertions(+) + src/xz/file_io.c | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) -commit afbb244362c9426a37ce4eb9d54aab768da3adad +commit 4ae9ab70cd3214395756435d13d8d000368ca2cb Author: Lasse Collin -Date: 2011-05-28 09:46:46 +0300 +Date: 2020-01-26 13:37:08 +0200 - Translations: Update the Italian translation. - - Thanks to Milo Casagrande. + xz: Update a comment in file_io.h. - po/it.po | 365 +++++++++++++++++++++++++++++++++++++-------------------------- - 1 file changed, 216 insertions(+), 149 deletions(-) + src/xz/file_io.h | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) -commit 79bef85e0543c0c3723281c3c817616c6cec343b +commit 3333ba4a6795a55cf0375329ba08152bd7fcbd46 Author: Lasse Collin -Date: 2011-05-28 08:46:04 +0300 +Date: 2020-01-26 13:27:51 +0200 - Tests: Add a test file for the bug in the previous commit. + xz: Move the setting of flush_needed in file_io.c to a nicer location. - tests/files/README | 4 ++++ - tests/files/bad-1-block_header-6.xz | Bin 0 -> 72 bytes - 2 files changed, 4 insertions(+) + src/xz/file_io.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) -commit c0297445064951807803457dca1611b3c47e7f0f +commit cf2df0f05ac98c1158c6e48145900b773223605d Author: Lasse Collin -Date: 2011-05-27 22:25:44 +0300 +Date: 2020-01-19 21:54:33 +0200 - xz: Fix error handling in xz -lvv. + Use $(LIB_FUZZING_ENGINE) in tests/ossfuzz/Makefile. - It could do an invalid free() and read past the end - of the uninitialized filters array. + https://github.com/google/oss-fuzz/pull/3219#issuecomment-573751048 + + Thanks to Bhargava Shastry for sending the patch. - src/xz/list.c | 21 ++++++--------------- - 1 file changed, 6 insertions(+), 15 deletions(-) + tests/ossfuzz/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 8bd91918ac50731f00b1a2a48072980572eb2ff9 +commit 7136f1735c60ac6967c4b8e277fcde53d485234f Author: Lasse Collin -Date: 2011-05-27 22:09:49 +0300 +Date: 2019-12-31 00:41:28 +0200 - liblzma: Handle allocation failures correctly in lzma_index_init(). - - Thanks to Jim Meyering. + Rename unaligned_read32ne to read32ne, and similarly for the others. - src/liblzma/common/index.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) + src/common/tuklib_integer.h | 64 +++++++++++++++---------------- + src/liblzma/common/alone_encoder.c | 2 +- + src/liblzma/common/block_header_decoder.c | 2 +- + src/liblzma/common/block_header_encoder.c | 2 +- + src/liblzma/common/memcmplen.h | 9 ++--- + src/liblzma/common/stream_flags_decoder.c | 6 +-- + src/liblzma/common/stream_flags_encoder.c | 8 ++-- + src/liblzma/lz/lz_encoder_hash.h | 2 +- + src/liblzma/lzma/lzma_decoder.c | 2 +- + src/liblzma/lzma/lzma_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder_private.h | 3 +- + src/liblzma/simple/simple_decoder.c | 2 +- + src/liblzma/simple/simple_encoder.c | 2 +- + tests/test_block_header.c | 4 +- + tests/test_stream_flags.c | 6 +-- + 15 files changed, 54 insertions(+), 62 deletions(-) -commit fe00f95828ef5627721b57e054f7eb2d42a2c961 +commit 5e78fcbf2eb21936022c9c5c3625d4da76f4b241 Author: Lasse Collin -Date: 2011-05-24 00:23:46 +0300 +Date: 2019-12-31 00:29:48 +0200 - Build: Fix checking for system-provided SHA-256. + Rename read32ne to aligned_read32ne, and similarly for the others. + + Using the aligned methods requires more care to ensure that + the address really is aligned, so it's nicer if the aligned + methods are prefixed. The next commit will remove the unaligned_ + prefix from the unaligned methods which in liblzma are used in + more places than the aligned ones. - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/common/tuklib_integer.h | 56 +++++++++++++++++++++--------------------- + src/liblzma/check/crc32_fast.c | 4 +-- + src/liblzma/check/crc64_fast.c | 4 +-- + 3 files changed, 32 insertions(+), 32 deletions(-) -commit 21b45b9bab541f419712cbfd473ccc31802e0397 +commit 77bc5bc6dd67056cfd5888520ac930cfc57b4516 Author: Lasse Collin -Date: 2011-05-23 18:30:30 +0300 +Date: 2019-12-31 00:18:24 +0200 - Build: Set GZIP_ENV=-9n in top-level Makefile.am. + Revise tuklib_integer.h and .m4. + + Add a configure option --enable-unsafe-type-punning to get the + old non-conforming memory access methods. It can be useful with + old compilers or in some other less typical situations but + shouldn't normally be used. + + Omit the packed struct trick for unaligned access. While it's + best in some cases, this is simpler. If the memcpy trick doesn't + work, one can request unsafe type punning from configure. + + Because CRC32/CRC64 code needs fast aligned reads, if no very + safe way to do it is found, type punning is used as a fallback. + This sucks but since it currently works in practice, it seems to + be the least bad option. It's never needed with GCC >= 4.7 or + Clang >= 3.6 since these support __builtin_assume_aligned and + thus fast aligned access can be done with the memcpy trick. + + Other things: + - Support GCC/Clang __builtin_bswapXX + - Cleaner bswap fallback macros + - Minor cleanups - Makefile.am | 3 +++ - 1 file changed, 3 insertions(+) + m4/tuklib_integer.m4 | 46 ++++- + src/common/tuklib_integer.h | 488 ++++++++++++++++++++++++-------------------- + 2 files changed, 316 insertions(+), 218 deletions(-) -commit 48053e8a4550233af46359024538bff90c870ab1 +commit 8b72950a6b2e2a36c2d8fdc8857564b57191b088 Author: Lasse Collin -Date: 2011-05-22 16:42:11 +0300 +Date: 2019-12-29 22:51:58 +0200 - Update NEWS for 5.0.3. + Tests: Hopefully fix test_check.c to work on EBCDIC systems. + + Thanks to Daniel Richard G. - NEWS | 32 ++++++++++++++++++++++++++++++++ - 1 file changed, 32 insertions(+) + tests/test_check.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) -commit bba37df2c9e54ad773e15ff00a09d2d6989fb3b2 +commit 43ce4ea7c762238d3df9717b34126d3e0d7cd51c Author: Lasse Collin -Date: 2011-05-21 16:28:44 +0300 +Date: 2019-09-24 23:02:40 +0300 - Add French translation. + Scripts: Put /usr/xpg4/bin to the beginning of PATH on Solaris. - It is known that the BCJ filter --help text is only - partially translated. + This adds a configure option --enable-path-for-scripts=PREFIX + which defaults to empty except on Solaris it is /usr/xpg4/bin + to make POSIX grep and others available. The Solaris case had + been documented in INSTALL with a manual fix but it's better + to do this automatically since it is needed on most Solaris + systems anyway. + + Thanks to Daniel Richard G. - po/LINGUAS | 1 + - po/fr.po | 864 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 865 insertions(+) + INSTALL | 43 +++++++++++++++++++++++++++++++++++-------- + configure.ac | 26 ++++++++++++++++++++++++++ + src/scripts/xzdiff.in | 1 + + src/scripts/xzgrep.in | 1 + + src/scripts/xzless.in | 1 + + src/scripts/xzmore.in | 1 + + 6 files changed, 65 insertions(+), 8 deletions(-) -commit 4161d7634965a7a287bf208dcd79f6185f448fe8 +commit 6a89e656ebedd53a10cd1a063a32a9e4ade0da1f Author: Lasse Collin -Date: 2011-05-21 15:12:10 +0300 +Date: 2019-07-12 18:57:43 +0300 - xz: Translate also the string used to print the program name. - - French needs a space before a colon, e.g. "xz : foo error". + Fix comment typos in tuklib_mbstr* files. - src/xz/message.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + src/common/tuklib_mbstr.h | 2 +- + src/common/tuklib_mbstr_fw.c | 2 +- + src/common/tuklib_mbstr_width.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) -commit b94aa0c8380cdb18cddb33440d625474c16643cf +commit ac0b4212656a48ef0c187c0c941d40ac9489ae36 Author: Lasse Collin -Date: 2011-05-21 15:08:44 +0300 +Date: 2019-07-12 18:30:46 +0300 - liblzma: Try to use SHA-256 from the operating system. + Add missing include to tuklib_mbstr_width.c. - If the operating system libc or other base libraries - provide SHA-256, use that instead of our own copy. - Note that this doesn't use OpenSSL or libgcrypt or - such libraries to avoid creating dependencies to - other packages. - - This supports at least FreeBSD, NetBSD, OpenBSD, Solaris, - MINIX, and Darwin. They all provide similar but not - identical SHA-256 APIs; everyone is a little different. - - Thanks to Wim Lewis for the original patch, improvements, - and testing. + It didn't matter in XZ Utils because sysdefs.h + includes string.h anyway. - configure.ac | 54 +++++++++++++++++++++++++++ - src/liblzma/check/Makefile.inc | 2 + - src/liblzma/check/check.h | 83 ++++++++++++++++++++++++++++++++++++++---- - 3 files changed, 131 insertions(+), 8 deletions(-) + src/common/tuklib_mbstr_width.c | 1 + + 1 file changed, 1 insertion(+) -commit f004128678d43ea10b4a6401aa184cf83252d6ec +commit 72a443281fb0b91aebf8cdff2ab1f7c07b081240 Author: Lasse Collin -Date: 2011-05-17 12:52:18 +0300 +Date: 2019-07-12 18:10:57 +0300 - Don't use clockid_t in mythread.h when clock_gettime() isn't available. - - Thanks to Wim Lewis for the patch. + Update tuklib base headers to include stdbool.h. - src/common/mythread.h | 2 ++ - 1 file changed, 2 insertions(+) + src/common/tuklib_common.h | 2 +- + src/common/tuklib_config.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) -commit f779516f42ebd2db47a5b7d6143459bf7737cf2f +commit de1f47b2b40e960b7bc3acba754f66dd19705921 Author: Lasse Collin -Date: 2011-05-17 12:26:28 +0300 +Date: 2019-06-28 00:54:31 +0300 - Update THANKS. + xz: Automatically align the strings in --info-memory. + + This makes it easier to translate the strings. + + Also, the string for amount of RAM was shortened. - THANKS | 3 +++ - 1 file changed, 3 insertions(+) + src/xz/hardware.c | 45 ++++++++++++++++++++++++++++++++++----------- + 1 file changed, 34 insertions(+), 11 deletions(-) -commit 830ba587775bb562f6eaf05cad61bf669d1f8892 +commit 8ce679125dbd0e2058d8f886e738d7f19a45cab5 Author: Lasse Collin -Date: 2011-05-17 12:21:33 +0300 +Date: 2019-06-25 23:15:21 +0300 - Update INSTALL with a note about linker problem on OpenSolaris x86. + liblzma: Fix a buggy comment. - INSTALL | 23 +++++++++++++++++------ - 1 file changed, 17 insertions(+), 6 deletions(-) + src/liblzma/lz/lz_encoder_mf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit ec7106309c8060e9c646dba20c4f15689a0bbb04 +commit fc77929e92e869f6869bf88931066103fd75f376 Author: Lasse Collin -Date: 2011-05-17 12:01:37 +0300 +Date: 2019-06-25 00:16:06 +0300 - Build: Fix initialization of enable_check_* variables in configure.ac. - - This doesn't matter much in practice since it is unlikely - that anyone would have such environment variable names. - - Thanks to Wim Lewis. + configure.ac: Fix a typo in a comment. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 4c6e146df99696920f12410fb17754412797ef36 +commit e873902641794210ad7db59743f98e3e1cd6139f Author: Lasse Collin -Date: 2011-05-17 11:54:38 +0300 +Date: 2019-06-25 00:08:13 +0300 - Add underscores to attributes (__attribute((__foo__))). + Tests: Silence warnings from clang -Wassign-enum. + + Also changed 999 to 99 so it fits even if lzma_check happened + to be 8 bits wide. - src/liblzma/common/alone_decoder.c | 2 +- - src/liblzma/common/alone_encoder.c | 2 +- - src/liblzma/common/block_encoder.c | 2 +- - src/liblzma/common/common.c | 2 +- - src/liblzma/common/common.h | 2 +- - src/liblzma/common/index_decoder.c | 9 +++++---- - src/liblzma/common/index_encoder.c | 11 ++++++----- - src/liblzma/delta/delta_encoder.c | 2 +- - src/liblzma/lz/lz_decoder.c | 2 +- - src/liblzma/lz/lz_encoder.c | 2 +- - src/liblzma/simple/arm.c | 2 +- - src/liblzma/simple/armthumb.c | 2 +- - src/liblzma/simple/ia64.c | 2 +- - src/liblzma/simple/powerpc.c | 2 +- - src/liblzma/simple/simple_coder.c | 2 +- - src/liblzma/simple/sparc.c | 2 +- - src/lzmainfo/lzmainfo.c | 4 ++-- - src/xz/coder.c | 2 +- - src/xz/hardware.h | 2 +- - src/xz/message.c | 2 +- - src/xz/message.h | 18 +++++++++--------- - src/xz/options.c | 6 +++--- - src/xz/signals.c | 2 +- - src/xz/util.h | 6 +++--- - src/xzdec/xzdec.c | 6 +++--- - 25 files changed, 49 insertions(+), 47 deletions(-) + tests/test_block_header.c | 3 ++- + tests/test_stream_flags.c | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) -commit 7a480e485938884ef3021b48c3b0b9f9699dc9b6 +commit d499e467d99efeaae688564eedc4548837c1416a Author: Lasse Collin -Date: 2011-05-01 12:24:23 +0300 +Date: 2019-06-24 23:52:17 +0300 - xz: Fix input file position when --single-stream is used. - - Now the following works as you would expect: - - echo foo | xz > foo.xz - echo bar | xz >> foo.xz - ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz - - Note that it doesn't work if the input is not seekable - or if there is Stream Padding between the concatenated - .xz Streams. + liblzma: Add a comment. - src/xz/coder.c | 1 + - src/xz/file_io.c | 15 +++++++++++++++ - src/xz/file_io.h | 13 +++++++++++++ - 3 files changed, 29 insertions(+) + src/liblzma/common/stream_encoder_mt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit c29e6630c1450c630c4e7b783bdd76515db9004c +commit a12b13c5f0d54c684fa8446f93fdac08ab2a716b Author: Lasse Collin -Date: 2011-05-01 12:15:51 +0300 +Date: 2019-06-24 23:45:21 +0300 - xz: Print the maximum number of worker threads in xz -vv. + liblzma: Silence clang -Wmissing-variable-declarations. - src/xz/coder.c | 4 ++++ - 1 file changed, 4 insertions(+) + src/liblzma/check/crc32_table.c | 3 +++ + src/liblzma/check/crc64_table.c | 3 +++ + 2 files changed, 6 insertions(+) -commit 0b77c4a75158ccc416b07d6e81df8ee0abaea720 +commit 1b4675cebf7471f7cc9b7072c950e3de97147063 Author: Lasse Collin -Date: 2011-04-19 10:44:48 +0300 +Date: 2019-06-24 23:25:41 +0300 - Build: Warn if no supported method to detect the number of CPU cores. + Add LZMA_RET_INTERNAL1..8 to lzma_ret and use one for LZMA_TIMED_OUT. + + LZMA_TIMED_OUT is *internally* used as a value for lzma_ret + enumeration. Previously it was #defined to 32 and cast to lzma_ret. + That way it wasn't visible in the public API, but this was hackish. + + Now the public API has eight LZMA_RET_INTERNALx members and + LZMA_TIMED_OUT is #defined to LZMA_RET_INTERNAL1. This way + the code is cleaner overall although the public API has a few + extra mysterious enum members. - configure.ac | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) + src/liblzma/api/lzma/base.h | 15 ++++++++++++++- + src/liblzma/common/common.c | 4 +--- + src/liblzma/common/common.h | 5 ++--- + src/xz/message.c | 8 ++++++++ + 4 files changed, 25 insertions(+), 7 deletions(-) -commit e4622df9ab4982f8faa53d85b17be66216175a58 +commit 159c43875eb25deea626ed651274464bae3e32ef Author: Lasse Collin -Date: 2011-04-19 09:55:06 +0300 +Date: 2019-06-24 22:57:43 +0300 - Update THANKS. + xz: Silence a warning from clang -Wsign-conversion in main.c. - THANKS | 1 + - 1 file changed, 1 insertion(+) + src/xz/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 9c1b05828a88eff54409760b92162c7cc2c7cff6 +commit 466cfcd3e52f6750ce28a635997f3dd84fb18515 Author: Lasse Collin -Date: 2011-04-19 09:20:44 +0300 +Date: 2019-06-24 22:52:20 +0300 - Fix portability problems in mythread.h. + xz: Make "headings" static in list.c. - Use gettimeofday() if clock_gettime() isn't available - (e.g. Darwin). + Caught by clang -Wmissing-variable-declarations. + + src/xz/list.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 608517b9b76c41fac6613dbda1193d6f41338e19 +Author: Lasse Collin +Date: 2019-06-24 22:47:39 +0300 + + liblzma: Remove incorrect uses of lzma_attribute((__unused__)). - The test for availability of pthread_condattr_setclock() - and CLOCK_MONOTONIC was incorrect. Instead of fixing the - #ifdefs, use an Autoconf test. That way if there exists a - system that supports them but doesn't specify the matching - POSIX #defines, the features will still get detected. - - Don't try to use pthread_sigmask() on OpenVMS. It doesn't - have that function. - - Guard mythread.h against being #included multiple times. + Caught by clang -Wused-but-marked-unused. - configure.ac | 7 +++++++ - src/common/mythread.h | 31 +++++++++++++++++++++++++++---- - 2 files changed, 34 insertions(+), 4 deletions(-) + src/liblzma/common/alone_decoder.c | 3 +-- + src/liblzma/common/alone_encoder.c | 3 +-- + src/liblzma/lz/lz_decoder.c | 3 +-- + 3 files changed, 3 insertions(+), 6 deletions(-) -commit 3de00cc75da7b0e7b65e84c62b5351e231f501e9 +commit c2d2ab6a9d41a2b55d047c5b710aacf80d219255 Author: Lasse Collin -Date: 2011-04-18 19:35:49 +0300 +Date: 2019-06-24 20:53:55 +0300 - Update THANKS. + Tests: Silence a warning from -Wsign-conversion. - THANKS | 2 ++ - 1 file changed, 2 insertions(+) + tests/create_compress_files.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) -commit bd5002f5821e3d1b04f2f56989e4a19318e73633 -Author: Martin Väth -Date: 2011-04-15 04:54:49 -0400 +commit 2402f7873dcae719d0ebddd23bb579074519ac52 +Author: Lasse Collin +Date: 2019-06-24 20:45:49 +0300 - xzgrep: fix typo in $0 parsing + xz: Fix an integer overflow with 32-bit off_t. - Reported-by: Diego Elio Pettenò - Signed-off-by: Martin Väth - Signed-off-by: Mike Frysinger + Or any off_t which isn't very big (like signed 64 bit integer + that most system have). A small off_t could overflow if the + file being decompressed had long enough run of zero bytes, + which would result in corrupt output. - src/scripts/xzgrep.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + src/xz/file_io.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) -commit 6ef4eabc0acc49e1bb9dc68064706e19fa9fcf48 +commit 4fd3a8dd0b60f029e1c66a0ee634f9e9fda3caa9 Author: Lasse Collin -Date: 2011-04-12 12:48:31 +0300 +Date: 2019-06-24 01:24:17 +0300 - Bump the version number to 5.1.1alpha and liblzma soname to 5.0.99. + xz: Cleanup io_seek_src() a bit. + + lseek() returns -1 on error and checking for -1 is nicer. - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + src/xz/file_io.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) -commit 9a4377be0d21e597c66bad6c7452873aebfb3c1c +commit dfda7cf6afa486e10df035327d68753896dfb48a Author: Lasse Collin -Date: 2011-04-12 12:42:37 +0300 +Date: 2019-06-24 00:57:23 +0300 - Put the unstable APIs behind #ifdef LZMA_UNSTABLE. + Tests: Remove a duplicate branch from tests/tests.h. - This way people hopefully won't complain if these APIs - change and break code that used an older API. + The duplication was introduced about eleven years ago and + should have been cleaned up back then already. + + This was caught by -Wduplicated-branches. - src/liblzma/api/lzma/container.h | 4 ++++ - src/liblzma/common/common.h | 2 ++ - src/xz/private.h | 2 ++ - 3 files changed, 8 insertions(+) + tests/tests.h | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) -commit 3e321a3acd50002cf6fdfd259e910f56d3389bc3 +commit 1d4a904d8fb634bd5a04f7fbdd17d3739f3d8866 Author: Lasse Collin -Date: 2011-04-12 11:59:49 +0300 +Date: 2019-06-24 00:40:45 +0300 - Remove doubled words from documentation and comments. + xz: Change io_seek_src and io_pread arguments from off_t to uint64_t. - Spot candidates by running these commands: - git ls-files |xargs perl -0777 -n \ - -e 'while (/\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims)' \ - -e '{$n=($` =~ tr/\n/\n/ + 1); ($v=$&)=~s/\n/\\n/g; print "$ARGV:$n:$v\n"}' - - Thanks to Jim Meyering for the original patch. + This helps fixing warnings from -Wsign-conversion and makes the + code look better too. - doc/lzma-file-format.txt | 4 ++-- - src/liblzma/common/alone_encoder.c | 2 +- - src/liblzma/lzma/lzma2_encoder.c | 2 +- - src/xz/file_io.c | 2 +- - src/xz/xz.1 | 2 +- - windows/INSTALL-Windows.txt | 2 +- - 6 files changed, 7 insertions(+), 7 deletions(-) + src/xz/file_io.c | 16 ++++++++++++---- + src/xz/file_io.h | 4 ++-- + src/xz/list.c | 9 ++++----- + 3 files changed, 18 insertions(+), 11 deletions(-) -commit d91a84b534b012d19474f2fda1fbcaef873e1ba4 +commit 50120deb0159fcb53ee1a6caffb2bb81a1ecd990 Author: Lasse Collin -Date: 2011-04-12 11:46:01 +0300 +Date: 2019-06-24 00:12:38 +0300 - Update NEWS. + xz: list.c: Fix some warnings from -Wsign-conversion. - NEWS | 47 +++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 45 insertions(+), 2 deletions(-) + src/xz/list.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit 14e6ad8cfe0165c1a8beeb5b2a1536558b29b0a1 +commit d0a78751eb54fb1572002746c533936a118e4e42 Author: Lasse Collin -Date: 2011-04-12 11:45:40 +0300 +Date: 2019-06-23 23:22:45 +0300 - Update TODO. + tuklib_mbstr_width: Fix a warning from -Wsign-conversion. - TODO | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) + src/common/tuklib_mbstr_width.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 70e750f59793f9b5cd306a5adce9b8e427739e04 +commit 7883d73530b4b2a701ddd7d50c35676cbc158039 Author: Lasse Collin -Date: 2011-04-12 11:08:55 +0300 +Date: 2019-06-23 23:19:34 +0300 - xz: Update the man page about threading. + xz: Fix some of the warnings from -Wsign-conversion. - src/xz/xz.1 | 34 ++++++++++++++++++++-------------- - 1 file changed, 20 insertions(+), 14 deletions(-) + src/xz/args.c | 4 ++-- + src/xz/coder.c | 4 ++-- + src/xz/file_io.c | 5 +++-- + src/xz/message.c | 4 ++-- + src/xz/mytime.c | 4 ++-- + src/xz/options.c | 2 +- + src/xz/util.c | 4 ++-- + 7 files changed, 14 insertions(+), 13 deletions(-) -commit 24e0406c0fb7494d2037dec033686faf1bf67068 +commit c2b994fe3d35e9e575c28869a2f7f534f2495d05 Author: Lasse Collin -Date: 2011-04-11 22:06:03 +0300 +Date: 2019-06-23 22:27:45 +0300 - xz: Add support for threaded compression. + tuklib_cpucores: Silence warnings from -Wsign-conversion. - src/xz/args.c | 3 +- - src/xz/coder.c | 202 +++++++++++++++++++++++++++++++++++---------------------- - 2 files changed, 125 insertions(+), 80 deletions(-) + src/common/tuklib_cpucores.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) -commit de678e0c924aa79a19293a8a6ed82e8cb6572a42 +commit 07c4fa9e1a195e0543f271380c8de22a3ab145ff Author: Lasse Collin -Date: 2011-04-11 22:03:30 +0300 +Date: 2019-06-23 21:40:47 +0300 - liblzma: Add lzma_stream_encoder_mt() for threaded compression. - - This is the simplest method to do threading, which splits - the uncompressed data into blocks and compresses them - independently from each other. There's room for improvement - especially to reduce the memory usage, but nevertheless, - this is a good start. + xzdec: Fix warnings from -Wsign-conversion. - configure.ac | 1 + - src/liblzma/api/lzma/container.h | 163 +++++ - src/liblzma/common/Makefile.inc | 7 + - src/liblzma/common/common.c | 9 +- - src/liblzma/common/common.h | 14 + - src/liblzma/common/outqueue.c | 180 ++++++ - src/liblzma/common/outqueue.h | 155 +++++ - src/liblzma/common/stream_encoder_mt.c | 1011 ++++++++++++++++++++++++++++++++ - 8 files changed, 1539 insertions(+), 1 deletion(-) + src/xzdec/xzdec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 25fe729532cdf4b8fed56a4519b73cf31efaec50 +commit dfac2c9a1d7d4a2b8a5d7c9c6d567dee48318bcf Author: Lasse Collin -Date: 2011-04-11 21:15:07 +0300 +Date: 2019-06-23 21:38:56 +0300 - liblzma: Add the forgotten lzma_lzma2_block_size(). + liblzma: Fix warnings from -Wsign-conversion. - This should have been in 5eefc0086d24a65e136352f8c1d19cefb0cbac7a. - - src/liblzma/lzma/lzma2_encoder.c | 10 ++++++++++ - src/liblzma/lzma/lzma2_encoder.h | 2 ++ - 2 files changed, 12 insertions(+) - -commit 91afb785a1dee34862078d9bf844ef12b8cc3e35 -Author: Lasse Collin -Date: 2011-04-11 21:04:13 +0300 - - liblzma: Document lzma_easy_(enc|dec)oder_memusage() better too. + Also, more parentheses were added to the literal_subcoder + macro in lzma_comon.h (better style but no functional change + in the current usage). - src/liblzma/api/lzma/container.h | 9 +++++++++ - 1 file changed, 9 insertions(+) + src/liblzma/common/block_header_decoder.c | 2 +- + src/liblzma/delta/delta_decoder.c | 2 +- + src/liblzma/lzma/fastpos.h | 2 +- + src/liblzma/lzma/lzma2_decoder.c | 8 ++++---- + src/liblzma/lzma/lzma_common.h | 3 ++- + src/liblzma/lzma/lzma_decoder.c | 16 ++++++++-------- + src/liblzma/simple/arm.c | 6 +++--- + src/liblzma/simple/armthumb.c | 8 ++++---- + src/liblzma/simple/ia64.c | 2 +- + src/liblzma/simple/powerpc.c | 9 +++++---- + src/liblzma/simple/x86.c | 2 +- + 11 files changed, 31 insertions(+), 29 deletions(-) -commit 4a9905302a9e4a1601ae09d650d3f08ce98ae9ee +commit 41838dcc26375f6aa393a63e4d81e2f4d223de07 Author: Lasse Collin -Date: 2011-04-11 20:59:07 +0300 +Date: 2019-06-23 19:33:55 +0300 - liblzma: Document lzma_raw_(enc|dec)oder_memusage() better. - - It didn't mention the return value that is used if - an error occurs. + tuklib_integer: Silence warnings from -Wsign-conversion. - src/liblzma/api/lzma/filter.h | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) + src/common/tuklib_integer.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit 0badb0b1bd649163322783b0bd9e590b4bc7a93d +commit 3ce05d235f736d392347a05086b8033416874b87 Author: Lasse Collin -Date: 2011-04-11 19:28:18 +0300 +Date: 2019-06-20 19:40:30 +0300 - liblzma: Use memzero() to initialize supported_actions[]. + tuklib_integer: Fix usage of conv macros. - This is cleaner and makes it simpler to add new members - to lzma_action enumeration. + Use a temporary variable instead of e.g. + conv32le(unaligned_read32ne(buf)) because the macro can + evaluate its argument multiple times. - src/liblzma/common/common.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) + src/common/tuklib_integer.h | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) -commit a7934c446a58e20268689899d2a39f50e571f251 +commit b525b0c0ef40cd89b69294c9b8d57f4a8db58e1f Author: Lasse Collin -Date: 2011-04-11 19:26:27 +0300 +Date: 2019-06-03 20:44:19 +0300 - liblzma: API comment about lzma_allocator with threaded coding. + Update THANKS. - src/liblzma/api/lzma/base.h | 18 +++++++++++++----- - 1 file changed, 13 insertions(+), 5 deletions(-) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 5eefc0086d24a65e136352f8c1d19cefb0cbac7a +commit 039a168e8cf201d5104a25ec41f0cf25eda6cc53 Author: Lasse Collin -Date: 2011-04-11 19:16:30 +0300 +Date: 2019-06-03 20:41:54 +0300 - liblzma: Add an internal function lzma_mt_block_size(). + liblzma: Fix comments. - This is based lzma_chunk_size() that was included in some - development version of liblzma. + Thanks to Bruce Stark. - src/liblzma/common/filter_encoder.c | 46 ++++++++++++++++++------------------- - src/liblzma/common/filter_encoder.h | 4 ++-- - 2 files changed, 24 insertions(+), 26 deletions(-) + src/liblzma/common/alone_encoder.c | 4 ++-- + src/liblzma/common/block_util.c | 2 +- + src/liblzma/common/common.c | 2 +- + src/liblzma/common/filter_common.h | 2 +- + src/liblzma/common/filter_decoder.h | 2 +- + src/liblzma/common/filter_flags_encoder.c | 2 +- + 6 files changed, 7 insertions(+), 7 deletions(-) -commit d1199274758049fc523d98c5b860ff814a799eec +commit c460f6defebc5a81bbca90adc2476154ca244f69 Author: Lasse Collin -Date: 2011-04-11 13:59:50 +0300 +Date: 2019-06-02 00:50:59 +0300 - liblzma: Don't create an empty Block in lzma_stream_buffer_encode(). - - Empty Block was created if the input buffer was empty. - Empty Block wastes a few bytes of space, but more importantly - it triggers a bug in XZ Utils 5.0.1 and older when trying - to decompress such a file. 5.0.1 and older consider such - files to be corrupt. I thought that no encoder creates empty - Blocks when releasing 5.0.2 but I was wrong. + liblzma: Fix one more unaligned read to use unaligned_read16ne(). - src/liblzma/common/stream_buffer_encoder.c | 20 +++++++++++++------- - 1 file changed, 13 insertions(+), 7 deletions(-) + src/liblzma/lz/lz_encoder_hash.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 3b22fc2c87ec85fcdd385c163b68fc49c97aa848 +commit c81d77c537f0b8c8672868e1dc6cf7290ce4a25b Author: Lasse Collin -Date: 2011-04-11 13:28:40 +0300 +Date: 2019-06-01 21:41:55 +0300 - liblzma: Fix API docs to mention LZMA_UNSUPPORTED_CHECK. - - This return value was missing from the API comments of - four functions. + Update THANKS. - src/liblzma/api/lzma/block.h | 1 + - src/liblzma/api/lzma/container.h | 3 +++ - 2 files changed, 4 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 71b9380145dccf001f22e66a06b9d508905c25ce +commit 386394fc9fcde2615391f804eaa466749f96f4ef Author: Lasse Collin -Date: 2011-04-11 13:21:28 +0300 +Date: 2019-06-01 21:36:13 +0300 - liblzma: Validate encoder arguments better. + liblzma: memcmplen: Use ctz32() from tuklib_integer.h. - The biggest problem was that the integrity check type - wasn't validated, and e.g. lzma_easy_buffer_encode() - would create a corrupt .xz Stream if given an unsupported - Check ID. Luckily applications don't usually try to use - an unsupport Check ID, so this bug is unlikely to cause - many real-world problems. - - src/liblzma/common/block_buffer_encoder.c | 18 ++++++++++++------ - src/liblzma/common/block_encoder.c | 5 +++++ - src/liblzma/common/stream_buffer_encoder.c | 3 +++ - 3 files changed, 20 insertions(+), 6 deletions(-) - -commit ec7e3dbad704268825fc48f0bdd4577bc46b4f13 -Author: Lasse Collin -Date: 2011-04-11 09:57:30 +0300 - - xz: Move the description of --block-size in --long-help. + The same compiler-specific #ifdefs are already in tuklib_integer.h - src/xz/message.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + src/liblzma/common/memcmplen.h | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) -commit cd3086ff443bb282bdf556919c28b3e3cbed8169 +commit 264ab971ce2994baac41b1579c9c35aba7743fc8 Author: Lasse Collin -Date: 2011-04-11 09:55:35 +0300 +Date: 2019-06-01 21:30:03 +0300 - Docs: Document --single-stream and --block-size. + tuklib_integer: Cleanup MSVC-specific code. - src/xz/xz.1 | 38 ++++++++++++++++++++++++++++++++++++-- - 1 file changed, 36 insertions(+), 2 deletions(-) + src/common/tuklib_integer.h | 20 +++++++++----------- + 1 file changed, 9 insertions(+), 11 deletions(-) -commit fb64a4924334e3c440865710990fe08090f2fed0 +commit 33773c6f2a8711d4aa6656795db52c59a28580ec Author: Lasse Collin -Date: 2011-04-11 09:27:57 +0300 +Date: 2019-06-01 19:01:21 +0300 - liblzma: Make lzma_stream_encoder_init() static (second try). + liblzma: Use unaligned_readXXne functions instead of type punning. - It's an internal function and it's not needed by - anything outside stream_encoder.c. + Now gcc -fsanitize=undefined should be clean. + + Thanks to Jeffrey Walton. - src/liblzma/common/Makefile.inc | 1 - - src/liblzma/common/easy_encoder.c | 1 - - src/liblzma/common/stream_encoder.c | 13 ++++++------- - src/liblzma/common/stream_encoder.h | 23 ----------------------- - 4 files changed, 6 insertions(+), 32 deletions(-) + src/liblzma/common/memcmplen.h | 12 ++++++------ + src/liblzma/lzma/lzma_encoder_private.h | 2 +- + 2 files changed, 7 insertions(+), 7 deletions(-) -commit a34730cf6af4d33a4057914e57227b6dfde6567e +commit e5f13a66567b1987e0aae42c6fdcd277bb5810ba Author: Lasse Collin -Date: 2011-04-11 08:31:42 +0300 +Date: 2019-06-01 18:46:54 +0300 - Revert "liblzma: Make lzma_stream_encoder_init() static." + tuklib_integer: Autodetect support for unaligned access on ARM. - This reverts commit 352ac82db5d3f64585c07b39e4759388dec0e4d7. - I don't know what I was thinking. + The result is used as the default for --enable-unaligned-access. + The test should work with GCC and Clang. - src/liblzma/common/Makefile.inc | 1 + - src/liblzma/common/stream_encoder.c | 9 +++++---- - src/liblzma/common/stream_encoder.h | 23 +++++++++++++++++++++++ - 3 files changed, 29 insertions(+), 4 deletions(-) + m4/tuklib_integer.m4 | 11 +++++++++++ + 1 file changed, 11 insertions(+) -commit 9f0a806aef7ea79718e3f1f2baf3564295229a27 +commit 3bc112c2d38d5f348bce7bc2422286b1692c7490 Author: Lasse Collin -Date: 2011-04-10 21:23:21 +0300 +Date: 2019-06-01 18:41:16 +0300 - Revise mythread.h. + tuklib_integer: Improve unaligned memory access. - This adds: + Now memcpy() or GNU C packed structs for unaligned access instead + of type punning. See the comment in this commit for details. - - mythread_sync() macro to create synchronized blocks + Avoiding type punning with unaligned access is needed to + silence gcc -fsanitize=undefined. - - mythread_cond structure and related functions - and macros for condition variables with timed - waiting using a relative timeout + New functions: unaliged_readXXne and unaligned_writeXXne where + XX is 16, 32, or 64. + + src/common/tuklib_integer.h | 180 +++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 168 insertions(+), 12 deletions(-) + +commit 2a22de439ec63da1927b640eda309296a1e8dce5 +Author: Lasse Collin +Date: 2019-05-13 20:05:17 +0300 + + liblzma: Avoid memcpy(NULL, foo, 0) because it is undefined behavior. - - mythread_create() to create a thread with all - signals blocked + I should have always known this but I didn't. Here is an example + as a reminder to myself: - Some of these wouldn't need to be inline functions, - but I'll keep them this way for now for simplicity. + int mycopy(void *dest, void *src, size_t n) + { + memcpy(dest, src, n); + return dest == NULL; + } - For timed waiting on a condition variable, librt is - now required on some systems to use clock_gettime(). - configure.ac was updated to handle this. + In the example, a compiler may assume that dest != NULL because + passing NULL to memcpy() would be undefined behavior. Testing + with GCC 8.2.1, mycopy(NULL, NULL, 0) returns 1 with -O0 and -O1. + With -O2 the return value is 0 because the compiler infers that + dest cannot be NULL because it was already used with memcpy() + and thus the test for NULL gets optimized out. + + In liblzma, if a null-pointer was passed to memcpy(), there were + no checks for NULL *after* the memcpy() call, so I cautiously + suspect that it shouldn't have caused bad behavior in practice, + but it's hard to be sure, and the problematic cases had to be + fixed anyway. + + Thanks to Jeffrey Walton. - configure.ac | 1 + - src/common/mythread.h | 200 +++++++++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 181 insertions(+), 20 deletions(-) + src/liblzma/common/common.c | 6 +++++- + src/liblzma/lz/lz_decoder.c | 12 +++++++++--- + src/liblzma/simple/simple_coder.c | 10 +++++++++- + 3 files changed, 23 insertions(+), 5 deletions(-) -commit 352ac82db5d3f64585c07b39e4759388dec0e4d7 +commit d3fc850cfedc058247d9e334ce59bbc8f2286d8a Author: Lasse Collin -Date: 2011-04-10 20:37:36 +0300 +Date: 2019-05-11 20:56:08 +0300 - liblzma: Make lzma_stream_encoder_init() static. + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 4adb8288ab61d5f14e212007b8742df0710baf73 +Author: Lasse Collin +Date: 2019-05-11 20:54:12 +0300 + + xz: Update xz man page date. + + src/xz/xz.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2fb0ddaa557ce86e38fe06439930fa8665f092fd +Author: Antoine Cœur +Date: 2019-05-08 13:30:57 +0800 + + spelling + + Doxyfile.in | 2 +- + NEWS | 2 +- + doc/examples/11_file_info.c | 2 +- + src/liblzma/api/lzma/block.h | 2 +- + src/liblzma/api/lzma/hardware.h | 2 +- + src/liblzma/api/lzma/lzma12.h | 2 +- + src/liblzma/api/lzma/vli.h | 2 +- + src/liblzma/common/file_info.c | 4 ++-- + src/liblzma/common/hardware_physmem.c | 2 +- + src/liblzma/common/index.c | 4 ++-- + src/liblzma/common/stream_encoder_mt.c | 2 +- + src/liblzma/common/vli_decoder.c | 2 +- + src/liblzma/lz/lz_decoder.c | 2 +- + src/scripts/xzgrep.in | 2 +- + src/xz/args.c | 2 +- + src/xz/coder.c | 4 ++-- + src/xz/list.c | 4 ++-- + src/xz/main.c | 2 +- + src/xz/mytime.h | 2 +- + src/xz/private.h | 2 +- + src/xz/xz.1 | 2 +- + windows/build.bash | 2 +- + 22 files changed, 26 insertions(+), 26 deletions(-) + +commit 4ed339606156bd313ed99237485cb8ed0362d64f +Author: Lasse Collin +Date: 2019-05-01 18:43:10 +0300 + + xz: In xz -lvv look at the widths of the check names too. - It's an internal function and it's not needed by - anything outside stream_encoder.c. + Now the widths of the check names is used to adjust the width + of the Check column. This way there no longer is a need to restrict + the widths of the check names to be at most ten terminal-columns. - src/liblzma/common/Makefile.inc | 1 - - src/liblzma/common/stream_encoder.c | 9 ++++----- - src/liblzma/common/stream_encoder.h | 23 ----------------------- - 3 files changed, 4 insertions(+), 29 deletions(-) + src/xz/list.c | 32 ++++++++++++++++++++++++++------ + 1 file changed, 26 insertions(+), 6 deletions(-) -commit 9e807fe3fe79618ac48f58207cf7082ea20a6928 +commit 2f4281a1001dcf7fdf1418c0c0d246c16561fb65 Author: Lasse Collin -Date: 2011-04-10 14:58:10 +0300 +Date: 2019-05-01 18:33:25 +0300 - DOS: Update the docs and include notes about 8.3 filenames. + xz: Fix xz -lvv column alignment to look at the translated strings. - dos/{README => INSTALL.txt} | 13 +---- - dos/README.txt | 123 ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 125 insertions(+), 11 deletions(-) + src/xz/list.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit ebd54dbd6e481d31e80757f900ac8109ad1423c6 +commit 01d01b7c7c0b8eaf7f780a5584ec52c22d10fa4a Author: Lasse Collin -Date: 2011-04-10 13:09:42 +0300 +Date: 2019-05-01 16:52:36 +0300 - xz/DOS: Add experimental 8.3 filename support. + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 64030c6b17f7743df03a9948a0ccfcdf40c6b97c +Author: Lasse Collin +Date: 2019-05-01 16:43:16 +0300 + + Windows: Update VS version in windows/vs2019/config.h. + + windows/vs2019/config.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2dc9117f5fbfab31444a3ca1e55795ccfa8a9f51 +Author: Julien Marrec +Date: 2019-04-25 17:44:06 +0200 + + Windows: Upgrade solution itself + + windows/vs2019/xz_win.sln | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit ac31413916fa9b11bab17f0f0aa63e2869360f6f +Author: Julien Marrec +Date: 2019-04-25 17:40:24 +0200 + + Windows: Upgrade solution with VS2019 + + windows/vs2019/liblzma.vcxproj | 15 ++++++++------- + windows/vs2019/liblzma_dll.vcxproj | 15 ++++++++------- + 2 files changed, 16 insertions(+), 14 deletions(-) + +commit be25a0c37ba92a20c390b4d17fe502457fe96b71 +Author: Julien Marrec +Date: 2019-04-25 17:39:32 +0200 + + Windows: Duplicate windows/vs2017 before upgrading + + windows/vs2019/config.h | 148 ++++++++++++++ + windows/vs2019/liblzma.vcxproj | 356 ++++++++++++++++++++++++++++++++++ + windows/vs2019/liblzma_dll.vcxproj | 385 +++++++++++++++++++++++++++++++++++++ + windows/vs2019/xz_win.sln | 48 +++++ + 4 files changed, 937 insertions(+) + +commit d0e58b3a51e8e616f3dc26ec7b7e4aa0fa6991ad +Author: Lasse Collin +Date: 2019-03-04 22:49:04 +0200 + + README: Update translation instructions. - This is incompatible with the 8.3 support patch made by - Juan Manuel Guerrero. I think this one is nicer, but - I need to get feedback from DOS users before saying - that this is the final version of 8.3 filename support. + XZ Utils is now part of the Translation Project + . - src/xz/suffix.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 167 insertions(+), 9 deletions(-) + README | 32 +++++++++++++------------------- + 1 file changed, 13 insertions(+), 19 deletions(-) -commit cd4fe97852bcaeffe674ee51b4613709292a0972 +commit a750c35a7d45a16c11c1d40fecee8443c32a9996 Author: Lasse Collin -Date: 2011-04-10 12:47:47 +0300 +Date: 2019-03-04 21:20:39 +0200 - xz/DOS: Be more careful with the destination file. + xz: Automatically align column headings in xz -lvv. + + src/xz/list.c | 263 ++++++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 212 insertions(+), 51 deletions(-) + +commit 6cb42e8aa1dc37bf403a9f5acbd07e86036b7e77 +Author: Lasse Collin +Date: 2019-03-04 01:07:59 +0200 + + xz: Automatically align strings ending in a colon in --list output. - Try to avoid overwriting the source file if --force is - used and the generated destination filename refers to - the source file. This can happen with 8.3 filenames where - extra characters are ignored. + This should avoid alignment errors in translations with these + strings. + + src/xz/list.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 102 insertions(+), 12 deletions(-) + +commit 1e3f29b62f2c03e50fc9ebea7b83c1497dd35484 +Author: Lasse Collin +Date: 2019-01-13 17:29:23 +0200 + + Windows/VS2017: Omit WindowsTargetPlatformVersion from project files. - If the generated output file refers to a special file - like "con" or "prn", refuse to write to it even if --force - is used. + I understood that if a WTPV is specified, it's often wrong + because different VS installations have different SDK version + installed. Omitting the WTPV tag makes VS2017 default to + Windows SDK 8.1 which often is also missing, so in any case + people may need to specify the WTPV before building. But some + day in the future a missing WTPV tag will start to default to + the latest installed SDK which sounds reasonable: + + https://developercommunity.visualstudio.com/content/problem/140294/windowstargetplatformversion-makes-it-impossible-t.html + + Thanks to "dom". - src/xz/file_io.c | 35 +++++++++++++++++++++++++++++++++-- - 1 file changed, 33 insertions(+), 2 deletions(-) + windows/INSTALL-MSVC.txt | 4 ++++ + windows/vs2017/liblzma.vcxproj | 1 - + windows/vs2017/liblzma_dll.vcxproj | 1 - + 3 files changed, 4 insertions(+), 2 deletions(-) -commit 607f9f98ae5ef6d49f4c21c806d462bf6b3d6796 +commit 4d86076332aece6314063d3712a5f364172bbb0f Author: Lasse Collin -Date: 2011-04-09 18:29:30 +0300 +Date: 2018-12-20 20:42:29 +0200 Update THANKS. THANKS | 1 + 1 file changed, 1 insertion(+) -commit fca396b37410d272b754843a5dc13847be443a3a +commit b55d79461d1f6aeaac03c7dae84481e5eb8bea4c Author: Lasse Collin -Date: 2011-04-09 18:28:58 +0300 +Date: 2018-12-14 20:34:30 +0200 - liblzma: Add missing #ifdefs to filter_common.c. + xz: Fix a crash in progress indicator when in passthru mode. - Passing --disable-decoders to configure broke a few - encoders due to missing #ifdefs in filter_common.c. + "xz -dcfv not_an_xz_file" crashed (all four options are + required to trigger it). It caused xz to call + lzma_get_progress(&strm, ...) when no coder was initialized + in strm. In this situation strm.internal is NULL which leads + to a crash in lzma_get_progress(). - Thanks to Jason Gorski for the patch. + The bug was introduced when xz started using lzma_get_progress() + to get progress info for multi-threaded compression, so the + bug is present in versions 5.1.3alpha and higher. + + Thanks to Filip Palian for + the bug report. - src/liblzma/common/filter_common.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + src/xz/coder.c | 11 +++++++---- + src/xz/message.c | 18 ++++++++++++++++-- + src/xz/message.h | 3 ++- + 3 files changed, 25 insertions(+), 7 deletions(-) -commit b03f6cd3ebadd675f2cc9d518cb26fa860269447 +commit 4ae5526de013efd1021686fa80bdd10cf1cb9c56 Author: Lasse Collin -Date: 2011-04-09 15:24:59 +0300 +Date: 2018-11-22 17:20:31 +0200 - xz: Avoid unneeded fstat() on DOS-like systems. + xz: Update man page timestamp. - src/xz/file_io.c | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) + src/xz/xz.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 335fe260a81f61ec99ff5940df733b4c50aedb7c +commit 6a36d0d5f49e0080ff64dd9ef250abd489bea2ad +Author: Pavel Raiskup +Date: 2018-11-22 15:14:34 +0100 + + 'have have' typos + + src/xz/signals.c | 2 +- + src/xz/xz.1 | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 9eca51ef805ed8002a851df1b4995d71826c8b6e Author: Lasse Collin -Date: 2011-04-09 15:11:13 +0300 +Date: 2018-11-02 20:40:48 +0200 - xz: Minor internal changes to handling of --threads. + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 106d1a663d4ba42b63231caa289f531548df81c1 +Author: Lasse Collin +Date: 2018-11-02 20:18:45 +0200 + + Tests: Add a fuzz test program and a config file for OSS-Fuzz. - Now it always defaults to one thread. Maybe this - will change again if a threading method is added - that doesn't affect memory usage. + Thanks to Bhargava Shastry and Github user pdknsk. - src/xz/args.c | 4 ++-- - src/xz/hardware.c | 24 ++++++++++++------------ - src/xz/hardware.h | 9 ++++----- - 3 files changed, 18 insertions(+), 19 deletions(-) + tests/Makefile.am | 1 + + tests/ossfuzz/Makefile | 7 ++++ + tests/ossfuzz/config/fuzz.dict | 2 + + tests/ossfuzz/config/fuzz.options | 2 + + tests/ossfuzz/fuzz.c | 82 +++++++++++++++++++++++++++++++++++++++ + 5 files changed, 94 insertions(+) -commit 9edd6ee895fbe71d245a173f48e511f154a99875 +commit a18ae42a79a19b1394b41eb3e238139fd28012ec Author: Lasse Collin -Date: 2011-04-08 17:53:05 +0300 +Date: 2018-10-26 22:49:10 +0300 - xz: Change size_t to uint32_t in a few places. + liblzma: Don't verify header CRC32s if building for fuzz testing. + + FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION is #defined when liblzma + is being built for fuzz testing. + + Most fuzzed inputs would normally get rejected because of incorrect + CRC32 and the actual header decoding code wouldn't get fuzzed. + Disabling CRC32 checks avoids this problem. The fuzzer program + must still use LZMA_IGNORE_CHECK flag to disable verification of + integrity checks of uncompressed data. - src/xz/coder.c | 6 +++--- - src/xz/coder.h | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) + src/liblzma/common/block_header_decoder.c | 5 ++++- + src/liblzma/common/index_decoder.c | 5 ++++- + src/liblzma/common/index_hash.c | 5 ++++- + src/liblzma/common/stream_flags_decoder.c | 10 ++++++++-- + 4 files changed, 20 insertions(+), 5 deletions(-) -commit 411013ea4506a6df24d35a060fcbd73a57b73eb3 +commit f76f7516d6a1c832f61810c82e92d151cc80966c Author: Lasse Collin -Date: 2011-04-08 17:48:41 +0300 +Date: 2018-07-27 18:10:44 +0300 - xz: Fix a typo in a comment. + xzless: Rename unused variables to silence static analysers. + + In this particular case I don't see this affecting readability + of the code. + + Thanks to Pavel Raiskup. - src/xz/coder.c | 2 +- + src/scripts/xzless.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit b34c5ce4b22e8d7b81f9895d15054af41d17f805 +commit 3cbcaeb07eb7543735befd6f507fdb5fa4363cff Author: Lasse Collin -Date: 2011-04-05 22:41:33 +0300 +Date: 2018-07-27 16:02:58 +0300 - liblzma: Use TUKLIB_GNUC_REQ to check GCC version in sha256.c. + liblzma: Remove an always-true condition from lzma_index_cat(). + + This should help static analysis tools to see that newg + isn't leaked. + + Thanks to Pavel Raiskup. - src/liblzma/check/sha256.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + src/liblzma/common/index.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -commit db33117cc85c17e0b897b5312bd5eb43aac41c03 +commit 76762ae6098ec55c326f4b4b4a42e8c1918ee81f Author: Lasse Collin -Date: 2011-04-05 17:12:20 +0300 +Date: 2018-05-19 21:23:25 +0300 - Build: Upgrade m4/acx_pthread.m4 to the latest version. - - It was renamed to ax_pthread.m4 in Autoconf Archive. + liblzma: Improve lzma_properties_decode() API documentation. - configure.ac | 2 +- - m4/{acx_pthread.m4 => ax_pthread.m4} | 170 ++++++++++++++++++----------------- - 2 files changed, 88 insertions(+), 84 deletions(-) + src/liblzma/api/lzma/filter.h | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) -commit 1039bfcfc098b69d56ecb39d198a092552eacf6d +commit 2267f5b0d20a5d24e93fcd9f72ea7eeb0d89708c Author: Lasse Collin -Date: 2011-04-05 15:27:26 +0300 +Date: 2018-04-29 18:58:19 +0300 - xz: Use posix_fadvise() if it is available. + Bump the version number to 5.3.1alpha. - configure.ac | 3 +++ - src/xz/file_io.c | 15 +++++++++++++++ - 2 files changed, 18 insertions(+) + src/liblzma/api/lzma/version.h | 2 +- + src/liblzma/liblzma.map | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit 1ef3cf44a8eb9512480af4482a5232ea08363b14 +commit cee3021d30704858e4bdd22240e7d28e570d7451 Author: Lasse Collin -Date: 2011-04-05 15:13:29 +0300 +Date: 2018-04-29 18:48:00 +0300 - xz: Call lzma_end(&strm) before exiting if debugging is enabled. + extra/scanlzma: Fix compiler warnings. - src/xz/coder.c | 10 ++++++++++ - src/xz/coder.h | 5 +++++ - src/xz/main.c | 4 ++++ - 3 files changed, 19 insertions(+) + extra/scanlzma/scanlzma.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) -commit bd432015d33dcade611d297bc01eb0700088ef6c +commit c5c7ceb08a011b97d261798033e2c39613a69eb7 Author: Lasse Collin -Date: 2011-04-02 14:49:56 +0300 +Date: 2018-04-29 18:44:47 +0300 - liblzma: Fix a memory leak in stream_encoder.c. + DOS: Add file_info.c to the list of files to build. + + dos/Makefile | 1 + + 1 file changed, 1 insertion(+) + +commit 114cab97af766b21e0fc8620479202fb1e7a5e41 +Author: Lasse Collin +Date: 2018-04-29 18:33:10 +0300 + + Update NEWS for 5.3.1alpha. + + NEWS | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit b8139e11c512bbf32bf58ab0689f9bb6c52819da +Author: Lasse Collin +Date: 2018-04-29 18:15:37 +0300 + + Add NEWS for 5.2.4. + + NEWS | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit 47b59d47cfd904a420fbd45629d168ca1973721d +Author: Lasse Collin +Date: 2018-02-06 19:36:30 +0200 + + Update THANKS. + + THANKS | 2 ++ + 1 file changed, 2 insertions(+) + +commit bc197991690ede24ab143665b5b0f0f9cb35cc46 +Author: Ben Boeckel +Date: 2018-01-29 13:58:18 -0500 + + nothrow: use noexcept for C++11 and newer - It leaks old filter options structures (hundred bytes or so) - every time the lzma_stream is reinitialized. With the xz tool, - this happens when compressing multiple files. + In C++11, the `throw()` specifier is deprecated and `noexcept` is + preffered instead. - src/liblzma/common/stream_encoder.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/liblzma/api/lzma.h | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) -commit 16889013214e7620d204b6e6c1bf9f3103a13655 +commit fb6d4f83cb6e144734f2a4216bb117bd56dc3cb5 Author: Lasse Collin -Date: 2011-04-01 08:47:20 +0300 +Date: 2018-02-06 18:02:48 +0200 - Updated NEWS for 5.0.2. + liblzma: Remove incorrect #ifdef from range_common.h. + + In most cases it was harmless but it could affect some + custom build systems. + + Thanks to Pippijn van Steenhoven. - NEWS | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) + src/liblzma/rangecoder/range_common.h | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) -commit 85cdf7dd4e97b078e7b929e47f55a7f1da36010f +commit bc577d35c2d0ed17f554d2d8107b2a2a9abbac76 Author: Lasse Collin -Date: 2011-03-31 15:06:58 +0300 +Date: 2018-01-10 22:10:39 +0200 - Update INSTALL with another note about IRIX. + Update THANKS. - INSTALL | 4 ++++ - 1 file changed, 4 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit c3f4995586873d6a4fb7e451010a128571a9a370 +commit 713bbc1a80f26d34c96ed3dbb9887362204de3a1 Author: Lasse Collin -Date: 2011-03-31 12:22:55 +0300 +Date: 2018-01-10 21:54:27 +0200 - Tests: Add a new file to test empty LZMA2 streams. + tuklib_integer: New Intel C compiler needs immintrin.h. + + Thanks to Melanie Blower (Intel) for the patch. - tests/files/README | 4 ++++ - tests/files/good-1-lzma2-5.xz | Bin 0 -> 52 bytes + src/common/tuklib_integer.h | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit a0ee1afbd99da138b559cb27fa2022e7f1ab44f3 +Author: Lasse Collin +Date: 2017-09-24 20:04:24 +0300 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit a1e2c568de29c0b57d873eab40a2879b749da429 +Author: Lasse Collin +Date: 2017-09-16 20:36:20 +0300 + + Windows: Fix paths in VS project files. + + Some paths use slashes instead of backslashes as directory + separators... now it should work (I tested VS2013 version). + + windows/vs2013/liblzma.vcxproj | 12 ++++++------ + windows/vs2013/liblzma_dll.vcxproj | 24 ++++++++++++------------ + windows/vs2017/liblzma.vcxproj | 12 ++++++------ + windows/vs2017/liblzma_dll.vcxproj | 24 ++++++++++++------------ + 4 files changed, 36 insertions(+), 36 deletions(-) + +commit cea5cf8d26c9d1dc30a808614d79c0b25640e15e +Author: Lasse Collin +Date: 2017-09-16 12:56:20 +0300 + + Windows: Update VS2017 project files to include file info decoder. + + windows/vs2017/liblzma.vcxproj | 2 ++ + windows/vs2017/liblzma_dll.vcxproj | 2 ++ 2 files changed, 4 insertions(+) -commit 0d21f49a809dc2088da6cc0da7f948404df7ecfa +commit 95d563db3ee497b223e522b699c4d4c29943eef0 Author: Lasse Collin -Date: 2011-03-31 11:54:48 +0300 +Date: 2017-09-16 12:54:23 +0300 - liblzma: Fix decoding of LZMA2 streams having no uncompressed data. + Windows: Add project files for VS2017. - The decoder considered empty LZMA2 streams to be corrupt. - This shouldn't matter much with .xz files, because no encoder - creates empty LZMA2 streams in .xz. This bug is more likely - to cause problems in applications that use raw LZMA2 streams. - - src/liblzma/lzma/lzma2_decoder.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + These files match the v5.2 branch (no file info decoder). -commit 40277998cb9bad564ce4827aff152e6e1c904dfa + windows/vs2017/config.h | 148 ++++++++++++++ + windows/vs2017/liblzma.vcxproj | 355 ++++++++++++++++++++++++++++++++++ + windows/vs2017/liblzma_dll.vcxproj | 384 +++++++++++++++++++++++++++++++++++++ + windows/vs2017/xz_win.sln | 48 +++++ + 4 files changed, 935 insertions(+) + +commit ab72416d62ea8f50ad31d5b8545fcb6a2bf96b73 Author: Lasse Collin -Date: 2011-03-24 01:42:49 +0200 +Date: 2017-09-16 12:45:50 +0300 - Scripts: Better fix for xzgrep. + Windows: Update VS2013 project files to include file info decoder. + + windows/vs2013/liblzma.vcxproj | 2 ++ + windows/vs2013/liblzma_dll.vcxproj | 2 ++ + 2 files changed, 4 insertions(+) + +commit 82388980187b0e3794d187762054200bbdcc9a53 +Author: Lasse Collin +Date: 2017-09-16 12:39:43 +0300 + + Windows: Move VS2013 files into windows/vs2013 directory. + + windows/{ => vs2013}/config.h | 0 + windows/{ => vs2013}/liblzma.vcxproj | 278 +++++++++++++++--------------- + windows/{ => vs2013}/liblzma_dll.vcxproj | 280 +++++++++++++++---------------- + windows/{ => vs2013}/xz_win.sln | 0 + 4 files changed, 279 insertions(+), 279 deletions(-) + +commit 94e3f986aa4e14b4ff01ac24857f499630d6d180 +Author: Lasse Collin +Date: 2017-08-14 20:08:33 +0300 + + Fix or hide warnings from GCC 7's -Wimplicit-fallthrough. + + src/liblzma/lzma/lzma_decoder.c | 6 ++++++ + src/xz/list.c | 2 ++ + 2 files changed, 8 insertions(+) + +commit 0b0e1e6803456aac641a59332200f8e95e2b7ea8 +Author: Alexey Tourbin +Date: 2017-05-16 23:56:35 +0300 + + Docs: Fix a typo in a comment in doc/examples/02_decompress.c. + + doc/examples/02_decompress.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a015cd1f90116e655be4eaf4aad42c4c911c2807 +Author: Lasse Collin +Date: 2017-05-23 18:34:43 +0300 + + xz: Fix "xz --list --robot missing_or_bad_file.xz". - Now it uses "grep -q". + It ended up printing an uninitialized char-array when trying to + print the check names (column 7) on the "totals" line. - Thanks to Gregory Margo. - - src/scripts/xzgrep.in | 8 ++++++-- + This also changes the column 12 (minimum xz version) to + 50000002 (xz 5.0.0) instead of 0 when there are no valid + input files. + + Thanks to kidmin for the bug report. + + src/xz/list.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) - -commit 2118733045ad0ca183a3f181a0399baf876983a6 + +commit c2e29f06a7d1e3ba242ac2fafc69f5d6e92f62cd Author: Lasse Collin -Date: 2011-03-24 01:22:18 +0200 - - Updated THANKS. +Date: 2017-04-24 20:20:11 +0300 + Docs: Add doc/examples/11_file_info.c. + + doc/examples/11_file_info.c | 206 ++++++++++++++++++++++++++++++++++++++++++++ + doc/examples/Makefile | 3 +- + 2 files changed, 208 insertions(+), 1 deletion(-) + +commit 1520f6ec808896375ac7bf778c449e0f7dea5f46 +Author: Lasse Collin +Date: 2017-04-24 19:48:47 +0300 + + Build: Omit pre-5.0.0 entries from the generated ChangeLog. + + It makes ChangeLog significantly smaller. + + Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8269782283806c90a8509c2ac2a308344f70e171 +Author: Lasse Collin +Date: 2017-04-24 19:48:23 +0300 + + xz: Use lzma_file_info_decoder() for --list. + + src/xz/list.c | 254 ++++++++++------------------------------------------------ + 1 file changed, 44 insertions(+), 210 deletions(-) + +commit e353d0b1cc0d3997ae5048faa8e6786414953e06 +Author: Lasse Collin +Date: 2017-04-24 19:35:50 +0300 + + liblzma: Add lzma_file_info_decoder(). + + src/liblzma/api/lzma/index.h | 66 ++++ + src/liblzma/common/Makefile.inc | 1 + + src/liblzma/common/file_info.c | 855 ++++++++++++++++++++++++++++++++++++++++ + src/liblzma/liblzma.map | 7 +- + 4 files changed, 928 insertions(+), 1 deletion(-) + +commit 144ef9e19e9496c995b21505dd1e111c442968d1 +Author: Lasse Collin +Date: 2017-04-24 19:30:22 +0300 + + Update the Git repository URL to HTTPS in ChangeLog. + + ChangeLog | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8c9842c265993d7dd4039f732d3546267fb5ecc4 +Author: Lasse Collin +Date: 2017-04-21 15:05:16 +0300 + + liblzma: Rename LZMA_SEEK to LZMA_SEEK_NEEDED and seek_in to seek_pos. + + src/liblzma/api/lzma/base.h | 18 +++++++++--------- + src/liblzma/common/common.c | 2 +- + src/xz/message.c | 2 +- + 3 files changed, 11 insertions(+), 11 deletions(-) + +commit 662b27c417cab248cb365dd7682121bdec4d5ae7 +Author: Lasse Collin +Date: 2017-04-19 22:17:35 +0300 + + Update the home page URLs to HTTPS. + + COPYING | 2 +- + README | 2 +- + configure.ac | 2 +- + doc/faq.txt | 4 ++-- + dos/config.h | 2 +- + src/common/common_w32res.rc | 2 +- + src/xz/xz.1 | 6 +++--- + src/xzdec/xzdec.1 | 4 ++-- + windows/README-Windows.txt | 2 +- + windows/config.h | 2 +- + 10 files changed, 14 insertions(+), 14 deletions(-) + +commit c28f0b3d00af87b92dda229831548d8eb0067d1d +Author: Lasse Collin +Date: 2017-04-05 18:47:22 +0300 + + xz: Add io_seek_src(). + + src/xz/file_io.c | 20 +++++++++++++++++--- + src/xz/file_io.h | 13 +++++++++++++ + 2 files changed, 30 insertions(+), 3 deletions(-) + +commit bba477257d7319c8764890f3669175b866d24944 +Author: Lasse Collin +Date: 2017-03-30 22:01:54 +0300 + + xz: Use POSIX_FADV_RANDOM for in "xz --list" mode. + + xz --list is random access so POSIX_FADV_SEQUENTIAL was clearly + wrong. + + src/xz/file_io.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit 310d19816d1652b0c8bb1b82574d46345d924752 +Author: Lasse Collin +Date: 2017-03-30 20:03:05 +0300 + + liblzma: Make lzma_index_decoder_init() visible to other liblzma funcs. + + This is to allow other functions to use it without going + via the public API (lzma_index_decoder()). + + src/liblzma/common/Makefile.inc | 1 + + src/liblzma/common/index_decoder.c | 10 +++++----- + src/liblzma/common/index_decoder.h | 24 ++++++++++++++++++++++++ + 3 files changed, 30 insertions(+), 5 deletions(-) + +commit a27920002dbc469f778a134fc665b7c3ea73701b +Author: Lasse Collin +Date: 2017-03-30 20:00:09 +0300 + + liblzma: Add generic support for input seeking (LZMA_SEEK). + + Also mention LZMA_SEEK in xz/message.c to silence a warning. + + src/liblzma/api/lzma/base.h | 31 ++++++++++++++++++++++++++++++- + src/liblzma/common/common.c | 12 +++++++++++- + src/xz/message.c | 1 + + 3 files changed, 42 insertions(+), 2 deletions(-) + +commit a0b1dda409bc3e6e2957a2651663fc411d2caf2d +Author: Lasse Collin +Date: 2017-03-30 19:47:45 +0300 + + liblzma: Fix lzma_memlimit_set(strm, 0). + + The 0 got treated specially in a buggy way and as a result + the function did nothing. The API doc said that 0 was supposed + to return LZMA_PROG_ERROR but it didn't. + + Now 0 is treated as if 1 had been specified. This is done because + 0 is already used to indicate an error from lzma_memlimit_get() + and lzma_memusage(). + + In addition, lzma_memlimit_set() no longer checks that the new + limit is at least LZMA_MEMUSAGE_BASE. It's counter-productive + for the Index decoder and was actually needed only by the + auto decoder. Auto decoder has now been modified to check for + LZMA_MEMUSAGE_BASE. + + src/liblzma/api/lzma/base.h | 7 ++++++- + src/liblzma/common/auto_decoder.c | 3 +++ + src/liblzma/common/common.c | 6 ++++-- + 3 files changed, 13 insertions(+), 3 deletions(-) + +commit 84462afaada61379f5878e46f8f00e25a1cdcf29 +Author: Lasse Collin +Date: 2017-03-30 19:16:55 +0300 + + liblzma: Similar memlimit fix for stream_, alone_, and auto_decoder. + + src/liblzma/api/lzma/container.h | 21 +++++++++++++++++---- + src/liblzma/common/alone_decoder.c | 5 +---- + src/liblzma/common/auto_decoder.c | 5 +---- + src/liblzma/common/stream_decoder.c | 5 +---- + 4 files changed, 20 insertions(+), 16 deletions(-) + +commit cbc74017939690d13441b8926bb743fb03211b83 +Author: Lasse Collin +Date: 2017-03-30 18:58:18 +0300 + + liblzma: Fix handling of memlimit == 0 in lzma_index_decoder(). + + It returned LZMA_PROG_ERROR, which was done to avoid zero as + the limit (because it's a special value elsewhere), but using + LZMA_PROG_ERROR is simply inconvenient and can cause bugs. + + The fix/workaround is to treat 0 as if it were 1 byte. It's + effectively the same thing. The only weird consequence is + that then lzma_memlimit_get() will return 1 even when 0 was + specified as the limit. + + This fixes a very rare corner case in xz --list where a specific + memory usage limit and a multi-stream file could print the + error message "Internal error (bug)" instead of saying that + the memory usage limit is too low. + + src/liblzma/api/lzma/index.h | 18 +++++++++++------- + src/liblzma/common/index_decoder.c | 4 ++-- + 2 files changed, 13 insertions(+), 9 deletions(-) + +commit 78ae13bced912b1b92ae927992c99cbcc463cae7 +Author: Lasse Collin +Date: 2016-12-30 13:25:10 +0200 + + Update NEWS for 5.2.3. + + NEWS | 39 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +commit 0297863fdb453aed1a25eb025f3ba7bacbbb1357 +Author: Lasse Collin +Date: 2016-12-26 20:55:52 +0200 + + Document --enable-sandbox configure option in INSTALL. + + INSTALL | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit d4a0462abe5478193521c14625e1c81fead87f9f +Author: Lasse Collin +Date: 2016-11-21 20:24:50 +0200 + + liblzma: Avoid multiple definitions of lzma_coder structures. + + Only one definition was visible in a translation unit. + It avoided a few casts and temp variables but seems that + this hack doesn't work with link-time optimizations in compilers + as it's not C99/C11 compliant. + + Fixes: + http://www.mail-archive.com/xz-devel@tukaani.org/msg00279.html + + src/liblzma/common/alone_decoder.c | 44 +++++---- + src/liblzma/common/alone_encoder.c | 34 ++++--- + src/liblzma/common/auto_decoder.c | 35 ++++--- + src/liblzma/common/block_decoder.c | 41 ++++---- + src/liblzma/common/block_encoder.c | 40 ++++---- + src/liblzma/common/common.h | 18 ++-- + src/liblzma/common/index_decoder.c | 33 ++++--- + src/liblzma/common/index_encoder.c | 16 ++-- + src/liblzma/common/stream_decoder.c | 50 +++++----- + src/liblzma/common/stream_encoder.c | 56 ++++++----- + src/liblzma/common/stream_encoder_mt.c | 124 ++++++++++++++----------- + src/liblzma/delta/delta_common.c | 25 ++--- + src/liblzma/delta/delta_decoder.c | 6 +- + src/liblzma/delta/delta_encoder.c | 12 ++- + src/liblzma/delta/delta_private.h | 4 +- + src/liblzma/lz/lz_decoder.c | 60 ++++++------ + src/liblzma/lz/lz_decoder.h | 13 ++- + src/liblzma/lz/lz_encoder.c | 57 +++++++----- + src/liblzma/lz/lz_encoder.h | 9 +- + src/liblzma/lzma/lzma2_decoder.c | 32 ++++--- + src/liblzma/lzma/lzma2_encoder.c | 51 +++++----- + src/liblzma/lzma/lzma_decoder.c | 27 +++--- + src/liblzma/lzma/lzma_encoder.c | 29 +++--- + src/liblzma/lzma/lzma_encoder.h | 9 +- + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 3 +- + src/liblzma/lzma/lzma_encoder_optimum_normal.c | 23 ++--- + src/liblzma/lzma/lzma_encoder_private.h | 6 +- + src/liblzma/simple/arm.c | 2 +- + src/liblzma/simple/armthumb.c | 2 +- + src/liblzma/simple/ia64.c | 2 +- + src/liblzma/simple/powerpc.c | 2 +- + src/liblzma/simple/simple_coder.c | 61 ++++++------ + src/liblzma/simple/simple_private.h | 12 +-- + src/liblzma/simple/sparc.c | 2 +- + src/liblzma/simple/x86.c | 15 +-- + 35 files changed, 532 insertions(+), 423 deletions(-) + +commit a01794c52add98263b49119842c3e7141d1b9ced +Author: Lasse Collin +Date: 2016-10-24 18:53:25 +0300 + + Update THANKS. + THANKS | 1 + 1 file changed, 1 insertion(+) -commit c7210d9a3fca6f31a57208bfddfc9ab20a2e097a +commit df8f446e3ad47e5148b8c8d8b6e519d3ce29cb9d Author: Lasse Collin -Date: 2011-03-24 01:21:32 +0200 +Date: 2016-10-24 18:51:36 +0300 - Scripts: Fix xzgrep -l. + tuklib_cpucores: Add support for sched_getaffinity(). - It didn't work at all. It tried to use the -q option - for grep, but it appended it after "--". This works - around it by redirecting to /dev/null. The downside - is that this can be slower with big files compared - to proper use of "grep -q". + It's available in glibc (GNU/Linux, GNU/kFreeBSD). It's better + than sysconf(_SC_NPROCESSORS_ONLN) because sched_getaffinity() + gives the number of cores available to the process instead of + the total number of cores online. - Thanks to Gregory Margo. - - src/scripts/xzgrep.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -commit 4eb83e32046a6d670862bc91c3d82530963b455e -Author: Lasse Collin -Date: 2011-03-19 13:08:22 +0200 - - Scripts: Add lzop (.lzo) support to xzdiff and xzgrep. + As a side effect, this commit fixes a bug on GNU/kFreeBSD where + configure would detect the FreeBSD-specific cpuset_getaffinity() + but it wouldn't actually work because on GNU/kFreeBSD it requires + using -lfreebsd-glue when linking. Now the glibc-specific function + will be used instead. + + Thanks to Sebastian Andrzej Siewior for the original patch + and testing. - src/scripts/xzdiff.1 | 6 ++++-- - src/scripts/xzdiff.in | 22 ++++++++++++++-------- - src/scripts/xzgrep.1 | 11 +++++++---- - src/scripts/xzgrep.in | 5 +++-- - 4 files changed, 28 insertions(+), 16 deletions(-) + m4/tuklib_cpucores.m4 | 30 +++++++++++++++++++++++++++++- + src/common/tuklib_cpucores.c | 9 +++++++++ + 2 files changed, 38 insertions(+), 1 deletion(-) -commit 923b22483bd9356f3219b2b784d96f455f4dc499 +commit 446e4318fa79788e09299d5953b5dd428953d14b Author: Lasse Collin -Date: 2011-03-18 19:10:30 +0200 +Date: 2016-06-30 20:27:36 +0300 - xz: Add --block-size=SIZE. + xz: Fix copying of timestamps on Windows. - This uses LZMA_FULL_FLUSH every SIZE bytes of input. + xz used to call utime() on Windows, but its result gets lost + on close(). Using _futime() seems to work. - Man page wasn't updated yet. - - src/xz/args.c | 7 +++++++ - src/xz/coder.c | 50 ++++++++++++++++++++++++++++++++++++++++---------- - src/xz/coder.h | 3 +++ - src/xz/message.c | 4 ++++ - 4 files changed, 54 insertions(+), 10 deletions(-) - -commit 57597d42ca1740ad506437be168d800a50f1a0ad + Thanks to Martok for reporting the bug: + http://www.mail-archive.com/xz-devel@tukaani.org/msg00261.html + + configure.ac | 2 +- + src/xz/file_io.c | 18 ++++++++++++++++++ + 2 files changed, 19 insertions(+), 1 deletion(-) + +commit 1b0ac0c53c761263e91e34195cb21dfdcfeac0bd Author: Lasse Collin -Date: 2011-03-18 18:19:19 +0200 - - xz: Add --single-stream. +Date: 2016-06-16 22:46:02 +0300 + + xz: Silence warnings from -Wlogical-op. - This can be useful when there is garbage after the - compressed stream (.xz, .lzma, or raw stream). + Thanks to Evan Nemerson. + + src/xz/file_io.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit c83b7a03342c3325ff10400b22ee21edfcd1e026 +Author: Lasse Collin +Date: 2016-04-10 20:55:49 +0300 + + Build: Fix = to += for xz_SOURCES in src/xz/Makefile.am. - Man page wasn't updated yet. - - src/xz/args.c | 6 ++++++ - src/xz/coder.c | 11 +++++++++-- - src/xz/coder.h | 3 +++ - src/xz/message.c | 6 +++++- - 4 files changed, 23 insertions(+), 3 deletions(-) - -commit 96f94bc925d579a700147fa5d7793b64d69cfc18 + Thanks to Christian Kujau. + + src/xz/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ade31a2bfb95c94d05fbfc0ecbba5d6377f2506e Author: Lasse Collin -Date: 2011-02-04 22:49:31 +0200 - - xz: Clean up suffix.c. +Date: 2016-04-10 20:54:17 +0300 + + Build: Bump GNU Gettext version requirement to 0.19. - struct suffix_pair isn't needed in compresed_name() - so get rid of it there. - - src/xz/suffix.c | 44 ++++++++++++++++++++------------------------ - 1 file changed, 20 insertions(+), 24 deletions(-) - -commit 8930c7ae3f82bdae15aa129f01de08be23d7e8d7 + It silences a few warnings and most people probably have + 0.19 even on stable distributions. + + Thanks to Christian Kujau. + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ac398c3bafa6e4c80e20571373a96947db863b3d Author: Lasse Collin -Date: 2011-02-04 11:29:47 +0200 - - xz: Check if the file already has custom suffix when compressing. +Date: 2016-03-13 20:21:49 +0200 + + liblzma: Disable external SHA-256 by default. - Now "xz -S .test foo.test" refuses to compress the - file because it already has the suffix .test. The man - page had it documented this way already. - - src/xz/suffix.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -commit 940d5852c6cf08abccc6befd9d1b5411c9076a58 + This is the sane thing to do. The conflict with OpenSSL + on some OSes and especially that the OS-provided versions + can be significantly slower makes it clear that it was + a mistake to have the external SHA-256 support enabled by + default. + + Those who want it can now pass --enable-external-sha256 to + configure. INSTALL was updated with notes about OSes where + this can be a bad idea. + + The SHA-256 detection code in configure.ac had some bugs that + could lead to a build failure in some situations. These were + fixed, although it doesn't matter that much now that the + external SHA-256 is disabled by default. + + MINIX >= 3.2.0 uses NetBSD's libc and thus has SHA256_Init + in libc instead of libutil. Support for the libutil version + was removed. + + INSTALL | 36 ++++++++++++++++++++++ + configure.ac | 76 +++++++++++++++++++++++------------------------ + src/liblzma/check/check.h | 16 ++++------ + 3 files changed, 79 insertions(+), 49 deletions(-) + +commit 6fd5ecb589a9fdd7a576ea48c4850d496bab9ce5 Author: Lasse Collin -Date: 2011-02-02 23:01:51 +0200 - - Updated THANKS. +Date: 2016-03-10 20:27:05 +0200 + Update THANKS. + THANKS | 1 + 1 file changed, 1 insertion(+) -commit 4ebe65f839613f27f127bab7b8c347d982330ee3 +commit 473ef0dc69a30e64d5fa0d34aca02f7309faa3e9 Author: Lasse Collin -Date: 2011-02-02 23:00:33 +0200 +Date: 2016-03-10 20:26:49 +0200 - Translations: Add Polish translation. + Build: Avoid SHA256_Init on FreeBSD and MINIX 3. - Thanks to Jakub Bogusz. - - po/LINGUAS | 1 + - po/pl.po | 825 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 826 insertions(+) + On FreeBSD 10 and older, SHA256_Init from libmd conflicts + with libcrypto from OpenSSL. The OpenSSL version has + different sizeof(SHA256_CTX) and it can cause weird + problems if wrong SHA256_Init gets used. + + Looking at the source, MINIX 3 seems to have a similar issue but + I'm not sure. To be safe, I disabled SHA256_Init on MINIX 3 too. + + NetBSD has SHA256_Init in libc and they had a similar problem, + but they already fixed it in 2009. + + Thanks to Jim Wilcoxson for the bug report that helped + in finding the problem. -commit fc1d292dca1925dfd17174f443f91a696ecd5bf8 + configure.ac | 27 +++++++++++++++++++++------ + 1 file changed, 21 insertions(+), 6 deletions(-) + +commit faf302137e54d605b44ecf0373cb51a6403a2de1 Author: Lasse Collin -Date: 2011-02-02 22:24:00 +0200 +Date: 2015-11-08 20:16:10 +0200 - Updated THANKS. + tuklib_physmem: Hopefully silence a warning on Windows. + src/common/tuklib_physmem.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit e52e9151cf8613022d1de4712ff39dbcb666e991 +Author: Lasse Collin +Date: 2015-11-04 23:17:43 +0200 + + Update THANKS. + THANKS | 1 + 1 file changed, 1 insertion(+) -commit 6dd061adfd2775428b079eb03d6fd47d7c0f1ffe -Merge: 9d542ce 5fbce0b +commit 14115f84a38161d55eaa2d070f08739bde37e966 Author: Lasse Collin -Date: 2011-02-06 20:13:01 +0200 +Date: 2015-11-04 23:14:00 +0200 - Merge commit '5fbce0b8d96dc96775aa0215e3581addc830e23d' + liblzma: Make Valgrind happier with optimized (gcc -O2) liblzma. + + When optimizing, GCC can reorder code so that an uninitialized + value gets used in a comparison, which makes Valgrind unhappy. + It doesn't happen when compiled with -O0, which I tend to use + when running Valgrind. + + Thanks to Rich Prohaska. I remember this being mentioned long + ago by someone else but nothing was done back then. -commit 5fbce0b8d96dc96775aa0215e3581addc830e23d + src/liblzma/lz/lz_encoder.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit f4c95ba94beb71a608eb6eadbf82b44f53a0260e Author: Lasse Collin -Date: 2011-01-28 20:16:57 +0200 +Date: 2015-11-03 20:55:45 +0200 - Update NEWS for 5.0.1. + liblzma: Rename lzma_presets.c back to lzma_encoder_presets.c. + + It would be too annoying to update other build systems + just because of this. - NEWS | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) + src/liblzma/lzma/Makefile.inc | 2 +- + src/liblzma/lzma/{lzma_presets.c => lzma_encoder_presets.c} | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -commit 03ebd1bbb314f9f204940219a835c883bf442475 +commit c7bc20a6f3e71920871d48db31a79ab58b5a0a4b Author: Lasse Collin -Date: 2011-01-26 12:19:08 +0200 +Date: 2015-11-03 20:47:07 +0200 - xz: Fix --force on setuid/setgid/sticky and multi-hardlink files. + Build: Disable xzdec, lzmadec, and lzmainfo when they cannot be built. - xz didn't compress setuid/setgid/sticky files and files - with multiple hard links even with --force. This bug was - introduced in 23ac2c44c3ac76994825adb7f9a8f719f78b5ee4. + They all need decoder support and if that isn't available, + there's no point trying to build them. + + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +commit 5cbca1205deeb6fb7afe7a864fa68a57466d928a +Author: Lasse Collin +Date: 2015-11-03 20:35:19 +0200 + + Build: Simplify $enable_{encoders,decoders} usage a bit. + + configure.ac | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit af13781886c8e7a0aabebb5141ea282dc364f5c6 +Author: Lasse Collin +Date: 2015-11-03 20:31:31 +0200 + + Windows/MSVC: Update config.h. + + windows/config.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 9fa5949330f162c5a2f6653f83025327837e8f39 +Author: Lasse Collin +Date: 2015-11-03 20:29:58 +0200 + + DOS: Update config.h. + + dos/config.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit cb3111e3ed84152912b5138d690c8d9f00c6ef02 +Author: Lasse Collin +Date: 2015-11-03 20:29:33 +0200 + + xz: Make xz buildable even when encoders or decoders are disabled. - Thanks to Charles Wilson. - - src/xz/file_io.c | 15 +++++++-------- - 1 file changed, 7 insertions(+), 8 deletions(-) - -commit 9d542ceebcbe40b174169c132ccfcdc720ca7089 -Merge: 4f2c69a 7bd0a5e + The patch is quite long but it's mostly about adding new #ifdefs + to omit code when encoders or decoders have been disabled. + + This adds two new #defines to config.h: HAVE_ENCODERS and + HAVE_DECODERS. + + configure.ac | 4 ++++ + src/xz/Makefile.am | 8 ++++++-- + src/xz/args.c | 16 ++++++++++++++++ + src/xz/coder.c | 33 +++++++++++++++++++++++++-------- + src/xz/main.c | 9 +++++++-- + src/xz/private.h | 5 ++++- + 6 files changed, 62 insertions(+), 13 deletions(-) + +commit 4cc584985c0b7a13901da1b7a64ef9f7cc36e8ab Author: Lasse Collin -Date: 2011-01-19 11:45:35 +0200 - - Merge branch 'v5.0' +Date: 2015-11-03 18:06:40 +0200 -commit 7bd0a5e7ccc354f7c2e95c8bc27569c820f6a136 + Build: Build LZMA1/2 presets also when only decoder is wanted. + + People shouldn't rely on the presets when decoding raw streams, + but xz uses the presets as the starting point for raw decoder + options anyway. + + lzma_encocder_presets.c was renamed to lzma_presets.c to + make it clear it's not used solely by the encoder code. + + src/liblzma/lzma/Makefile.inc | 6 +++++- + src/liblzma/lzma/{lzma_encoder_presets.c => lzma_presets.c} | 3 ++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 23ed1d41489f632155bbc9660f323d57e09da180 Author: Lasse Collin -Date: 2011-01-18 21:25:24 +0200 +Date: 2015-11-03 17:54:48 +0200 - Updated THANKS. + Build: Fix configure to handle LZMA1 dependency with LZMA2. + + Now it gives an error if LZMA1 encoder/decoder is missing + when LZMA2 encoder/decoder was requested. Even better would + be LZMA2 implicitly enabling LZMA1 but it would need more code. + configure.ac | 5 ----- + 1 file changed, 5 deletions(-) + +commit b0bc3e03852af13419ea2960881824258d451117 +Author: Lasse Collin +Date: 2015-11-03 17:41:54 +0200 + + Build: Don't omit lzma_cputhreads() unless using --disable-threads. + + Previously it was omitted if encoders were disabled + with --disable-encoders. It didn't make sense and + it also broke the build. + + src/liblzma/common/Makefile.inc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit c6bf438ab39e0fb4a47d3c81725c227919502726 +Author: Lasse Collin +Date: 2015-11-02 18:16:51 +0200 + + liblzma: Fix a build failure related to external SHA-256 support. + + If an appropriate header and structure were found by configure, + but a library with a usable SHA-256 functions wasn't, the build + failed. + + src/liblzma/check/check.h | 32 +++++++++++++++++++++++--------- + 1 file changed, 23 insertions(+), 9 deletions(-) + +commit e18adc56f2262aa9394d46681e9e4b9981ed5e97 +Author: Lasse Collin +Date: 2015-11-02 15:19:10 +0200 + + xz: Always close the file before trying to delete it. + + unlink() can return EBUSY in errno for open files on some + operating systems and file systems. + + src/xz/file_io.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +commit 282e768a1484e88c8b7ec35655ee4959954ec87a +Author: Lasse Collin +Date: 2015-10-12 21:08:42 +0300 + + Update THANKS. + THANKS | 1 + 1 file changed, 1 insertion(+) -commit f71c4e16e913f660977526f0ef8d2acdf458d7c9 +commit 372e402713a1d4337ffce5f56d5c5c9ed99a66d0 Author: Lasse Collin -Date: 2011-01-18 21:23:50 +0200 +Date: 2015-10-12 21:07:41 +0300 - Add alloc_size and malloc attributes to a few functions. + Tests: Add tests for the two bugs fixed in index.c. + + tests/test_index.c | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +commit 21515d79d778b8730a434f151b07202d52a04611 +Author: Lasse Collin +Date: 2015-10-12 20:45:15 +0300 + + liblzma: Fix lzma_index_dup() for empty Streams. - Thanks to Cristian Rodríguez for the original patch. - - src/common/sysdefs.h | 6 ++++++ - src/liblzma/common/common.h | 2 +- - src/xz/util.h | 5 +++-- - 3 files changed, 10 insertions(+), 3 deletions(-) - -commit 316cbe24465143edde8f6ffb7532834b7b2ea93f + Stream Flags and Stream Padding weren't copied from + empty Streams. + + src/liblzma/common/index.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 09f395b6b360c0b13e8559eece1d179b908ebd3a Author: Lasse Collin -Date: 2010-12-13 16:36:33 +0200 - - Scripts: Fix gzip and bzip2 support in xzdiff. +Date: 2015-10-12 20:31:44 +0300 - src/scripts/xzdiff.in | 12 ++++++------ + liblzma: Add a note to index.c for those using static analyzers. + + src/liblzma/common/index.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 3bf857edfef51374f6f3fffae3d817f57d3264a0 +Author: Lasse Collin +Date: 2015-10-12 20:29:09 +0300 + + liblzma: Fix a memory leak in error path of lzma_index_dup(). + + lzma_index_dup() calls index_dup_stream() which, in case of + an error, calls index_stream_end() to free memory allocated + by index_stream_init(). However, it illogically didn't + actually free the memory. To make it logical, the tree + handling code was modified a bit in addition to changing + index_stream_end(). + + Thanks to Evan Nemerson for the bug report. + + src/liblzma/common/index.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 7f05803979b4b79642d5be4218a79da7a0b12c47 +Author: Lasse Collin +Date: 2015-09-29 13:57:28 +0300 + + Update NEWS for 5.2.2. + + NEWS | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit 397fcc0946315b55c3c6d80e37e82a2a78bc15c1 +Author: Hauke Henningsen +Date: 2015-08-17 04:59:54 +0200 + + Update German translation, mostly wrt orthography + + Provide an update of the German translation. + * A lot of compound words were previously written with spaces, while + German orthography is relatively clear in that the components + should not be separated. + * When referring to the actual process of (de)compression rather than the + concept, replace “(De-)Kompression” with “(De-)Komprimierung”. + Previously, both forms were used in this context and are now used in a + manner consistent with “Komprimierung” being more likely to refer to + a process. + * Consistently translate “standard input”/“output” + * Use “Zeichen” instead of false friend “Charakter” for “character” + * Insert commas around relative clauses (as required in German) + * Some other minor corrections + * Capitalize “ß” as “ẞ” + * Consistently start option descriptions in --help with capital letters + + Acked-By: Andre Noll + + * Update after msgmerge + + po/de.po | 383 ++++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 196 insertions(+), 187 deletions(-) + +commit cbc9e39bae715accb44168930a71888480aad569 +Author: Lasse Collin +Date: 2015-08-11 13:23:04 +0300 + + Build: Minor Cygwin cleanup. + + Some tests used "cygwin*" and some used "cygwin". I changed + them all to use "cygwin". Shouldn't affect anything in practice. + + configure.ac | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit bcacd8ce7a031566858e5e03c1009064c3f1c89e +Author: Lasse Collin +Date: 2015-08-11 13:21:52 +0300 + + Build: Support building of MSYS2 binaries. + + configure.ac | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +commit 0275a5398c01d57b724dec7fea52dec3bd6edc6c +Author: Lasse Collin +Date: 2015-08-09 21:06:26 +0300 + + Windows: Define DLL_EXPORT when building liblzma.dll with MSVC. + + src/liblzma/common/common.h uses it to set __declspec(dllexport) + for the API symbols. + + Thanks to Adam Walling. + + windows/liblzma_dll.vcxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) -commit 4f2c69a4e3e0aee2e37b0b1671d34086e20c8ac6 -Merge: adb89e6 9311774 +commit a74525cf9b945fb0b370e64cf406104beb31729b Author: Lasse Collin -Date: 2010-12-12 23:13:22 +0200 +Date: 2015-08-09 21:02:20 +0300 - Merge branch 'v5.0' + Windows: Omit unneeded header files from MSVC project files. -commit 9311774c493c19deab51ded919dcd2e9c4aa2829 + windows/liblzma.vcxproj | 5 ----- + windows/liblzma_dll.vcxproj | 5 ----- + 2 files changed, 10 deletions(-) + +commit fbbb295a91caf39faf8838c8c39526e4cb4dc121 Author: Lasse Collin -Date: 2010-12-12 21:23:55 +0200 +Date: 2015-07-12 20:48:19 +0300 - Build: Enable ASM on DJGPP by default. + liblzma: A MSVC-specific hack isn't needed with MSVC 2013 and newer. - configure.ac | 2 +- + src/liblzma/api/lzma.h | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +commit 713dbe5c230fe00865a54f5c32358ea30f9a1156 +Author: Lasse Collin +Date: 2015-06-19 20:38:55 +0300 + + Update THANKS. + + THANKS | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3a5d755d055d51f99c523b4c2952727e1e69cfa1 +Author: Lasse Collin +Date: 2015-06-19 20:21:30 +0300 + + Windows: Update the docs. + + INSTALL | 29 ++++++++----- + windows/INSTALL-MSVC.txt | 47 ++++++++++++++++++++++ + windows/{INSTALL-Windows.txt => INSTALL-MinGW.txt} | 2 +- + 3 files changed, 67 insertions(+), 11 deletions(-) + +commit b0798c6aa6184efcefd0bdcca20f96121a13feda +Author: Lasse Collin +Date: 2015-06-19 17:25:31 +0300 + + Windows: Add MSVC project files for building liblzma. + + Thanks to Adam Walling for creating these files. + + windows/liblzma.vcxproj | 359 ++++++++++++++++++++++++++++++++++++++++ + windows/liblzma_dll.vcxproj | 388 ++++++++++++++++++++++++++++++++++++++++++++ + windows/xz_win.sln | 48 ++++++ + 3 files changed, 795 insertions(+) + +commit 9b02a4ffdac1b9f066658ec4c95c0834f4cd2fb7 +Author: Andre Noll +Date: 2015-05-28 15:50:00 +0200 + + Fix typo in German translation. + + As pointed out by Robert Pollak, there's a typo in the German + translation of the compression preset option (-0 ... -9) help text. + "The compressor" translates to "der Komprimierer", and the genitive + form is "des Komprimierers". The old word makes no sense at all. + + po/de.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 4a42aaee282fc73b482581684d65110506d5efdd +commit c7f4041f6b8f4729f88d3bc888b2a4080ae51f72 Author: Lasse Collin -Date: 2010-12-12 16:09:42 +0200 +Date: 2015-05-13 20:57:55 +0300 - Updated THANKS. + Tests: Fix a memory leak in test_bcj_exact_size. + + Thanks to Cristian Rodríguez. + tests/test_bcj_exact_size.c | 1 + + 1 file changed, 1 insertion(+) + +commit 17b29d4f0ae0f780fbd69e15a398dc478d8492f8 +Author: Lasse Collin +Date: 2015-05-12 18:08:24 +0300 + + Fix NEWS about threading in 5.2.0. + + Thanks to Andy Hochhaus. + + NEWS | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 49c26920d6e2d85e5c6123e34958aed2e77485ad +Author: Lasse Collin +Date: 2015-05-11 21:26:16 +0300 + + xz: Document that threaded decompression hasn't been implemented yet. + + src/xz/xz.1 | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit 5b2458cb244ed237efe4de1ebcf06e1b3a1f4256 +Author: Lasse Collin +Date: 2015-04-20 20:20:29 +0300 + + Update THANKS. + THANKS | 1 + 1 file changed, 1 insertion(+) -commit ce56f63c41ee210e6308090eb6d49221fdf67d6c +commit 6bd0349c58451b13442e8f463e35de83548bf985 Author: Lasse Collin -Date: 2010-12-12 16:07:11 +0200 +Date: 2015-04-20 19:59:18 +0300 - Add missing PRIx32 and PRIx64 compatibility definitions. + Revert "xz: Use pipe2() if available." - This fixes portability to systems that lack C99 inttypes.h. + This reverts commit 7a11c4a8e5e15f13d5fa59233b3172e65428efdd. + It is a problem when libc has pipe2() but the kernel is too + old to have pipe2() and thus pipe2() fails. In xz it's pointless + to have a fallback for non-functioning pipe2(); it's better to + avoid pipe2() completely. - Thanks to Juan Manuel Guerrero. - - src/common/sysdefs.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -commit e6baedddcf54e7da049ebc49183565b99facd4c7 + Thanks to Michael Fox for the bug report. + + configure.ac | 4 ++-- + src/xz/file_io.c | 9 +-------- + 2 files changed, 3 insertions(+), 10 deletions(-) + +commit fc0df0f8db87dff45543708a711e17d29c37f632 Author: Lasse Collin -Date: 2010-12-12 14:50:04 +0200 - - DOS-like: Treat \ and : as directory separators in addition to /. +Date: 2015-04-01 14:45:25 +0300 + + xz: Fix the Capsicum rights on user_abort_pipe. + + src/xz/file_io.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 57393615b31b3788dd77280452d845bcc12d33af +Author: Lasse Collin +Date: 2015-03-31 22:20:11 +0300 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 1238381143a9a7ce84839c2582ccd56ff750a440 +Author: Lasse Collin +Date: 2015-03-31 22:19:34 +0300 + + xz: Add support for sandboxing with Capsicum. - Juan Manuel Guerrero had fixed this in his XZ Utils port - to DOS/DJGPP. The bug affects also Windows and OS/2. - - src/xz/suffix.c | 33 +++++++++++++++++++++++++++++---- - 1 file changed, 29 insertions(+), 4 deletions(-) + The sandboxing is used conditionally as described in main.c. + This isn't optimal but it was much easier to implement than + a full sandboxing solution and it still covers the most common + use cases where xz is writing to standard output. This should + have practically no effect on performance even with small files + as fork() isn't needed. + + C and locale libraries can open files as needed. This has been + fine in the past, but it's a problem with things like Capsicum. + io_sandbox_enter() tries to ensure that various locale-related + files have been loaded before cap_enter() is called, but it's + possible that there are other similar problems which haven't + been seen yet. + + Currently Capsicum is available on FreeBSD 10 and later + and there is a port to Linux too. + + Thanks to Loganaden Velvindron for help. -commit adb89e68d43a4cadb0c215b45ef7a75737c9c3ec -Merge: 7c24e0d b7afd3e + configure.ac | 41 +++++++++++++++++++++++++++ + src/xz/Makefile.am | 2 +- + src/xz/file_io.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/xz/file_io.h | 6 ++++ + src/xz/main.c | 18 ++++++++++++ + src/xz/private.h | 4 +++ + 6 files changed, 151 insertions(+), 1 deletion(-) + +commit 29a087fb5a0c879f0b1bc4c6b989f7b87bacdf9e Author: Lasse Collin -Date: 2010-12-07 18:53:04 +0200 - - Merge branch 'v5.0' +Date: 2015-03-31 21:12:30 +0300 -commit b7afd3e22a8fac115b75c738d40d3eb1de7e286f + Fix bugs and otherwise improve ax_check_capsicum.m4. + + AU_ALIAS was removed because the new version is incompatible + with the old version. + + It no longer checks for separately. + It's enough to test for it as part of AC_CHECK_DECL. + The defines HAVE_CAPSICUM_SYS_CAPSICUM_H and + HAVE_CAPSICUM_SYS_CAPABILITY_H were removed as unneeded. + HAVE_SYS_CAPSICUM_H from AC_CHECK_HEADERS is enough. + + It no longer does a useless search for the Capsicum library + if the header wasn't found. + + Fixed a bug in ACTION-IF-FOUND (the first argument). Specifying + the argument omitted the default action but the given action + wasn't used instead. + + AC_DEFINE([HAVE_CAPSICUM]) is now always called when Capsicum + support is found. Previously it was part of the default + ACTION-IF-FOUND which a custom action would override. Now + the default action only prepends ${CAPSICUM_LIB} to LIBS. + + The documentation was updated. + + Since there as no serial number, "#serial 2" was added. + + m4/ax_check_capsicum.m4 | 103 ++++++++++++++++++++++++------------------------ + 1 file changed, 51 insertions(+), 52 deletions(-) + +commit 6e845c6a3eddf2fde9db5a29950421dff60a43ac Author: Lasse Collin -Date: 2010-12-07 18:52:04 +0200 +Date: 2015-03-31 19:20:24 +0300 - Translations: Fix Czech translation of "sparse file". + Add m4/ax_check_capsicum.m4 for detecting Capsicum support. - Thanks to Petr Hubený and Marek Černocký. + The file was loaded from this web page: + https://github.com/google/capsicum-test/blob/dev/autoconf/m4/ax_check_capsicum.m4 + + Thanks to Loganaden Velvindron for pointing it out for me. - po/cs.po | 88 ++++++++++++++++++++++++++++++++-------------------------------- - 1 file changed, 44 insertions(+), 44 deletions(-) + m4/ax_check_capsicum.m4 | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) -commit 7c24e0d1b8a2e86e9263b0d56d39621e01aed7af -Merge: b4d42f1 3e56470 +commit 3717885f9ef2c06f1bcbad9f4c2ed2d5695f844e Author: Lasse Collin -Date: 2010-11-15 14:33:01 +0200 - - Merge branch 'v5.0' +Date: 2015-03-30 22:44:02 +0300 -commit 3e564704bc6f463cb2db11e3f3f0dbd71d85992e + Bump version to 5.3.0alpha and soname to 5.3.99. + + The idea of 99 is that it looks a bit weird in this context. + For new features there's no API/ABI stability in devel versions. + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit eccd8155e107c5ada03d13e7730675cdf1a44ddc Author: Lasse Collin -Date: 2010-11-15 14:28:26 +0200 +Date: 2015-03-29 22:14:47 +0300 - liblzma: Document the return value of lzma_lzma_preset(). + Update THANKS. - src/liblzma/api/lzma/lzma.h | 3 +++ - 1 file changed, 3 insertions(+) + THANKS | 1 + + 1 file changed, 1 insertion(+) -commit 2964d8d691ed92abdcf214888d79ad6d79774735 -Author: Jonathan Nieder -Date: 2010-11-12 15:22:13 -0600 +commit 25263fd9e7a8a913395cb93d7c104cd48c2b4a00 +Author: Lasse Collin +Date: 2015-03-29 22:13:48 +0300 - Simplify paths in generated API docs + Fix the detection of installed RAM on QNX. - Currently the file list generated by Doxygen has src/ at the - beginning of each path. Paths like common/sysdefs.h and - liblzma/api/lzma.h are easier to read without such a prefix. + The earlier version compiled but didn't actually work + since sysconf(_SC_PHYS_PAGES) always fails (or so I was told). - Builds from a separate build directory with + Thanks to Ole André Vadla Ravnås for the patch and testing. + + m4/tuklib_physmem.m4 | 6 +++--- + src/common/tuklib_physmem.c | 14 +++++++++++++- + 2 files changed, 16 insertions(+), 4 deletions(-) + +commit 4c544d2410903d38402221cb783ed85585b6a007 +Author: Lasse Collin +Date: 2015-03-27 22:39:07 +0200 + + Fix CPU core count detection on QNX. - mkdir build - cd build - ../configure - doxygen Doxyfile + It tried to use sysctl() on QNX but + - it broke the build because sysctl() needs -lsocket on QNX; + - sysctl() doesn't work for detecting the core count on QNX + even if it compiled. - include an even longer prefix /home/someone/src/xz/src; this - patch has the nice side-effect of eliminating that prefix, too. + sysconf() works. An alternative would have been to use + QNX-specific SYSPAGE_ENTRY(num_cpu) from . - Fixes: http://bugs.debian.org/572273 + Thanks to Ole André Vadla Ravnås. - Doxyfile.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit b4d42f1a7120e2cefeb2f14425efe2ca6db85416 -Author: Anders F Bjorklund -Date: 2010-11-05 12:56:11 +0100 + m4/tuklib_cpucores.m4 | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) - add build script for macosx universal +commit e0ea6737b03e83ccaff4514d00e31bb926f8f0f3 +Author: Lasse Collin +Date: 2015-03-07 22:05:57 +0200 - macosx/build.sh | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 92 insertions(+) + xz: size_t/uint32_t cleanup in options.c. -commit 15ee6935abe4a2fc76639ee342ca2e69af3e0ad6 -Author: Lasse Collin -Date: 2010-11-04 18:31:40 +0200 - - Update the copies of GPLv2 and LGPLv2.1 from gnu.org. + src/xz/options.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 8bcca29a65335fd679c13814b70b35b68fa5daed +Author: Lasse Collin +Date: 2015-03-07 22:04:23 +0200 + + xz: Fix a comment and silence a warning in message.c. + + src/xz/message.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit f243f5f44c6b19a7c289a0ec73a03ee08364cb5b +Author: Lasse Collin +Date: 2015-03-07 22:01:00 +0200 + + liblzma: Silence more uint32_t vs. size_t warnings. + + src/liblzma/lz/lz_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 7f0a4c50f4a374c40acf4b86848f301ad1e82d34 +Author: Lasse Collin +Date: 2015-03-07 19:54:00 +0200 + + xz: Make arg_count an unsigned int to silence a warning. - There are only a few white space changes. - - COPYING.GPLv2 | 14 +++++++------- - COPYING.LGPLv2.1 | 16 +++++++--------- - 2 files changed, 14 insertions(+), 16 deletions(-) - -commit 8e355f7fdbeee6fe394eb02a28f267ce99a882a2 -Merge: 974ebe6 37c2565 + Actually the value of arg_count cannot exceed INT_MAX + but it's nicer as an unsigned int. + + src/xz/args.h | 2 +- + src/xz/main.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit f6ec46801588b1be29c07c9db98558b521304002 Author: Lasse Collin -Date: 2010-10-26 15:53:06 +0300 - - Merge branch 'v5.0' +Date: 2015-03-07 19:33:17 +0200 -commit 37c25658efd25b034266daf87cd381d20d1df776 + liblzma: Fix a warning in index.c. + + src/liblzma/common/index.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit a24518971cc621315af142dd3bb7614fab04ad27 Author: Lasse Collin -Date: 2010-10-26 15:48:48 +0300 +Date: 2015-02-26 20:46:14 +0200 - Build: Copy the example programs to $docdir/examples. + Build: Fix a CR+LF problem when running autoreconf -fi on OS/2. + + build-aux/version.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dec11497a71518423b5ff0e759100cf8aadf6c7b +Author: Lasse Collin +Date: 2015-02-26 16:53:44 +0200 + + Bump version and soname for 5.2.1. + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 29e39c79975ab89ee5dd671e97064534a9f3a649 +Author: Lasse Collin +Date: 2015-02-26 13:01:09 +0200 + + Update NEWS for 5.2.1. + + NEWS | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 7a11c4a8e5e15f13d5fa59233b3172e65428efdd +Author: Lasse Collin +Date: 2015-02-22 19:38:48 +0200 + + xz: Use pipe2() if available. + + configure.ac | 4 ++-- + src/xz/file_io.c | 9 ++++++++- + 2 files changed, 10 insertions(+), 3 deletions(-) + +commit 117d962685c72682c63edc9bb765367189800202 +Author: Lasse Collin +Date: 2015-02-21 23:40:26 +0200 + + liblzma: Fix a compression-ratio regression in LZMA1/2 in fast mode. - The example programs by Daniel Mealha Cabrita were included - in the git repository, but I had forgot to add them to - Makefile.am. Thus, they didn't get included in the source - package at all by "make dist". + The bug was added in the commit + f48fce093b07aeda95c18850f5e086d9f2383380 and thus + affected 5.1.4beta and 5.2.0. Luckily the bug cannot + cause data corruption or other nasty things. - Makefile.am | 5 +++++ - windows/build.bash | 3 ++- - 2 files changed, 7 insertions(+), 1 deletion(-) + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit 974ebe63497bdf0d262e06474f0dd5a70b1dd000 +commit ae984e31c167d3bc52972ec422dd1ebd5f5d5719 Author: Lasse Collin -Date: 2010-10-26 10:36:41 +0300 - - liblzma: Rename a few variables and constants. +Date: 2015-02-21 23:00:19 +0200 + + xz: Fix the fcntl() usage when creating a pipe for the self-pipe trick. - This has no semantic changes. I find the new names slightly - more logical and they match the names that are already used - in XZ Embedded. + Now it reads the old flags instead of blindly setting O_NONBLOCK. + The old code may have worked correctly, but this is better. + + src/xz/file_io.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +commit 2205bb5853098aea36a56df6f5747037175f66b4 +Author: Lasse Collin +Date: 2015-02-10 15:29:34 +0200 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit d935b0cdf3db440269b9d952b2b281b18f8c7b08 +Author: Lasse Collin +Date: 2015-02-10 15:28:30 +0200 + + tuklib_cpucores: Use cpuset_getaffinity() on FreeBSD if available. - The name fastpos wasn't changed (not worth the hassle). - - src/liblzma/lzma/fastpos.h | 55 +++++------ - src/liblzma/lzma/lzma2_encoder.c | 2 +- - src/liblzma/lzma/lzma_common.h | 45 ++++----- - src/liblzma/lzma/lzma_decoder.c | 58 +++++------ - src/liblzma/lzma/lzma_encoder.c | 56 +++++------ - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 9 +- - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 128 ++++++++++++------------- - src/liblzma/lzma/lzma_encoder_private.h | 16 ++-- - 8 files changed, 183 insertions(+), 186 deletions(-) - -commit 7c427ec38d016c0070a42315d752857e33792fc4 -Author: Lasse Collin -Date: 2010-10-25 12:59:25 +0300 - - Bump version 5.1.0alpha. + In FreeBSD, cpuset_getaffinity() is the preferred way to get + the number of available cores. + + Thanks to Rui Paulo for the patch. I edited it slightly, but + hopefully I didn't break anything. - src/liblzma/api/lzma/version.h | 4 ++-- + m4/tuklib_cpucores.m4 | 23 ++++++++++++++++++++++- + src/common/tuklib_cpucores.c | 18 ++++++++++++++++++ + 2 files changed, 40 insertions(+), 1 deletion(-) + +commit eb61bc58c20769cac4d05f363b9c0e8c9c71a560 +Author: Lasse Collin +Date: 2015-02-09 22:08:37 +0200 + + xzdiff: Make the mktemp usage compatible with FreeBSD's mktemp. + + Thanks to Rui Paulo for the fix. + + src/scripts/xzdiff.in | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit b9a5b6b7a29029680af733082b6a46e0fc01623a +Author: Lasse Collin +Date: 2015-02-03 21:45:53 +0200 + + Add a few casts to tuklib_integer.h to silence possible warnings. + + I heard that Visual Studio 2013 gave warnings without the casts. + + Thanks to Gabi Davar. + + src/common/tuklib_integer.h | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit c45757135f40e4a0de730ba5fff0100219493982 +Author: Lasse Collin +Date: 2015-01-26 21:24:39 +0200 + + liblzma: Set LZMA_MEMCMPLEN_EXTRA depending on the compare method. + + src/liblzma/common/memcmplen.h | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +commit 3c500174ed5485f550972a2a6109c361e875f069 +Author: Lasse Collin +Date: 2015-01-26 20:40:16 +0200 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit fec88d41e672d9e197c9442aecf02bd0dfa6d516 +Author: Lasse Collin +Date: 2015-01-26 20:39:28 +0200 + + liblzma: Silence harmless Valgrind errors. + + Thanks to Torsten Rupp for reporting this. I had + forgotten to run Valgrind before the 5.2.0 release. + + src/liblzma/lz/lz_encoder.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit a9b45badfec0928d20a27c7176c005fa637f7d1e +Author: Lasse Collin +Date: 2015-01-09 21:50:19 +0200 + + xz: Fix comments. + + src/xz/file_io.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 541aee6dd4aa97a809aba281475a21b641bb89e2 +Author: Lasse Collin +Date: 2015-01-09 21:35:06 +0200 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 4170edc914655310d2363baccf5e615e09b04911 +Author: Lasse Collin +Date: 2015-01-09 21:34:06 +0200 + + xz: Don't fail if stdout doesn't support O_NONBLOCK. + + This is similar to the case with stdin. + + Thanks to Brad Smith for the bug report and testing + on OpenBSD. + + src/xz/file_io.c | 36 +++++++++++++++--------------------- + 1 file changed, 15 insertions(+), 21 deletions(-) + +commit 04bbc0c2843c50c8ad1cba42b937118e38b0508d +Author: Lasse Collin +Date: 2015-01-07 19:18:20 +0200 + + xz: Fix a memory leak in DOS-specific code. + + src/xz/file_io.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit f0f1f6c7235ffa901cf76fe18e33749e200b3eea +Author: Lasse Collin +Date: 2015-01-07 19:08:06 +0200 + + xz: Don't fail if stdin doesn't support O_NONBLOCK. + + It's a problem at least on OpenBSD which doesn't support + O_NONBLOCK on e.g. /dev/null. I'm not surprised if it's + a problem on other OSes too since this behavior is allowed + in POSIX-1.2008. + + The code relying on this behavior was committed in June 2013 + and included in 5.1.3alpha released on 2013-10-26. Clearly + the development releases only get limited testing. + + src/xz/file_io.c | 18 +++++++----------- + 1 file changed, 7 insertions(+), 11 deletions(-) + +commit d2d484647d9d9d679f03c75abb0404f67069271c +Author: Lasse Collin +Date: 2015-01-06 20:30:15 +0200 + + Tests: Don't hide unexpected error messages in test_files.sh. + + Hiding them makes no sense since normally there's no error + when testing the "good" files. With "bad" files errors are + expected and then it makes sense to keep the messages hidden. + + tests/test_files.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -commit e45929260cd902036efd40c5610a8d0a50d5712b +commit aae6a6aeda51cf94a47e39ad624728f9bee75e30 Author: Lasse Collin -Date: 2010-10-23 17:25:52 +0300 +Date: 2014-12-30 11:17:16 +0200 - Build: Fix mydist rule when .git doesn't exist. + Update Solaris notes in INSTALL. + + Mention the possible "make check" failure on Solaris in the + Solaris-specific section of INSTALL. It was already in + section 4.5 but it is better mention it in the OS-specific + section too. - Makefile.am | 1 + + INSTALL | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 7815112153178800a3521b9f31960e7cdc26cfba +Author: Lasse Collin +Date: 2014-12-26 12:00:05 +0200 + + Build: POSIX shell isn't required if scripts are disabled. + + INSTALL | 3 ++- + configure.ac | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit a0cd05ee71d330b79ead6eb9222e1b24e1559d3a +Author: Lasse Collin +Date: 2014-12-21 20:48:37 +0200 + + DOS: Update Makefile. + + dos/Makefile | 1 + 1 file changed, 1 insertion(+) -commit 6e1326fcdf6b6209949be57cfe3ad4b781b65168 +commit b85ee0905ec4ab7656d22e63519fdd3bedb21f2e Author: Lasse Collin -Date: 2010-10-23 14:15:35 +0300 +Date: 2014-12-21 19:50:38 +0200 - Add NEWS for 5.0.0. + Windows: Fix bin_i486 to bin_i686 in build.bash. - NEWS | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 62 insertions(+) + windows/build.bash | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit b667a3ef6338a2c1db7b7706b1f6c99ea392221c +commit cbafa710918195dbba3db02c3fab4f0538235206 Author: Lasse Collin -Date: 2010-10-23 14:02:53 +0300 +Date: 2014-12-21 18:58:44 +0200 - Bump version to 5.0.0 and liblzma version-info to 5:0:0. + Docs: Use lzma_cputhreads() in 04_compress_easy_mt.c. + doc/examples/04_compress_easy_mt.c | 30 ++++++++++++++++++++++++++---- + 1 file changed, 26 insertions(+), 4 deletions(-) + +commit 8dbb57238d372c7263cfeb3e7f7fd9a73173156a +Author: Lasse Collin +Date: 2014-12-21 18:56:44 +0200 + + Docs: Update docs/examples/00_README.txt. + + doc/examples/00_README.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 6060f7dc76fd6c2a8a1f8e85d0e4d86bb78273e6 +Author: Lasse Collin +Date: 2014-12-21 18:11:17 +0200 + + Bump version and soname for 5.2.0. + + I know that soname != app version, but I skip AGE=1 + in -version-info to make the soname match the liblzma + version anyway. It doesn't hurt anything as long as + it doesn't conflict with library versioning rules. + src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/version.h | 8 ++++---- - 2 files changed, 5 insertions(+), 5 deletions(-) + src/liblzma/api/lzma/version.h | 6 +++--- + src/liblzma/liblzma.map | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) Only in xz-5.2.5: Doxyfile.in diff -ur xz-5.2.5/INSTALL xz-5.4.3/INSTALL --- xz-5.2.5/INSTALL 2020-03-17 17:28:54 +++ xz-5.4.3/INSTALL 2023-05-04 17:21:05 @@ -142,12 +142,10 @@ If it is enough to build liblzma (no command line tools): - - There is experimental CMake support. As it is, it should be - good enough to build static liblzma with Visual Studio. - Building liblzma.dll might work too (if it doesn't, it should - be fixed). The CMake support may work with MinGW or MinGW-w64. - Read the comment in the beginning of CMakeLists.txt before - running CMake! + - 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! - There are Visual Studio project files under the "windows" directory. See windows/INSTALL-MSVC.txt. In the future the @@ -316,6 +314,18 @@ | xz -v -0 -Csha256 > foo.xz time xz --test foo.xz + --disable-microlzma + Don't build MicroLZMA encoder and decoder. This omits + lzma_microlzma_encoder() and lzma_microlzma_decoder() + API functions from liblzma. These functions are needed + by specific applications only. They were written for + erofs-utils but they may be used by others too. + + --disable-lzip-decoder + Disable decompression support for .lz (lzip) files. + This omits the API function lzma_lzip_decoder() from + liblzma and .lz support from the xz tool. + --disable-xz --disable-xzdec --disable-lzmadec @@ -358,17 +368,46 @@ pre-i686 systems, you may want to disable the assembler code. + --disable-clmul-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 + is used only if --disable-assembler is used (this might + be fixed in the future). The code works on E2K too. + + If using compiler options that unconditionally allow the + required extensions (-msse4.1 -mpclmul) then runtime + detection isn't used and the generic code is omitted. + --enable-unaligned-access - Allow liblzma to use unaligned memory access for 16-bit - and 32-bit loads and stores. This should be enabled only - when the hardware supports this, i.e. when unaligned - access is fast. Some operating system kernels emulate - unaligned access, which is extremely slow. This option - shouldn't be used on systems that rely on such emulation. + 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, + when unaligned access is fast. Some operating system + kernels emulate unaligned access, which is extremely + slow. This option shouldn't be used on systems that + rely on such emulation. Unaligned access is enabled by default on x86, x86-64, - and big endian PowerPC. + big endian PowerPC, some ARM, and some ARM64 systems. + --enable-unsafe-type-punning + This enables use of code like + + uint8_t *buf8 = ...; + *(uint32_t *)buf8 = ...; + + which violates strict aliasing rules and may result + in broken code. There should be no need to use this + option with recent GCC or Clang versions on any + arch as just as fast code can be generated in a safe + way too (using __builtin_assume_aligned + memcpy). + + However, this option might improve performance in some + other cases, especially with old compilers (for example, + GCC 3 and early 4.x on x86, GCC < 6 on ARMv6 and ARMv7). + --enable-small Reduce the size of liblzma by selecting smaller but semantically equivalent version of some functions, and @@ -427,7 +466,9 @@ no Disable threading support. This is the same as using --disable-threads. - NOTE: If combined with --enable-small, the + NOTE: If combined with --enable-small + and the compiler doesn't support + __attribute__((__constructor__)), the resulting liblzma won't be thread safe, that is, if a multi-threaded application calls any liblzma functions from more than @@ -447,6 +488,7 @@ auto Look for a supported sandboxing method and use it if found. If no method is found, then sandboxing isn't used. + This is the default. no Disable sandboxing support. @@ -455,6 +497,10 @@ sandboxing. If no Capsicum support is found, configure will give an error. + pledge Use pledge(2) (OpenBSD >= 5.9) for + sandboxing. If pledge(2) isn't found, + configure will give an error. + --enable-symbol-versions Use symbol versioning for liblzma. This is enabled by default on GNU/Linux, other GNU-based systems, and @@ -517,7 +563,7 @@ liblzma, pass --enable-small to configure. - Tell the compiler to optimize for size instead of speed. - E.g. with GCC, put -Os into CFLAGS. + For example, with GCC, put -Os into CFLAGS. - xzdec and lzmadec will never use multithreading capabilities of liblzma. You can avoid dependency on libpthread by passing @@ -550,7 +596,7 @@ a fallback xzdiff will use mkdir to securely create a temporary directory. Having mktemp available is still recommended since the mkdir fallback method isn't as robust as mktemp is. The original - mktemp can be found from . On GNU, most will + mktemp can be found from . On GNU, most will use the mktemp program from GNU coreutils instead of the original implementation. Both mktemp versions are fine. diff -ur xz-5.2.5/Makefile.am xz-5.4.3/Makefile.am --- xz-5.2.5/Makefile.am 2020-03-17 17:28:50 +++ xz-5.4.3/Makefile.am 2023-05-04 17:21:05 @@ -44,16 +44,30 @@ 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 = \ po4a \ extra \ dos \ + doxygen \ windows \ macosx \ + cmake \ + CMakeLists.txt \ autogen.sh \ - Doxyfile.in \ COPYING.GPLv2 \ COPYING.GPLv3 \ COPYING.LGPLv2.1 \ @@ -64,7 +78,7 @@ ACLOCAL_AMFLAGS = -I m4 -# List of man pages to conver to PDF and plain text in the dist-hook 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 \ @@ -79,7 +93,7 @@ dist-hook: if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ ( cd "$(srcdir)" && git log --date=iso --stat \ - b667a3ef6338a2c1db7b7706b1f6c99ea392221c^..HEAD ) \ + 6060f7dc76fd6c2a8a1f8e85d0e4d86bb78273e6^..HEAD ) \ > "$(distdir)/ChangeLog"; \ fi if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ @@ -98,6 +112,11 @@ > "$$dest/txt/$$BASE.txt"; \ done; \ fi + 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 man page translations are up to date (dist-hook @@ -105,6 +124,7 @@ mydist: 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 \ SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \ diff -ur xz-5.2.5/Makefile.in xz-5.4.3/Makefile.in --- xz-5.2.5/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -118,7 +118,7 @@ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = Doxyfile +CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -194,8 +194,8 @@ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -212,11 +212,8 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \ - $(srcdir)/config.h.in $(top_srcdir)/build-aux/compile \ +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ @@ -264,6 +261,8 @@ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz DIST_TARGETS = dist-gzip +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' @@ -288,6 +287,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -298,8 +299,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -352,6 +355,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -410,6 +414,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -455,10 +460,12 @@ po4a \ extra \ dos \ + doxygen \ windows \ macosx \ + cmake \ + CMakeLists.txt \ autogen.sh \ - Doxyfile.in \ COPYING.GPLv2 \ COPYING.GPLv3 \ COPYING.LGPLv2.1 \ @@ -469,7 +476,7 @@ ACLOCAL_AMFLAGS = -I m4 -# List of man pages to conver to PDF and plain text in the dist-hook 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 \ @@ -531,8 +538,6 @@ distclean-hdr: -rm -f config.h stamp-h1 -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo @@ -711,7 +716,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -803,6 +807,10 @@ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -845,6 +853,8 @@ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -860,7 +870,7 @@ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ @@ -949,6 +959,8 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." +@COND_DOC_FALSE@install-data-local: +@COND_DOC_FALSE@uninstall-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am @@ -971,8 +983,8 @@ info-am: -install-data-am: install-dist_docDATA install-dist_examplesDATA \ - install-dist_examplesoldDATA +install-data-am: install-data-local install-dist_docDATA \ + install-dist_examplesDATA install-dist_examplesoldDATA install-dvi: install-dvi-recursive @@ -1019,7 +1031,7 @@ ps-am: uninstall-am: uninstall-dist_docDATA uninstall-dist_examplesDATA \ - uninstall-dist_examplesoldDATA + uninstall-dist_examplesoldDATA uninstall-local .MAKE: $(am__recursive_targets) all install-am install-strip @@ -1027,31 +1039,44 @@ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ - dist-tarZ dist-xz dist-zip distcheck distclean \ + dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dist_docDATA \ - install-dist_examplesDATA install-dist_examplesoldDATA \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-dist_docDATA \ - uninstall-dist_examplesDATA uninstall-dist_examplesoldDATA + install-data install-data-am install-data-local \ + install-dist_docDATA install-dist_examplesDATA \ + install-dist_examplesoldDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-dist_docDATA \ + uninstall-dist_examplesDATA uninstall-dist_examplesoldDATA \ + uninstall-local .PRECIOUS: Makefile +# Install the Doxygen generated documentation if they were built. +@COND_DOC_TRUE@install-data-local: +@COND_DOC_TRUE@ if test -d "$(srcdir)/doc/api" ; then \ +@COND_DOC_TRUE@ $(MKDIR_P) "$(DESTDIR)$(docdir)/api" && \ +@COND_DOC_TRUE@ $(INSTALL_DATA) "$(srcdir)"/doc/api/* \ +@COND_DOC_TRUE@ "$(DESTDIR)$(docdir)/api"; \ +@COND_DOC_TRUE@ fi + +# Remove the Doxygen generated documentation when uninstalling. +@COND_DOC_TRUE@uninstall-local: +@COND_DOC_TRUE@ rm -rf "$(DESTDIR)$(docdir)/api" + # 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 --date=iso --stat \ - b667a3ef6338a2c1db7b7706b1f6c99ea392221c^..HEAD ) \ + 6060f7dc76fd6c2a8a1f8e85d0e4d86bb78273e6^..HEAD ) \ > "$(distdir)/ChangeLog"; \ fi if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ @@ -1070,6 +1095,11 @@ > "$$dest/txt/$$BASE.txt"; \ done; \ fi + 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 man page translations are up to date (dist-hook @@ -1077,6 +1107,7 @@ mydist: 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 \ SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \ diff -ur xz-5.2.5/NEWS xz-5.4.3/NEWS --- xz-5.2.5/NEWS 2020-03-17 17:28:54 +++ xz-5.4.3/NEWS 2023-05-04 17:22:00 @@ -2,6 +2,1011 @@ XZ Utils Release Notes ====================== +5.4.3 (2023-05-04) + + * All fixes from 5.2.12 + + * Features in the CMake build can now be disabled as CMake cache + variables, similar to the Autotools build. + + * Minor update to the Croatian translation. + + +5.4.2 (2023-03-18) + + * All fixes from 5.2.11 that were not included in 5.4.1. + + * If xz is built with support for the Capsicum sandbox but running + in an environment that doesn't support Capsicum, xz now runs + normally without sandboxing instead of exiting with an error. + + * liblzma: + + - Documentation was updated to improve the style, consistency, + and completeness of the liblzma API headers. + + - The Doxygen-generated HTML documentation for the liblzma API + header files is now included in the source release and is + installed as part of "make install". All JavaScript is + removed to simplify license compliance and to reduce the + install size. + + - Fixed a minor bug in lzma_str_from_filters() that produced + too many filters in the output string instead of reporting + an error if the input array had more than four filters. This + bug did not affect xz. + + * Build systems: + + - autogen.sh now invokes the doxygen tool via the new wrapper + script doxygen/update-doxygen, unless the command line option + --no-doxygen is used. + + - Added microlzma_encoder.c and microlzma_decoder.c to the + VS project files for Windows and to the CMake build. These + should have been included in 5.3.2alpha. + + * Tests: + + - Added a test to the CMake build that was forgotten in the + previous release. + + - Added and refactored a few tests. + + * Translations: + + - Updated the Brazilian Portuguese translation. + + - Added Brazilian Portuguese man page translation. + + +5.4.1 (2023-01-11) + + * liblzma: + + - Fixed the return value of lzma_microlzma_encoder() if the + LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options + made the function return LZMA_STREAM_END without encoding + anything instead of returning LZMA_OPTIONS_ERROR. + + - Windows / Visual Studio: Workaround a possible compiler bug + when targeting 32-bit x86 and compiling the CLMUL version of + the CRC64 code. The CLMUL code isn't enabled by the Windows + project files but it is in the CMake-based builds. + + * Build systems: + + - Windows-specific CMake changes: + + * Don't try to enable CLMUL CRC64 code if _mm_set_epi64x() + isn't available. This fixes CMake-based build with Visual + Studio 2013. + + * Created a workaround for a build failure with windres + from GNU binutils. It is used only when the C compiler + is GCC (not Clang). The workaround is incompatible + with llvm-windres, resulting in "XZx20Utils" instead + of "XZ Utils" in the resource file, but without the + workaround llvm-windres works correctly. See the + comment in CMakeLists.txt for details. + + * Included the resource files in the xz and xzdec build + rules. Building the command line tools is still + experimental but possible with MinGW-w64. + + - Visual Studio: Added stream_decoder_mt.c to the project + files. Now the threaded decompressor lzma_stream_decoder_mt() + gets built. CMake-based build wasn't affected. + + - Updated windows/INSTALL-MSVC.txt to mention that CMake-based + build is now the preferred method with Visual Studio. The + project files will probably be removed after 5.4.x releases. + + - Changes to #defines in config.h: + + * HAVE_DECL_CLOCK_MONOTONIC was replaced by + HAVE_CLOCK_MONOTONIC. The old macro was always defined + in configure-generated config.h to either 0 or 1. The + new macro is defined (to 1) only if the declaration of + CLOCK_MONOTONIC is available. This matches the way most + other config.h macros work and makes things simpler with + other build systems. + + * HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by + HAVE_PROGRAM_INVOCATION_NAME for the same reason. + + * Tests: + + - Fixed test script compatibility with ancient /bin/sh + versions. Now the five test_compress_* tests should + no longer fail on Solaris 10. + + - Added and refactored a few tests. + + * Translations: + + - Updated the Catalan and Esperanto translations. + + - Added Korean and Ukrainian man page translations. + + +5.4.0 (2022-12-13) + + This bumps the minor version of liblzma because new features were + added. The API and ABI are still backward compatible with liblzma + 5.2.x and 5.0.x. + + Since 5.3.5beta: + + * All fixes from 5.2.10. + + * The ARM64 filter is now stable. The xz option is now --arm64. + Decompression requires XZ Utils 5.4.0. In the future the ARM64 + filter will be supported by XZ for Java, XZ Embedded (including + the version in Linux), LZMA SDK, and 7-Zip. + + * Translations: + + - Updated Catalan, Croatian, German, Romanian, and Turkish + translations. + + - Updated German man page translations. + + - Added Romanian man page translations. + + Summary of new features added in the 5.3.x development releases: + + * liblzma: + + - Added threaded .xz decompressor lzma_stream_decoder_mt(). + It can use multiple threads with .xz files that have multiple + Blocks with size information in Block Headers. The threaded + encoder in xz has always created such files. + + Single-threaded encoder cannot store the size information in + Block Headers even if one used LZMA_FULL_FLUSH to create + multiple Blocks, so this threaded decoder cannot use multiple + threads with such files. + + If there are multiple Streams (concatenated .xz files), one + Stream will be decompressed completely before starting the + next Stream. + + - A new decoder flag LZMA_FAIL_FAST was added. It makes the + threaded decompressor report errors soon instead of first + flushing all pending data before the error location. + + - New Filter IDs: + * LZMA_FILTER_ARM64 is for ARM64 binaries. + * LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't + necessarily use the end marker. + + - Added lzma_str_to_filters(), lzma_str_from_filters(), and + lzma_str_list_filters() to convert a preset or a filter chain + string to a lzma_filter[] and vice versa. These should make + it easier to write applications that allow users to specify + custom compression options. + + - Added lzma_filters_free() which can be convenient for freeing + the filter options in a filter chain (an array of lzma_filter + structures). + + - lzma_file_info_decoder() to makes it a little easier to get + the Index field from .xz files. This helps in getting the + uncompressed file size but an easy-to-use random access + API is still missing which has existed in XZ for Java for + a long time. + + - Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). + It is used by erofs-utils and may be used by others too. + + The MicroLZMA format is a raw LZMA stream (without end marker) + whose first byte (always 0x00) has been replaced with + bitwise-negation of the LZMA properties (lc/lp/pb). It was + created for use in EROFS but may be used in other contexts + as well where it is important to avoid wasting bytes for + stream headers or footers. The format is also supported by + XZ Embedded (the XZ Embedded version in Linux got MicroLZMA + support in Linux 5.16). + + The MicroLZMA encoder API in liblzma can compress into a + fixed-sized output buffer so that as much data is compressed + as can be fit into the buffer while still creating a valid + MicroLZMA stream. This is needed for EROFS. + + - Added lzma_lzip_decoder() to decompress the .lz (lzip) file + format version 0 and the original unextended version 1 files. + Also lzma_auto_decoder() supports .lz files. + + - lzma_filters_update() can now be used with the multi-threaded + encoder (lzma_stream_encoder_mt()) to change the filter chain + after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. + + - In lzma_options_lzma, allow nice_len = 2 and 3 with the match + finders that require at least 3 or 4. Now it is internally + rounded up if needed. + + - CLMUL-based CRC64 on x86-64 and E2K with runtime processor + detection. On 32-bit x86 it currently isn't available unless + --disable-assembler is used which can make the non-CLMUL + CRC64 slower; this might be fixed in the future. + + - Building with --disable-threads --enable-small + is now thread-safe if the compiler supports + __attribute__((__constructor__)). + + * xz: + + - Using -T0 (--threads=0) will now use multi-threaded encoder + even on a single-core system. This is to ensure that output + from the same xz binary is identical on both single-core and + multi-core systems. + + - --threads=+1 or -T+1 is now a way to put xz into + multi-threaded mode while using only one worker thread. + The + is ignored if the number is not 1. + + - A default soft memory usage limit is now used for compression + when -T0 is used and no explicit limit has been specified. + This soft limit is used to restrict the number of threads + but if the limit is exceeded with even one thread then xz + will continue with one thread using the multi-threaded + encoder and this limit is ignored. If the number of threads + is specified manually then no default limit will be used; + this affects only -T0. + + This change helps on systems that have very many cores and + using all of them for xz makes no sense. Previously xz -T0 + could run out of memory on such systems because it attempted + to reserve memory for too many threads. + + This also helps with 32-bit builds which don't have a large + amount of address space that would be required for many + threads. The default soft limit for -T0 is at most 1400 MiB + on all 32-bit platforms. + + - Previously a low value in --memlimit-compress wouldn't cause + xz to switch from multi-threaded mode to single-threaded mode + if the limit cannot otherwise be met; xz failed instead. Now + xz can switch to single-threaded mode and then, if needed, + scale down the LZMA2 dictionary size too just like it already + did when it was started in single-threaded mode. + + - The option --no-adjust no longer prevents xz from scaling down + the number of threads as that doesn't affect the compressed + output (only performance). Now --no-adjust only prevents + adjustments that affect compressed output, that is, with + --no-adjust xz won't switch from multi-threaded mode to + single-threaded mode and won't scale down the LZMA2 + dictionary size. + + - Added a new option --memlimit-mt-decompress=LIMIT. This is + used to limit the number of decompressor threads (possibly + falling back to single-threaded mode) but it will never make + xz refuse to decompress a file. This has a system-specific + default value because without any limit xz could end up + allocating memory for the whole compressed input file, the + whole uncompressed output file, multiple thread-specific + decompressor instances and so on. Basically xz could + attempt to use an insane amount of memory even with fairly + common files. The system-specific default value is currently + the same as the one used for compression with -T0. + + The new option works together with the existing option + --memlimit-decompress=LIMIT. The old option sets a hard limit + that must not be exceeded (xz will refuse to decompress) + while the new option only restricts the number of threads. + If the limit set with --memlimit-mt-decompress is greater + than the limit set with --memlimit-compress, then the latter + value is used also for --memlimit-mt-decompress. + + - Added new information to the output of xz --info-memory and + new fields to the output of xz --robot --info-memory. + + - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders + now that liblzma handles it. + + - Don't mention endianness for ARM and ARM-Thumb filters in + --long-help. The filters only work for little endian + instruction encoding but modern ARM processors using + big endian data access still use little endian + instruction encoding. So the help text was misleading. + In contrast, the PowerPC filter is only for big endian + 32/64-bit PowerPC code. Little endian PowerPC would need + a separate filter. + + - Added decompression support for the .lz (lzip) file format + version 0 and the original unextended version 1. It is + autodetected by default. See also the option --format on + the xz man page. + + - Sandboxing enabled by default: + * Capsicum (FreeBSD) + * pledge(2) (OpenBSD) + + * Scripts now support the .lz format using xz. + + * A few new tests were added. + + * The liblzma-specific tests are now supported in CMake-based + builds too ("make test"). + + +5.3.5beta (2022-12-01) + + * All fixes from 5.2.9. + + * liblzma: + + - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to + handle raw LZMA1 streams that don't have end of payload marker + (EOPM) alias end of stream (EOS) marker. It can be used in + filter chains, for example, with the x86 BCJ filter. + + - Added lzma_str_to_filters(), lzma_str_from_filters(), and + lzma_str_list_filters() to make it easier for applications + to get custom compression options from a user and convert + it to an array of lzma_filter structures. + + - Added lzma_filters_free(). + + - lzma_filters_update() can now be used with the multi-threaded + encoder (lzma_stream_encoder_mt()) to change the filter chain + after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. + + - In lzma_options_lzma, allow nice_len = 2 and 3 with the match + finders that require at least 3 or 4. Now it is internally + rounded up if needed. + + - ARM64 filter was modified. It is still experimental. + + - Fixed LTO build with Clang if -fgnuc-version=10 or similar + was used to make Clang look like GCC >= 10. Now it uses + __has_attribute(__symver__) which should be reliable. + + * xz: + + - --threads=+1 or -T+1 is now a way to put xz into multi-threaded + mode while using only one worker thread. + + - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders + now that liblzma handles it. + + * Updated translations: Chinese (simplified), Korean, and Turkish. + + +5.3.4alpha (2022-11-15) + + * All fixes from 5.2.7 and 5.2.8. + + * liblzma: + + - Minor improvements to the threaded decoder. + + - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL + instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's + not enabled unless --disable-assembler is used but then + the non-CLMUL code might be slower. Processor support is + detected at runtime so this is built by default on x86-64 + and E2K. On these platforms, if compiler flags indicate + unconditional CLMUL support (-msse4.1 -mpclmul) then the + generic version is not built, making liblzma 8-9 KiB smaller + compared to having both versions included. + + With extremely compressible files this can make decompression + up to twice as fast but with typical files 5 % improvement + is a more realistic expectation. + + The CLMUL version is slower than the generic version with + tiny inputs (especially at 1-8 bytes per call, but up to + 16 bytes). In normal use in xz this doesn't matter at all. + + - Added an experimental ARM64 filter. This is *not* the final + version! Files created with this experimental version won't + be supported in the future versions! The filter design is + a compromise where improving one use case makes some other + cases worse. + + - Added decompression support for the .lz (lzip) file format + version 0 and the original unextended version 1. See the + API docs of lzma_lzip_decoder() for details. Also + lzma_auto_decoder() supports .lz files. + + - Building with --disable-threads --enable-small + is now thread-safe if the compiler supports + __attribute__((__constructor__)) + + * xz: + + - Added support for OpenBSD's pledge(2) as a sandboxing method. + + - Don't mention endianness for ARM and ARM-Thumb filters in + --long-help. The filters only work for little endian + instruction encoding but modern ARM processors using + big endian data access still use little endian + instruction encoding. So the help text was misleading. + In contrast, the PowerPC filter is only for big endian + 32/64-bit PowerPC code. Little endian PowerPC would need + a separate filter. + + - Added --experimental-arm64. This will be renamed once the + filter is finished. Files created with this experimental + filter will not be supported in the future! + + - Added new fields to the output of xz --robot --info-memory. + + - Added decompression support for the .lz (lzip) file format + version 0 and the original unextended version 1. It is + autodetected by default. See also the option --format on + the xz man page. + + * Scripts now support the .lz format using xz. + + * Build systems: + + - New #defines in config.h: HAVE_ENCODER_ARM64, + HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H, + HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL + + - New configure options: --disable-clmul-crc, + --disable-microlzma, --disable-lzip-decoder, and + 'pledge' is now an option in --enable-sandbox (but + it's autodetected by default anyway). + + - INSTALL was updated to document the new configure options. + + - PACKAGERS now lists also --disable-microlzma and + --disable-lzip-decoder as configure options that must + not be used in builds for non-embedded use. + + * Tests: + + - Fix some of the tests so that they skip instead of fail if + certain features have been disabled with configure options. + It's still not perfect. + + - Other improvements to tests. + + * Updated translations: Croatian, Finnish, Hungarian, Polish, + Romanian, Spanish, Swedish, and Ukrainian. + + +5.3.3alpha (2022-08-22) + + * All fixes from 5.2.6. + + * liblzma: + + - Fixed 32-bit build. + + - Added threaded .xz decompressor lzma_stream_decoder_mt(). + It can use multiple threads with .xz files that have multiple + Blocks with size information in Block Headers. The threaded + encoder in xz has always created such files. + + Single-threaded encoder cannot store the size information in + Block Headers even if one used LZMA_FULL_FLUSH to create + multiple Blocks, so this threaded decoder cannot use multiple + threads with such files. + + If there are multiple Streams (concatenated .xz files), one + Stream will be decompressed completely before starting the + next Stream. + + - A new decoder flag LZMA_FAIL_FAST was added. It makes the + threaded decompressor report errors soon instead of first + flushing all pending data before the error location. + + * xz: + + - Using -T0 (--threads=0) will now use multi-threaded encoder + even on a single-core system. This is to ensure that output + from the same xz binary is identical on both single-core and + multi-core systems. + + - A default soft memory usage limit is now used for compression + when -T0 is used and no explicit limit has been specified. + This soft limit is used to restrict the number of threads + but if the limit is exceeded with even one thread then xz + will continue with one thread using the multi-threaded + encoder and this limit is ignored. If the number of threads + is specified manually then no default limit will be used; + this affects only -T0. + + This change helps on systems that have very many cores and + using all of them for xz makes no sense. Previously xz -T0 + could run out of memory on such systems because it attempted + to reserve memory for too many threads. + + This also helps with 32-bit builds which don't have a large + amount of address space that would be required for many + threads. The default limit is 1400 MiB on all 32-bit + platforms with -T0. + + Now xz -T0 should just work. It might use too few threads + in some cases but at least it shouldn't easily run out of + memory. It's possible that this will be tweaked before 5.4.0. + + - Changes to --memlimit-compress and --no-adjust: + + In single-threaded mode, --memlimit-compress can make xz + scale down the LZMA2 dictionary size to meet the memory usage + limit. This obviously affects the compressed output. However, + if xz was in threaded mode, --memlimit-compress could make xz + reduce the number of threads but it wouldn't make xz switch + from multi-threaded mode to single-threaded mode or scale + down the LZMA2 dictionary size. This seemed illogical. + + Now --memlimit-compress can make xz switch to single-threaded + mode if one thread in multi-threaded mode uses too much + memory. If memory usage is still too high, then the LZMA2 + dictionary size can be scaled down too. + + The option --no-adjust was also changed so that it no longer + prevents xz from scaling down the number of threads as that + doesn't affect compressed output (only performance). After + this commit --no-adjust only prevents adjustments that affect + compressed output, that is, with --no-adjust xz won't switch + from multithreaded mode to single-threaded mode and won't + scale down the LZMA2 dictionary size. + + - Added a new option --memlimit-mt-decompress=LIMIT. This is + used to limit the number of decompressor threads (possibly + falling back to single-threaded mode) but it will never make + xz refuse to decompress a file. This has a system-specific + default value because without any limit xz could end up + allocating memory for the whole compressed input file, the + whole uncompressed output file, multiple thread-specific + decompressor instances and so on. Basically xz could + attempt to use an insane amount of memory even with fairly + common files. + + The new option works together with the existing option + --memlimit-decompress=LIMIT. The old option sets a hard limit + that must not be exceeded (xz will refuse to decompress) + while the new option only restricts the number of threads. + If the limit set with --memlimit-mt-decompress is greater + than the limit set with --memlimit-compress, then the latter + value is used also for --memlimit-mt-decompress. + + * Tests: + + - Added a few more tests. + + - Added tests/code_coverage.sh to create a code coverage report + of the tests. + + * Build systems: + + - Automake's parallel test harness is now used to make tests + finish faster. + + - Added the CMake files to the distribution tarball. These were + supposed to be in 5.2.5 already. + + - Added liblzma tests to the CMake build. + + - Windows: Fix building of liblzma.dll with the included + Visual Studio project files. + + +5.3.2alpha (2021-10-28) + + This release was made on short notice so that recent erofs-utils can + be built with LZMA support without needing a snapshot from xz.git. + Thus many pending things were not included, not even updated + translations (which would need to be updated for the new --list + strings anyway). + + * All fixes from 5.2.5. + + * xz: + + - When copying metadata from the source file to the destination + file, don't try to set the group (GID) if it is already set + correctly. This avoids a failure on OpenBSD (and possibly on + a few other OSes) where files may get created so that their + group doesn't belong to the user, and fchown(2) can fail even + if it needs to do nothing. + + - The --keep option now accepts symlinks, hardlinks, and + setuid, setgid, and sticky files. Previously this required + using --force. + + - Split the long strings used in --list and --info-memory modes + to make them much easier for translators. + + - If built with sandbox support and enabling the sandbox fails, + xz will now immediately exit with exit status of 1. Previously + it would only display a warning if -vv was used. + + - Cap --memlimit-compress to 2000 MiB on MIPS32 because on + MIPS32 userspace processes are limited to 2 GiB of address + space. + + * liblzma: + + - Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). + The API is in lzma/container.h. + + The MicroLZMA format is a raw LZMA stream (without end marker) + whose first byte (always 0x00) has been replaced with + bitwise-negation of the LZMA properties (lc/lp/pb). It was + created for use in EROFS but may be used in other contexts + as well where it is important to avoid wasting bytes for + stream headers or footers. The format is also supported by + XZ Embedded. + + The MicroLZMA encoder API in liblzma can compress into a + fixed-sized output buffer so that as much data is compressed + as can be fit into the buffer while still creating a valid + MicroLZMA stream. This is needed for EROFS. + + - Added fuzzing support. + + - Support Intel Control-flow Enforcement Technology (CET) in + 32-bit x86 assembly files. + + - Visual Studio: Use non-standard _MSVC_LANG to detect C++ + standard version in the lzma.h API header. It's used to + detect when "noexcept" can be used. + + * Scripts: + + - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when + the correct value is 1. + + - Fix exit status of xzgrep. + + - Detect corrupt .bz2 files in xzgrep. + + - Add zstd support to xzgrep and xzdiff/xzcmp. + + - Fix less(1) version detection in xzless. It failed if the + version number from "less -V" contained a dot. + + * Fix typos and technical issues in man pages. + + * Build systems: + + - Windows: Fix building of resource files when config.h isn't + used. CMake + Visual Studio can now build liblzma.dll. + + - Various fixes to the CMake support. It might still need a few + more fixes even for liblzma-only builds. + + +5.3.1alpha (2018-04-29) + + * All fixes from 5.2.4. + + * Add lzma_file_info_decoder() into liblzma and use it in xz to + implement the --list feature. + + * Capsicum sandbox support is enabled by default where available + (FreeBSD >= 10). + + +5.2.10 (2022-12-13) + + * xz: Don't modify argv[] when parsing the --memlimit* and + --block-list command line options. This fixes confusing + arguments in process listing (like "ps auxf"). + + * GNU/Linux only: Use __has_attribute(__symver__) to detect if + that attribute is supported. This fixes build on Mandriva where + Clang is patched to define __GNUC__ to 11 by default (instead + of 4 as used by Clang upstream). + + +5.2.9 (2022-11-30) + + * liblzma: + + - Fixed an infinite loop in LZMA encoder initialization + if dict_size >= 2 GiB. (The encoder only supports up + to 1536 MiB.) + + - Fixed two cases of invalid free() that can happen if + a tiny allocation fails in encoder re-initialization + or in lzma_filters_update(). These bugs had some + similarities with the bug fixed in 5.2.7. + + - Fixed lzma_block_encoder() not allowing the use of + LZMA_SYNC_FLUSH with lzma_code() even though it was + documented to be supported. The sync-flush code in + the Block encoder was already used internally via + lzma_stream_encoder(), so this was just a missing flag + in the lzma_block_encoder() API function. + + - GNU/Linux only: Don't put symbol versions into static + liblzma as it breaks things in some cases (and even if + it didn't break anything, symbol versions in static + libraries are useless anyway). The downside of the fix + is that if the configure options --with-pic or --without-pic + are used then it's not possible to build both shared and + static liblzma at the same time on GNU/Linux anymore; + with those options --disable-static or --disable-shared + must be used too. + + * New email address for bug reports is which + forwards messages to Lasse Collin and Jia Tan. + + +5.2.8 (2022-11-13) + + * xz: + + - If xz cannot remove an input file when it should, this + is now treated as a warning (exit status 2) instead of + an error (exit status 1). This matches GNU gzip and it + is more logical as at that point the output file has + already been successfully closed. + + - Fix handling of .xz files with an unsupported check type. + Previously such printed a warning message but then xz + behaved as if an error had occurred (didn't decompress, + exit status 1). Now a warning is printed, decompression + is done anyway, and exit status is 2. This used to work + slightly before 5.0.0. In practice this bug matters only + if xz has been built with some check types disabled. As + instructed in PACKAGERS, such builds should be done in + special situations only. + + - Fix "xz -dc --single-stream tests/files/good-0-empty.xz" + which failed with "Internal error (bug)". That is, + --single-stream was broken if the first .xz stream in + the input file didn't contain any uncompressed data. + + - Fix displaying file sizes in the progress indicator when + working in passthru mode and there are multiple input files. + Just like "gzip -cdf", "xz -cdf" works like "cat" when the + input file isn't a supported compressed file format. In + this case the file size counters weren't reset between + files so with multiple input files the progress indicator + displayed an incorrect (too large) value. + + * liblzma: + + - API docs in lzma/container.h: + * Update the list of decoder flags in the decoder + function docs. + * Explain LZMA_CONCATENATED behavior with .lzma files + in lzma_auto_decoder() docs. + + - OpenBSD: Use HW_NCPUONLINE to detect the number of + available hardware threads in lzma_physmem(). + + - Fix use of wrong macro to detect x86 SSE2 support. + __SSE2_MATH__ was used with GCC/Clang but the correct + one is __SSE2__. The first one means that SSE2 is used + for floating point math which is irrelevant here. + The affected SSE2 code isn't used on x86-64 so this affects + only 32-bit x86 builds that use -msse2 without -mfpmath=sse + (there is no runtime detection for SSE2). It improves LZMA + compression speed (not decompression). + + - Fix the build with Intel C compiler 2021 (ICC, not ICX) + on Linux. It defines __GNUC__ to 10 but doesn't support + the __symver__ attribute introduced in GCC 10. + + * Scripts: Ignore warnings from xz by using --quiet --no-warn. + This is needed if the input .xz files use an unsupported + check type. + + * Translations: + + - Updated Croatian and Turkish translations. + + - One new translations wasn't included because it needed + technical fixes. It will be in upcoming 5.4.0. No new + translations will be added to the 5.2.x branch anymore. + + - Renamed the French man page translation file from + fr_FR.po to fr.po and thus also its install directory + (like /usr/share/man/fr_FR -> .../fr). + + - Man page translations for upcoming 5.4.0 are now handled + in the Translation Project. + + * Update doc/faq.txt a little so it's less out-of-date. + + +5.2.7 (2022-09-30) + + * liblzma: + + - Made lzma_filters_copy() to never modify the destination + array if an error occurs. lzma_stream_encoder() and + lzma_stream_encoder_mt() already assumed this. Before this + change, if a tiny memory allocation in lzma_filters_copy() + failed it would lead to a crash (invalid free() or invalid + memory reads) in the cleanup paths of these two encoder + initialization functions. + + - Added missing integer overflow check to lzma_index_append(). + This affects xz --list and other applications that decode + the Index field from .xz files using lzma_index_decoder(). + Normal decompression of .xz files doesn't call this code + and thus most applications using liblzma aren't affected + by this bug. + + - Single-threaded .xz decoder (lzma_stream_decoder()): If + lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible + to use lzma_memlimit_set() to increase the limit and continue + decoding. This was supposed to work from the beginning + but there was a bug. With other decoders (.lzma or + threaded .xz decoder) this already worked correctly. + + - Fixed accumulation of integrity check type statistics in + lzma_index_cat(). This bug made lzma_index_checks() return + only the type of the integrity check of the last Stream + when multiple lzma_indexes were concatenated. Most + applications don't use these APIs but in xz it made + xz --list not list all check types from concatenated .xz + files. In xz --list --verbose only the per-file "Check:" + lines were affected and in xz --robot --list only the "file" + line was affected. + + - Added ABI compatibility with executables that were linked + against liblzma in RHEL/CentOS 7 or other liblzma builds + that had copied the problematic patch from RHEL/CentOS 7 + (xz-5.2.2-compat-libs.patch). For the details, see the + comment at the top of src/liblzma/validate_map.sh. + + WARNING: This uses __symver__ attribute with GCC >= 10. + In other cases the traditional __asm__(".symver ...") + is used. Using link-time optimization (LTO, -flto) with + GCC versions older than 10 can silently result in + broken liblzma.so.5 (incorrect symbol versions)! If you + want to use -flto with GCC, you must use GCC >= 10. + LTO with Clang seems to work even with the traditional + __asm__(".symver ...") method. + + * xzgrep: Fixed compatibility with old shells that break if + comments inside command substitutions have apostrophes ('). + This problem was introduced in 5.2.6. + + * Build systems: + + - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX + + - Windows: Fixed liblzma.dll build with Visual Studio project + files. It broke in 5.2.6 due to a change that was made to + improve CMake support. + + - Windows: Building liblzma with UNICODE defined should now + work. + + - CMake files are now actually included in the release tarball. + They should have been in 5.2.5 already. + + - Minor CMake fixes and improvements. + + * Added a new translation: Turkish + + +5.2.6 (2022-08-12) + + * xz: + + - The --keep option now accepts symlinks, hardlinks, and + setuid, setgid, and sticky files. Previously this required + using --force. + + - When copying metadata from the source file to the destination + file, don't try to set the group (GID) if it is already set + correctly. This avoids a failure on OpenBSD (and possibly on + a few other OSes) where files may get created so that their + group doesn't belong to the user, and fchown(2) can fail even + if it needs to do nothing. + + - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on + MIPS32 because on MIPS32 userspace processes are limited + to 2 GiB of address space. + + * liblzma: + + - Fixed a missing error-check in the threaded encoder. If a + small memory allocation fails, a .xz file with an invalid + Index field would be created. Decompressing such a file would + produce the correct output but result in an error at the end. + Thus this is a "mild" data corruption bug. Note that while + a failed memory allocation can trigger the bug, it cannot + cause invalid memory access. + + - The decoder for .lzma files now supports files that have + uncompressed size stored in the header and still use the + end of payload marker (end of stream marker) at the end + of the LZMA stream. Such files are rare but, according to + the documentation in LZMA SDK, they are valid. + doc/lzma-file-format.txt was updated too. + + - Improved 32-bit x86 assembly files: + * Support Intel Control-flow Enforcement Technology (CET) + * Use non-executable stack on FreeBSD. + + - Visual Studio: Use non-standard _MSVC_LANG to detect C++ + standard version in the lzma.h API header. It's used to + detect when "noexcept" can be used. + + * xzgrep: + + - Fixed arbitrary command injection via a malicious filename + (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for + this was released to the public on 2022-04-07. A slight + robustness improvement has been made since then and, if + using GNU or *BSD grep, a new faster method is now used + that doesn't use the old sed-based construct at all. This + also fixes bad output with GNU grep >= 3.5 (2020-09-27) + when xzgrepping binary files. + + This vulnerability was discovered by: + cleemy desu wayo working with Trend Micro Zero Day Initiative + + - Fixed detection of corrupt .bz2 files. + + - Improved error handling to fix exit status in some situations + and to fix handling of signals: in some situations a signal + didn't make xzgrep exit when it clearly should have. It's + possible that the signal handling still isn't quite perfect + but hopefully it's good enough. + + - Documented exit statuses on the man page. + + - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead + of the deprecated egrep and fgrep commands. + + - Fixed parsing of the options -E, -F, -G, -P, and -X. The + problem occurred when multiple options were specied in + a single argument, for example, + + echo foo | xzgrep -Fe foo + + treated foo as a filename because -Fe wasn't correctly + split into -F -e. + + - Added zstd support. + + * xzdiff/xzcmp: + + - Fixed wrong exit status. Exit status could be 2 when the + correct value is 1. + + - Documented on the man page that exit status of 2 is used + for decompression errors. + + - Added zstd support. + + * xzless: + + - Fix less(1) version detection. It failed if the version number + from "less -V" contained a dot. + + * Translations: + + - Added new translations: Catalan, Croatian, Esperanto, + Korean, Portuguese, Romanian, Serbian, Spanish, Swedish, + and Ukrainian + + - Updated the Brazilian Portuguese translation. + + - Added French man page translation. This and the existing + German translation aren't complete anymore because the + English man pages got a few updates and the translators + weren't reached so that they could update their work. + + * Build systems: + + - Windows: Fix building of resource files when config.h isn't + used. CMake + Visual Studio can now build liblzma.dll. + + - Various fixes to the CMake support. Building static or shared + liblzma should work fine in most cases. In contrast, building + the command line tools with CMake is still clearly incomplete + and experimental and should be used for testing only. + + 5.2.5 (2020-03-17) * liblzma: diff -ur xz-5.2.5/PACKAGERS xz-5.4.3/PACKAGERS --- xz-5.2.5/PACKAGERS 2020-03-17 17:28:50 +++ xz-5.4.3/PACKAGERS 2023-05-04 17:21:05 @@ -44,6 +44,8 @@ lzmadec binary for compatibility with LZMA Utils liblzma liblzma.so.* liblzma-devel liblzma.so, liblzma.a, API headers + liblzma-doc Doxygen-generated liblzma API docs (HTML), + example programs 2. Package description @@ -109,7 +111,14 @@ This package includes the API headers, static library, and other development files related to liblzma. + liblzma-doc: + liblzma API documentation in HTML and example usage + + This package includes the Doxygen-generated liblzma API + HTML docs and example programs showing how to use liblzma. + + 3. License ---------- @@ -138,6 +147,8 @@ --enable-checks --enable-small (*) --disable-threads (*) + --disable-microlzma (*) + --disable-lzip-decoder (*) (*) These are OK when building xzdec and lzmadec as described in INSTALL. @@ -158,12 +169,13 @@ can be replaced with a symlink if your distro ships with shared copies of the common license texts. - liblzma API is currently only documented using Doxygen tags in the - API headers. It hasn't been tested much how good results Doxygen - is able to make from the tags (e.g. Doxyfile might need tweaking, - the tagging may need to be improved etc.), so it might be simpler - to just let people read docs directly from the .h files for now, - and also save quite a bit in package size at the same time. + 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 diff -ur xz-5.2.5/README xz-5.4.3/README --- xz-5.2.5/README 2020-03-17 17:28:54 +++ xz-5.4.3/README 2023-05-04 17:21:05 @@ -113,8 +113,8 @@ Since the liblzma API has similarities to the zlib API, some people may find it useful to read the zlib docs and tutorial too: - http://zlib.net/manual.html - http://zlib.net/zlib_how.html + https://zlib.net/manual.html + https://zlib.net/zlib_how.html 2. Version numbering @@ -202,19 +202,87 @@ https://translationproject.org/html/translators.html - Several strings will change in a future version of xz so if you - wish to start a new translation, look at the code in the xz git - repostiory instead of a 5.2.x release. + Below are notes and testing instructions specific to xz + translations. + Testing can be done by installing xz into a temporary directory: + ./configure --disable-shared --prefix=/tmp/xz-test + # + make -C po update-po + make install + bash debug/translation.bash | less + bash debug/translation.bash | less -S # For --list outputs + + Repeat the above as needed (no need to re-run configure though). + + 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 ------------------------------------------ 7-Zip and the p7zip port of 7-Zip support the .xz format starting from the version 9.00alpha. - http://7-zip.org/ - http://p7zip.sourceforge.net/ + https://7-zip.org/ + https://p7zip.sourceforge.net/ XZ Embedded is a limited implementation written for use in the Linux kernel, but it is also suitable for other embedded use. @@ -226,11 +294,10 @@ ---------------------- If you have questions, bug reports, patches etc. related to XZ Utils, - contact Lasse Collin (in Finnish or English). - I'm sometimes slow at replying. If you haven't got a reply within two - weeks, assume that your email has got lost and resend it or use IRC. + the project maintainers Lasse Collin and Jia Tan can be reached via + . - You can find me also from #tukaani on Freenode; my nick is Larhzu. - The channel tends to be pretty quiet, so just ask your question and - someone may wake up. + 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. diff -ur xz-5.2.5/THANKS xz-5.4.3/THANKS --- xz-5.2.5/THANKS 2020-03-17 17:28:50 +++ xz-5.4.3/THANKS 2023-05-04 17:22:00 @@ -8,35 +8,48 @@ - H. Peter Anvin - Jeff Bastian - Nelson H. F. Beebe + - Karl Beldan - Karl Berry - Anders F. Björklund - Emmanuel Blot - Melanie Blower + - Alexander Bluhm - Martin Blumenstingl - Ben Boeckel - Jakub Bogusz + - Adam Borowski - Maarten Bosmans - 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 - Mike Frysinger - Daniel Richard G. + - Tomasz Gajc + - Bjarni Ingi Gislason + - John Paul Adrian Glaubitz - Bill Glessner + - Michał Górny - Jason Gorski - Juan Manuel Guerrero - Diederik de Haas @@ -44,18 +57,26 @@ - Christian Hesse - Vincenzo Innocente - Peter Ivanov + - Nicholas Jackson + - Sam James + - Hajin Jang - Jouk Jansen - Jun I Jin - Kiyoshi Kanazawa - 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 @@ -63,12 +84,17 @@ - Xin Li - 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 @@ -77,6 +103,7 @@ - Jonathan Nieder - Andre Noll - Peter O'Gorman + - Daniel Packard - Filip Palian - Peter Pallinger - Rui Paulo @@ -88,12 +115,15 @@ - Trần Ngọc Quân - Pavel Raiskup - Ole André Vadla Ravnås + - Eric S. Raymond - Robert Readman - Bernhard Reutner-Fischer - - Eric S. Raymond + - Markus Rickert - Cristian Rodríguez - Christian von Roques + - Boud Roukema - Torsten Rupp + - Stephen Sachs - Jukka Salmi - Alexandre Sauvé - Benno Schulenberg @@ -102,11 +132,13 @@ - Dan Shechter - Stuart Shelton - Sebastian Andrzej Siewior + - Ville Skyttä - Brad Smith - Bruce Stark - Pippijn van Steenhoven - Jonathan Stott - Dan Stromberg + - Jia Tan - Vincent Torri - Paul Townsend - Mohammed Adnène Trojette @@ -117,6 +149,7 @@ - Adam Walling - Jeffrey Walton - Christian Weisgerber + - Dan Weiss - Bert Wesarg - Fredrik Wikstrom - Jim Wilcoxson diff -ur xz-5.2.5/TODO xz-5.4.3/TODO --- xz-5.2.5/TODO 2020-03-17 17:28:50 +++ xz-5.4.3/TODO 2023-05-04 17:22:00 @@ -59,8 +59,6 @@ - Implement threaded match finders. - Implement pigz-style threading in LZMA2. - Multithreaded decompression - Buffer-to-buffer coding could use less RAM (especially when decompressing LZMA1 or LZMA2). diff -ur xz-5.2.5/aclocal.m4 xz-5.4.3/aclocal.m4 --- xz-5.2.5/aclocal.m4 2020-03-17 17:29:32 +++ xz-5.4.3/aclocal.m4 2023-05-04 17:31:29 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- +# generated automatically by aclocal 1.16.5 -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,13 +14,13 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, +[m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2018 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.1], [], +m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.1])dnl +[AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -78,7 +78,7 @@ # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -130,7 +130,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -161,7 +161,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -352,7 +352,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -391,7 +391,9 @@ done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE="gmake" (or whatever is + necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -418,7 +420,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -446,6 +448,10 @@ # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl +m4_ifdef([_$0_ALREADY_INIT], + [m4_fatal([$0 expanded multiple times +]m4_defn([_$0_ALREADY_INIT]))], + [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -482,7 +488,7 @@ [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl @@ -534,6 +540,20 @@ [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +AC_SUBST([CTAGS]) +if test -z "$ETAGS"; then + ETAGS=etags +fi +AC_SUBST([ETAGS]) +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi +AC_SUBST([CSCOPE]) + AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This @@ -615,7 +635,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -636,7 +656,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2018 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -657,7 +677,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -700,7 +720,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -721,12 +741,7 @@ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then @@ -739,7 +754,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -768,7 +783,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -815,7 +830,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -834,7 +849,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -915,7 +930,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2018 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -975,7 +990,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1003,7 +1018,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2018 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1022,7 +1037,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2018 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -ur xz-5.2.5/autogen.sh xz-5.4.3/autogen.sh --- xz-5.2.5/autogen.sh 2020-03-17 17:28:50 +++ xz-5.4.3/autogen.sh 2023-05-04 17:21:05 @@ -19,15 +19,38 @@ ${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 don't want autogen.sh to exit -# with non-zero exit status. -if test "x$1" != "x--no-po4a"; then +# 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 + case $arg in + "--no-po4a") + generate_po4a="n" + ;; + + "--no-doxygen") + generate_doxygen="n" + ;; + esac +done + +if test "$generate_po4a" != "n"; then cd po4a sh update-po + cd .. +fi + +if test "$generate_doxygen" != "n"; then + cd doxygen + sh update-doxygen + cd .. fi exit 0 diff -ur xz-5.2.5/build-aux/compile xz-5.4.3/build-aux/compile --- xz-5.2.5/build-aux/compile 2020-03-17 17:29:35 +++ xz-5.4.3/build-aux/compile 2023-05-04 17:31:30 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ MINGW*) file_conv=mingw ;; - CYGWIN*) + CYGWIN* | MSYS*) file_conv=cygwin ;; *) @@ -67,7 +67,7 @@ mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin/*) + cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) diff -ur xz-5.2.5/build-aux/config.guess xz-5.4.3/build-aux/config.guess --- xz-5.2.5/build-aux/config.guess 2020-03-17 17:29:35 +++ xz-5.4.3/build-aux/config.guess 2023-05-04 17:31:30 @@ -1,12 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. -timestamp='2018-03-08' +# shellcheck disable=SC2006,SC2268 # see below for rationale +timestamp='2022-01-09' + # This file 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 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -27,11 +29,19 @@ # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -50,7 +60,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,7 +94,8 @@ exit 1 fi -trap 'exit 1' 1 2 15 +# Just in case it came from the environment. +GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires @@ -96,73 +107,90 @@ # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "$UNAME_SYSTEM" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval "$set_cc_for_build" + set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl #endif + #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -174,12 +202,12 @@ # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; @@ -188,18 +216,18 @@ earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-unknown + machine=${arch}${endian}-unknown ;; - *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval "$set_cc_for_build" + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -215,7 +243,7 @@ ;; esac # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` @@ -226,7 +254,7 @@ # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "$UNAME_VERSION" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; @@ -237,45 +265,57 @@ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi}" - exit ;; + GUESS=$machine-${os}${release}${abi-} + ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; *:ekkoBSD:*:*) - echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; *:SolidBSD:*:*) - echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; *:MirBSD:*:*) - echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; + GUESS=$UNAME_MACHINE-unknown-redox + ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + GUESS=mips-dec-osf1 + ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -289,7 +329,7 @@ # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") @@ -326,117 +366,121 @@ # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; + GUESS=m68k-unknown-sysv4 + ;; *:[Aa]miga[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-amigaos - exit ;; + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; *:[Mm]orph[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-morphos - exit ;; + GUESS=$UNAME_MACHINE-unknown-morphos + ;; *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; + GUESS=i370-ibm-openedition + ;; *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; + GUESS=s390-ibm-zvmoe + ;; *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; + GUESS=powerpc-ibm-os400 + ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix"$UNAME_RELEASE" - exit ;; + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; + GUESS=arm-unknown-riscos + ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; + GUESS=hppa1.1-hitachi-hiuxmpp + ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; + GUESS=pyramid-pyramid-svr4 + ;; DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; + GUESS=sparc-icl-nx6 + ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux"$UNAME_RELEASE" - exit ;; + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + case `/bin/arch` in sun3) - echo m68k-sun-sunos"$UNAME_RELEASE" + GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) - echo sparc-sun-sunos"$UNAME_RELEASE" + GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac - exit ;; + ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -446,43 +490,43 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; m68k:machten:*:*) - echo m68k-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; powerpc:machten:*:*) - echo powerpc-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; + GUESS=mips-dec-mach_bsd4.3 + ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix"$UNAME_RELEASE" - exit ;; + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ @@ -508,78 +552,79 @@ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos"$UNAME_RELEASE" - exit ;; + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; + GUESS=powerpc-motorola-powermax + ;; Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; + GUESS=powerpc-harris-powerunix + ;; m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; + GUESS=m88k-harris-cxux7 + ;; m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; + GUESS=m88k-motorola-sysv4 + ;; m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux"$UNAME_RELEASE" + GUESS=m88k-dg-dgux$UNAME_RELEASE else - echo m88k-dg-dguxbcs"$UNAME_RELEASE" + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else - echo i586-dg-dgux"$UNAME_RELEASE" + GUESS=i586-dg-dgux$UNAME_RELEASE fi - exit ;; + ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; + GUESS=m88k-dolphin-sysv3 + ;; M88*:*:R3*:*) # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; + GUESS=m88k-tektronix-sysv3 + ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; + GUESS=m68k-tektronix-bsd + ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" - exit ;; + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; + GUESS=i386-ibm-aix + ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include @@ -593,16 +638,16 @@ EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then - echo "$SYSTEM_NAME" + GUESS=$SYSTEM_NAME else - echo rs6000-ibm-aix3.2.5 + GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 + GUESS=rs6000-ibm-aix3.2.4 else - echo rs6000-ibm-aix3.2 + GUESS=rs6000-ibm-aix3.2 fi - exit ;; + ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then @@ -610,57 +655,57 @@ else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$IBM_ARCH"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; + GUESS=rs6000-ibm-aix + ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) - echo romp-ibm-bsd4.4 - exit ;; + GUESS=romp-ibm-bsd4.4 + ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; + GUESS=rs6000-bull-bosx + ;; DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; + GUESS=m68k-bull-sysv3 + ;; 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; + GUESS=m68k-hp-bsd + ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; + GUESS=m68k-hp-bsd4.4 + ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - case "$UNAME_MACHINE" in + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "$sc_cpu_version" in + case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "$sc_kernel_bits" in + case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" + if test "$HP_ARCH" = ""; then + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE @@ -698,9 +743,9 @@ test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then - eval "$set_cc_for_build" + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -719,14 +764,14 @@ HP_ARCH=hppa64 fi fi - echo "$HP_ARCH"-hp-hpux"$HPUX_REV" - exit ;; + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux"$HPUX_REV" - exit ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; 3050*:HI-UX:*:*) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int @@ -754,36 +799,36 @@ EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; + GUESS=unknown-hitachi-hiuxwe2 + ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) - echo hppa1.1-hp-bsd - exit ;; + GUESS=hppa1.1-hp-bsd + ;; 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; + GUESS=hppa1.0-hp-bsd + ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; + GUESS=hppa1.0-hp-mpeix + ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) - echo hppa1.1-hp-osf - exit ;; + GUESS=hppa1.1-hp-osf + ;; hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; + GUESS=hppa1.0-hp-osf + ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo "$UNAME_MACHINE"-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk else - echo "$UNAME_MACHINE"-unknown-osf1 + GUESS=$UNAME_MACHINE-unknown-osf1 fi - exit ;; + ;; parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; + GUESS=hppa1.1-hp-lites + ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; + GUESS=c1-convex-bsd + ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd @@ -791,17 +836,18 @@ fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; + GUESS=c34-convex-bsd + ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; + GUESS=c38-convex-bsd + ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; + GUESS=c4-convex-bsd + ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ @@ -809,103 +855,129 @@ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; *:BSD/OS:*:*) - echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi + else + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf + fi + ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case "$UNAME_PROCESSOR" in + case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; + GUESS=$UNAME_MACHINE-pc-cygwin + ;; *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - exit ;; + GUESS=$UNAME_MACHINE-pc-msys + ;; i*:PW*:*) - echo "$UNAME_MACHINE"-pc-pw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) - case "$UNAME_MACHINE" in + case $UNAME_MACHINE in x86) - echo i586-pc-interix"$UNAME_RELEASE" - exit ;; + GUESS=i586-pc-interix$UNAME_RELEASE + ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; IA64) - echo ia64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; esac ;; i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; + GUESS=$UNAME_MACHINE-pc-uwin + ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; + GUESS=x86_64-pc-cygwin + ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" - exit ;; + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" - exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix - exit ;; + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + *:Minix:*:*) + GUESS=$UNAME_MACHINE-unknown-minix + ;; aarch64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -916,183 +988,225 @@ esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; arm*:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi - exit ;; + ;; avr32*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; cris:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; crisv32:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; frv:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; hexagon:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; ia64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; k1om:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m32r*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m68*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; + GUESS=or1k-unknown-linux-$LIBC + ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; padre:Linux:*:*) - echo sparc-unknown-linux-"$LIBC" - exit ;; + GUESS=sparc-unknown-linux-$LIBC + ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-"$LIBC" - exit ;; + GUESS=hppa64-unknown-linux-$LIBC + ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; - PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; - *) echo hppa-unknown-linux-"$LIBC" ;; + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; esac - exit ;; + ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64-unknown-linux-$LIBC + ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc-unknown-linux-$LIBC + ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64le-unknown-linux-$LIBC + ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-"$LIBC" - exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; s390:Linux:*:* | s390x:Linux:*:*) - echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; sh64*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sh*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; tile*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; vax:Linux:*:*) - echo "$UNAME_MACHINE"-dec-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; x86_64:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI=${LIBC}x32 + fi + fi + GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI + ;; xtensa*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; + GUESS=i386-sequent-sysv4 + ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" - exit ;; + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo "$UNAME_MACHINE"-pc-os2-emx - exit ;; + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; i*86:XTS-300:*:STOP) - echo "$UNAME_MACHINE"-unknown-stop - exit ;; + GUESS=$UNAME_MACHINE-unknown-stop + ;; i*86:atheos:*:*) - echo "$UNAME_MACHINE"-unknown-atheos - exit ;; + GUESS=$UNAME_MACHINE-unknown-atheos + ;; i*86:syllable:*:*) - echo "$UNAME_MACHINE"-pc-syllable - exit ;; + GUESS=$UNAME_MACHINE-pc-syllable + ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; i*86:*DOS:*:*) - echo "$UNAME_MACHINE"-pc-msdosdjgpp - exit ;; + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi - exit ;; + ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in @@ -1100,12 +1214,12 @@ *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" - exit ;; + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1115,11 +1229,11 @@ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv32 + GUESS=$UNAME_MACHINE-pc-sysv32 fi - exit ;; + ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about @@ -1127,31 +1241,31 @@ # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; + GUESS=i586-pc-msdosdjgpp + ;; Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; + GUESS=i386-pc-mach3 + ;; paragon:*:*:*) - echo i860-intel-osf1 - exit ;; + GUESS=i860-intel-osf1 + ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi - exit ;; + ;; mini*:CTIX:SYS*5:*) # "miniframe" - echo m68010-convergent-sysv - exit ;; + GUESS=m68010-convergent-sysv + ;; mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; + GUESS=m68k-convergent-sysv + ;; M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; + GUESS=m68k-diab-dnix + ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) @@ -1176,249 +1290,404 @@ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; + GUESS=m68k-atari-sysv4 + ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv"$UNAME_RELEASE" - exit ;; + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo "$UNAME_MACHINE"-sni-sysv4 + GUESS=$UNAME_MACHINE-sni-sysv4 else - echo ns32k-sni-sysv + GUESS=ns32k-sni-sysv fi - exit ;; + ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; + GUESS=hppa1.1-stratus-sysv4 + ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; + GUESS=i860-stratus-sysv4 + ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo "$UNAME_MACHINE"-stratus-vos - exit ;; + GUESS=$UNAME_MACHINE-stratus-vos + ;; *:VOS:*:*) # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; + GUESS=hppa1.1-stratus-vos + ;; mc68*:A/UX:*:*) - echo m68k-apple-aux"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; + GUESS=mips-sony-newsos6 + ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv"$UNAME_RELEASE" + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE else - echo mips-unknown-sysv"$UNAME_RELEASE" + GUESS=mips-unknown-sysv$UNAME_RELEASE fi - exit ;; + ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; + GUESS=powerpc-be-beos + ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; + GUESS=powerpc-apple-beos + ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; + GUESS=i586-pc-beos + ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; + GUESS=i586-pc-haiku + ;; x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; + GUESS=x86_64-unknown-haiku + ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; *:Rhapsody:*:*) - echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; + arm64:Darwin:*:*) + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; *:QNX:*:4*) - echo i386-pc-qnx - exit ;; + GUESS=i386-pc-qnx + ;; NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; + GUESS=mips-compaq-nonstopux + ;; BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; + GUESS=bs2000-siemens-sysv + ;; DS/*:UNIX_System_V:*:*) - echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = 386; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype fi - echo "$UNAME_MACHINE"-unknown-plan9 - exit ;; + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; + GUESS=pdp10-unknown-tops10 + ;; *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; + GUESS=pdp10-unknown-tenex + ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; + GUESS=pdp10-dec-tops20 + ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; + GUESS=pdp10-xkl-tops20 + ;; *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; + GUESS=pdp10-unknown-tops20 + ;; *:ITS:*:*) - echo pdp10-unknown-its - exit ;; + GUESS=pdp10-unknown-its + ;; SEI:*:*:SEIUX) - echo mips-sei-seiux"$UNAME_RELEASE" - exit ;; + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "$UNAME_MACHINE" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; + GUESS=i386-pc-xenix + ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" - exit ;; + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; i*86:rdos:*:*) - echo "$UNAME_MACHINE"-pc-rdos - exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros - exit ;; + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; x86_64:VMkernel:*:*) - echo "$UNAME_MACHINE"-unknown-esx - exit ;; + GUESS=$UNAME_MACHINE-unknown-esx + ;; amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; + GUESS=x86_64-unknown-onefs + ;; + *:Unleashed:*:*) + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; esac +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + echo "$0: unable to guess system type" >&2 -case "$UNAME_MACHINE:$UNAME_SYSTEM" in +case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <, 1996 # @@ -371,7 +371,7 @@ hardcode_direct=yes hardcode_minus_L=yes ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; @@ -547,7 +547,7 @@ freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) diff -ur xz-5.2.5/build-aux/config.sub xz-5.4.3/build-aux/config.sub --- xz-5.2.5/build-aux/config.sub 2020-03-17 17:29:35 +++ xz-5.4.3/build-aux/config.sub 2023-05-04 17:31:30 @@ -1,12 +1,14 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2018-03-08' +# shellcheck disable=SC2006,SC2268 # see below for rationale +timestamp='2021-12-25' + # This file 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 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -33,7 +35,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,6 +52,13 @@ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -67,7 +76,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,7 +98,7 @@ - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) @@ -110,1223 +119,1186 @@ exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -bluegene*) - os=-cnk + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -scout) + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - c54x) - basic_machine=tic54x-unknown + op50n) + cpu=hppa1.1 + vendor=oki ;; - c55x) - basic_machine=tic55x-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - c6x) - basic_machine=tic6x-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine + orion105) + cpu=clipper + vendor=highlevel ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - ms1) - basic_machine=mt-unknown - ;; - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att + cpu=we32k + vendor=att ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk + cpu=powerpc + vendor=ibm + basic_os=cnk ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola + cpu=m68k + vendor=motorola ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; dpx2*) - basic_machine=m68k-bull - os=-sysv3 + cpu=m68k + vendor=bull + basic_os=sysv3 ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" + encore | umax | mmax) + cpu=ns32k + vendor=encore ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; elxsi) - basic_machine=elxsi-elxsi - os=-bsd + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns + cpu=ns32k + vendor=ns ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 ;; - i386mach) - basic_machine=i386-mach - os=-mach + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; - vsta) - basic_machine=i386-unknown - os=-vsta - ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent + cpu=m68000 + vendor=convergent ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos + cpu=mips + vendor=sony + basic_os=newsos ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould + cpu=np1 + vendor=gould ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem - ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti + cpu=m68k + vendor=tti ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + pc532) + cpu=ns32k + vendor=pc532 ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; pn) - basic_machine=pn-gould + cpu=pn + vendor=gould ;; - power) basic_machine=power-ibm + power) + cpu=power + vendor=ibm ;; - ppc | ppcbe) basic_machine=powerpc-unknown + ps2) + cpu=i386 + vendor=ibm ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + rm[46]00) + cpu=mips + vendor=siemens ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown + rtpc | rtpc-*) + cpu=romp + vendor=ibm ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - ppc64) basic_machine=powerpc64-unknown + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + tower | tower-32) + cpu=m68k + vendor=ncr ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + w65) + cpu=w65 + vendor=wdc ;; - ps2) - basic_machine=i386-ibm + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - pw32) - basic_machine=i586-unknown - os=-pw32 + none) + cpu=none + vendor=none ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - rdos32) - basic_machine=i386-pc - os=-rdos + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc32 | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r3 | mipsisa32r3el \ + | mipsisa32r5 | mipsisa32r5el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r3 | mipsisa64r3el \ + | mipsisa64r5 | mipsisa64r5el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1334,203 +1306,215 @@ # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1543,254 +1527,359 @@ # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf ;; + clipper-intergraph) + os=clix + ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; *-next) - os=-nextstep + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint ;; + *-wrs) + os=vxworks + ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | relibc* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ + | fiwix* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) vendor=ibm ;; - -os400*) + *-os400*) vendor=ibm ;; - -ptx*) + s390-* | s390x-*) + vendor=ibm + ;; + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo "$basic_machine$os" +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: diff -ur xz-5.2.5/build-aux/depcomp xz-5.4.3/build-aux/depcomp --- xz-5.2.5/build-aux/depcomp 2020-03-17 17:29:36 +++ xz-5.4.3/build-aux/depcomp 2023-05-04 17:31:30 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # 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 diff -ur xz-5.2.5/build-aux/install-sh xz-5.4.3/build-aux/install-sh --- xz-5.2.5/build-aux/install-sh 2020-03-17 17:29:35 +++ xz-5.4.3/build-aux/install-sh 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2018-03-11.20; # UTC +scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -69,6 +69,11 @@ # Desired mode of installed file. mode=0755 +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= @@ -99,18 +104,28 @@ --version display version info and exit. -c (ignored) - -C install only if different (preserve the last data modification time) + -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG + +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. + +If -S is not specified, no backups are attempted. + +Email bug reports to bug-automake@gnu.org. +Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do @@ -137,8 +152,13 @@ -o) chowncmd="$chownprog $2" shift;; + -p) cpprog="$cpprog -p";; + -s) stripcmd=$stripprog;; + -S) backupsuffix="$2" + shift;; + -t) is_target_a_directory=always dst_arg=$2 @@ -255,6 +275,10 @@ dstdir=$dst test -d "$dstdir" dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command @@ -301,22 +325,6 @@ if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then @@ -326,52 +334,49 @@ fi posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; esac if @@ -382,7 +387,7 @@ then : else - # The umask is ridiculous, or mkdir does not conform to POSIX, + # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. @@ -411,7 +416,7 @@ prefixes= else if $posix_mkdir; then - (umask=$mkdir_umask && + (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 @@ -451,7 +456,18 @@ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # @@ -477,6 +493,13 @@ then rm -f "$dsttmp" else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || @@ -491,9 +514,9 @@ # file should still install successfully. { test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || + $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 diff -ur xz-5.2.5/build-aux/ltmain.sh xz-5.4.3/build-aux/ltmain.sh --- xz-5.2.5/build-aux/ltmain.sh 2020-03-17 17:29:27 +++ xz-5.4.3/build-aux/ltmain.sh 2023-05-04 17:31:27 @@ -1,12 +1,12 @@ -#! /bin/sh +#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2018-07-24.06 +## by inline-source v2019-02-19.15 -# libtool (GNU libtool) 2.4.6.42-b88ce-dirty +# libtool (GNU libtool) 2.4.7.4-1ec8f-dirty # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -31,8 +31,8 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6.42-b88ce-dirty -package_revision=2.4.6.42 +VERSION=2.4.7.4-1ec8f-dirty +package_revision=2.4.7.4 ## ------ ## @@ -64,7 +64,7 @@ # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2018-07-24.06; # UTC +scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 @@ -72,10 +72,10 @@ # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # -# Copyright (C) 2004-2018 Bootstrap Authors +# Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license -# , and GPL version 3 or later +# , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` @@ -130,6 +130,12 @@ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done +# These NLS vars are set unconditionally (bootstrap issue #24). Unset those +# in case the environment reset is needed later and the $save_* variant is not +# defined (see the code above). +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' @@ -368,7 +374,36 @@ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" +# require_check_ifs_backslash +# --------------------------- +# Check if we can use backslash as IFS='\' separator, and set +# $check_ifs_backshlash_broken to ':' or 'false'. +require_check_ifs_backslash=func_require_check_ifs_backslash +func_require_check_ifs_backslash () +{ + _G_save_IFS=$IFS + IFS='\' + _G_check_ifs_backshlash='a\\b' + for _G_i in $_G_check_ifs_backshlash + do + case $_G_i in + a) + check_ifs_backshlash_broken=false + ;; + '') + break + ;; + *) + check_ifs_backshlash_broken=: + break + ;; + esac + done + IFS=$_G_save_IFS + require_check_ifs_backslash=: +} + ## ----------------- ## ## Global variables. ## ## ----------------- ## @@ -1108,6 +1143,8 @@ { $debug_cmd + $require_check_ifs_backslash + func_quote_portable_result=$2 # one-time-loop (easy break) @@ -1122,8 +1159,10 @@ # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) - case $func_quote_portable_result in - *[\[\*\?]*) + # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string + # contains the shell wildcard characters. + case $check_ifs_backshlash_broken$func_quote_portable_result in + :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break @@ -1497,10 +1536,10 @@ # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # -# Copyright (C) 2010-2018 Bootstrap Authors +# Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license -# , and GPL version 3 or later +# , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` @@ -1510,7 +1549,7 @@ # # Set a version string for this script. -scriptversion=2018-07-24.06; # UTC +scriptversion=2019-02-19.15; # UTC ## ------ ## @@ -2056,7 +2095,7 @@ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ + test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals @@ -2082,7 +2121,7 @@ { $debug_cmd - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt @@ -2176,7 +2215,7 @@ # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.6.42-b88ce-dirty' +scriptversion='(GNU libtool) 2.4.7.4-1ec8f-dirty' # func_echo ARG... @@ -2267,7 +2306,7 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6.42-b88ce-dirty + version: $progname (GNU libtool) 2.4.7.4-1ec8f-dirty automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` @@ -3862,7 +3901,8 @@ -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler + -Wc,FLAG + -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. @@ -3968,6 +4008,8 @@ -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wa,FLAG + -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) @@ -7064,6 +7106,13 @@ prev= continue ;; + xassembler) + func_append compiler_flags " -Xassembler $qarg" + prev= + func_append compile_command " -Xassembler $qarg" + func_append finalize_command " -Xassembler $qarg" + continue + ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" @@ -7234,7 +7283,7 @@ # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; @@ -7254,7 +7303,7 @@ esac elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -7284,8 +7333,20 @@ prev=xcompiler continue ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. + -pthread) + case $host in + *solaris2*) ;; + *) + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + ;; + esac + continue + ;; + -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" @@ -7452,6 +7513,11 @@ arg=$func_stripname_result ;; + -Xassembler) + prev=xassembler + continue + ;; + -Xcompiler) prev=xcompiler continue @@ -7491,10 +7557,12 @@ # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC + # -Wa,* Pass flags directly to the assembler + # -Werror, -Werror=* Report (specified) warnings as errors -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*|-fuse-ld=*) + -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*|-Werror|-Werror=*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" @@ -8851,7 +8919,7 @@ test CXX = "$tagname" && { case $host_os in linux*) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi @@ -9024,7 +9092,7 @@ # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) + darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor @@ -9115,7 +9183,7 @@ versuffix=.$current.$revision ;; - freebsd-elf) + freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision @@ -9341,7 +9409,7 @@ *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) diff -ur xz-5.2.5/build-aux/missing xz-5.4.3/build-aux/missing --- xz-5.2.5/build-aux/missing 2020-03-17 17:29:35 +++ xz-5.4.3/build-aux/missing 2023-05-04 17:31:30 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify Only in xz-5.4.3/build-aux: test-driver Only in xz-5.4.3: cmake diff -ur xz-5.2.5/config.h.in xz-5.4.3/config.h.in --- xz-5.2.5/config.h.in 2020-03-17 17:29:33 +++ xz-5.4.3/config.h.in 2023-05-04 17:32:19 @@ -31,10 +31,6 @@ /* Define to 1 if you have the `CC_SHA256_Init' function. */ #undef HAVE_CC_SHA256_INIT -/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the - CoreFoundation framework. */ -#undef HAVE_CFLOCALECOPYCURRENT - /* Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES @@ -55,27 +51,28 @@ /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME +/* Define to 1 if `CLOCK_MONOTONIC' is declared in . */ +#undef HAVE_CLOCK_MONOTONIC + /* Define to 1 if you have the header file. */ #undef HAVE_COMMONCRYPTO_COMMONDIGEST_H +/* Define to 1 if you have the header file. */ +#undef HAVE_CPUID_H + /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT -/* Define to 1 if you have the declaration of `CLOCK_MONOTONIC', and to 0 if - you don't. */ -#undef HAVE_DECL_CLOCK_MONOTONIC - -/* Define to 1 if you have the declaration of `program_invocation_name', and - to 0 if you don't. */ -#undef HAVE_DECL_PROGRAM_INVOCATION_NAME - /* Define to 1 if any of HAVE_DECODER_foo have been defined. */ #undef HAVE_DECODERS /* Define to 1 if arm decoder is enabled. */ #undef HAVE_DECODER_ARM +/* Define to 1 if arm64 decoder is enabled. */ +#undef HAVE_DECODER_ARM64 + /* Define to 1 if armthumb decoder is enabled. */ #undef HAVE_DECODER_ARMTHUMB @@ -109,6 +106,9 @@ /* Define to 1 if arm encoder is enabled. */ #undef HAVE_ENCODER_ARM +/* Define to 1 if arm64 encoder is enabled. */ +#undef HAVE_ENCODER_ARM64 + /* Define to 1 if armthumb encoder is enabled. */ #undef HAVE_ENCODER_ARMTHUMB @@ -136,6 +136,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H +/* Define to 1 if __attribute__((__constructor__)) is supported for functions. + */ +#undef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR + /* Define to 1 if you have the `futimens' function. */ #undef HAVE_FUTIMENS @@ -166,12 +170,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#undef HAVE_LZIP_DECODER + /* Define to 1 if mbrtowc and mbstate_t are properly declared. */ #undef HAVE_MBRTOWC -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - /* Define to 1 to enable bt2 match finder. */ #undef HAVE_MF_BT2 @@ -187,12 +191,21 @@ /* Define to 1 to enable hc4 match finder. */ #undef HAVE_MF_HC4 +/* Define to 1 if you have the header file. */ +#undef HAVE_MINIX_CONFIG_H + /* Define to 1 if getopt.h declares extern int optreset. */ #undef HAVE_OPTRESET +/* Define to 1 if you have the `pledge' function. */ +#undef HAVE_PLEDGE + /* Define to 1 if you have the `posix_fadvise' function. */ #undef HAVE_POSIX_FADVISE +/* Define to 1 if `program_invocation_name' is declared in . */ +#undef HAVE_PROGRAM_INVOCATION_NAME + /* Define to 1 if you have the `pthread_condattr_setclock' function. */ #undef HAVE_PTHREAD_CONDATTR_SETCLOCK @@ -226,6 +239,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H @@ -250,6 +266,13 @@ /* Define to 1 if `st_uatime' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_UATIME +/* 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. */ +#undef HAVE_SYMBOL_VERSIONS_LINUX + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BYTEORDER_H @@ -277,6 +300,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to 1 if _mm_set_epi64x and _mm_clmulepi64_si128 are usable. See + configure.ac for details. */ +#undef HAVE_USABLE_CLMUL + /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME @@ -287,6 +314,9 @@ declarations. */ #undef HAVE_VISIBILITY +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + /* Define to 1 if you have the `wcwidth' function. */ #undef HAVE_WCWIDTH @@ -352,7 +382,9 @@ /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if the number of available CPU cores can be detected with @@ -375,8 +407,8 @@ sysctl(). */ #undef TUKLIB_CPUCORES_SYSCTL -/* Define to 1 if the system supports fast unaligned access to 16-bit and - 32-bit integers. */ +/* Define to 1 if the system supports fast unaligned access to 16-bit, 32-bit, + and 64-bit integers. */ #undef TUKLIB_FAST_UNALIGNED_ACCESS /* Define to 1 if the amount of physical memory can be detected with @@ -416,21 +448,87 @@ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif -/* Enable threading extensions on Solaris. */ +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +# undef _MINIX +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +# undef _POSIX_SOURCE +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +# undef _POSIX_1_SOURCE +#endif +/* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# undef __STDC_WANT_IEC_60559_BFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# undef __STDC_WANT_IEC_60559_DFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# undef __STDC_WANT_IEC_60559_TYPES_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# undef __STDC_WANT_LIB_EXT2__ +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# undef __STDC_WANT_MATH_SPEC_FUNCS__ +#endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +# undef _XOPEN_SOURCE #endif @@ -449,26 +547,11 @@ # endif #endif -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES - -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the diff -ur xz-5.2.5/configure xz-5.4.3/configure --- xz-5.2.5/configure 2020-03-17 17:29:33 +++ xz-5.4.3/configure 2023-05-04 17:31:29 @@ -1,11 +1,12 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for XZ Utils 5.2.5. +# Generated by GNU Autoconf 2.71 for XZ Utils 5.4.3. # -# Report bugs to . +# Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -16,14 +17,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -33,46 +36,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -81,13 +84,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -96,8 +92,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -109,31 +109,11 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then @@ -154,20 +134,22 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -187,12 +169,15 @@ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -207,30 +192,38 @@ PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -238,14 +231,21 @@ esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -263,22 +263,23 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: lasse.collin@tukaani.org about your system, including -$0: any error possibly output before this message. Then -$0: install a modern shell, or manually run the script -$0: under such a shell if you do have one." + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and xz@tukaani.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." fi exit 1 fi @@ -302,6 +303,7 @@ } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -319,6 +321,14 @@ as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -333,7 +343,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -342,7 +352,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -381,12 +391,13 @@ # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -398,18 +409,27 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -421,9 +441,9 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -450,7 +470,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -494,7 +514,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -508,6 +528,10 @@ exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -521,6 +545,13 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -590,48 +621,44 @@ # Identity of this package. PACKAGE_NAME='XZ Utils' PACKAGE_TARNAME='xz' -PACKAGE_VERSION='5.2.5' -PACKAGE_STRING='XZ Utils 5.2.5' -PACKAGE_BUGREPORT='lasse.collin@tukaani.org' +PACKAGE_VERSION='5.4.3' +PACKAGE_STRING='XZ Utils 5.4.3' +PACKAGE_BUGREPORT='xz@tukaani.org' PACKAGE_URL='https://tukaani.org/xz/' ac_unique_file="src/liblzma/common/common.h" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= gt_needs= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE @@ -664,6 +691,10 @@ MSGFMT GETTEXT_MACRO_VERSION USE_NLS +COND_SYMVERS_GENERIC_FALSE +COND_SYMVERS_GENERIC_TRUE +COND_SYMVERS_LINUX_FALSE +COND_SYMVERS_LINUX_TRUE COND_SHARED_FALSE COND_SHARED_TRUE RC @@ -677,6 +708,7 @@ RANLIB ac_ct_AR AR +FILECMD NM ac_ct_DUMPBIN DUMPBIN @@ -690,12 +722,13 @@ COND_THREADS_TRUE PTHREAD_CFLAGS PTHREAD_LIBS +PTHREAD_CXX PTHREAD_CC ax_pthread_config -SED EGREP GREP CPP +SED am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE @@ -722,6 +755,9 @@ AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V +CSCOPE +ETAGS +CTAGS am__untar am__tar AMTAR @@ -748,8 +784,6 @@ PREFERABLY_POSIX_SHELL POSIX_SHELL enable_path_for_scripts -COND_SYMVERS_FALSE -COND_SYMVERS_TRUE COND_DOC_FALSE COND_DOC_TRUE COND_SCRIPTS_FALSE @@ -766,10 +800,12 @@ COND_XZ_TRUE COND_SMALL_FALSE COND_SMALL_TRUE -COND_ASM_X86_64_FALSE -COND_ASM_X86_64_TRUE COND_ASM_X86_FALSE COND_ASM_X86_TRUE +COND_LZIP_DECODER_FALSE +COND_LZIP_DECODER_TRUE +COND_MICROLZMA_FALSE +COND_MICROLZMA_TRUE COND_CHECK_SHA256_FALSE COND_CHECK_SHA256_TRUE COND_CHECK_CRC64_FALSE @@ -794,6 +830,12 @@ COND_ENCODER_SPARC_TRUE COND_FILTER_SPARC_FALSE COND_FILTER_SPARC_TRUE +COND_DECODER_ARM64_FALSE +COND_DECODER_ARM64_TRUE +COND_ENCODER_ARM64_FALSE +COND_ENCODER_ARM64_TRUE +COND_FILTER_ARM64_FALSE +COND_FILTER_ARM64_TRUE COND_DECODER_ARMTHUMB_FALSE COND_DECODER_ARMTHUMB_TRUE COND_ENCODER_ARMTHUMB_FALSE @@ -876,6 +918,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -905,7 +948,10 @@ enable_match_finders enable_checks enable_external_sha256 +enable_microlzma +enable_lzip_decoder enable_assembler +enable_clmul_crc enable_small enable_threads enable_assume_ram @@ -916,7 +962,6 @@ enable_lzma_links enable_scripts enable_doc -enable_symbol_versions enable_sandbox enable_path_for_scripts enable_silent_rules @@ -929,6 +974,7 @@ with_gnu_ld with_sysroot enable_libtool_lock +enable_symbol_versions enable_nls enable_rpath with_libiconv_prefix @@ -988,6 +1034,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1017,8 +1064,6 @@ *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1059,9 +1104,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1085,9 +1130,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1240,6 +1285,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1289,9 +1343,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1305,9 +1359,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1351,9 +1405,9 @@ *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1369,7 +1423,7 @@ case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1377,7 +1431,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1433,7 +1487,7 @@ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1490,7 +1544,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures XZ Utils 5.2.5 to adapt to many kinds of systems. +\`configure' configures XZ Utils 5.4.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1530,6 +1584,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1560,7 +1615,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of XZ Utils 5.2.5:";; + short | recursive ) echo "Configuration of XZ Utils 5.4.3:";; esac cat <<\_ACEOF @@ -1571,7 +1626,7 @@ --enable-debug Enable debugging code. --enable-encoders=LIST Comma-separated list of encoders to build. Default=all. Available encoders: lzma1 lzma2 delta - x86 powerpc ia64 arm armthumb sparc + x86 powerpc ia64 arm armthumb arm64 sparc --enable-decoders=LIST Comma-separated list of decoders to build. Default=all. Available decoders are the same as available encoders. @@ -1586,8 +1641,14 @@ --enable-external-sha256 Use SHA-256 code from the operating system. See INSTALL for possible subtle problems. + --disable-microlzma Do not build MicroLZMA encoder and decoder. It is + needed by specific applications only, for example, + erofs-utils. + --disable-lzip-decoder Disable decompression support for .lz (lzip) files. --disable-assembler Do not use assembler optimizations even if such exist for the architecture. + --disable-clmul-crc Do not use carryless multiplication for CRC + calculation even if support for it is detected. --enable-small Make liblzma smaller and a little slower. This is disabled by default to optimize for speed. --enable-threads=METHOD Supported METHODS are `yes', `no', `posix', `win95', @@ -1609,12 +1670,8 @@ xzmore, and their symlinks --disable-doc do not install documentation files to docdir (man pages will still be installed) - --enable-symbol-versions - Use symbol versioning for liblzma. Enabled by - default on GNU/Linux, other GNU-based systems, and - FreeBSD. - --enable-sandbox=METHOD Sandboxing METHOD can be `auto', `no', or - `capsicum'. The default is `auto' which enables + --enable-sandbox=METHOD Sandboxing METHOD can be `auto', `no', `capsicum', + or `pledge'. The default is `auto' which enables sandboxing if a supported sandboxing method is found. --enable-path-for-scripts=PREFIX @@ -1633,14 +1690,18 @@ --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) + --enable-symbol-versions + Use symbol versioning for liblzma. Enabled by + default on GNU/Linux, other GNU-based systems, and + FreeBSD. --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-largefile omit support for large files --enable-unaligned-access Enable if the system supports *fast* unaligned - memory access with 16-bit and 32-bit integers. By - default, this is enabled only on x86, x86_64, and - big endian PowerPC. + memory access with 16-bit, 32-bit, and 64-bit + integers. By default, this is enabled only on x86, + x86_64, big endian PowerPC, and some ARM systems. --enable-unsafe-type-punning This introduces strict aliasing violations and may result in broken code. However, this might improve @@ -1684,7 +1745,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to . XZ Utils home page: . _ACEOF ac_status=$? @@ -1701,9 +1762,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1731,7 +1792,8 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1739,7 +1801,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1748,10 +1810,10 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -XZ Utils configure 5.2.5 -generated by GNU Autoconf 2.69 +XZ Utils configure 5.4.3 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1768,14 +1830,14 @@ ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1783,14 +1845,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1800,176 +1863,6 @@ } # ac_fn_c_try_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## --------------------------------------- ## -## Report this to lasse.collin@tukaani.org ## -## --------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in @@ -1977,26 +1870,28 @@ ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -2007,14 +1902,14 @@ ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2022,17 +1917,18 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2047,17 +1943,56 @@ } # ac_fn_c_try_link +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2065,16 +2000,9 @@ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + which can conflict with char $2 (); below. */ -#ifdef __STDC__ -# include -#else -# include -#endif - +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2092,47 +2020,51 @@ #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2146,20 +2078,66 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2167,17 +2145,18 @@ ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2185,12 +2164,13 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2198,18 +2178,19 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2221,11 +2202,12 @@ ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2235,7 +2217,7 @@ /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2245,7 +2227,8 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2253,17 +2236,18 @@ eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t @@ -2275,11 +2259,12 @@ ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +printf %s "checking for int$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2290,7 +2275,7 @@ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2300,13 +2285,14 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2317,9 +2303,10 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2327,19 +2314,20 @@ eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2358,7 +2346,7 @@ /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2368,14 +2356,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2385,9 +2374,10 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2395,14 +2385,14 @@ fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2412,14 +2402,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2429,9 +2420,10 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2439,14 +2431,14 @@ fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2454,7 +2446,7 @@ /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2464,12 +2456,13 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2479,12 +2472,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include #include int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -2512,9 +2505,10 @@ return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +printf %s "checking for $2.$3... " >&6; } +if eval test \${$4+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (ac_aggr.$3) @@ -2552,14 +2547,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2568,29 +2564,50 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by XZ Utils $as_me 5.2.5, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by XZ Utils $as_me 5.4.3, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2623,8 +2640,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2659,7 +2680,7 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2694,11 +2715,13 @@ # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2709,8 +2732,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2734,7 +2757,7 @@ ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2742,14 +2765,14 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2757,15 +2780,15 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2773,8 +2796,8 @@ echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2788,63 +2811,48 @@ # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2854,20 +2862,437 @@ # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" +as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" gt_needs="$gt_needs " + +# Auxiliary files required by this configure script. +ac_aux_files="config.rpath ltmain.sh compile missing install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/build-aux" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2878,12 +3303,12 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2892,24 +3317,24 @@ ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2919,11 +3344,12 @@ fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2937,36 +3363,8 @@ -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - ac_config_headers="$ac_config_headers config.h" @@ -2976,26 +3374,30 @@ echo echo "System type:" # This is needed to know if assembler optimizations can be used. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -3014,21 +3416,22 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -3087,24 +3490,25 @@ # Debugging # ############# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if debugging code should be compiled" >&5 -$as_echo_n "checking if debugging code should be compiled... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if debugging code should be compiled" >&5 +printf %s "checking if debugging code should be compiled... " >&6; } # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : +if test ${enable_debug+y} +then : enableval=$enable_debug; -else +else $as_nop enable_debug=no fi if test "x$enable_debug" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else -$as_echo "#define NDEBUG 1" >>confdefs.h +printf "%s\n" "#define NDEBUG 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3139,24 +3543,28 @@ enable_filter_armthumb=no enable_encoder_armthumb=no enable_decoder_armthumb=no +enable_filter_arm64=no +enable_encoder_arm64=no +enable_decoder_arm64=no enable_filter_sparc=no enable_encoder_sparc=no enable_decoder_sparc=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which encoders to build" >&5 -$as_echo_n "checking which encoders to build... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which encoders to build" >&5 +printf %s "checking which encoders to build... " >&6; } # Check whether --enable-encoders was given. -if test "${enable_encoders+set}" = set; then : +if test ${enable_encoders+y} +then : enableval=$enable_encoders; -else - enable_encoders=lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,sparc +else $as_nop + enable_encoders=lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,arm64,sparc fi enable_encoders=`echo "$enable_encoders" | sed 's/,/ /g'` if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then enable_encoders=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +printf "%s\n" "(none)" >&6; } else for arg in $enable_encoders do @@ -3165,93 +3573,101 @@ enable_filter_lzma1=yes enable_encoder_lzma1=yes -$as_echo "#define HAVE_ENCODER_LZMA1 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_LZMA1 1" >>confdefs.h ;; lzma2) enable_filter_lzma2=yes enable_encoder_lzma2=yes -$as_echo "#define HAVE_ENCODER_LZMA2 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_LZMA2 1" >>confdefs.h ;; delta) enable_filter_delta=yes enable_encoder_delta=yes -$as_echo "#define HAVE_ENCODER_DELTA 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_DELTA 1" >>confdefs.h ;; x86) enable_filter_x86=yes enable_encoder_x86=yes -$as_echo "#define HAVE_ENCODER_X86 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_X86 1" >>confdefs.h ;; powerpc) enable_filter_powerpc=yes enable_encoder_powerpc=yes -$as_echo "#define HAVE_ENCODER_POWERPC 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_POWERPC 1" >>confdefs.h ;; ia64) enable_filter_ia64=yes enable_encoder_ia64=yes -$as_echo "#define HAVE_ENCODER_IA64 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_IA64 1" >>confdefs.h ;; arm) enable_filter_arm=yes enable_encoder_arm=yes -$as_echo "#define HAVE_ENCODER_ARM 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_ARM 1" >>confdefs.h ;; armthumb) enable_filter_armthumb=yes enable_encoder_armthumb=yes -$as_echo "#define HAVE_ENCODER_ARMTHUMB 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_ARMTHUMB 1" >>confdefs.h ;; + arm64) + enable_filter_arm64=yes + enable_encoder_arm64=yes + +printf "%s\n" "#define HAVE_ENCODER_ARM64 1" >>confdefs.h + + ;; sparc) enable_filter_sparc=yes enable_encoder_sparc=yes -$as_echo "#define HAVE_ENCODER_SPARC 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODER_SPARC 1" >>confdefs.h ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "unknown filter: $arg" "$LINENO" 5 ;; esac done -$as_echo "#define HAVE_ENCODERS 1" >>confdefs.h +printf "%s\n" "#define HAVE_ENCODERS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_encoders" >&5 -$as_echo "$enable_encoders" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_encoders" >&5 +printf "%s\n" "$enable_encoders" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which decoders to build" >&5 -$as_echo_n "checking which decoders to build... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which decoders to build" >&5 +printf %s "checking which decoders to build... " >&6; } # Check whether --enable-decoders was given. -if test "${enable_decoders+set}" = set; then : +if test ${enable_decoders+y} +then : enableval=$enable_decoders; -else - enable_decoders=lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,sparc +else $as_nop + enable_decoders=lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,arm64,sparc fi enable_decoders=`echo "$enable_decoders" | sed 's/,/ /g'` if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then enable_decoders=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +printf "%s\n" "(none)" >&6; } else for arg in $enable_decoders do @@ -3260,77 +3676,84 @@ enable_filter_lzma1=yes enable_decoder_lzma1=yes -$as_echo "#define HAVE_DECODER_LZMA1 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_LZMA1 1" >>confdefs.h ;; lzma2) enable_filter_lzma2=yes enable_decoder_lzma2=yes -$as_echo "#define HAVE_DECODER_LZMA2 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_LZMA2 1" >>confdefs.h ;; delta) enable_filter_delta=yes enable_decoder_delta=yes -$as_echo "#define HAVE_DECODER_DELTA 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_DELTA 1" >>confdefs.h ;; x86) enable_filter_x86=yes enable_decoder_x86=yes -$as_echo "#define HAVE_DECODER_X86 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_X86 1" >>confdefs.h ;; powerpc) enable_filter_powerpc=yes enable_decoder_powerpc=yes -$as_echo "#define HAVE_DECODER_POWERPC 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_POWERPC 1" >>confdefs.h ;; ia64) enable_filter_ia64=yes enable_decoder_ia64=yes -$as_echo "#define HAVE_DECODER_IA64 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_IA64 1" >>confdefs.h ;; arm) enable_filter_arm=yes enable_decoder_arm=yes -$as_echo "#define HAVE_DECODER_ARM 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_ARM 1" >>confdefs.h ;; armthumb) enable_filter_armthumb=yes enable_decoder_armthumb=yes -$as_echo "#define HAVE_DECODER_ARMTHUMB 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_ARMTHUMB 1" >>confdefs.h ;; + arm64) + enable_filter_arm64=yes + enable_decoder_arm64=yes + +printf "%s\n" "#define HAVE_DECODER_ARM64 1" >>confdefs.h + + ;; sparc) enable_filter_sparc=yes enable_decoder_sparc=yes -$as_echo "#define HAVE_DECODER_SPARC 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODER_SPARC 1" >>confdefs.h ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "unknown filter: $arg" "$LINENO" 5 ;; esac done -$as_echo "#define HAVE_DECODERS 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECODERS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_decoders" >&5 -$as_echo "$enable_decoders" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_decoders" >&5 +printf "%s\n" "$enable_decoders" >&6; } fi if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \ @@ -3547,6 +3970,30 @@ COND_DECODER_ARMTHUMB_FALSE= fi + if test "x$enable_filter_arm64" = xyes; then + COND_FILTER_ARM64_TRUE= + COND_FILTER_ARM64_FALSE='#' +else + COND_FILTER_ARM64_TRUE='#' + COND_FILTER_ARM64_FALSE= +fi + + if test "x$enable_encoder_arm64" = xyes; then + COND_ENCODER_ARM64_TRUE= + COND_ENCODER_ARM64_FALSE='#' +else + COND_ENCODER_ARM64_TRUE='#' + COND_ENCODER_ARM64_FALSE= +fi + + if test "x$enable_decoder_arm64" = xyes; then + COND_DECODER_ARM64_TRUE= + COND_DECODER_ARM64_FALSE='#' +else + COND_DECODER_ARM64_TRUE='#' + COND_DECODER_ARM64_FALSE= +fi + if test "x$enable_filter_sparc" = xyes; then COND_FILTER_SPARC_TRUE= COND_FILTER_SPARC_FALSE='#' @@ -3591,6 +4038,9 @@ test "x$enable_filter_armthumb" = xyes && enable_filter_simple=yes test "x$enable_encoder_armthumb" = xyes && enable_encoder_simple=yes test "x$enable_decoder_armthumb" = xyes && enable_decoder_simple=yes +test "x$enable_filter_arm64" = xyes && enable_filter_simple=yes +test "x$enable_encoder_arm64" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_arm64" = xyes && enable_decoder_simple=yes test "x$enable_filter_sparc" = xyes && enable_filter_simple=yes test "x$enable_encoder_sparc" = xyes && enable_encoder_simple=yes test "x$enable_decoder_sparc" = xyes && enable_decoder_simple=yes @@ -3668,62 +4118,67 @@ enable_match_finder_bt4=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which match finders to build" >&5 -$as_echo_n "checking which match finders to build... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which match finders to build" >&5 +printf %s "checking which match finders to build... " >&6; } # Check whether --enable-match-finders was given. -if test "${enable_match_finders+set}" = set; then : +if test ${enable_match_finders+y} +then : enableval=$enable_match_finders; -else +else $as_nop enable_match_finders=hc3,hc4,bt2,bt3,bt4 fi enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` if test "x$enable_encoder_lz" = xyes ; then + if test -z "$enable_match_finders"; then + as_fn_error $? "At least one match finder is required for an LZ-based encoder." "$LINENO" 5 + fi + for arg in $enable_match_finders do case $arg in hc3) enable_match_finder_hc3=yes -$as_echo "#define HAVE_MF_HC3 1" >>confdefs.h +printf "%s\n" "#define HAVE_MF_HC3 1" >>confdefs.h ;; hc4) enable_match_finder_hc4=yes -$as_echo "#define HAVE_MF_HC4 1" >>confdefs.h +printf "%s\n" "#define HAVE_MF_HC4 1" >>confdefs.h ;; bt2) enable_match_finder_bt2=yes -$as_echo "#define HAVE_MF_BT2 1" >>confdefs.h +printf "%s\n" "#define HAVE_MF_BT2 1" >>confdefs.h ;; bt3) enable_match_finder_bt3=yes -$as_echo "#define HAVE_MF_BT3 1" >>confdefs.h +printf "%s\n" "#define HAVE_MF_BT3 1" >>confdefs.h ;; bt4) enable_match_finder_bt4=yes -$as_echo "#define HAVE_MF_BT4 1" >>confdefs.h +printf "%s\n" "#define HAVE_MF_BT4 1" >>confdefs.h ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "unknown match finder: $arg" "$LINENO" 5 ;; esac done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_match_finders" >&5 -$as_echo "$enable_match_finders" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_match_finders" >&5 +printf "%s\n" "$enable_match_finders" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none because not building any LZ-based encoder)" >&5 -$as_echo "(none because not building any LZ-based encoder)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (none because not building any LZ-based encoder)" >&5 +printf "%s\n" "(none because not building any LZ-based encoder)" >&6; } fi @@ -3737,19 +4192,20 @@ enable_check_crc64=no enable_check_sha256=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which integrity checks to build" >&5 -$as_echo_n "checking which integrity checks to build... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which integrity checks to build" >&5 +printf %s "checking which integrity checks to build... " >&6; } # Check whether --enable-checks was given. -if test "${enable_checks+set}" = set; then : +if test ${enable_checks+y} +then : enableval=$enable_checks; -else +else $as_nop enable_checks=crc32,crc64,sha256 fi enable_checks=`echo "$enable_checks" | sed 's/,/ /g'` if test "x$enable_checks" = xno || test "x$enable_checks" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +printf "%s\n" "(none)" >&6; } else for arg in $enable_checks do @@ -3757,30 +4213,30 @@ crc32) enable_check_crc32=yes -$as_echo "#define HAVE_CHECK_CRC32 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHECK_CRC32 1" >>confdefs.h ;; crc64) enable_check_crc64=yes -$as_echo "#define HAVE_CHECK_CRC64 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHECK_CRC64 1" >>confdefs.h ;; sha256) enable_check_sha256=yes -$as_echo "#define HAVE_CHECK_SHA256 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHECK_SHA256 1" >>confdefs.h ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "unknown integrity check: $arg" "$LINENO" 5 ;; esac done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_checks" >&5 -$as_echo "$enable_checks" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_checks" >&5 +printf "%s\n" "$enable_checks" >&6; } fi if test "x$enable_check_crc32" = xno ; then as_fn_error $? "For now, the CRC32 check must always be enabled." "$LINENO" 5 @@ -3811,12 +4267,13 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if external SHA-256 should be used" >&5 -$as_echo_n "checking if external SHA-256 should be used... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if external SHA-256 should be used" >&5 +printf %s "checking if external SHA-256 should be used... " >&6; } # Check whether --enable-external-sha256 was given. -if test "${enable_external_sha256+set}" = set; then : +if test ${enable_external_sha256+y} +then : enableval=$enable_external_sha256; -else +else $as_nop enable_external_sha256=no fi @@ -3824,24 +4281,98 @@ enable_external_sha256=no fi if test "x$enable_external_sha256" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi +############# +# MicroLZMA # +############# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if MicroLZMA support should be built" >&5 +printf %s "checking if MicroLZMA support should be built... " >&6; } +# Check whether --enable-microlzma was given. +if test ${enable_microlzma+y} +then : + enableval=$enable_microlzma; +else $as_nop + enable_microlzma=yes +fi + +case $enable_microlzma in + yes | no) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_microlzma" >&5 +printf "%s\n" "$enable_microlzma" >&6; } + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } + as_fn_error $? "--enable-microlzma accepts only \`yes' or \`no'." "$LINENO" 5 + ;; +esac + if test "x$enable_microlzma" = xyes; then + COND_MICROLZMA_TRUE= + COND_MICROLZMA_FALSE='#' +else + COND_MICROLZMA_TRUE='#' + COND_MICROLZMA_FALSE= +fi + + + +############################# +# .lz (lzip) format support # +############################# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if .lz (lzip) decompression support should be built" >&5 +printf %s "checking if .lz (lzip) decompression support should be built... " >&6; } +# Check whether --enable-lzip-decoder was given. +if test ${enable_lzip_decoder+y} +then : + enableval=$enable_lzip_decoder; +else $as_nop + enable_lzip_decoder=yes +fi + +if test "x$enable_decoder_lzma1" != xyes; then + enable_lzip_decoder=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no because LZMA1 decoder is disabled" >&5 +printf "%s\n" "no because LZMA1 decoder is disabled" >&6; } +elif test "x$enable_lzip_decoder" = xyes; then + +printf "%s\n" "#define HAVE_LZIP_DECODER 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$enable_lzip_decoder" = xyes; then + COND_LZIP_DECODER_TRUE= + COND_LZIP_DECODER_FALSE='#' +else + COND_LZIP_DECODER_TRUE='#' + COND_LZIP_DECODER_FALSE= +fi + + + ########################### # Assembler optimizations # ########################### -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler optimizations should be used" >&5 -$as_echo_n "checking if assembler optimizations should be used... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if assembler optimizations should be used" >&5 +printf %s "checking if assembler optimizations should be used... " >&6; } # Check whether --enable-assembler was given. -if test "${enable_assembler+set}" = set; then : +if test ${enable_assembler+y} +then : enableval=$enable_assembler; -else +else $as_nop enable_assembler=yes fi @@ -3853,20 +4384,19 @@ linux* | *bsd* | mingw* | cygwin | msys | *djgpp*) case $host_cpu in i?86) enable_assembler=x86 ;; - x86_64) enable_assembler=x86_64 ;; esac ;; esac fi case $enable_assembler in - x86 | x86_64 | no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assembler" >&5 -$as_echo "$enable_assembler" >&6; } + x86 | no) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_assembler" >&5 +printf "%s\n" "$enable_assembler" >&6; } ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error $? "--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'." "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } + as_fn_error $? "--enable-assembler accepts only \`yes', \`no', or \`x86' (32-bit)." "$LINENO" 5 ;; esac if test "x$enable_assembler" = xx86; then @@ -3877,12 +4407,18 @@ COND_ASM_X86_FALSE= fi - if test "x$enable_assembler" = xx86_64; then - COND_ASM_X86_64_TRUE= - COND_ASM_X86_64_FALSE='#' -else - COND_ASM_X86_64_TRUE='#' - COND_ASM_X86_64_FALSE= + + +############# +# CLMUL CRC # +############# + +# Check whether --enable-clmul-crc was given. +if test ${enable_clmul_crc+y} +then : + enableval=$enable_clmul_crc; +else $as_nop + enable_clmul_crc=yes fi @@ -3891,26 +4427,27 @@ # Size optimization # ##################### -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if small size is preferred over speed" >&5 -$as_echo_n "checking if small size is preferred over speed... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if small size is preferred over speed" >&5 +printf %s "checking if small size is preferred over speed... " >&6; } # Check whether --enable-small was given. -if test "${enable_small+set}" = set; then : +if test ${enable_small+y} +then : enableval=$enable_small; -else +else $as_nop enable_small=no fi if test "x$enable_small" = xyes; then -$as_echo "#define HAVE_SMALL 1" >>confdefs.h +printf "%s\n" "#define HAVE_SMALL 1" >>confdefs.h elif test "x$enable_small" != xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "--enable-small accepts only \`yes' or \`no'" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_small" >&5 -$as_echo "$enable_small" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_small" >&5 +printf "%s\n" "$enable_small" >&6; } if test "x$enable_small" = xyes; then COND_SMALL_TRUE= COND_SMALL_FALSE='#' @@ -3925,12 +4462,13 @@ # Threading # ############# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if threading support is wanted" >&5 -$as_echo_n "checking if threading support is wanted... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if threading support is wanted" >&5 +printf %s "checking if threading support is wanted... " >&6; } # Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then : +if test ${enable_threads+y} +then : enableval=$enable_threads; -else +else $as_nop enable_threads=yes fi @@ -3951,16 +4489,16 @@ case $enable_threads in posix | win95 | vista) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $enable_threads" >&5 -$as_echo "yes, $enable_threads" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $enable_threads" >&5 +printf "%s\n" "yes, $enable_threads" >&6; } ;; no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "--enable-threads only accepts \`yes', \`no', \`posix', \`win95', or \`vista'" "$LINENO" 5 ;; esac @@ -3984,27 +4522,26 @@ # created with "xz -9". It would be slightly safer to guess a lower value, # but most systems, on which we don't have any way to determine the amount # of RAM, will probably have at least 128 MiB of RAM. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how much RAM to assume if the real amount is unknown" >&5 -$as_echo_n "checking how much RAM to assume if the real amount is unknown... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how much RAM to assume if the real amount is unknown" >&5 +printf %s "checking how much RAM to assume if the real amount is unknown... " >&6; } # Check whether --enable-assume-ram was given. -if test "${enable_assume_ram+set}" = set; then : +if test ${enable_assume_ram+y} +then : enableval=$enable_assume_ram; -else +else $as_nop enable_assume_ram=128 fi assume_ram_check=`echo "$enable_assume_ram" | tr -d 0123456789` if test -z "$enable_assume_ram" || test -n "$assume_ram_check"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } as_fn_error $? "--enable-assume-ram accepts only an integer argument" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assume_ram MiB" >&5 -$as_echo "$enable_assume_ram MiB" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_assume_ram MiB" >&5 +printf "%s\n" "$enable_assume_ram MiB" >&6; } -cat >>confdefs.h <<_ACEOF -#define ASSUME_RAM $enable_assume_ram -_ACEOF +printf "%s\n" "#define ASSUME_RAM $enable_assume_ram" >>confdefs.h @@ -4013,9 +4550,10 @@ ######################### # Check whether --enable-xz was given. -if test "${enable_xz+set}" = set; then : +if test ${enable_xz+y} +then : enableval=$enable_xz; -else +else $as_nop enable_xz=yes fi @@ -4029,9 +4567,10 @@ # Check whether --enable-xzdec was given. -if test "${enable_xzdec+set}" = set; then : +if test ${enable_xzdec+y} +then : enableval=$enable_xzdec; -else +else $as_nop enable_xzdec=yes fi @@ -4046,9 +4585,10 @@ # Check whether --enable-lzmadec was given. -if test "${enable_lzmadec+set}" = set; then : +if test ${enable_lzmadec+y} +then : enableval=$enable_lzmadec; -else +else $as_nop enable_lzmadec=yes fi @@ -4063,9 +4603,10 @@ # Check whether --enable-lzmainfo was given. -if test "${enable_lzmainfo+set}" = set; then : +if test ${enable_lzmainfo+y} +then : enableval=$enable_lzmainfo; -else +else $as_nop enable_lzmainfo=yes fi @@ -4080,9 +4621,10 @@ # Check whether --enable-lzma-links was given. -if test "${enable_lzma_links+set}" = set; then : +if test ${enable_lzma_links+y} +then : enableval=$enable_lzma_links; -else +else $as_nop enable_lzma_links=yes fi @@ -4096,9 +4638,10 @@ # Check whether --enable-scripts was given. -if test "${enable_scripts+set}" = set; then : +if test ${enable_scripts+y} +then : enableval=$enable_scripts; -else +else $as_nop enable_scripts=yes fi @@ -4112,9 +4655,10 @@ # Check whether --enable-doc was given. -if test "${enable_doc+set}" = set; then : +if test ${enable_doc+y} +then : enableval=$enable_doc; -else +else $as_nop enable_doc=yes fi @@ -4128,71 +4672,33 @@ -##################### -# Symbol versioning # -##################### - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if library symbol versioning should be used" >&5 -$as_echo_n "checking if library symbol versioning should be used... " >&6; } -# Check whether --enable-symbol-versions was given. -if test "${enable_symbol_versions+set}" = set; then : - enableval=$enable_symbol_versions; -else - enable_symbol_versions=auto -fi - -if test "x$enable_symbol_versions" = xauto; then - case $host_os in - # NOTE: Even if one omits -gnu on GNU/Linux (e.g. - # i486-slackware-linux), configure will (via config.sub) - # append -gnu (e.g. i486-slackware-linux-gnu), and this - # test will work correctly. - gnu* | *-gnu* | freebsd*) - enable_symbol_versions=yes - ;; - *) - enable_symbol_versions=no - ;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_symbol_versions" >&5 -$as_echo "$enable_symbol_versions" >&6; } - if test "x$enable_symbol_versions" = xyes; then - COND_SYMVERS_TRUE= - COND_SYMVERS_FALSE='#' -else - COND_SYMVERS_TRUE='#' - COND_SYMVERS_FALSE= -fi - - - ############## # Sandboxing # ############## -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sandboxing should be used" >&5 -$as_echo_n "checking if sandboxing should be used... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sandboxing should be used" >&5 +printf %s "checking if sandboxing should be used... " >&6; } # Check whether --enable-sandbox was given. -if test "${enable_sandbox+set}" = set; then : +if test ${enable_sandbox+y} +then : enableval=$enable_sandbox; -else +else $as_nop enable_sandbox=auto fi case $enable_sandbox in auto) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: maybe (autodetect)" >&5 -$as_echo "maybe (autodetect)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: maybe (autodetect)" >&5 +printf "%s\n" "maybe (autodetect)" >&6; } ;; - no | capsicum) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_sandbox" >&5 -$as_echo "$enable_sandbox" >&6; } + no | capsicum | pledge) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_sandbox" >&5 +printf "%s\n" "$enable_sandbox" >&6; } ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error $? "--enable-sandbox only accepts \`auto', \`no', or \`capsicum'." "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } + as_fn_error $? "--enable-sandbox only accepts \`auto', \`no', \`capsicum', or \`pledge'." "$LINENO" 5 ;; esac @@ -4204,9 +4710,10 @@ # The scripts can add a prefix to the search PATH so that POSIX tools # or the xz binary is always in the PATH. # Check whether --enable-path-for-scripts was given. -if test "${enable_path_for_scripts+set}" = set; then : +if test ${enable_path_for_scripts+y} +then : enableval=$enable_path_for_scripts; -else +else $as_nop case $host_os in solaris*) enable_path_for_scripts=/usr/xpg4/bin ;; @@ -4239,11 +4746,12 @@ ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a shell that conforms to POSIX" >&5 -$as_echo_n "checking for a shell that conforms to POSIX... " >&6; } -if ${gl_cv_posix_shell+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a shell that conforms to POSIX" >&5 +printf %s "checking for a shell that conforms to POSIX... " >&6; } +if test ${gl_cv_posix_shell+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_test_posix_shell_script=' func_return () { (exit $1) @@ -4280,8 +4788,8 @@ esac done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_posix_shell" >&5 -$as_echo "$gl_cv_posix_shell" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_posix_shell" >&5 +printf "%s\n" "$gl_cv_posix_shell" >&6; } if test "$gl_cv_posix_shell" != no; then POSIX_SHELL=$gl_cv_posix_shell @@ -4302,12 +4810,13 @@ # We don't use "subdir-objects" yet because it breaks "make distclean" when # dependencies are enabled (as of Automake 1.14.1) due to this bug: -# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354 +# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354 # The -Wno-unsupported is used to silence warnings about missing # "subdir-objects". am__api_version='1.16' -# Find a good install program. We prefer a C program (faster), + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -4321,20 +4830,25 @@ # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -4344,13 +4858,13 @@ # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -4358,12 +4872,12 @@ echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -4379,7 +4893,7 @@ rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -4389,8 +4903,8 @@ INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -4400,8 +4914,8 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -4455,8 +4969,8 @@ as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= @@ -4475,26 +4989,23 @@ # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` +program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` + # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + + if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then @@ -4514,11 +5025,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -4526,11 +5038,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4541,11 +5057,11 @@ fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4554,11 +5070,12 @@ ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -4566,11 +5083,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4581,11 +5102,11 @@ fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -4593,8 +5114,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -4606,25 +5127,31 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done @@ -4635,7 +5162,7 @@ fi test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then + if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a @@ -4645,18 +5172,19 @@ MKDIR_P="$ac_install_sh -d" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -4664,11 +5192,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4679,24 +5211,25 @@ fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -4712,12 +5245,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -4731,7 +5264,8 @@ rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : +if test ${enable_silent_rules+y} +then : enableval=$enable_silent_rules; fi @@ -4741,12 +5275,13 @@ *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +printf %s "checking whether $am_make supports nested variables... " >&6; } +if test ${am_cv_make_support_nested_variables+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -4758,8 +5293,8 @@ am_cv_make_support_nested_variables=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' @@ -4791,17 +5326,13 @@ # Define the identity of the package. PACKAGE='xz' - VERSION='5.2.5' + VERSION='5.4.3' -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF +printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF +printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. @@ -4841,7 +5372,21 @@ +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +if test -z "$ETAGS"; then + ETAGS=etags +fi + +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi + + + # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is @@ -4884,24 +5429,33 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi + + + + + + + + + DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 -$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out @@ -4937,11 +5491,12 @@ fi done rm -f confinc.* confmf.* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 -$as_echo "${_am_result}" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : +if test ${enable_dependency_tracking+y} +then : enableval=$enable_dependency_tracking; fi @@ -4967,11 +5522,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4979,11 +5535,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4994,11 +5554,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5007,11 +5567,12 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -5019,11 +5580,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5034,11 +5599,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -5046,8 +5611,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -5060,11 +5625,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5072,11 +5638,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5087,11 +5657,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5100,11 +5670,12 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5113,15 +5684,19 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5137,18 +5712,18 @@ # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5159,11 +5734,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5171,11 +5747,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5186,11 +5766,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5203,11 +5783,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -5215,11 +5796,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5230,11 +5815,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5246,8 +5831,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -5255,25 +5840,129 @@ fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -5283,7 +5972,7 @@ cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -5291,7 +5980,7 @@ /* end confdefs.h. */ int -main () +main (void) { ; @@ -5303,9 +5992,9 @@ # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -5326,11 +6015,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -5347,7 +6037,7 @@ # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -5363,44 +6053,46 @@ done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -5414,15 +6106,15 @@ * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -5431,7 +6123,7 @@ /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -5443,8 +6135,8 @@ ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -5452,10 +6144,10 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -5463,39 +6155,40 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -5509,11 +6202,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -5522,31 +6216,32 @@ break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -5556,29 +6251,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -5587,57 +6286,60 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -5652,95 +6354,145 @@ CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5748,21 +6500,23 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_ext=c + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +printf %s "checking whether $CC understands -c and -o together... " >&6; } +if test ${am_cv_prog_cc_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -5790,8 +6544,8 @@ rm -f core conftest* unset am_i fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. @@ -5809,11 +6563,12 @@ depcc="$CC" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CC_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For @@ -5920,8 +6675,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -5935,183 +6690,7 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -#include -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - -fi - - if test x$ac_cv_prog_cc_c99 = xno ; then as_fn_error $? "No C99 compiler was found." "$LINENO" 5 fi @@ -6126,11 +6705,12 @@ depcc="$CCAS" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CCAS_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For @@ -6235,8 +6815,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if @@ -6251,45 +6831,287 @@ +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done + + + + + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h + +fi + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test ${ac_cv_safe_to_define___extensions__+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_safe_to_define___extensions__=yes +else $as_nop + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if test ${ac_cv_should_define__xopen_source+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_should_define__xopen_source=no + if test $ac_cv_header_wchar_h = yes +then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + mbstate_t x; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define _XOPEN_SOURCE 500 + #include + mbstate_t x; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_should_define__xopen_source=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } + + printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h + + printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h + + printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h + + if test $ac_cv_header_minix_config_h = yes +then : + MINIX=yes + printf "%s\n" "#define _MINIX 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h + +else $as_nop + MINIX= +fi + if test $ac_cv_safe_to_define___extensions__ = yes +then : + printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h + +fi + if test $ac_cv_should_define__xopen_source = yes +then : + printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h + +fi + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -6301,10 +7123,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -6314,7 +7137,8 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -6326,29 +7150,24 @@ else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -6360,10 +7179,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -6373,11 +7193,12 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -6389,11 +7210,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -6401,10 +7223,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -6413,13 +7240,13 @@ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -6447,16 +7274,17 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -6467,10 +7295,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -6479,13 +7312,13 @@ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -6514,279 +7347,100 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#include int -main () +main (void) { - +(void) strchr; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if ac_fn_c_try_compile "$LINENO" +then : -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include +#include +#include +#include +extern void ac_decl (int, char *); -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int -main () +main (void) { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + break fi - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +case $enable_threads in #( + posix) : -fi - -done - - - - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= -fi - - - if test "$MINIX" = yes; then - -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - - -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - - -$as_echo "#define _MINIX 1" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h - - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h - - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - - - -case $enable_threads in - posix) echo echo "POSIX threading support:" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6806,38 +7460,41 @@ ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x"; then : + if test "x$PTHREAD_CC" != "x" +then : CC="$PTHREAD_CC" fi + if test "x$PTHREAD_CXX" != "x" +then : + CXX="$PTHREAD_CXX" +fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_join (); int -main () +main (void) { return pthread_join (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -6915,11 +7572,12 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi -rm -f conftest* +rm -rf conftest* ;; @@ -6939,11 +7597,12 @@ # Are we compiling with Clang? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -$as_echo_n "checking whether $CC is Clang... " >&6; } -if ${ax_cv_PTHREAD_CLANG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +printf %s "checking whether $CC is Clang... " >&6; } +if test ${ax_cv_PTHREAD_CLANG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then @@ -6956,16 +7615,17 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 +then : ax_cv_PTHREAD_CLANG=yes fi -rm -f conftest* +rm -rf conftest* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" @@ -6979,13 +7639,15 @@ # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC -if test "x$GCC" = "xyes"; then : +if test "x$GCC" = "xyes" +then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first -if test "x$ax_pthread_clang" = "xyes"; then : +if test "x$ax_pthread_clang" = "xyes" +then : ax_pthread_flags="-pthread,-lpthread -pthread" fi @@ -7007,9 +7669,10 @@ ax_pthread_check_macro="--" ;; esac -if test "x$ax_pthread_check_macro" = "x--"; then : +if test "x$ax_pthread_check_macro" = "x--" +then : ax_pthread_check_cond=0 -else +else $as_nop ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi @@ -7019,31 +7682,32 @@ case $ax_pthread_try_flag in none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +printf %s "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 -$as_echo_n "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 +printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ax_pthread_config+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else @@ -7051,11 +7715,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7067,15 +7735,16 @@ fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -$as_echo "$ax_pthread_config" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +printf "%s\n" "$ax_pthread_config" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test "x$ax_pthread_config" = "xno"; then : + if test "x$ax_pthread_config" = "xno" +then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" @@ -7083,8 +7752,8 @@ ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac @@ -7119,7 +7788,7 @@ } static void *start_routine(void *a) { return a; } int -main () +main (void) { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); @@ -7131,18 +7800,20 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes" +then : break fi @@ -7188,11 +7859,12 @@ # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one @@ -7200,11 +7872,12 @@ # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown"; then : + if test "x$ax_pthread_try" = "xunknown" +then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" @@ -7213,32 +7886,35 @@ /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x"; then : + if test "x$ax_pthread_try" = "x" +then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; @@ -7257,51 +7933,53 @@ LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } -if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +printf %s "checking for joinable pthread attribute... " >&6; } +if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : + test "x$ax_pthread_joinable_attr_defined" != "xyes" +then : -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR -_ACEOF +printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h ax_pthread_joinable_attr_defined=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } -if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +printf %s "checking whether more special flags are required for pthreads... " >&6; } +if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) @@ -7310,24 +7988,26 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes"; then : + test "x$ax_pthread_special_flags_added" != "xyes" +then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int i = PTHREAD_PRIO_INHERIT; return i; @@ -7335,21 +8015,23 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else +else $as_nop ax_cv_PTHREAD_PRIO_INHERIT=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : + test "x$ax_pthread_prio_inherit_defined" != "xyes" +then : -$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes @@ -7367,19 +8049,31 @@ #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : - if as_fn_executable_p ${CC}_r; then : + + if as_fn_executable_p ${CC}_r +then : PTHREAD_CC="${CC}_r" -fi ;; #( +fi + if test "x${CXX}" != "x" +then : + if as_fn_executable_p ${CXX}_r +then : + PTHREAD_CXX="${CXX}_r" +fi +fi + ;; #( *) : - for ac_prog in ${CC}_r + + for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PTHREAD_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else @@ -7387,11 +8081,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7402,19 +8100,73 @@ fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +printf "%s\n" "$PTHREAD_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - ;; -esac ;; #( + + if test "x${CXX}" != "x" +then : + for ac_prog in ${CXX}_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PTHREAD_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$PTHREAD_CXX"; then + ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_PTHREAD_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX +if test -n "$PTHREAD_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 +printf "%s\n" "$PTHREAD_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$PTHREAD_CXX" && break +done +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" + +fi + + ;; +esac + ;; #( *) : ;; esac @@ -7424,11 +8176,13 @@ fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" + # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then : @@ -7448,7 +8202,7 @@ -$as_echo "#define MYTHREAD_POSIX 1" >>confdefs.h +printf "%s\n" "#define MYTHREAD_POSIX 1" >>confdefs.h # These are nice to have but not mandatory. @@ -7460,11 +8214,12 @@ # needed by liblzma. OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 -$as_echo_n "checking for library containing clock_gettime... " >&6; } -if ${ac_cv_search_clock_gettime+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +printf %s "checking for library containing clock_gettime... " >&6; } +if test ${ac_cv_search_clock_gettime+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7472,86 +8227,90 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char clock_gettime (); int -main () +main (void) { return clock_gettime (); ; return 0; } _ACEOF -for ac_lib in '' rt; do +for ac_lib in '' rt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_clock_gettime=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_clock_gettime+:} false; then : + if test ${ac_cv_search_clock_gettime+y} +then : break fi done -if ${ac_cv_search_clock_gettime+:} false; then : +if test ${ac_cv_search_clock_gettime+y} +then : -else +else $as_nop ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 -$as_echo "$ac_cv_search_clock_gettime" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi - for ac_func in clock_gettime pthread_condattr_setclock -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "pthread_condattr_setclock" "ac_cv_func_pthread_condattr_setclock" +if test "x$ac_cv_func_pthread_condattr_setclock" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1" >>confdefs.h - ac_fn_c_check_decl "$LINENO" "CLOCK_MONOTONIC" "ac_cv_have_decl_CLOCK_MONOTONIC" "#include -" -if test "x$ac_cv_have_decl_CLOCK_MONOTONIC" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_CLOCK_MONOTONIC $ac_have_decl -_ACEOF + ac_fn_check_decl "$LINENO" "CLOCK_MONOTONIC" "ac_cv_have_decl_CLOCK_MONOTONIC" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_CLOCK_MONOTONIC" = xyes +then : +printf "%s\n" "#define HAVE_CLOCK_MONOTONIC 1" >>confdefs.h + +fi CFLAGS=$OLD_CFLAGS - ;; - win95) + ;; #( + win95) : -$as_echo "#define MYTHREAD_WIN95 1" >>confdefs.h - ;; - vista) +printf "%s\n" "#define MYTHREAD_WIN95 1" >>confdefs.h -$as_echo "#define MYTHREAD_VISTA 1" >>confdefs.h + ;; #( + vista) : - ;; + +printf "%s\n" "#define MYTHREAD_VISTA 1" >>confdefs.h + + + ;; #( + *) : + ;; esac if test "x$enable_threads" != xno; then COND_THREADS_TRUE= @@ -7567,14 +8326,14 @@ case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac -macro_version='2.4.6.42-b88ce-dirty' -macro_revision='2.4.6.42' +macro_version='2.4.7.4-1ec8f-dirty' +macro_revision='2.4.7.4' @@ -7588,6 +8347,7 @@ + ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within @@ -7611,8 +8371,8 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -7638,12 +8398,12 @@ } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -7659,11 +8419,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -7677,10 +8438,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -7689,13 +8455,13 @@ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -7723,8 +8489,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -7741,11 +8507,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -7756,10 +8523,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -7768,13 +8540,13 @@ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -7803,8 +8575,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -7829,17 +8601,18 @@ # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -7868,15 +8641,16 @@ ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -7905,18 +8679,19 @@ LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -7939,11 +8714,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -7968,13 +8744,13 @@ mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -7993,8 +8769,8 @@ : ${lt_cv_path_NM=no} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -8007,11 +8783,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -8019,11 +8796,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8034,11 +8815,11 @@ fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8051,11 +8832,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else @@ -8063,11 +8845,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8078,11 +8864,11 @@ fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8094,15 +8880,15 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -8123,11 +8909,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) @@ -8143,15 +8930,16 @@ fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop i=0 teststring=ABCD @@ -8193,7 +8981,7 @@ lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -8236,7 +9024,7 @@ sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -8278,11 +9066,11 @@ fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -8326,11 +9114,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-*-mingw* ) case $build in @@ -8366,18 +9155,19 @@ fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -8393,22 +9183,23 @@ fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_reload_flag='-r' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -8439,13 +9230,122 @@ if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. +set dummy ${ac_tool_prefix}file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_FILECMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$FILECMD"; then + ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_FILECMD="${ac_tool_prefix}file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FILECMD=$ac_cv_prog_FILECMD +if test -n "$FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 +printf "%s\n" "$FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_FILECMD"; then + ac_ct_FILECMD=$FILECMD + # Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_FILECMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_FILECMD"; then + ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FILECMD="file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD +if test -n "$ac_ct_FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 +printf "%s\n" "$ac_ct_FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_FILECMD" = x; then + FILECMD=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FILECMD=$ac_ct_FILECMD + fi +else + FILECMD="$ac_cv_prog_FILECMD" +fi + + + + + + + +if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -8453,11 +9353,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8468,11 +9372,11 @@ fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8481,11 +9385,12 @@ ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -8493,11 +9398,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8508,11 +9417,11 @@ fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -8520,8 +9429,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -8537,11 +9446,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' @@ -8567,7 +9477,7 @@ bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -8601,14 +9511,14 @@ lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -8622,7 +9532,7 @@ ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' @@ -8669,7 +9579,7 @@ newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -8737,8 +9647,8 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -8782,11 +9692,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -8794,11 +9705,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8809,11 +9724,11 @@ fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8822,11 +9737,12 @@ ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -8834,11 +9750,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8849,11 +9769,11 @@ fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -8861,8 +9781,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -8879,11 +9799,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -8906,8 +9827,8 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -8922,11 +9843,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -8934,11 +9856,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8949,11 +9875,11 @@ fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8966,11 +9892,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -8978,11 +9905,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8993,11 +9924,11 @@ fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -9009,8 +9940,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -9046,30 +9977,32 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -9077,7 +10010,7 @@ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -9086,11 +10019,11 @@ rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -9107,11 +10040,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -9119,11 +10053,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -9134,11 +10072,11 @@ fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -9147,11 +10085,12 @@ ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -9159,11 +10098,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -9174,11 +10117,11 @@ fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -9186,8 +10129,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -9206,11 +10149,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -9218,11 +10162,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -9233,11 +10181,11 @@ fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -9246,11 +10194,12 @@ ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -9258,11 +10207,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -9273,11 +10226,11 @@ fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -9285,8 +10238,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -9375,11 +10328,12 @@ # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -9434,7 +10388,7 @@ if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -9452,20 +10406,20 @@ # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -9507,9 +10461,9 @@ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -9531,14 +10485,14 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -9607,7 +10561,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -9642,11 +10596,11 @@ lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -9692,13 +10646,14 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else +else $as_nop with_sysroot=no fi @@ -9711,29 +10666,30 @@ fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -9744,10 +10700,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -9767,15 +10728,16 @@ rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -9786,8 +10748,8 @@ rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -9810,7 +10772,8 @@ } # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -9826,9 +10789,9 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -9846,10 +10809,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -9861,7 +10824,7 @@ ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -9884,10 +10847,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -9895,7 +10858,7 @@ emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -9903,7 +10866,7 @@ emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -9925,16 +10888,16 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -9988,11 +10951,12 @@ # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -10003,19 +10967,20 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else +else $as_nop lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -10024,8 +10989,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -10038,9 +11003,9 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -10075,11 +11040,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -10087,11 +11053,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10102,11 +11072,11 @@ fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10115,11 +11085,12 @@ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -10127,11 +11098,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10142,11 +11117,11 @@ fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -10154,8 +11129,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -10165,11 +11140,12 @@ fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -10179,8 +11155,8 @@ fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -10195,11 +11171,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -10207,11 +11184,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10222,11 +11203,11 @@ fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10235,11 +11216,12 @@ ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -10247,11 +11229,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10262,11 +11248,11 @@ fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -10274,8 +11260,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -10287,11 +11273,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -10299,11 +11286,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10314,11 +11305,11 @@ fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10327,11 +11318,12 @@ ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -10339,11 +11331,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10354,11 +11350,11 @@ fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -10366,8 +11362,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -10379,11 +11375,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -10391,11 +11388,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10406,11 +11407,11 @@ fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10419,11 +11420,12 @@ ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -10431,11 +11433,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10446,11 +11452,11 @@ fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -10458,8 +11464,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -10471,11 +11477,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -10483,11 +11490,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10498,11 +11509,11 @@ fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10511,11 +11522,12 @@ ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -10523,11 +11535,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10538,11 +11554,11 @@ fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -10550,8 +11566,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -10563,11 +11579,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -10575,11 +11592,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10590,11 +11611,11 @@ fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10603,11 +11624,12 @@ ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -10615,11 +11637,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10630,11 +11656,11 @@ fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -10642,8 +11668,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -10678,11 +11704,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -10711,14 +11738,15 @@ rm -f conftest.* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -10727,31 +11755,33 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else +else $as_nop lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -10779,24 +11809,19 @@ rm -rf conftest.dSYM fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[012],*|,*powerpc*-darwin[5-8]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -10851,23 +11876,18 @@ esac } -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - # Set options enable_win32_dll=yes @@ -10876,11 +11896,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AS+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else @@ -10888,11 +11909,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10903,11 +11928,11 @@ fi AS=$ac_cv_prog_AS if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +printf "%s\n" "$AS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10916,11 +11941,12 @@ ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AS+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else @@ -10928,11 +11954,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10943,11 +11973,11 @@ fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +printf "%s\n" "$ac_ct_AS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AS" = x; then @@ -10955,8 +11985,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS @@ -10968,11 +11998,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -10980,11 +12011,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10995,11 +12030,11 @@ fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11008,11 +12043,12 @@ ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -11020,11 +12056,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11035,11 +12075,11 @@ fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -11047,8 +12087,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -11060,11 +12100,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -11072,11 +12113,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11087,11 +12132,11 @@ fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11100,11 +12145,12 @@ ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -11112,11 +12158,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11127,11 +12177,11 @@ fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -11139,8 +12189,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -11177,7 +12227,8 @@ # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -11195,7 +12246,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_shared=yes fi @@ -11208,7 +12259,8 @@ # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -11226,7 +12278,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_static=yes fi @@ -11240,7 +12292,8 @@ # Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -11257,7 +12310,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop pic_mode=default fi @@ -11269,7 +12322,8 @@ # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -11287,7 +12341,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_fast_install=yes fi @@ -11301,11 +12355,12 @@ shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -11314,18 +12369,19 @@ ;; esac lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -11407,11 +12463,12 @@ setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -11422,17 +12479,15 @@ fi rmdir .libs 2>/dev/null fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -11478,11 +12533,12 @@ case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -11531,11 +12587,11 @@ MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11544,11 +12600,12 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -11597,11 +12654,11 @@ MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11686,11 +12743,12 @@ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -11721,8 +12779,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -11963,7 +13021,7 @@ lt_prog_compiler_static='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' @@ -12079,26 +13137,28 @@ ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -12129,8 +13189,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -12158,11 +13218,12 @@ # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -12186,8 +13247,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -12201,11 +13262,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -12248,19 +13310,20 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -12303,8 +13366,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -12312,19 +13375,19 @@ hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -12336,8 +13399,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -12441,7 +13504,7 @@ whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -12568,7 +13631,7 @@ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -12611,7 +13674,7 @@ compiler_needs_object=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes @@ -12623,7 +13686,7 @@ if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -12639,7 +13702,7 @@ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -12893,21 +13956,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12922,7 +13987,7 @@ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -12946,21 +14011,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12975,7 +14042,7 @@ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -13125,8 +14192,8 @@ output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -13160,7 +14227,7 @@ ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -13226,11 +14293,12 @@ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -13254,8 +14322,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -13295,28 +14363,30 @@ # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else +else $as_nop lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -13597,8 +14667,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -13634,18 +14704,19 @@ # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -13663,7 +14734,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -13677,8 +14748,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -13837,8 +14908,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -14100,7 +15171,7 @@ case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; @@ -14110,7 +15181,7 @@ ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -14136,7 +15207,7 @@ done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -14206,7 +15277,7 @@ shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -14399,9 +15470,10 @@ shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -14411,19 +15483,21 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -14655,8 +15729,8 @@ dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -14777,8 +15851,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -14802,8 +15876,8 @@ # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -14847,11 +15921,12 @@ darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14860,32 +15935,31 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else +else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -14905,14 +15979,16 @@ *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14921,41 +15997,42 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else +else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14964,37 +16041,37 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15003,37 +16080,37 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else +else $as_nop ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15042,30 +16119,29 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dld_link (); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else +else $as_nop ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -15104,11 +16180,12 @@ save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -15187,7 +16264,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -15205,16 +16282,17 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -15293,7 +16371,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -15311,8 +16389,8 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -15350,40 +16428,40 @@ striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac fi @@ -15401,13 +16479,13 @@ # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -15431,15 +16509,15 @@ fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -15478,11 +16556,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else @@ -15490,11 +16569,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15505,11 +16588,11 @@ fi RC=$ac_cv_prog_RC if test -n "$RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -$as_echo "$RC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +printf "%s\n" "$RC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15518,11 +16601,12 @@ ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else @@ -15530,11 +16614,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15545,11 +16633,11 @@ fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 -$as_echo "$ac_ct_RC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 +printf "%s\n" "$ac_ct_RC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RC" = x; then @@ -15557,8 +16645,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC @@ -15659,7 +16747,124 @@ fi +##################### +# Symbol versioning # +##################### +# NOTE: This checks if we are building shared or static library +# and if --with-pic or --without-pic was used. Thus this check +# must be after Libtool initialization. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if library symbol versioning should be used" >&5 +printf %s "checking if library symbol versioning should be used... " >&6; } +# Check whether --enable-symbol-versions was given. +if test ${enable_symbol_versions+y} +then : + enableval=$enable_symbol_versions; +else $as_nop + enable_symbol_versions=auto +fi + +if test "x$enable_symbol_versions" = xauto; then + case $host_os in + # NOTE: Even if one omits -gnu on GNU/Linux (e.g. + # i486-slackware-linux), configure will (via config.sub) + # append -gnu (e.g. i486-slackware-linux-gnu), and this + # test will work correctly. + gnu* | *-gnu* | freebsd*) + enable_symbol_versions=yes + ;; + *) + enable_symbol_versions=no + ;; + esac +fi + +# There are two variants for symbol versioning. +# See src/liblzma/validate_map.sh for details. +# +# On GNU/Linux, extra symbols are added in the C code. These extra symbols +# must not be put into a static library as they can cause problems (and +# even if they didn't cause problems, they would be useless). On other +# systems symbol versioning may be used too but there is no problem as only +# a linker script is specified in src/liblzma/Makefile.am and that isn't +# used when creating a static library. +# +# Libtool always uses -DPIC when building shared libraries by default and +# doesn't use it for static libs by default. This can be overriden with +# --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. +if test "x$enable_symbol_versions" = xno ; then + enable_symbol_versions=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +elif test "x$enable_shared" = xno ; then + enable_symbol_versions=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (not building a shared library)" >&5 +printf "%s\n" "no (not building a shared library)" >&6; } +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 + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 +printf "%s\n" "" >&6; } + as_fn_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." "$LINENO" 5 + ;; + esac + enable_symbol_versions=linux + +printf "%s\n" "#define HAVE_SYMBOL_VERSIONS_LINUX $have_symbol_versions_linux" >>confdefs.h + + ;; + *) + enable_symbol_versions=generic + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($enable_symbol_versions)" >&5 +printf "%s\n" "yes ($enable_symbol_versions)" >&6; } +fi + + if test "x$enable_symbol_versions" = xlinux; then + COND_SYMVERS_LINUX_TRUE= + COND_SYMVERS_LINUX_FALSE='#' +else + COND_SYMVERS_LINUX_TRUE='#' + COND_SYMVERS_LINUX_FALSE= +fi + + if test "x$enable_symbol_versions" = xgeneric; then + COND_SYMVERS_GENERIC_TRUE= + COND_SYMVERS_GENERIC_FALSE='#' +else + COND_SYMVERS_GENERIC_TRUE='#' + COND_SYMVERS_GENERIC_FALSE= +fi + + + ############################################################################### # Checks for libraries. ############################################################################### @@ -15669,17 +16874,18 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 -$as_echo_n "checking whether NLS is requested... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. -if test "${enable_nls+set}" = set; then : +if test ${enable_nls+y} +then : enableval=$enable_nls; USE_NLS=$enableval -else +else $as_nop USE_NLS=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +printf "%s\n" "$USE_NLS" >&6; } @@ -15718,11 +16924,12 @@ # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MSGFMT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_MSGFMT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. @@ -15750,20 +16957,21 @@ fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 -$as_echo "$MSGFMT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +printf "%s\n" "$MSGFMT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GMSGFMT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GMSGFMT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. @@ -15773,11 +16981,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15790,11 +17002,11 @@ fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 -$as_echo "$GMSGFMT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +printf "%s\n" "$GMSGFMT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15835,11 +17047,12 @@ # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_XGETTEXT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_XGETTEXT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. @@ -15867,11 +17080,11 @@ fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -$as_echo "$XGETTEXT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +printf "%s\n" "$XGETTEXT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi rm -f messages.po @@ -15912,11 +17125,12 @@ # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MSGMERGE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_MSGMERGE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. @@ -15943,11 +17157,11 @@ fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 -$as_echo "$MSGMERGE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +printf "%s\n" "$MSGMERGE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15987,9 +17201,10 @@ # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi @@ -16007,25 +17222,26 @@ fi if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 -$as_echo_n "checking for ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 +printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else - if ${acl_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${acl_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH @@ -16087,14 +17303,15 @@ *-*-aix*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined _ARCH_PPC64 +#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in @@ -16103,7 +17320,7 @@ esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16115,9 +17332,10 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in @@ -16126,7 +17344,7 @@ esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac @@ -16135,18 +17353,19 @@ LD="$acl_cv_path_LD" fi if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${acl_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${acl_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 -$as_echo "$acl_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 -$as_echo_n "checking for shared library run path origin... " >&6; } -if ${acl_cv_rpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +printf %s "checking for shared library run path origin... " >&6; } +if test ${acl_cv_rpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh @@ -16177,8 +17398,8 @@ acl_cv_rpath=done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 -$as_echo "$acl_cv_rpath" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" @@ -16189,34 +17410,64 @@ acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. -if test "${enable_rpath+set}" = set; then : +if test ${enable_rpath+y} +then : enableval=$enable_rpath; : -else +else $as_nop enable_rpath=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 -$as_echo_n "checking 32-bit host C ABI... " >&6; } -if ${gl_cv_host_cpu_c_abi_32bit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 +printf %s "checking 32-bit host C ABI... " >&6; } +if test ${gl_cv_host_cpu_c_abi_32bit+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; - *) + x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; + *) + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in - i[4567]86 ) + # CPUs that only support a 32-bit ABI. + arc \ + | bfin \ + | cris* \ + | csky \ + | epiphany \ + | ft32 \ + | h8300 \ + | m68k \ + | microblaze | microblazeel \ + | nds32 | nds32le | nds32be \ + | nios2 | nios2eb | nios2el \ + | or1k* \ + | or32 \ + | sh | sh1234 | sh1234elb \ + | tic6x \ + | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; + # CPUs that only support a 64-bit ABI. + alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ + | mmix ) + gl_cv_host_cpu_c_abi_32bit=no + ;; + + i[34567]86 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: @@ -16236,12 +17487,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; arm* | aarch64 ) @@ -16260,12 +17512,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) @@ -16280,12 +17533,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ia64* ) @@ -16300,12 +17554,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=yes -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; mips* ) @@ -16320,12 +17575,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; powerpc* ) @@ -16337,19 +17593,20 @@ # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined _ARCH_PPC64 +#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; rs6000 ) @@ -16368,12 +17625,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; s390* ) @@ -16388,12 +17646,13 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc | sparc64 ) @@ -16408,23 +17667,24 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) - gl_cv_host_cpu_c_abi_32bit=no + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 -$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 +printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" @@ -16432,90 +17692,156 @@ - case "$host_os" in - solaris*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 -$as_echo_n "checking for 64-bit host... " >&6; } -if ${gl_cv_solaris_64bit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 +printf %s "checking for ELF binary format... " >&6; } +if test ${gl_cv_elf+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef _LP64 - int ok; - #else - error fail - #endif +#if defined __ELF__ || (defined __linux__ && defined __EDG__) + Extensible Linking Format + #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_solaris_64bit=yes -else - gl_cv_solaris_64bit=no +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1 +then : + gl_cv_elf=yes +else $as_nop + gl_cv_elf=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -rf conftest* + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 -$as_echo "$gl_cv_solaris_64bit" >&6; };; - esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 +printf "%s\n" "$gl_cv_elf" >&6; } + if test $gl_cv_elf = yes; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi + # Use 'expr', not 'test', to compare the values of func_elfclass, because on + # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, + # not 1 or 2. + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac + else + acl_is_expected_elfclass () + { + : + } + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 -$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } -if ${acl_cv_libdirstems+:} false; then : - $as_echo_n "(cached) " >&6 -else - acl_libdirstem=lib + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 +printf %s "checking for the common suffixes of directories in the library search path... " >&6; } +if test ${acl_cv_libdirstems+y} +then : + printf %s "(cached) " >&6 +else $as_nop + acl_libdirstem=lib acl_libdirstem2= + acl_libdirstem3= case "$host_os" in solaris*) - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) - if test "$HOST_CPU_C_ABI_32BIT" != yes; then - searchpath=`(if test -f /usr/bin/gcc \ - && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ - LC_ALL=C /usr/bin/gcc -print-search-dirs; \ - else \ - LC_ALL=C $CC -print-search-dirs; \ - fi) 2>/dev/null \ - | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 fi fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= + fi + fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" - acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 -$as_echo "$acl_cv_libdirstems" >&6; } - # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. - acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` - acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 +printf "%s\n" "$acl_cv_libdirstems" >&6; } + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` @@ -16536,13 +17862,16 @@ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then : +if test ${with_libiconv_prefix+y} +then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no @@ -16556,6 +17885,8 @@ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -16563,15 +17894,19 @@ else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi fi + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi LIBICONV= LTLIBICONV= INCICONV= @@ -16617,45 +17952,51 @@ shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do @@ -16672,7 +18013,7 @@ -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -16682,14 +18023,14 @@ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -16699,7 +18040,7 @@ fi fi if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -16721,7 +18062,8 @@ if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= @@ -16800,6 +18142,13 @@ fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then @@ -16845,12 +18194,14 @@ for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -16869,14 +18220,14 @@ exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" fi fi haveit= @@ -16890,14 +18241,14 @@ exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" fi fi fi @@ -16929,7 +18280,14 @@ fi ;; -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -17004,111 +18362,80 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 -$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } -if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +printf %s "checking for CFPreferencesCopyAppValue... " >&6; } +if test ${gt_cv_func_CFPreferencesCopyAppValue+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFPreferencesCopyAppValue=yes -else +else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } -if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 +printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } +if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { -CFLocaleCopyCurrent(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gt_cv_func_CFLocaleCopyCurrent=yes -else - gt_cv_func_CFLocaleCopyCurrent=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - -$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 -$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; } -if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then : - $as_echo_n "(cached) " >&6 -else - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes -else +else $as_nop gt_cv_func_CFLocaleCopyPreferredLanguages=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 +printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then -$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ - || test $gt_cv_func_CFLocaleCopyCurrent = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi @@ -17150,11 +18477,12 @@ gt_expression_test_code= fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 -$as_echo_n "checking for GNU gettext in libc... " >&6; } -if eval \${$gt_func_gnugettext_libc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +printf %s "checking for GNU gettext in libc... " >&6; } +if eval test \${$gt_func_gnugettext_libc+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17169,7 +18497,7 @@ $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -17179,17 +18507,18 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$gt_func_gnugettext_libc=yes" -else +else $as_nop eval "$gt_func_gnugettext_libc=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then @@ -17222,11 +18551,12 @@ done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 -$as_echo_n "checking for iconv... " >&6; } -if ${am_cv_func_iconv+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +printf %s "checking for iconv... " >&6; } +if test ${am_cv_func_iconv+y} +then : + printf %s "(cached) " >&6 +else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no @@ -17237,7 +18567,7 @@ #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -17246,10 +18576,11 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : am_cv_func_iconv=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" @@ -17261,7 +18592,7 @@ #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -17270,24 +18601,26 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 -$as_echo "$am_cv_func_iconv" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 -$as_echo_n "checking for working iconv... " >&6; } -if ${am_cv_func_iconv_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +printf %s "checking for working iconv... " >&6; } +if test ${am_cv_func_iconv_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then @@ -17295,12 +18628,13 @@ fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17312,11 +18646,12 @@ #endif int -main () +main (void) { int result = 0; - /* Test against AIX 5.1 bug: Failures are not distinguishable from successful - returns. */ + /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from + successful returns. This is even documented in + */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) @@ -17424,7 +18759,8 @@ return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17436,8 +18772,8 @@ LIBS="$am_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 -$as_echo "$am_cv_func_iconv_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; @@ -17447,14 +18783,14 @@ fi if test "$am_func_iconv" = yes; then -$as_echo "#define HAVE_ICONV 1" >>confdefs.h +printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 -$as_echo_n "checking how to link with libiconv... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 -$as_echo "$LIBICONV" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +printf %s "checking how to link with libiconv... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= @@ -17479,13 +18815,16 @@ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. -if test "${with_libintl_prefix+set}" = set; then : +if test ${with_libintl_prefix+y} +then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no @@ -17499,6 +18838,8 @@ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -17506,15 +18847,19 @@ else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi fi + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi LIBINTL= LTLIBINTL= INCINTL= @@ -17560,45 +18905,51 @@ shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do @@ -17615,7 +18966,7 @@ -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -17625,14 +18976,14 @@ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -17642,7 +18993,7 @@ fi fi if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -17664,7 +19015,8 @@ if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= @@ -17743,6 +19095,13 @@ fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then @@ -17788,12 +19147,14 @@ for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -17812,14 +19173,14 @@ exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir" fi fi haveit= @@ -17833,14 +19194,14 @@ exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir" fi fi fi @@ -17872,7 +19233,14 @@ fi ;; -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -17923,11 +19291,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 -$as_echo_n "checking for GNU gettext in libintl... " >&6; } -if eval \${$gt_func_gnugettext_libintl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +printf %s "checking for GNU gettext in libintl... " >&6; } +if eval test \${$gt_func_gnugettext_libintl+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" @@ -17950,7 +19319,7 @@ $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -17960,12 +19329,13 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$gt_func_gnugettext_libintl=yes" -else +else $as_nop eval "$gt_func_gnugettext_libintl=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" @@ -17987,7 +19357,7 @@ $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -17997,21 +19367,22 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ @@ -18038,20 +19409,20 @@ if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then -$as_echo "#define ENABLE_NLS 1" >>confdefs.h +printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 -$as_echo_n "checking whether to use NLS... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +printf %s "checking whether to use NLS... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 -$as_echo_n "checking where the gettext function comes from... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +printf %s "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" @@ -18061,18 +19432,18 @@ else gt_source="included intl directory" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 -$as_echo "$gt_source" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +printf "%s\n" "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 -$as_echo_n "checking how to link with libintl... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 -$as_echo "$LIBINTL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +printf %s "checking how to link with libintl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +printf "%s\n" "$LIBINTL" >&6; } for element in $INCINTL; do haveit= @@ -18099,10 +19470,10 @@ fi -$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h -$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h +printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi @@ -18129,132 +19500,182 @@ # There is currently no workarounds in this package if some of # these headers are missing. -for ac_header in fcntl.h limits.h sys/time.h + for ac_header in fcntl.h limits.h sys/time.h do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -else +else $as_nop as_fn_error $? "Required header file(s) are missing." "$LINENO" 5 fi done +# 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_fn_c_check_header_compile "$LINENO" "immintrin.h" "ac_cv_header_immintrin_h" "$ac_includes_default" +if test "x$ac_cv_header_immintrin_h" = xyes +then : + printf "%s\n" "#define HAVE_IMMINTRIN_H 1" >>confdefs.h -# This allows the use of the intrinsic functions if they are available. -for ac_header in immintrin.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "immintrin.h" "ac_cv_header_immintrin_h" "$ac_includes_default" -if test "x$ac_cv_header_immintrin_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_IMMINTRIN_H 1 -_ACEOF +fi +ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default" +if test "x$ac_cv_header_cpuid_h" = xyes +then : + printf "%s\n" "#define HAVE_CPUID_H 1" >>confdefs.h fi -done - ############################################################################### # Checks for typedefs, structures, and compiler characteristics. ############################################################################### +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h + + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - #ifndef bool - "error: bool is not defined" + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" #endif - #ifndef false - "error: false is not defined" + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif #if true != 1 - "error: true is not 1" + #error "'true' is not equal to 1" #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; - struct s { _Bool s: 1; _Bool t; } s; + enum { e = false, f = true, g = false * true, h = true * 256 }; - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; + /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - _Bool q = true; - _Bool *pq = &q; + bool p = true; + bool *pp = &p; + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif + int -main () +main (void) { - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); + bool ps = &s; + *pp |= p; + *pp |= ! p; + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_header_stdbool_h=yes -else +else $as_nop ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - if test $ac_cv_header_stdbool_h = yes; then -$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h fi @@ -18264,12 +19685,10 @@ no|yes) ;; #( *) -$as_echo "#define _UINT8_T 1" >>confdefs.h +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac @@ -18279,9 +19698,7 @@ *) -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac @@ -18290,9 +19707,7 @@ no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac @@ -18301,12 +19716,10 @@ no|yes) ;; #( *) -$as_echo "#define _UINT32_T 1" >>confdefs.h +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac @@ -18315,9 +19728,7 @@ no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac @@ -18326,29 +19737,28 @@ no|yes) ;; #( *) -$as_echo "#define _UINT64_T 1" >>confdefs.h +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" -if test "x$ac_cv_type_uintptr_t" = xyes; then : +if test "x$ac_cv_type_uintptr_t" = xyes +then : -$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h -else +else $as_nop for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; @@ -18358,15 +19768,14 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -cat >>confdefs.h <<_ACEOF -#define uintptr_t $ac_type -_ACEOF +printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h ac_type= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break done fi @@ -18377,17 +19786,19 @@ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -$as_echo_n "checking size of size_t... " >&6; } -if ${ac_cv_sizeof_size_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +printf %s "checking size of size_t... " >&6; } +if test ${ac_cv_sizeof_size_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_size_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -18396,14 +19807,12 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -$as_echo "$ac_cv_sizeof_size_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t -_ACEOF +printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h @@ -18411,64 +19820,61 @@ # information is available in struct stat. Otherwise one second accuracy # is used. ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_uatime" "ac_cv_member_struct_stat_st_uatime" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_uatime" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_uatime" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_UATIME 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_UATIME 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h fi # Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : +if test ${enable_largefile+y} +then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC @@ -18482,44 +19888,47 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_largefile_CC=' -n32'; break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18528,22 +19937,23 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 @@ -18552,43 +19962,43 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=64; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF +printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } +if test ${ac_cv_sys_large_files+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18597,22 +20007,23 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 @@ -18621,47 +20032,45 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=1; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +printf "%s\n" "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF +printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h ;; esac rm -rf conftest* fi - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +printf %s "checking whether byte ordering is bigendian... " >&6; } +if test ${ac_cv_c_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18672,7 +20081,8 @@ typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -18696,7 +20106,7 @@ fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18705,7 +20115,7 @@ #include int -main () +main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -18717,7 +20127,8 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18725,7 +20136,7 @@ #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -18735,14 +20146,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -18751,7 +20163,7 @@ #include int -main () +main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -18761,14 +20173,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef _BIG_ENDIAN not big endian @@ -18778,31 +20191,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = +unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = + unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - short int ebcdic_ii[] = + unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = + unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -18810,14 +20225,15 @@ extern int foo; int -main () +main (void) { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -18830,13 +20246,13 @@ fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { /* Are we little or big endian? From Harbison&Steele. */ @@ -18852,9 +20268,10 @@ return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_bigendian=no -else +else $as_nop ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18863,17 +20280,17 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h + printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h +printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) @@ -18882,7 +20299,43 @@ esac +# __attribute__((__constructor__)) can be used for one-time initializations. +# Use -Werror because some compilers accept unknown attributes and just +# give a warning. If it works this should give no warnings, even +# clang -Weverything should be fine. +# dnl This doesn't need AC_LANG_SOURCE, minimal code is enough. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if __attribute__((__constructor__)) can be used" >&5 +printf %s "checking if __attribute__((__constructor__)) can be used... " >&6; } +have_func_attribute_constructor=no +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + __attribute__((__constructor__)) + static void my_constructor_func(void) { return; } + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + +printf "%s\n" "#define HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR 1" >>confdefs.h + + have_func_attribute_constructor=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +CFLAGS="$OLD_CFLAGS" + + ############################################################################### # Checks for library functions. ############################################################################### @@ -18890,53 +20343,52 @@ # Gnulib replacements as needed if test -z "$GETOPT_H"; then - for ac_header in getopt.h + for ac_header in getopt.h do : - ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" -if test "x$ac_cv_header_getopt_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETOPT_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" +if test "x$ac_cv_header_getopt_h" = xyes +then : + printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h -else +else $as_nop GETOPT_H=getopt.h fi done - fi if test -z "$GETOPT_H"; then - for ac_func in getopt_long + + for ac_func in getopt_long do : ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" -if test "x$ac_cv_func_getopt_long" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETOPT_LONG 1 -_ACEOF +if test "x$ac_cv_func_getopt_long" = xyes +then : + printf "%s\n" "#define HAVE_GETOPT_LONG 1" >>confdefs.h -else +else $as_nop GETOPT_H=getopt.h fi -done +done fi if test -z "$GETOPT_H"; then - ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include -" -if test "x$ac_cv_have_decl_optreset" = xyes; then : + ac_fn_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_optreset" = xyes +then : -$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPTRESET 1" >>confdefs.h fi - fi - if test -n "$GETOPT_H"; then : + if test -n "$GETOPT_H" +then : case " $LIBOBJS " in *" getopt.$ac_objext "* ) ;; @@ -18953,7 +20405,7 @@ GETOPT_H=getopt.h -$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h +printf "%s\n" "#define __GETOPT_PREFIX rpl_" >>confdefs.h @@ -18962,30 +20414,28 @@ # Find the best function to set timestamps. -for ac_func in futimens futimes futimesat utimes _futime utime + + for ac_func in futimens futimes futimesat utimes _futime utime do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break fi + done - # This is nice to have but not mandatory. -for ac_func in posix_fadvise -do : - ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise" -if test "x$ac_cv_func_posix_fadvise" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSIX_FADVISE 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise" +if test "x$ac_cv_func_posix_fadvise" = xyes +then : + printf "%s\n" "#define HAVE_POSIX_FADVISE 1" >>confdefs.h fi -done @@ -18995,30 +20445,26 @@ -ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include -" -if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_program_invocation_name" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_bswap16/32/64 are supported" >&5 -$as_echo_n "checking if __builtin_bswap16/32/64 are supported... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if __builtin_bswap16/32/64 are supported" >&5 +printf %s "checking if __builtin_bswap16/32/64 are supported... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { __builtin_bswap16(1); __builtin_bswap32(1); @@ -19027,39 +20473,40 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE___BUILTIN_BSWAPXX 1" >>confdefs.h +printf "%s\n" "#define HAVE___BUILTIN_BSWAPXX 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Look for other byteswapping methods. - for ac_header in byteswap.h sys/endian.h sys/byteorder.h + for ac_header in byteswap.h sys/endian.h sys/byteorder.h do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done - # Even if we have byteswap.h we may lack the specific macros/functions. if test x$ac_cv_header_byteswap_h = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_16 is available" >&5 -$as_echo_n "checking if bswap_16 is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if bswap_16 is available" >&5 +printf %s "checking if bswap_16 is available... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19072,24 +20519,25 @@ } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_BSWAP_16 1" >>confdefs.h +printf "%s\n" "#define HAVE_BSWAP_16 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_32 is available" >&5 -$as_echo_n "checking if bswap_32 is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if bswap_32 is available" >&5 +printf %s "checking if bswap_32 is available... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19102,24 +20550,25 @@ } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_BSWAP_32 1" >>confdefs.h +printf "%s\n" "#define HAVE_BSWAP_32 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_64 is available" >&5 -$as_echo_n "checking if bswap_64 is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if bswap_64 is available" >&5 +printf %s "checking if bswap_64 is available... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19132,33 +20581,35 @@ } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_BSWAP_64 1" >>confdefs.h +printf "%s\n" "#define HAVE_BSWAP_64 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if unaligned memory access should be used" >&5 -$as_echo_n "checking if unaligned memory access should be used... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if unaligned memory access should be used" >&5 +printf %s "checking if unaligned memory access should be used... " >&6; } # Check whether --enable-unaligned-access was given. -if test "${enable_unaligned_access+set}" = set; then : +if test ${enable_unaligned_access+y} +then : enableval=$enable_unaligned_access; -else +else $as_nop enable_unaligned_access=auto fi @@ -19169,6 +20620,27 @@ i?86|x86_64|powerpc|powerpc64) enable_unaligned_access=yes ;; + arm*|aarch64*) + # On 32-bit and 64-bit ARM, GCC and Clang + # #define __ARM_FEATURE_UNALIGNED if + # unaligned access is supported. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifndef __ARM_FEATURE_UNALIGNED +compile error +#endif +int main(void) { return 0; } + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + enable_unaligned_access=yes +else $as_nop + enable_unaligned_access=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; *) enable_unaligned_access=no ;; @@ -19176,89 +20648,87 @@ fi if test "x$enable_unaligned_access" = xyes ; then -$as_echo "#define TUKLIB_FAST_UNALIGNED_ACCESS 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_FAST_UNALIGNED_ACCESS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if unsafe type punning should be used" >&5 -$as_echo_n "checking if unsafe type punning should be used... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if unsafe type punning should be used" >&5 +printf %s "checking if unsafe type punning should be used... " >&6; } # Check whether --enable-unsafe-type-punning was given. -if test "${enable_unsafe_type_punning+set}" = set; then : +if test ${enable_unsafe_type_punning+y} +then : enableval=$enable_unsafe_type_punning; -else +else $as_nop enable_unsafe_type_punning=no fi if test "x$enable_unsafe_type_punning" = xyes ; then -$as_echo "#define TUKLIB_USE_UNSAFE_TYPE_PUNNING 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_USE_UNSAFE_TYPE_PUNNING 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_assume_aligned is supported" >&5 -$as_echo_n "checking if __builtin_assume_aligned is supported... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if __builtin_assume_aligned is supported" >&5 +printf %s "checking if __builtin_assume_aligned is supported... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { __builtin_assume_aligned("", 1); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE___BUILTIN_ASSUME_ALIGNED 1" >>confdefs.h +printf "%s\n" "#define HAVE___BUILTIN_ASSUME_ALIGNED 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext # sys/param.h might be needed by sys/sysctl.h. -for ac_header in sys/param.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_param_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_PARAM_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi -done +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to detect the amount of physical memory" >&5 +printf %s "checking how to detect the amount of physical memory... " >&6; } +if test ${tuklib_cv_physmem_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the amount of physical memory" >&5 -$as_echo_n "checking how to detect the amount of physical memory... " >&6; } -if ${tuklib_cv_physmem_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Maybe checking $host_os would be enough but this matches what # tuklib_physmem.c does. # @@ -19276,9 +20746,10 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=special -else +else $as_nop # Look for AIX-specific solution before sysconf(), because the test @@ -19297,9 +20768,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=aix -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19316,15 +20788,15 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=sysconf -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include #ifdef HAVE_SYS_PARAM_H # include #endif @@ -19340,9 +20812,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=sysctl -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19361,9 +20834,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=getsysinfo -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19383,9 +20857,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=pstat_getstatic -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19403,9 +20878,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=getinvent_r -else +else $as_nop # This version of sysinfo() is Linux-specific. Some non-Linux systems have @@ -19425,16 +20901,17 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_physmem_method=sysinfo -else +else $as_nop tuklib_cv_physmem_method=unknown fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) tuklib_cv_physmem_method=unknown @@ -19442,57 +20919,57 @@ esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tuklib_cv_physmem_method" >&5 -$as_echo "$tuklib_cv_physmem_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tuklib_cv_physmem_method" >&5 +printf "%s\n" "$tuklib_cv_physmem_method" >&6; } case $tuklib_cv_physmem_method in aix) -$as_echo "#define TUKLIB_PHYSMEM_AIX 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_AIX 1" >>confdefs.h ;; sysconf) -$as_echo "#define TUKLIB_PHYSMEM_SYSCONF 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_SYSCONF 1" >>confdefs.h ;; sysctl) -$as_echo "#define TUKLIB_PHYSMEM_SYSCTL 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_SYSCTL 1" >>confdefs.h ;; getsysinfo) -$as_echo "#define TUKLIB_PHYSMEM_GETSYSINFO 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_GETSYSINFO 1" >>confdefs.h ;; pstat_getstatic) -$as_echo "#define TUKLIB_PHYSMEM_PSTAT_GETSTATIC 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_PSTAT_GETSTATIC 1" >>confdefs.h ;; getinvent_r) -$as_echo "#define TUKLIB_PHYSMEM_GETINVENT_R 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_GETINVENT_R 1" >>confdefs.h ;; sysinfo) -$as_echo "#define TUKLIB_PHYSMEM_SYSINFO 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_PHYSMEM_SYSINFO 1" >>confdefs.h ;; esac @@ -19501,26 +20978,22 @@ # sys/param.h might be needed by sys/sysctl.h. -for ac_header in sys/param.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_param_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_PARAM_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi -done +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to detect the number of available CPU cores" >&5 +printf %s "checking how to detect the number of available CPU cores... " >&6; } +if test ${tuklib_cv_cpucores_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the number of available CPU cores" >&5 -$as_echo_n "checking how to detect the number of available CPU cores... " >&6; } -if ${tuklib_cv_cpucores_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Maybe checking $host_os would be enough but this matches what # tuklib_cpucores.c does. # @@ -19536,9 +21009,10 @@ #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_cpucores_method=special -else +else $as_nop # glibc-based systems (GNU/Linux and GNU/kFreeBSD) have sched_getaffinity(). @@ -19559,9 +21033,10 @@ } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : tuklib_cv_cpucores_method=sched_getaffinity -else +else $as_nop # FreeBSD has both cpuset and sysctl. Look for cpuset first because @@ -19587,9 +21062,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_cpucores_method=cpuset -else +else $as_nop # On OS/2, both sysconf() and sysctl() pass the tests in this file, @@ -19605,7 +21081,6 @@ #ifdef __QNX__ compile error #endif -#include #ifdef HAVE_SYS_PARAM_H # include #endif @@ -19613,7 +21088,12 @@ int main(void) { +#ifdef HW_NCPUONLINE + /* This is preferred on OpenBSD, see tuklib_cpucores.c. */ + int name[2] = { CTL_HW, HW_NCPUONLINE }; +#else int name[2] = { CTL_HW, HW_NCPU }; +#endif int cpus; size_t cpus_size = sizeof(cpus); sysctl(name, 2, &cpus, &cpus_size, NULL, 0); @@ -19621,9 +21101,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_cpucores_method=sysctl -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19645,9 +21126,10 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_cpucores_method=sysconf -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19666,54 +21148,55 @@ } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : tuklib_cv_cpucores_method=pstat_getdynamic -else +else $as_nop tuklib_cv_cpucores_method=unknown fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tuklib_cv_cpucores_method" >&5 -$as_echo "$tuklib_cv_cpucores_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tuklib_cv_cpucores_method" >&5 +printf "%s\n" "$tuklib_cv_cpucores_method" >&6; } case $tuklib_cv_cpucores_method in sched_getaffinity) -$as_echo "#define TUKLIB_CPUCORES_SCHED_GETAFFINITY 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_CPUCORES_SCHED_GETAFFINITY 1" >>confdefs.h ;; cpuset) -$as_echo "#define TUKLIB_CPUCORES_CPUSET 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_CPUCORES_CPUSET 1" >>confdefs.h ;; sysctl) -$as_echo "#define TUKLIB_CPUCORES_SYSCTL 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_CPUCORES_SYSCTL 1" >>confdefs.h ;; sysconf) -$as_echo "#define TUKLIB_CPUCORES_SYSCONF 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_CPUCORES_SYSCONF 1" >>confdefs.h ;; pstat_getdynamic) -$as_echo "#define TUKLIB_CPUCORES_PSTAT_GETDYNAMIC 1" >>confdefs.h +printf "%s\n" "#define TUKLIB_CPUCORES_PSTAT_GETDYNAMIC 1" >>confdefs.h ;; esac @@ -19721,16 +21204,17 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 -$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } -if ${ac_cv_func_mbrtowc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 +printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } +if test ${ac_cv_func_mbrtowc+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { wchar_t wc; char const s[] = ""; @@ -19741,32 +21225,29 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_func_mbrtowc=yes -else +else $as_nop ac_cv_func_mbrtowc=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 -$as_echo "$ac_cv_func_mbrtowc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 +printf "%s\n" "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then -$as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h fi -for ac_func in wcwidth -do : - ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" -if test "x$ac_cv_func_wcwidth" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WCWIDTH 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" +if test "x$ac_cv_func_wcwidth" = xyes +then : + printf "%s\n" "#define HAVE_WCWIDTH 1" >>confdefs.h fi -done @@ -19787,24 +21268,26 @@ sha256_header_found=no sha256_type_found=no sha256_func_found=no -if test "x$enable_external_sha256" = "xyes"; then +if test "x$enable_external_sha256" = "xyes" +then : + # Test for Common Crypto before others, because Darwin has sha256.h # too and we don't want to use that, because on older versions it # uses OpenSSL functions, whose SHA256_Init is not guaranteed to # succeed. - for ac_header in CommonCrypto/CommonDigest.h sha256.h sha2.h + for ac_header in CommonCrypto/CommonDigest.h sha256.h sha2.h do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF sha256_header_found=yes ; break fi done - if test "x$sha256_header_found" = xyes; then ac_fn_c_check_type "$LINENO" "CC_SHA256_CTX" "ac_cv_type_CC_SHA256_CTX" "#ifdef HAVE_SYS_TYPES_H # include @@ -19819,11 +21302,10 @@ # include #endif " -if test "x$ac_cv_type_CC_SHA256_CTX" = xyes; then : +if test "x$ac_cv_type_CC_SHA256_CTX" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_CC_SHA256_CTX 1 -_ACEOF +printf "%s\n" "#define HAVE_CC_SHA256_CTX 1" >>confdefs.h sha256_type_found=yes fi @@ -19840,11 +21322,10 @@ # include #endif " -if test "x$ac_cv_type_SHA256_CTX" = xyes; then : +if test "x$ac_cv_type_SHA256_CTX" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_SHA256_CTX 1 -_ACEOF +printf "%s\n" "#define HAVE_SHA256_CTX 1" >>confdefs.h sha256_type_found=yes fi @@ -19861,21 +21342,21 @@ # include #endif " -if test "x$ac_cv_type_SHA2_CTX" = xyes; then : +if test "x$ac_cv_type_SHA2_CTX" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_SHA2_CTX 1 -_ACEOF +printf "%s\n" "#define HAVE_SHA2_CTX 1" >>confdefs.h sha256_type_found=yes fi if test "x$sha256_type_found" = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SHA256Init" >&5 -$as_echo_n "checking for library containing SHA256Init... " >&6; } -if ${ac_cv_search_SHA256Init+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing SHA256Init" >&5 +printf %s "checking for library containing SHA256Init... " >&6; } +if test ${ac_cv_search_SHA256Init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19883,55 +21364,58 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char SHA256Init (); int -main () +main (void) { return SHA256Init (); ; return 0; } _ACEOF -for ac_lib in '' md; do +for ac_lib in '' md +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_SHA256Init=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_SHA256Init+:} false; then : + if test ${ac_cv_search_SHA256Init+y} +then : break fi done -if ${ac_cv_search_SHA256Init+:} false; then : +if test ${ac_cv_search_SHA256Init+y} +then : -else +else $as_nop ac_cv_search_SHA256Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SHA256Init" >&5 -$as_echo "$ac_cv_search_SHA256Init" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SHA256Init" >&5 +printf "%s\n" "$ac_cv_search_SHA256Init" >&6; } ac_res=$ac_cv_search_SHA256Init -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SHA256_Init" >&5 -$as_echo_n "checking for library containing SHA256_Init... " >&6; } -if ${ac_cv_search_SHA256_Init+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing SHA256_Init" >&5 +printf %s "checking for library containing SHA256_Init... " >&6; } +if test ${ac_cv_search_SHA256_Init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19939,64 +21423,69 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char SHA256_Init (); int -main () +main (void) { return SHA256_Init (); ; return 0; } _ACEOF -for ac_lib in '' md; do +for ac_lib in '' md +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_SHA256_Init=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_SHA256_Init+:} false; then : + if test ${ac_cv_search_SHA256_Init+y} +then : break fi done -if ${ac_cv_search_SHA256_Init+:} false; then : +if test ${ac_cv_search_SHA256_Init+y} +then : -else +else $as_nop ac_cv_search_SHA256_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SHA256_Init" >&5 -$as_echo "$ac_cv_search_SHA256_Init" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SHA256_Init" >&5 +printf "%s\n" "$ac_cv_search_SHA256_Init" >&6; } ac_res=$ac_cv_search_SHA256_Init -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi - for ac_func in CC_SHA256_Init SHA256Init SHA256_Init + + for ac_func in CC_SHA256_Init SHA256Init SHA256_Init do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF sha256_func_found=yes ; break fi -done +done fi fi + fi if test "x$sha256_func_found" = xno; then COND_INTERNAL_SHA256_TRUE= @@ -20010,48 +21499,116 @@ as_fn_error $? "--enable-external-sha256 was specified but no supported external SHA-256 implementation was found" "$LINENO" 5 fi -# Check for SSE2 intrinsics. -ac_fn_c_check_decl "$LINENO" "_mm_movemask_epi8" "ac_cv_have_decl__mm_movemask_epi8" "#ifdef HAVE_IMMINTRIN_H +# Check for SSE2 intrinsics. There is no run-time detection for SSE2 so if +# compiler options enable SSE2 then SSE2 support is required by the binaries. +# The compile-time check for SSE2 is done with #ifdefs because some compilers +# (ICC, MSVC) allow SSE2 intrinsics even when SSE2 isn't enabled. +ac_fn_check_decl "$LINENO" "_mm_movemask_epi8" "ac_cv_have_decl__mm_movemask_epi8" "#ifdef HAVE_IMMINTRIN_H #include #endif -" -if test "x$ac_cv_have_decl__mm_movemask_epi8" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl__mm_movemask_epi8" = xyes +then : -$as_echo "#define HAVE__MM_MOVEMASK_EPI8 1" >>confdefs.h +printf "%s\n" "#define HAVE__MM_MOVEMASK_EPI8 1" >>confdefs.h fi +# For faster CRC on 32/64-bit x86 and E2K (see also crc64_fast.c): +# +# - Check for the CLMUL intrinsic _mm_clmulepi64_si128 in . +# Check also for _mm_set_epi64x for consistency with CMake build +# where it's needed to disable CLMUL with VS2013. +# +# - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works +# together with _mm_clmulepi64_si128 from . The attribute +# was added in GCC 4.4 but some GCC 4.x versions don't allow intrinsics +# with it. Exception: it must be not be used with EDG-based compilers +# like ICC and the compiler on E2K. +# +# If everything above is supported, runtime detection will be used to keep the +# binaries working on systems that don't support the required extensions. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _mm_clmulepi64_si128 is usable" >&5 +printf %s "checking if _mm_clmulepi64_si128 is usable... " >&6; } +if test "x$enable_clmul_crc" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, --disable-clmul-crc was used" >&5 +printf "%s\n" "no, --disable-clmul-crc was used" >&6; } + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +// CLMUL works on older E2K instruction set but it is slow due to emulation. +#if defined(__e2k__) && __iset__ < 6 +# error +#endif + +// Intel's old compiler (ICC) can define __GNUC__ but the attribute must not +// be used with it. The new Clang-based ICX needs the attribute. +// Checking for !defined(__EDG__) catches ICC and other EDG-based compilers. +#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__) +__attribute__((__target__("ssse3,sse4.1,pclmul"))) +#endif +__m128i my_clmul(__m128i a) +{ + const __m128i b = _mm_set_epi64x(1, 2); + return _mm_clmulepi64_si128(a, b, 0); +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + +printf "%s\n" "#define HAVE_USABLE_CLMUL 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + # Check for sandbox support. If one is found, set enable_sandbox=found. -case $enable_sandbox in - auto | capsicum) +case $enable_sandbox in #( + auto | capsicum) : + # On FreeBSD >= 11.x and Linux, Capsicum is uses . # If this header is found, it is assumed to be the right one. capsicum_header_found=no -for ac_header in sys/capsicum.h + for ac_header in sys/capsicum.h do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/capsicum.h" "ac_cv_header_sys_capsicum_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_capsicum_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_CAPSICUM_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "sys/capsicum.h" "ac_cv_header_sys_capsicum_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capsicum_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_CAPSICUM_H 1" >>confdefs.h capsicum_header_found=yes fi done - if test "$capsicum_header_found" = no ; then # On FreeBSD 10.x Capsicum uses . Such a header exists # on Linux too but it describes POSIX.1e capabilities. Look for the # declaration of cap_rights_limit to check if is # a Capsicum header. - ac_fn_c_check_decl "$LINENO" "cap_rights_limit" "ac_cv_have_decl_cap_rights_limit" "#include -" -if test "x$ac_cv_have_decl_cap_rights_limit" = xyes; then : + ac_fn_check_decl "$LINENO" "cap_rights_limit" "ac_cv_have_decl_cap_rights_limit" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_cap_rights_limit" = xyes +then : capsicum_header_found=yes fi - fi capsicum_lib_found=no @@ -20070,29 +21627,28 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char cap_rights_limit (); int -main () +main (void) { return cap_rights_limit (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : capsicum_lib_found=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext # Linux has Capsicum functions in libcaprights. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_rights_limit in -lcaprights" >&5 -$as_echo_n "checking for cap_rights_limit in -lcaprights... " >&6; } -if ${ac_cv_lib_caprights_cap_rights_limit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cap_rights_limit in -lcaprights" >&5 +printf %s "checking for cap_rights_limit in -lcaprights... " >&6; } +if test ${ac_cv_lib_caprights_cap_rights_limit+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcaprights $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20101,30 +21657,29 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char cap_rights_limit (); int -main () +main (void) { return cap_rights_limit (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_caprights_cap_rights_limit=yes -else +else $as_nop ac_cv_lib_caprights_cap_rights_limit=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_caprights_cap_rights_limit" >&5 -$as_echo "$ac_cv_lib_caprights_cap_rights_limit" >&6; } -if test "x$ac_cv_lib_caprights_cap_rights_limit" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_caprights_cap_rights_limit" >&5 +printf "%s\n" "$ac_cv_lib_caprights_cap_rights_limit" >&6; } +if test "x$ac_cv_lib_caprights_cap_rights_limit" = xyes +then : CAPSICUM_LIB=-lcaprights capsicum_lib_found=yes fi @@ -20140,15 +21695,37 @@ if test "$capsicum_lib_found" = yes ; then -$as_echo "#define HAVE_CAPSICUM 1" >>confdefs.h +printf "%s\n" "#define HAVE_CAPSICUM 1" >>confdefs.h enable_sandbox=found else : fi - ;; + + ;; #( + *) : + ;; esac +case $enable_sandbox in #( + auto | pledge) : + + for ac_func in pledge +do : + ac_fn_c_check_func "$LINENO" "pledge" "ac_cv_func_pledge" +if test "x$ac_cv_func_pledge" = xyes +then : + printf "%s\n" "#define HAVE_PLEDGE 1" >>confdefs.h + enable_sandbox=found ; break +fi + +done + + ;; #( + *) : + ;; +esac + # If a specific sandboxing method was explicitly requested and it wasn't # found, give an error. case $enable_sandbox in @@ -20176,40 +21753,43 @@ CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 -$as_echo_n "checking whether the -Werror option is usable... " >&6; } -if ${gl_cv_cc_vis_werror+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 +printf %s "checking whether the -Werror option is usable... " >&6; } +if test ${gl_cv_cc_vis_werror+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_cc_vis_werror=yes -else +else $as_nop gl_cv_cc_vis_werror=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 -$as_echo "$gl_cv_cc_vis_werror" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 -$as_echo_n "checking for simple visibility declarations... " >&6; } -if ${gl_cv_cc_visibility+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +printf %s "checking for simple visibility declarations... " >&6; } +if test ${gl_cv_cc_visibility+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then @@ -20224,24 +21804,25 @@ void dummyfunc (void) {} int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_cc_visibility=yes -else +else $as_nop gl_cv_cc_visibility=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 -$as_echo "$gl_cv_cc_visibility" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 @@ -20250,85 +21831,113 @@ -cat >>confdefs.h <<_ACEOF -#define HAVE_VISIBILITY $HAVE_VISIBILITY -_ACEOF +printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" fi -if test "$GCC" = yes ; then +if test "$GCC" = yes +then : + # Enable as much warnings as possible. These commented warnings won't # work for this package though: # * -Wunreachable-code breaks several assert(0) cases, which are # backed up with "return LZMA_PROG_ERROR". # * -Wcast-qual would break various things where we need a non-const # pointer although we don't modify anything through it. - # * -Wcast-align breaks optimized CRC32 and CRC64 implementation - # on some architectures (not on x86), where this warning is bogus, - # because we take care of correct alignment. # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations # don't seem so useful here; at least the last one gives some # warnings which are not bugs. + # * -Wconversion still shows too many warnings. + # + # The flags before the empty line are for GCC and many of them + # are supported by Clang too. The flags after the empty line are + # for Clang. for NEW_FLAG in \ -Wall \ -Wextra \ -Wvla \ + -Wc99-c11-compat \ -Wformat=2 \ -Winit-self \ -Wmissing-include-dirs \ - -Wstrict-aliasing \ + -Wshift-overflow=2 \ + -Wstrict-overflow=3 \ + -Walloc-zero \ + -Wduplicated-cond \ -Wfloat-equal \ -Wundef \ -Wshadow \ -Wpointer-arith \ -Wbad-function-cast \ -Wwrite-strings \ + -Wdate-time \ + -Wsign-conversion \ + -Wfloat-conversion \ -Wlogical-op \ -Waggregate-return \ -Wstrict-prototypes \ -Wold-style-definition \ -Wmissing-prototypes \ -Wmissing-declarations \ - -Wmissing-noreturn \ - -Wredundant-decls + -Wredundant-decls \ + \ + -Wc99-compat \ + -Wc11-extensions \ + -Wc2x-compat \ + -Wc2x-extensions \ + -Wpre-c2x-compat \ + -Warray-bounds-pointer-arithmetic \ + -Wassign-enum \ + -Wconditional-uninitialized \ + -Wdocumentation \ + -Wduplicate-enum \ + -Wempty-translation-unit \ + -Wflexible-array-extensions \ + -Wmissing-variable-declarations \ + -Wnewline-eof \ + -Wshift-sign-overflow \ + -Wstring-conversion do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts $NEW_FLAG" >&5 -$as_echo_n "checking if $CC accepts $NEW_FLAG... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC accepts $NEW_FLAG" >&5 +printf %s "checking if $CC accepts $NEW_FLAG... " >&6; } OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $NEW_FLAG -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void foo(void); void foo(void) { } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$OLD_CFLAGS" done # Check whether --enable-werror was given. -if test "${enable_werror+set}" = set; then : +if test ${enable_werror+y} +then : enableval=$enable_werror; -else +else $as_nop enable_werror=no fi if test "x$enable_werror" = "xyes"; then AM_CFLAGS="$AM_CFLAGS -Werror" fi + fi @@ -20356,7 +21965,7 @@ xz=`echo xz | sed "$program_transform_name"` -ac_config_files="$ac_config_files Doxyfile Makefile po/Makefile.in lib/Makefile src/Makefile src/liblzma/Makefile src/liblzma/api/Makefile src/xz/Makefile src/xzdec/Makefile src/lzmainfo/Makefile src/scripts/Makefile tests/Makefile debug/Makefile" +ac_config_files="$ac_config_files Makefile po/Makefile.in lib/Makefile src/Makefile src/liblzma/Makefile src/liblzma/api/Makefile src/xz/Makefile src/xzdec/Makefile src/lzmainfo/Makefile src/scripts/Makefile tests/Makefile debug/Makefile" ac_config_files="$ac_config_files src/scripts/xzdiff" @@ -20394,8 +22003,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -20425,15 +22034,15 @@ /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -20447,8 +22056,8 @@ fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20465,7 +22074,7 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -20584,6 +22193,18 @@ as_fn_error $? "conditional \"COND_DECODER_ARMTHUMB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${COND_FILTER_ARM64_TRUE}" && test -z "${COND_FILTER_ARM64_FALSE}"; then + as_fn_error $? "conditional \"COND_FILTER_ARM64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_ARM64_TRUE}" && test -z "${COND_ENCODER_ARM64_FALSE}"; then + as_fn_error $? "conditional \"COND_ENCODER_ARM64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_ARM64_TRUE}" && test -z "${COND_DECODER_ARM64_FALSE}"; then + as_fn_error $? "conditional \"COND_DECODER_ARM64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${COND_FILTER_SPARC_TRUE}" && test -z "${COND_FILTER_SPARC_FALSE}"; then as_fn_error $? "conditional \"COND_FILTER_SPARC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -20632,14 +22253,18 @@ as_fn_error $? "conditional \"COND_CHECK_SHA256\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${COND_ASM_X86_TRUE}" && test -z "${COND_ASM_X86_FALSE}"; then - as_fn_error $? "conditional \"COND_ASM_X86\" was never defined. +if test -z "${COND_MICROLZMA_TRUE}" && test -z "${COND_MICROLZMA_FALSE}"; then + as_fn_error $? "conditional \"COND_MICROLZMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${COND_ASM_X86_64_TRUE}" && test -z "${COND_ASM_X86_64_FALSE}"; then - as_fn_error $? "conditional \"COND_ASM_X86_64\" was never defined. +if test -z "${COND_LZIP_DECODER_TRUE}" && test -z "${COND_LZIP_DECODER_FALSE}"; then + as_fn_error $? "conditional \"COND_LZIP_DECODER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${COND_ASM_X86_TRUE}" && test -z "${COND_ASM_X86_FALSE}"; then + as_fn_error $? "conditional \"COND_ASM_X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${COND_SMALL_TRUE}" && test -z "${COND_SMALL_FALSE}"; then as_fn_error $? "conditional \"COND_SMALL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -20672,18 +22297,14 @@ as_fn_error $? "conditional \"COND_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${COND_SYMVERS_TRUE}" && test -z "${COND_SYMVERS_FALSE}"; then - as_fn_error $? "conditional \"COND_SYMVERS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 +printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -20712,6 +22333,14 @@ as_fn_error $? "conditional \"COND_SHARED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${COND_SYMVERS_LINUX_TRUE}" && test -z "${COND_SYMVERS_LINUX_FALSE}"; then + as_fn_error $? "conditional \"COND_SYMVERS_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_SYMVERS_GENERIC_TRUE}" && test -z "${COND_SYMVERS_GENERIC_FALSE}"; then + as_fn_error $? "conditional \"COND_SYMVERS_GENERIC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${COND_INTERNAL_SHA256_TRUE}" && test -z "${COND_INTERNAL_SHA256_FALSE}"; then as_fn_error $? "conditional \"COND_INTERNAL_SHA256\" was never defined. @@ -20726,8 +22355,8 @@ ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -20750,14 +22379,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -20767,46 +22398,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -20815,13 +22446,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -20830,8 +22454,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -20843,32 +22471,12 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are @@ -20879,13 +22487,14 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -20912,18 +22521,20 @@ { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -20935,12 +22546,13 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -20971,7 +22583,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -20993,6 +22605,10 @@ as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -21006,6 +22622,12 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -21047,7 +22669,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -21056,7 +22678,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21118,8 +22740,8 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by XZ Utils $as_me 5.2.5, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by XZ Utils $as_me 5.4.3, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -21178,18 +22800,20 @@ Configuration commands: $config_commands -Report bugs to . +Report bugs to . XZ Utils home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -XZ Utils config.status 5.2.5 -configured by $0, generated by GNU Autoconf 2.69, +XZ Utils config.status 5.4.3 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -21229,15 +22853,15 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -21245,7 +22869,7 @@ --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -21254,7 +22878,7 @@ as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -21282,7 +22906,7 @@ if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -21296,7 +22920,7 @@ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -21351,6 +22975,7 @@ lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' @@ -21523,6 +23148,7 @@ lt_SP2NL \ lt_NL2SP \ reload_flag \ +FILECMD \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ @@ -21683,7 +23309,6 @@ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; - "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; @@ -21711,9 +23336,9 @@ # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -22049,7 +23674,7 @@ esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -22057,17 +23682,17 @@ # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -22084,7 +23709,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22108,9 +23733,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -22172,8 +23797,8 @@ case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -22217,9 +23842,9 @@ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -22235,20 +23860,20 @@ # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi @@ -22268,7 +23893,7 @@ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | +printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22288,8 +23913,8 @@ s/.*/./; q'`/stamp-h$_am_stamp_count ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -22315,7 +23940,7 @@ for am_mf do # Strip MF so we end up with the name of the file. - am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line @@ -22327,7 +23952,7 @@ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$am_mf" | +printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22349,7 +23974,7 @@ $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$am_mf" | +printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22374,10 +23999,12 @@ (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE=\"gmake\" (or whatever is + necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } @@ -22532,6 +24159,9 @@ # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd +# A file(cmd) program that detects file types. +FILECMD=$lt_FILECMD + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -22922,6 +24552,7 @@ esac + ltmain=$ac_aux_dir/ltmain.sh @@ -22929,7 +24560,7 @@ # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || @@ -23159,7 +24790,9 @@ # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then @@ -23225,8 +24858,8 @@ $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -23245,9 +24878,12 @@ echo "No supported method to detect the number of CPU cores." fi -if test "x$enable_threads$enable_small" = xnoyes; then +if test "x$enable_threads$enable_small$have_func_attribute_constructor" \ + = xnoyesno; then echo echo "NOTE:" - echo "liblzma will be thread unsafe due the combination" - echo "of --disable-threads --enable-small." + echo "liblzma will be thread-unsafe due to the combination" + echo "of --disable-threads --enable-small when using a compiler" + echo "that doesn't support __attribute__((__constructor__))." fi + diff -ur xz-5.2.5/configure.ac xz-5.4.3/configure.ac --- xz-5.2.5/configure.ac 2020-03-17 17:28:50 +++ xz-5.4.3/configure.ac 2023-05-04 17:21:05 @@ -18,11 +18,11 @@ AC_PREREQ([2.69]) AC_INIT([XZ Utils], m4_esyscmd([/bin/sh build-aux/version.sh]), - [lasse.collin@tukaani.org], [xz], [https://tukaani.org/xz/]) + [xz@tukaani.org], [xz], [https://tukaani.org/xz/]) AC_CONFIG_SRCDIR([src/liblzma/common/common.h]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_HEADER([config.h]) +AC_CONFIG_HEADERS([config.h]) echo echo "$PACKAGE_STRING" @@ -79,8 +79,8 @@ # Filters # ########### -m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,sparc])dnl -m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,sparc]) +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], @@ -210,6 +210,10 @@ [enable_match_finders=SUPPORTED_MATCH_FINDERS]) enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` if test "x$enable_encoder_lz" = xyes ; then + if test -z "$enable_match_finders"; then + AC_MSG_ERROR([At least one match finder is required for an LZ-based encoder.]) + fi + for arg in $enable_match_finders do case $arg in m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], [ @@ -290,6 +294,49 @@ fi +############# +# MicroLZMA # +############# + +AC_MSG_CHECKING([if MicroLZMA support should be built]) +AC_ARG_ENABLE([microlzma], AS_HELP_STRING([--disable-microlzma], + [Do not build MicroLZMA encoder and decoder. + It is needed by specific applications only, + for example, erofs-utils.]), + [], [enable_microlzma=yes]) +case $enable_microlzma in + yes | no) + AC_MSG_RESULT([$enable_microlzma]) + ;; + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([--enable-microlzma accepts only `yes' or `no'.]) + ;; +esac +AM_CONDITIONAL(COND_MICROLZMA, test "x$enable_microlzma" = xyes) + + +############################# +# .lz (lzip) format support # +############################# + +AC_MSG_CHECKING([if .lz (lzip) decompression support should be built]) +AC_ARG_ENABLE([lzip-decoder], AS_HELP_STRING([--disable-lzip-decoder], + [Disable decompression support for .lz (lzip) files.]), + [], [enable_lzip_decoder=yes]) +if test "x$enable_decoder_lzma1" != xyes; then + enable_lzip_decoder=no + AC_MSG_RESULT([no because LZMA1 decoder is disabled]) +elif test "x$enable_lzip_decoder" = xyes; then + AC_DEFINE([HAVE_LZIP_DECODER], [1], + [Define to 1 if .lz (lzip) decompression support is enabled.]) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL(COND_LZIP_DECODER, test "x$enable_lzip_decoder" = xyes) + + ########################### # Assembler optimizations # ########################### @@ -307,24 +354,32 @@ linux* | *bsd* | mingw* | cygwin | msys | *djgpp*) case $host_cpu in i?86) enable_assembler=x86 ;; - x86_64) enable_assembler=x86_64 ;; esac ;; esac fi case $enable_assembler in - x86 | x86_64 | no) + x86 | no) AC_MSG_RESULT([$enable_assembler]) ;; *) AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-assembler accepts only `yes', `no', `x86', or `x86_64'.]) + AC_MSG_ERROR([--enable-assembler accepts only `yes', `no', or `x86' (32-bit).]) ;; esac AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86) -AM_CONDITIONAL(COND_ASM_X86_64, test "x$enable_assembler" = xx86_64) +############# +# CLMUL CRC # +############# + +AC_ARG_ENABLE([clmul-crc], AS_HELP_STRING([--disable-clmul-crc], + [Do not use carryless multiplication for CRC calculation + even if support for it is detected.]), + [], [enable_clmul_crc=yes]) + + ##################### # Size optimization # ##################### @@ -465,40 +520,14 @@ AM_CONDITIONAL([COND_DOC], [test x$enable_doc != xno]) -##################### -# Symbol versioning # -##################### - -AC_MSG_CHECKING([if library symbol versioning should be used]) -AC_ARG_ENABLE([symbol-versions], [AS_HELP_STRING([--enable-symbol-versions], - [Use symbol versioning for liblzma. Enabled by default on - GNU/Linux, other GNU-based systems, and FreeBSD.])], - [], [enable_symbol_versions=auto]) -if test "x$enable_symbol_versions" = xauto; then - case $host_os in - # NOTE: Even if one omits -gnu on GNU/Linux (e.g. - # i486-slackware-linux), configure will (via config.sub) - # append -gnu (e.g. i486-slackware-linux-gnu), and this - # test will work correctly. - gnu* | *-gnu* | freebsd*) - enable_symbol_versions=yes - ;; - *) - enable_symbol_versions=no - ;; - esac -fi -AC_MSG_RESULT([$enable_symbol_versions]) -AM_CONDITIONAL([COND_SYMVERS], [test "x$enable_symbol_versions" = xyes]) - - ############## # Sandboxing # ############## AC_MSG_CHECKING([if sandboxing should be used]) AC_ARG_ENABLE([sandbox], [AS_HELP_STRING([--enable-sandbox=METHOD], - [Sandboxing METHOD can be `auto', `no', or `capsicum'. + [Sandboxing METHOD can be + `auto', `no', `capsicum', or `pledge'. The default is `auto' which enables sandboxing if a supported sandboxing method is found.])], [], [enable_sandbox=auto]) @@ -506,12 +535,12 @@ auto) AC_MSG_RESULT([maybe (autodetect)]) ;; - no | capsicum) + no | capsicum | pledge) AC_MSG_RESULT([$enable_sandbox]) ;; *) AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-sandbox only accepts `auto', `no', or `capsicum'.]) + AC_MSG_ERROR([--enable-sandbox only accepts `auto', `no', `capsicum', or `pledge'.]) ;; esac @@ -567,12 +596,15 @@ # We don't use "subdir-objects" yet because it breaks "make distclean" when # dependencies are enabled (as of Automake 1.14.1) due to this bug: -# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354 +# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354 # The -Wno-unsupported is used to silence warnings about missing # "subdir-objects". -AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 serial-tests -Wno-unsupported]) +AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 -Wno-unsupported]) AC_PROG_LN_S +dnl # Autoconf >= 2.70 warns that AC_PROG_CC_C99 is obsolete. However, +dnl # we have to keep using AC_PROG_CC_C99 instead of AC_PROG_CC +dnl # as long as we try to be compatible with Autoconf 2.69. AC_PROG_CC_C99 if test x$ac_cv_prog_cc_c99 = xno ; then AC_MSG_ERROR([No C99 compiler was found.]) @@ -582,8 +614,8 @@ AM_PROG_AS AC_USE_SYSTEM_EXTENSIONS -case $enable_threads in - posix) +AS_CASE([$enable_threads], + [posix], [ echo echo "POSIX threading support:" AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro. @@ -609,21 +641,24 @@ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" AC_SEARCH_LIBS([clock_gettime], [rt]) AC_CHECK_FUNCS([clock_gettime pthread_condattr_setclock]) - AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[#include ]]) + AC_CHECK_DECL([CLOCK_MONOTONIC], [AC_DEFINE( + [HAVE_CLOCK_MONOTONIC], [1], [Define to 1 if + `CLOCK_MONOTONIC' is declared in .])], [], + [[#include ]]) CFLAGS=$OLD_CFLAGS - ;; - win95) + ], + [win95], [ AC_DEFINE([MYTHREAD_WIN95], [1], [Define to 1 when using Windows 95 (and thus XP) compatible threads. This avoids use of features that were added in Windows Vista.]) - ;; - vista) + ], + [vista], [ AC_DEFINE([MYTHREAD_VISTA], [1], [Define to 1 when using Windows Vista compatible threads. This uses features that are not available on Windows XP.]) - ;; -esac + ] +) AM_CONDITIONAL([COND_THREADS], [test "x$enable_threads" != xno]) echo @@ -638,7 +673,110 @@ # libs as shared. AM_CONDITIONAL([COND_SHARED], [test "x$enable_shared" != xno]) +##################### +# Symbol versioning # +##################### +# NOTE: This checks if we are building shared or static library +# and if --with-pic or --without-pic was used. Thus this check +# must be after Libtool initialization. +AC_MSG_CHECKING([if library symbol versioning should be used]) +AC_ARG_ENABLE([symbol-versions], [AS_HELP_STRING([--enable-symbol-versions], + [Use symbol versioning for liblzma. Enabled by default on + GNU/Linux, other GNU-based systems, and FreeBSD.])], + [], [enable_symbol_versions=auto]) +if test "x$enable_symbol_versions" = xauto; then + case $host_os in + # NOTE: Even if one omits -gnu on GNU/Linux (e.g. + # i486-slackware-linux), configure will (via config.sub) + # append -gnu (e.g. i486-slackware-linux-gnu), and this + # test will work correctly. + gnu* | *-gnu* | freebsd*) + enable_symbol_versions=yes + ;; + *) + enable_symbol_versions=no + ;; + esac +fi + +# There are two variants for symbol versioning. +# See src/liblzma/validate_map.sh for details. +# +# On GNU/Linux, extra symbols are added in the C code. These extra symbols +# must not be put into a static library as they can cause problems (and +# even if they didn't cause problems, they would be useless). On other +# systems symbol versioning may be used too but there is no problem as only +# a linker script is specified in src/liblzma/Makefile.am and that isn't +# used when creating a static library. +# +# Libtool always uses -DPIC when building shared libraries by default and +# doesn't use it for static libs by default. This can be overriden with +# --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. +if test "x$enable_symbol_versions" = xno ; then + enable_symbol_versions=no + AC_MSG_RESULT([no]) +elif test "x$enable_shared" = xno ; then + enable_symbol_versions=no + AC_MSG_RESULT([no (not building a shared library)]) +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 + 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)]) +fi + +AM_CONDITIONAL([COND_SYMVERS_LINUX], + [test "x$enable_symbol_versions" = xlinux]) +AM_CONDITIONAL([COND_SYMVERS_GENERIC], + [test "x$enable_symbol_versions" = xgeneric]) + + ############################################################################### # Checks for libraries. ############################################################################### @@ -666,18 +804,15 @@ [], [AC_MSG_ERROR([Required header file(s) are missing.])]) -# This allows the use of the intrinsic functions if they are available. -AC_CHECK_HEADERS([immintrin.h]) +# 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]) ############################################################################### # Checks for typedefs, structures, and compiler characteristics. ############################################################################### -dnl We don't need these as long as we need a C99 compiler anyway. -dnl AC_C_INLINE -dnl AC_C_RESTRICT - AC_HEADER_STDBOOL AC_TYPE_UINT8_T @@ -703,7 +838,30 @@ AC_SYS_LARGEFILE 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. If it works this should give no warnings, even +# clang -Weverything should be fine. +# dnl This doesn't need AC_LANG_SOURCE, minimal code is enough. +AC_MSG_CHECKING([if __attribute__((__constructor__)) can be used]) +have_func_attribute_constructor=no +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror" +AC_COMPILE_IFELSE([ + __attribute__((__constructor__)) + static void my_constructor_func(void) { return; } +], [ + AC_DEFINE([HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR], [1], + [Define to 1 if __attribute__((__constructor__)) + is supported for functions.]) + have_func_attribute_constructor=yes + AC_MSG_RESULT([yes]) +], [ + AC_MSG_RESULT([no]) +]) +CFLAGS="$OLD_CFLAGS" + ############################################################################### # Checks for library functions. ############################################################################### @@ -740,7 +898,7 @@ sha256_header_found=no sha256_type_found=no sha256_func_found=no -if test "x$enable_external_sha256" = "xyes"; then +AS_IF([test "x$enable_external_sha256" = "xyes"], [ # Test for Common Crypto before others, because Darwin has sha256.h # too and we don't want to use that, because on older versions it # uses OpenSSL functions, whose SHA256_Init is not guaranteed to @@ -770,13 +928,16 @@ [sha256_func_found=yes ; break]) fi fi -fi +]) AM_CONDITIONAL([COND_INTERNAL_SHA256], [test "x$sha256_func_found" = xno]) if test "x$enable_external_sha256$sha256_func_found" = xyesno; then AC_MSG_ERROR([--enable-external-sha256 was specified but no supported external SHA-256 implementation was found]) fi -# Check for SSE2 intrinsics. +# Check for SSE2 intrinsics. There is no run-time detection for SSE2 so if +# compiler options enable SSE2 then SSE2 support is required by the binaries. +# The compile-time check for SSE2 is done with #ifdefs because some compilers +# (ICC, MSVC) allow SSE2 intrinsics even when SSE2 isn't enabled. AC_CHECK_DECL([_mm_movemask_epi8], [AC_DEFINE([HAVE__MM_MOVEMASK_EPI8], [1], [Define to 1 if _mm_movemask_epi8 is available.])], @@ -785,12 +946,65 @@ #include #endif]) +# For faster CRC on 32/64-bit x86 and E2K (see also crc64_fast.c): +# +# - Check for the CLMUL intrinsic _mm_clmulepi64_si128 in . +# Check also for _mm_set_epi64x for consistency with CMake build +# where it's needed to disable CLMUL with VS2013. +# +# - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works +# together with _mm_clmulepi64_si128 from . The attribute +# was added in GCC 4.4 but some GCC 4.x versions don't allow intrinsics +# with it. Exception: it must be not be used with EDG-based compilers +# like ICC and the compiler on E2K. +# +# If everything above is supported, runtime detection will be used to keep the +# binaries working on systems that don't support the required extensions. +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_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include + +// CLMUL works on older E2K instruction set but it is slow due to emulation. +#if defined(__e2k__) && __iset__ < 6 +# error +#endif + +// Intel's old compiler (ICC) can define __GNUC__ but the attribute must not +// be used with it. The new Clang-based ICX needs the attribute. +// Checking for !defined(__EDG__) catches ICC and other EDG-based compilers. +#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__) +__attribute__((__target__("ssse3,sse4.1,pclmul"))) +#endif +__m128i my_clmul(__m128i a) +{ + 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.]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + # Check for sandbox support. If one is found, set enable_sandbox=found. -case $enable_sandbox in - auto | capsicum) +AS_CASE([$enable_sandbox], + [auto | capsicum], [ AX_CHECK_CAPSICUM([enable_sandbox=found], [:]) - ;; -esac + ] +) +AS_CASE([$enable_sandbox], + [auto | pledge], [ + AC_CHECK_FUNCS([pledge], [enable_sandbox=found ; break]) + ] +) # If a specific sandboxing method was explicitly requested and it wasn't # found, give an error. @@ -819,41 +1033,66 @@ AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" fi -if test "$GCC" = yes ; then +AS_IF([test "$GCC" = yes], [ # Enable as much warnings as possible. These commented warnings won't # work for this package though: # * -Wunreachable-code breaks several assert(0) cases, which are # backed up with "return LZMA_PROG_ERROR". # * -Wcast-qual would break various things where we need a non-const # pointer although we don't modify anything through it. - # * -Wcast-align breaks optimized CRC32 and CRC64 implementation - # on some architectures (not on x86), where this warning is bogus, - # because we take care of correct alignment. # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations # don't seem so useful here; at least the last one gives some # warnings which are not bugs. + # * -Wconversion still shows too many warnings. + # + # The flags before the empty line are for GCC and many of them + # are supported by Clang too. The flags after the empty line are + # for Clang. for NEW_FLAG in \ -Wall \ -Wextra \ -Wvla \ + -Wc99-c11-compat \ -Wformat=2 \ -Winit-self \ -Wmissing-include-dirs \ - -Wstrict-aliasing \ + -Wshift-overflow=2 \ + -Wstrict-overflow=3 \ + -Walloc-zero \ + -Wduplicated-cond \ -Wfloat-equal \ -Wundef \ -Wshadow \ -Wpointer-arith \ -Wbad-function-cast \ -Wwrite-strings \ + -Wdate-time \ + -Wsign-conversion \ + -Wfloat-conversion \ -Wlogical-op \ -Waggregate-return \ -Wstrict-prototypes \ -Wold-style-definition \ -Wmissing-prototypes \ -Wmissing-declarations \ - -Wmissing-noreturn \ - -Wredundant-decls + -Wredundant-decls \ + \ + -Wc99-compat \ + -Wc11-extensions \ + -Wc2x-compat \ + -Wc2x-extensions \ + -Wpre-c2x-compat \ + -Warray-bounds-pointer-arithmetic \ + -Wassign-enum \ + -Wconditional-uninitialized \ + -Wdocumentation \ + -Wduplicate-enum \ + -Wempty-translation-unit \ + -Wflexible-array-extensions \ + -Wmissing-variable-declarations \ + -Wnewline-eof \ + -Wshift-sign-overflow \ + -Wstring-conversion do AC_MSG_CHECKING([if $CC accepts $NEW_FLAG]) OLD_CFLAGS="$CFLAGS" @@ -875,7 +1114,7 @@ if test "x$enable_werror" = "xyes"; then AM_CFLAGS="$AM_CFLAGS -Werror" fi -fi +]) ############################################################################### @@ -896,7 +1135,6 @@ AC_SUBST([xz]) AC_CONFIG_FILES([ - Doxyfile Makefile po/Makefile.in lib/Makefile @@ -932,9 +1170,11 @@ echo "No supported method to detect the number of CPU cores." fi -if test "x$enable_threads$enable_small" = xnoyes; then +if test "x$enable_threads$enable_small$have_func_attribute_constructor" \ + = xnoyesno; then echo echo "NOTE:" - echo "liblzma will be thread unsafe due the combination" - echo "of --disable-threads --enable-small." + echo "liblzma will be thread-unsafe due to the combination" + echo "of --disable-threads --enable-small when using a compiler" + echo "that doesn't support __attribute__((__constructor__))." fi diff -ur xz-5.2.5/debug/Makefile.in xz-5.4.3/debug/Makefile.in --- xz-5.2.5/debug/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/debug/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -223,8 +223,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -248,6 +246,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -258,8 +258,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -312,6 +314,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -370,6 +373,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -557,7 +561,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am Only in xz-5.4.3/doc: api diff -ur xz-5.2.5/doc/examples/01_compress_easy.c xz-5.4.3/doc/examples/01_compress_easy.c --- xz-5.2.5/doc/examples/01_compress_easy.c 2020-03-17 17:28:50 +++ xz-5.4.3/doc/examples/01_compress_easy.c 2023-05-04 17:21:05 @@ -173,7 +173,7 @@ lzma_ret ret = lzma_code(strm, action); // If the output buffer is full or if the compression finished - // successfully, write the data from the output bufffer to + // successfully, write the data from the output buffer to // the output file. if (strm->avail_out == 0 || ret == LZMA_STREAM_END) { // When lzma_code() has returned LZMA_STREAM_END, diff -ur xz-5.2.5/doc/examples/Makefile xz-5.4.3/doc/examples/Makefile --- xz-5.2.5/doc/examples/Makefile 2020-03-17 17:28:54 +++ xz-5.4.3/doc/examples/Makefile 2023-05-04 17:21:05 @@ -13,7 +13,8 @@ 01_compress_easy \ 02_decompress \ 03_compress_custom \ - 04_compress_easy_mt + 04_compress_easy_mt \ + 11_file_info all: $(PROGS) diff -ur xz-5.2.5/doc/faq.txt xz-5.4.3/doc/faq.txt --- xz-5.2.5/doc/faq.txt 2020-03-17 17:28:50 +++ xz-5.4.3/doc/faq.txt 2023-05-04 17:21:05 @@ -33,7 +33,7 @@ LZMA Utils. There are several other projects using LZMA. Most are more or less - based on LZMA SDK. See . + based on LZMA SDK. See . Q: Why is liblzma named liblzma if its primary file format is .xz? @@ -115,7 +115,6 @@ A: BCJ filter is called "x86" in liblzma. BCJ2 is not included, because it requires using more than one encoded output stream. - A streamable version of BCJ2-style filtering is planned. Q: I need to use a script that runs "xz -9". On a system with 256 MiB @@ -154,19 +153,15 @@ dictionary doesn't increase memory usage. -Q: Will xz support threaded compression? +Q: How is multi-threaded compression implemented in XZ Utils? -A: It is planned and has been taken into account when designing - the .xz file format. Eventually there will probably be three types - of threading, each method having its own advantages and disadvantages. - - The simplest method is splitting the uncompressed data into blocks +A: The simplest method is splitting the uncompressed data into blocks and compressing them in parallel independent from each other. + This is currently the only threading method supported in XZ Utils. Since the blocks are compressed independently, they can also be decompressed independently. Together with the index feature in .xz, this allows using threads to create .xz files for random-access - reading. This also makes threaded decompression possible, although - it is not clear if threaded decompression will ever be implemented. + reading. This also makes threaded decompression possible. The independent blocks method has a couple of disadvantages too. It will compress worse than a single-block method. Often the difference @@ -174,15 +169,17 @@ the memory usage of the compressor increases linearly when adding threads. - Match finder parallelization is another threading method. It has - been in 7-Zip for ages. It doesn't affect compression ratio or - memory usage significantly. Among the three threading methods, only - this is useful when compressing small files (files that are not - significantly bigger than the dictionary). Unfortunately this method - scales only to about two CPU cores. + At least two other threading methods are possible but these haven't + been implemented in XZ Utils: + Match finder parallelization has been in 7-Zip for ages. It doesn't + affect compression ratio or memory usage significantly. Among the + three threading methods, only this is useful when compressing small + files (files that are not significantly bigger than the dictionary). + Unfortunately this method scales only to about two CPU cores. + The third method is pigz-style threading (I use that name, because - pigz uses that method). It doesn't + pigz uses that method). It doesn't affect compression ratio significantly and scales to many cores. The memory usage scales linearly when threads are added. This isn't significant with pigz, because Deflate uses only a 32 KiB dictionary, @@ -193,12 +190,35 @@ cores the overhead is not a big deal anymore. Combining the threading methods will be possible and also useful. - E.g. combining match finder parallelization with pigz-style threading - can cut the memory usage by 50 %. + For example, combining match finder parallelization with pigz-style + threading or independent-blocks-threading can cut the memory usage + by 50 %. - It is possible that the single-threaded method will be modified to - create files identical to the pigz-style method. We'll see once - pigz-style threading has been implemented in liblzma. + +Q: I told xz to use many threads but it is using only one or two + processor cores. What is wrong? + +A: Since multi-threaded compression is done by splitting the data into + blocks that are compressed individually, if the input file is too + small for the block size, then many threads cannot be used. The + default block size increases when the compression level is + increased. For example, xz -6 uses 8 MiB LZMA2 dictionary and + 24 MiB blocks, and xz -9 uses 64 MiB LZMA dictionary and 192 MiB + blocks. If the input file is 100 MiB, xz -6 can use five threads + of which one will finish quickly as it has only 4 MiB to compress. + However, for the same file, xz -9 can only use one thread. + + One can adjust block size with --block-size=SIZE but making the + block size smaller than LZMA2 dictionary is waste of RAM: using + xz -9 with 6 MiB blocks isn't any better than using xz -6 with + 6 MiB blocks. The default settings use a block size bigger than + the LZMA2 dictionary size because this was seen as a reasonable + compromise between RAM usage and compression ratio. + + When decompressing, the ability to use threads depends on how the + file was created. If it was created in multi-threaded mode then + it can be decompressed in multi-threaded mode too if there are + multiple blocks in the file. Q: How do I build a program that needs liblzmadec (lzmadec.h)? diff -ur xz-5.2.5/doc/lzma-file-format.txt xz-5.4.3/doc/lzma-file-format.txt --- xz-5.2.5/doc/lzma-file-format.txt 2020-03-17 17:28:50 +++ xz-5.4.3/doc/lzma-file-format.txt 2023-05-04 17:21:05 @@ -40,9 +40,13 @@ 0.2. Changes - Last modified: 2011-04-12 11:55+0300 + Last modified: 2022-07-13 21:00+0300 + 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. + 1. File Format +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+ @@ -129,7 +133,10 @@ Uncompressed Size is stored as unsigned 64-bit little endian integer. A special value of 0xFFFF_FFFF_FFFF_FFFF indicates that Uncompressed Size is unknown. End of Payload Marker (*) - is used if and only if Uncompressed Size is unknown. + is used if Uncompressed Size is unknown. End of Payload Marker + is allowed but rarely used if Uncompressed Size is known. + XZ Utils 5.2.5 and older don't support .lzma files that have + End of Payload Marker together with a known Uncompressed Size. XZ Utils rejects files whose Uncompressed Size field specifies a known size that is 256 GiB or more. This is to reject false Binary files xz-5.2.5/doc/man/pdf-a4/lzmainfo-a4.pdf and xz-5.4.3/doc/man/pdf-a4/lzmainfo-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xz-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xz-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xzdec-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xzdec-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xzdiff-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xzdiff-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xzgrep-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xzgrep-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xzless-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xzless-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-a4/xzmore-a4.pdf and xz-5.4.3/doc/man/pdf-a4/xzmore-a4.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/lzmainfo-letter.pdf and xz-5.4.3/doc/man/pdf-letter/lzmainfo-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xz-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xz-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xzdec-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xzdec-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xzdiff-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xzdiff-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xzgrep-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xzgrep-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xzless-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xzless-letter.pdf differ Binary files xz-5.2.5/doc/man/pdf-letter/xzmore-letter.pdf and xz-5.4.3/doc/man/pdf-letter/xzmore-letter.pdf differ diff -ur xz-5.2.5/doc/man/txt/xz.txt xz-5.4.3/doc/man/txt/xz.txt --- xz-5.2.5/doc/man/txt/xz.txt 2020-03-17 17:31:43 +++ xz-5.4.3/doc/man/txt/xz.txt 2023-05-04 17:33:11 @@ -24,164 +24,166 @@ xz is a general-purpose data compression tool with command line syntax similar to gzip(1) and bzip2(1). The native file format is the .xz format, but the legacy .lzma format used by LZMA Utils and raw com- - pressed streams with no container format headers are also supported. + pressed streams with no container format headers are also supported. + In addition, decompression of the .lz format used by lzip is supported. xz compresses or decompresses each file according to the selected oper- ation mode. If no files are given or file is -, xz reads from standard input and writes the processed data to standard output. xz will refuse - (display an error and skip the file) to write compressed data to stan- - dard output if it is a terminal. Similarly, xz will refuse to read + (display an error and skip the file) to write compressed data to stan- + dard output if it is a terminal. Similarly, xz will refuse to read compressed data from standard input if it is a terminal. - Unless --stdout is specified, files other than - are written to a new + Unless --stdout is specified, files other than - are written to a new file whose name is derived from the source file name: - o When compressing, the suffix of the target file format (.xz or - .lzma) is appended to the source filename to get the target file- + o When compressing, the suffix of the target file format (.xz or + .lzma) is appended to the source filename to get the target file- name. - o When decompressing, the .xz or .lzma suffix is removed from the - filename to get the target filename. xz also recognizes the suf- - fixes .txz and .tlz, and replaces them with the .tar suffix. + o When decompressing, the .xz, .lzma, or .lz suffix is removed from + the filename to get the target filename. xz also recognizes the + suffixes .txz and .tlz, and replaces them with the .tar suffix. - If the target file already exists, an error is displayed and the file + If the target file already exists, an error is displayed and the file is skipped. - Unless writing to standard output, xz will display a warning and skip + Unless writing to standard output, xz will display a warning and skip the file if any of the following applies: - o File is not a regular file. Symbolic links are not followed, and + o File is not a regular file. Symbolic links are not followed, and thus they are not considered to be regular files. o File has more than one hard link. o File has setuid, setgid, or sticky bit set. - o The operation mode is set to compress and the file already has a - suffix of the target file format (.xz or .txz when compressing to + o The operation mode is set to compress and the file already has a + suffix of the target file format (.xz or .txz when compressing to the .xz format, and .lzma or .tlz when compressing to the .lzma for- mat). - o The operation mode is set to decompress and the file doesn't have a - suffix of any of the supported file formats (.xz, .txz, .lzma, or - .tlz). + o The operation mode is set to decompress and the file doesn't have a + suffix of any of the supported file formats (.xz, .txz, .lzma, .tlz, + or .lz). After successfully compressing or decompressing the file, xz copies the - owner, group, permissions, access time, and modification time from the - source file to the target file. If copying the group fails, the per- + owner, group, permissions, access time, and modification time from the + source file to the target file. If copying the group fails, the per- missions are modified so that the target file doesn't become accessible - to users who didn't have permission to access the source file. xz + to users who didn't have permission to access the source file. xz doesn't support copying other metadata like access control lists or ex- tended attributes yet. - Once the target file has been successfully closed, the source file is - removed unless --keep was specified. The source file is never removed - if the output is written to standard output. + Once the target file has been successfully closed, the source file is + removed unless --keep was specified. The source file is never removed + if the output is written to standard output or if an error occurs. - Sending SIGINFO or SIGUSR1 to the xz process makes it print progress - information to standard error. This has only limited use since when + Sending SIGINFO or SIGUSR1 to the xz process makes it print progress + information to standard error. This has only limited use since when standard error is a terminal, using --verbose will display an automati- cally updating progress indicator. Memory usage - The memory usage of xz varies from a few hundred kilobytes to several - gigabytes depending on the compression settings. The settings used + The memory usage of xz varies from a few hundred kilobytes to several + gigabytes depending on the compression settings. The settings used when compressing a file determine the memory requirements of the decom- pressor. Typically the decompressor needs 5 % to 20 % of the amount of memory that the compressor needed when creating the file. For example, - decompressing a file created with xz -9 currently requires 65 MiB of - memory. Still, it is possible to have .xz files that require several + decompressing a file created with xz -9 currently requires 65 MiB of + memory. Still, it is possible to have .xz files that require several gigabytes of memory to decompress. - Especially users of older systems may find the possibility of very - large memory usage annoying. To prevent uncomfortable surprises, xz - has a built-in memory usage limiter, which is disabled by default. - While some operating systems provide ways to limit the memory usage of - processes, relying on it wasn't deemed to be flexible enough (e.g. us- - ing ulimit(1) to limit virtual memory tends to cripple mmap(2)). + Especially users of older systems may find the possibility of very + large memory usage annoying. To prevent uncomfortable surprises, xz + has a built-in memory usage limiter, which is disabled by default. + While some operating systems provide ways to limit the memory usage of + processes, relying on it wasn't deemed to be flexible enough (for exam- + ple, using ulimit(1) to limit virtual memory tends to cripple mmap(2)). - The memory usage limiter can be enabled with the command line option + The memory usage limiter can be enabled with the command line option --memlimit=limit. Often it is more convenient to enable the limiter by - default by setting the environment variable XZ_DEFAULTS, e.g. XZ_DE- - FAULTS=--memlimit=150MiB. It is possible to set the limits separately - for compression and decompression by using --memlimit-compress=limit - and --memlimit-decompress=limit. Using these two options outside - XZ_DEFAULTS is rarely useful because a single run of xz cannot do both - compression and decompression and --memlimit=limit (or -M limit) is - shorter to type on the command line. + default by setting the environment variable XZ_DEFAULTS, for example, + XZ_DEFAULTS=--memlimit=150MiB. It is possible to set the limits sepa- + rately for compression and decompression by using --memlimit-com- + press=limit and --memlimit-decompress=limit. Using these two options + outside XZ_DEFAULTS is rarely useful because a single run of xz cannot + do both compression and decompression and --memlimit=limit (or -M + limit) is shorter to type on the command line. - If the specified memory usage limit is exceeded when decompressing, xz - will display an error and decompressing the file will fail. If the - limit is exceeded when compressing, xz will try to scale the settings - down so that the limit is no longer exceeded (except when using --for- - mat=raw or --no-adjust). This way the operation won't fail unless the + If the specified memory usage limit is exceeded when decompressing, xz + will display an error and decompressing the file will fail. If the + limit is exceeded when compressing, xz will try to scale the settings + down so that the limit is no longer exceeded (except when using --for- + mat=raw or --no-adjust). This way the operation won't fail unless the limit is very small. The scaling of the settings is done in steps that - don't match the compression level presets, e.g. if the limit is only - slightly less than the amount required for xz -9, the settings will be - scaled down only a little, not all the way down to xz -8. + don't match the compression level presets, for example, if the limit is + only slightly less than the amount required for xz -9, the settings + will be scaled down only a little, not all the way down to xz -8. Concatenation and padding with .xz files It is possible to concatenate .xz files as is. xz will decompress such files as if they were a single .xz file. - It is possible to insert padding between the concatenated parts or af- + It is possible to insert padding between the concatenated parts or af- ter the last part. The padding must consist of null bytes and the size - of the padding must be a multiple of four bytes. This can be useful - e.g. if the .xz file is stored on a medium that measures file sizes in - 512-byte blocks. + of the padding must be a multiple of four bytes. This can be useful, + for example, if the .xz file is stored on a medium that measures file + sizes in 512-byte blocks. - Concatenation and padding are not allowed with .lzma files or raw + Concatenation and padding are not allowed with .lzma files or raw streams. OPTIONS Integer suffixes and special values - In most places where an integer argument is expected, an optional suf- - fix is supported to easily indicate large integers. There must be no + In most places where an integer argument is expected, an optional suf- + fix is supported to easily indicate large integers. There must be no space between the integer and the suffix. - KiB Multiply the integer by 1,024 (2^10). Ki, k, kB, K, and KB are + KiB Multiply the integer by 1,024 (2^10). Ki, k, kB, K, and KB are accepted as synonyms for KiB. - MiB Multiply the integer by 1,048,576 (2^20). Mi, m, M, and MB are + MiB Multiply the integer by 1,048,576 (2^20). Mi, m, M, and MB are accepted as synonyms for MiB. - GiB Multiply the integer by 1,073,741,824 (2^30). Gi, g, G, and GB + GiB Multiply the integer by 1,073,741,824 (2^30). Gi, g, G, and GB are accepted as synonyms for GiB. The special value max can be used to indicate the maximum integer value supported by the option. Operation mode - If multiple operation mode options are given, the last one takes ef- + If multiple operation mode options are given, the last one takes ef- fect. -z, --compress - Compress. This is the default operation mode when no operation - mode option is specified and no other operation mode is implied + Compress. This is the default operation mode when no operation + mode option is specified and no other operation mode is implied from the command name (for example, unxz implies --decompress). -d, --decompress, --uncompress Decompress. -t, --test - Test the integrity of compressed files. This option is equiva- - lent to --decompress --stdout except that the decompressed data - is discarded instead of being written to standard output. No + Test the integrity of compressed files. This option is equiva- + lent to --decompress --stdout except that the decompressed data + is discarded instead of being written to standard output. No files are created or removed. -l, --list - Print information about compressed files. No uncompressed out- - put is produced, and no files are created or removed. In list - mode, the program cannot read the compressed data from standard + Print information about compressed files. No uncompressed out- + put is produced, and no files are created or removed. In list + mode, the program cannot read the compressed data from standard input or from other unseekable sources. - The default listing shows basic information about files, one - file per line. To get more detailed information, use also the - --verbose option. For even more information, use --verbose - twice, but note that this may be slow, because getting all the - extra information requires many seeks. The width of verbose - output exceeds 80 characters, so piping the output to e.g. - less -S may be convenient if the terminal isn't wide enough. + The default listing shows basic information about files, one + file per line. To get more detailed information, use also the + --verbose option. For even more information, use --verbose + twice, but note that this may be slow, because getting all the + extra information requires many seeks. The width of verbose + output exceeds 80 characters, so piping the output to, for exam- + ple, less -S may be convenient if the terminal isn't wide + enough. The exact output may vary between xz versions and different lo- cales. For machine-readable output, --robot --list should be @@ -191,25 +193,32 @@ -k, --keep Don't delete the input files. + Since xz 5.2.6, this option also makes xz compress or decompress + even if the input is a symbolic link to a regular file, has more + than one hard link, or has the setuid, setgid, or sticky bit + set. The setuid, setgid, and sticky bits are not copied to the + target file. In earlier versions this was only done with + --force. + -f, --force This option has several effects: o If the target file already exists, delete it before compress- ing or decompressing. - o Compress or decompress even if the input is a symbolic link - to a regular file, has more than one hard link, or has the - setuid, setgid, or sticky bit set. The setuid, setgid, and + o Compress or decompress even if the input is a symbolic link + to a regular file, has more than one hard link, or has the + setuid, setgid, or sticky bit set. The setuid, setgid, and sticky bits are not copied to the target file. - o When used with --decompress --stdout and xz cannot recognize - the type of the source file, copy the source file as is to - standard output. This allows xzcat --force to be used like + o When used with --decompress --stdout and xz cannot recognize + the type of the source file, copy the source file as is to + standard output. This allows xzcat --force to be used like cat(1) for files that have not been compressed with xz. Note that in future, xz might support new compressed file formats, - which may make xz decompress more types of files instead of - copying them as is to standard output. --format=format can - be used to restrict xz to decompress only a single file for- + which may make xz decompress more types of files instead of + copying them as is to standard output. --format=format can + be used to restrict xz to decompress only a single file for- mat. -c, --stdout, --to-stdout @@ -218,108 +227,124 @@ --single-stream Decompress only the first .xz stream, and silently ignore possi- - ble remaining input data following the stream. Normally such + ble remaining input data following the stream. Normally such trailing garbage makes xz display an error. - xz never decompresses more than one stream from .lzma files or - raw streams, but this option still makes xz ignore the possible + xz never decompresses more than one stream from .lzma files or + raw streams, but this option still makes xz ignore the possible trailing data after the .lzma file or raw stream. - This option has no effect if the operation mode is not --decom- + This option has no effect if the operation mode is not --decom- press or --test. --no-sparse - Disable creation of sparse files. By default, if decompressing + Disable creation of sparse files. By default, if decompressing into a regular file, xz tries to make the file sparse if the de- - compressed data contains long sequences of binary zeros. It - also works when writing to standard output as long as standard - output is connected to a regular file and certain additional - conditions are met to make it safe. Creating sparse files may - save disk space and speed up the decompression by reducing the + compressed data contains long sequences of binary zeros. It + also works when writing to standard output as long as standard + output is connected to a regular file and certain additional + conditions are met to make it safe. Creating sparse files may + save disk space and speed up the decompression by reducing the amount of disk I/O. -S .suf, --suffix=.suf When compressing, use .suf as the suffix for the target file in- - stead of .xz or .lzma. If not writing to standard output and - the source file already has the suffix .suf, a warning is dis- + stead of .xz or .lzma. If not writing to standard output and + the source file already has the suffix .suf, a warning is dis- played and the file is skipped. - When decompressing, recognize files with the suffix .suf in ad- - dition to files with the .xz, .txz, .lzma, or .tlz suffix. If - the source file has the suffix .suf, the suffix is removed to + When decompressing, recognize files with the suffix .suf in ad- + dition to files with the .xz, .txz, .lzma, .tlz, or .lz suffix. + If the source file has the suffix .suf, the suffix is removed to get the target filename. - When compressing or decompressing raw streams (--format=raw), - the suffix must always be specified unless writing to standard + When compressing or decompressing raw streams (--format=raw), + the suffix must always be specified unless writing to standard output, because there is no default suffix for raw streams. --files[=file] - Read the filenames to process from file; if file is omitted, - filenames are read from standard input. Filenames must be ter- - minated with the newline character. A dash (-) is taken as a - regular filename; it doesn't mean standard input. If filenames + Read the filenames to process from file; if file is omitted, + filenames are read from standard input. Filenames must be ter- + minated with the newline character. A dash (-) is taken as a + regular filename; it doesn't mean standard input. If filenames are given also as command line arguments, they are processed be- fore the filenames read from file. --files0[=file] - This is identical to --files[=file] except that each filename + This is identical to --files[=file] except that each filename must be terminated with the null character. Basic file format and compression options -F format, --format=format Specify the file format to compress or decompress: - auto This is the default. When compressing, auto is equiva- - lent to xz. When decompressing, the format of the input - file is automatically detected. Note that raw streams + auto This is the default. When compressing, auto is equiva- + lent to xz. When decompressing, the format of the input + file is automatically detected. Note that raw streams (created with --format=raw) cannot be auto-detected. xz Compress to the .xz file format, or accept only .xz files when decompressing. lzma, alone - Compress to the legacy .lzma file format, or accept only - .lzma files when decompressing. The alternative name - alone is provided for backwards compatibility with LZMA + Compress to the legacy .lzma file format, or accept only + .lzma files when decompressing. The alternative name + alone is provided for backwards compatibility with LZMA Utils. - raw Compress or uncompress a raw stream (no headers). This + lzip Accept only .lz files when decompressing. Compression is + not supported. + + The .lz format version 0 and the unextended version 1 are + supported. Version 0 files were produced by lzip 1.3 and + older. Such files aren't common but may be found from + file archives as a few source packages were released in + this format. People might have old personal files in + this format too. Decompression support for the format + version 0 was removed in lzip 1.18. + + lzip 1.4 and later create files in the format version 1. + The sync flush marker extension to the format version 1 + was added in lzip 1.6. This extension is rarely used and + isn't supported by xz (diagnosed as corrupt input). + + raw Compress or uncompress a raw stream (no headers). This is meant for advanced users only. To decode raw streams, you need use --format=raw and explicitly specify the fil- - ter chain, which normally would have been stored in the + ter chain, which normally would have been stored in the container headers. -C check, --check=check - Specify the type of the integrity check. The check is calcu- - lated from the uncompressed data and stored in the .xz file. - This option has an effect only when compressing into the .xz - format; the .lzma format doesn't support integrity checks. The + Specify the type of the integrity check. The check is calcu- + lated from the uncompressed data and stored in the .xz file. + This option has an effect only when compressing into the .xz + format; the .lzma format doesn't support integrity checks. The integrity check (if any) is verified when the .xz file is decom- pressed. Supported check types: - none Don't calculate an integrity check at all. This is usu- - ally a bad idea. This can be useful when integrity of + none Don't calculate an integrity check at all. This is usu- + ally a bad idea. This can be useful when integrity of the data is verified by other means anyway. - crc32 Calculate CRC32 using the polynomial from IEEE-802.3 + crc32 Calculate CRC32 using the polynomial from IEEE-802.3 (Ethernet). crc64 Calculate CRC64 using the polynomial from ECMA-182. This is the default, since it is slightly better than CRC32 at - detecting damaged files and the speed difference is neg- + detecting damaged files and the speed difference is neg- ligible. - sha256 Calculate SHA-256. This is somewhat slower than CRC32 + sha256 Calculate SHA-256. This is somewhat slower than CRC32 and CRC64. - Integrity of the .xz headers is always verified with CRC32. It + Integrity of the .xz headers is always verified with CRC32. It is not possible to change or disable it. --ignore-check Don't verify the integrity check of the compressed data when de- - compressing. The CRC32 values in the .xz headers will still be + compressing. The CRC32 values in the .xz headers will still be verified normally. Do not use this option unless you know what you are doing. Pos- @@ -327,50 +352,50 @@ o Trying to recover data from a corrupt .xz file. - o Speeding up decompression. This matters mostly with SHA-256 + o Speeding up decompression. This matters mostly with SHA-256 or with files that have compressed extremely well. It's rec- - ommended to not use this option for this purpose unless the + ommended to not use this option for this purpose unless the file integrity is verified externally in some other way. -0 ... -9 - Select a compression preset level. The default is -6. If mul- - tiple preset levels are specified, the last one takes effect. - If a custom filter chain was already specified, setting a com- + Select a compression preset level. The default is -6. If mul- + tiple preset levels are specified, the last one takes effect. + If a custom filter chain was already specified, setting a com- pression preset level clears the custom filter chain. - The differences between the presets are more significant than - with gzip(1) and bzip2(1). The selected compression settings - determine the memory requirements of the decompressor, thus us- - ing a too high preset level might make it painful to decompress - the file on an old system with little RAM. Specifically, it's - not a good idea to blindly use -9 for everything like it often + The differences between the presets are more significant than + with gzip(1) and bzip2(1). The selected compression settings + determine the memory requirements of the decompressor, thus us- + ing a too high preset level might make it painful to decompress + the file on an old system with little RAM. Specifically, it's + not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1). -0 ... -3 - These are somewhat fast presets. -0 is sometimes faster - than gzip -9 while compressing much better. The higher - ones often have speed comparable to bzip2(1) with compa- - rable or better compression ratio, although the results + These are somewhat fast presets. -0 is sometimes faster + than gzip -9 while compressing much better. The higher + ones often have speed comparable to bzip2(1) with compa- + rable or better compression ratio, although the results depend a lot on the type of data being compressed. -4 ... -6 - Good to very good compression while keeping decompressor - memory usage reasonable even for old systems. -6 is the - default, which is usually a good choice e.g. for dis- - tributing files that need to be decompressible even on - systems with only 16 MiB RAM. (-5e or -6e may be worth - considering too. See --extreme.) + Good to very good compression while keeping decompressor + memory usage reasonable even for old systems. -6 is the + default, which is usually a good choice for distributing + files that need to be decompressible even on systems with + only 16 MiB RAM. (-5e or -6e may be worth considering + too. See --extreme.) -7 ... -9 - These are like -6 but with higher compressor and decom- - pressor memory requirements. These are useful only when - compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, + These are like -6 but with higher compressor and decom- + pressor memory requirements. These are useful only when + compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively. On the same hardware, the decompression speed is approximately a - constant number of bytes of compressed data per second. In - other words, the better the compression, the faster the decom- - pression will usually be. This also means that the amount of + constant number of bytes of compressed data per second. In + other words, the better the compression, the faster the decom- + pression will usually be. This also means that the amount of uncompressed output produced per second can vary a lot. The following table summarises the features of the presets: @@ -390,40 +415,40 @@ Column descriptions: o DictSize is the LZMA2 dictionary size. It is waste of memory - to use a dictionary bigger than the size of the uncompressed - file. This is why it is good to avoid using the presets -7 - ... -9 when there's no real need for them. At -6 and lower, + to use a dictionary bigger than the size of the uncompressed + file. This is why it is good to avoid using the presets -7 + ... -9 when there's no real need for them. At -6 and lower, the amount of memory wasted is usually low enough to not mat- ter. - o CompCPU is a simplified representation of the LZMA2 settings - that affect compression speed. The dictionary size affects + o CompCPU is a simplified representation of the LZMA2 settings + that affect compression speed. The dictionary size affects speed too, so while CompCPU is the same for levels -6 ... -9, - higher levels still tend to be a little slower. To get even + higher levels still tend to be a little slower. To get even slower and thus possibly better compression, see --extreme. - o CompMem contains the compressor memory requirements in the - single-threaded mode. It may vary slightly between xz ver- - sions. Memory requirements of some of the future multi- - threaded modes may be dramatically higher than that of the + o CompMem contains the compressor memory requirements in the + single-threaded mode. It may vary slightly between xz ver- + sions. Memory requirements of some of the future multi- + threaded modes may be dramatically higher than that of the single-threaded mode. - o DecMem contains the decompressor memory requirements. That - is, the compression settings determine the memory require- + o DecMem contains the decompressor memory requirements. That + is, the compression settings determine the memory require- ments of the decompressor. The exact decompressor memory us- - age is slightly more than the LZMA2 dictionary size, but the - values in the table have been rounded up to the next full + age is slightly more than the LZMA2 dictionary size, but the + values in the table have been rounded up to the next full MiB. -e, --extreme - Use a slower variant of the selected compression preset level + Use a slower variant of the selected compression preset level (-0 ... -9) to hopefully get a little bit better compression ra- - tio, but with bad luck this can also make it worse. Decompres- - sor memory usage is not affected, but compressor memory usage + tio, but with bad luck this can also make it worse. Decompres- + sor memory usage is not affected, but compressor memory usage increases a little at preset levels -0 ... -3. - Since there are two presets with dictionary sizes 4 MiB and - 8 MiB, the presets -3e and -5e use slightly faster settings + Since there are two presets with dictionary sizes 4 MiB and + 8 MiB, the presets -3e and -5e use slightly faster settings (lower CompCPU) than -4e and -6e, respectively. That way no two presets are identical. @@ -439,100 +464,109 @@ -8e 32 MiB 8 370 MiB 33 MiB -9e 64 MiB 8 674 MiB 65 MiB - For example, there are a total of four presets that use 8 MiB - dictionary, whose order from the fastest to the slowest is -5, + For example, there are a total of four presets that use 8 MiB + dictionary, whose order from the fastest to the slowest is -5, -6, -5e, and -6e. --fast - --best These are somewhat misleading aliases for -0 and -9, respec- - tively. These are provided only for backwards compatibility + --best These are somewhat misleading aliases for -0 and -9, respec- + tively. These are provided only for backwards compatibility with LZMA Utils. Avoid using these options. --block-size=size - When compressing to the .xz format, split the input data into - blocks of size bytes. The blocks are compressed independently + When compressing to the .xz format, split the input data into + blocks of size bytes. The blocks are compressed independently from each other, which helps with multi-threading and makes lim- ited random-access decompression possible. This option is typi- - cally used to override the default block size in multi-threaded + cally used to override the default block size in multi-threaded mode, but this option can be used in single-threaded mode too. - In multi-threaded mode about three times size bytes will be al- - located in each thread for buffering input and output. The de- - fault size is three times the LZMA2 dictionary size or 1 MiB, + In multi-threaded mode about three times size bytes will be al- + located in each thread for buffering input and output. The de- + fault size is three times the LZMA2 dictionary size or 1 MiB, whichever is more. Typically a good value is 2-4 times the size of the LZMA2 dictionary or at least 1 MiB. Using size less than the LZMA2 dictionary size is waste of RAM because then the LZMA2 - dictionary buffer will never get fully used. The sizes of the - blocks are stored in the block headers, which a future version + dictionary buffer will never get fully used. The sizes of the + blocks are stored in the block headers, which a future version of xz will use for multi-threaded decompression. - In single-threaded mode no block splitting is done by default. + In single-threaded mode no block splitting is done by default. Setting this option doesn't affect memory usage. No size infor- mation is stored in block headers, thus files created in single- - threaded mode won't be identical to files created in multi- - threaded mode. The lack of size information also means that a - future version of xz won't be able decompress the files in + threaded mode won't be identical to files created in multi- + threaded mode. The lack of size information also means that a + future version of xz won't be able decompress the files in multi-threaded mode. --block-list=sizes - When compressing to the .xz format, start a new block after the + When compressing to the .xz format, start a new block after the given intervals of uncompressed data. - The uncompressed sizes of the blocks are specified as a comma- - separated list. Omitting a size (two or more consecutive com- + The uncompressed sizes of the blocks are specified as a comma- + separated list. Omitting a size (two or more consecutive com- mas) is a shorthand to use the size of the previous block. - If the input file is bigger than the sum of sizes, the last + If the input file is bigger than the sum of sizes, the last value in sizes is repeated until the end of the file. A special - value of 0 may be used as the last value to indicate that the + value of 0 may be used as the last value to indicate that the rest of the file should be encoded as a single block. If one specifies sizes that exceed the encoder's block size (ei- - ther the default value in threaded mode or the value specified - with --block-size=size), the encoder will create additional + ther the default value in threaded mode or the value specified + with --block-size=size), the encoder will create additional blocks while keeping the boundaries specified in sizes. For ex- - ample, if one specifies --block-size=10MiB - --block-list=5MiB,10MiB,8MiB,12MiB,24MiB and the input file is - 80 MiB, one will get 11 blocks: 5, 10, 8, 10, 2, 10, 10, 4, 10, + ample, if one specifies --block-size=10MiB + --block-list=5MiB,10MiB,8MiB,12MiB,24MiB and the input file is + 80 MiB, one will get 11 blocks: 5, 10, 8, 10, 2, 10, 10, 4, 10, 10, and 1 MiB. In multi-threaded mode the sizes of the blocks are stored in the - block headers. This isn't done in single-threaded mode, so the - encoded output won't be identical to that of the multi-threaded + block headers. This isn't done in single-threaded mode, so the + encoded output won't be identical to that of the multi-threaded mode. --flush-timeout=timeout - When compressing, if more than timeout milliseconds (a positive - integer) has passed since the previous flush and reading more - input would block, all the pending input data is flushed from - the encoder and made available in the output stream. This can + When compressing, if more than timeout milliseconds (a positive + integer) has passed since the previous flush and reading more + input would block, all the pending input data is flushed from + the encoder and made available in the output stream. This can be useful if xz is used to compress data that is streamed over a - network. Small timeout values make the data available at the - receiving end with a small delay, but large timeout values give + network. Small timeout values make the data available at the + receiving end with a small delay, but large timeout values give better compression ratio. - This feature is disabled by default. If this option is speci- - fied more than once, the last one takes effect. The special - timeout value of 0 can be used to explicitly disable this fea- + This feature is disabled by default. If this option is speci- + fied more than once, the last one takes effect. The special + timeout value of 0 can be used to explicitly disable this fea- ture. This feature is not available on non-POSIX systems. - This feature is still experimental. Currently xz is unsuitable - for decompressing the stream in real time due to how xz does + This feature is still experimental. Currently xz is unsuitable + for decompressing the stream in real time due to how xz does buffering. --memlimit-compress=limit - Set a memory usage limit for compression. If this option is + Set a memory usage limit for compression. If this option is specified multiple times, the last one takes effect. - If the compression settings exceed the limit, xz will adjust the - settings downwards so that the limit is no longer exceeded and - display a notice that automatic adjustment was done. Such ad- - justments are not made when compressing with --format=raw or if - --no-adjust has been specified. In those cases, an error is - displayed and xz will exit with exit status 1. + If the compression settings exceed the limit, xz will attempt to + adjust the settings downwards so that the limit is no longer ex- + ceeded and display a notice that automatic adjustment was done. + The adjustments are done in this order: reducing the number of + threads, switching to single-threaded mode if even one thread in + multi-threaded mode exceeds the limit, and finally reducing the + LZMA2 dictionary size. + When compressing with --format=raw or if --no-adjust has been + specified, only the number of threads may be reduced since it + can be done without affecting the compressed output. + + If the limit cannot be met even with the adjustments described + above, an error is displayed and xz will exit with exit status + 1. + The limit can be specified in multiple ways: o The limit can be an absolute value in bytes. Using an inte- @@ -548,17 +582,15 @@ o The limit can be reset back to its default value by setting it to 0. This is currently equivalent to setting the limit - to max (no memory usage limit). Once multithreading support - has been implemented, there may be a difference between 0 and - max for the multithreaded case, so it is recommended to use 0 - instead of max until the details have been decided. + to max (no memory usage limit). - For 32-bit xz there is a special case: if the limit would be - over 4020 MiB, the limit is set to 4020 MiB. (The values 0 and - max aren't affected by this. A similar feature doesn't exist - for decompression.) This can be helpful when a 32-bit exe- - cutable has access to 4 GiB address space while hopefully doing - no harm in other situations. + For 32-bit xz there is a special case: if the limit would be + over 4020 MiB, the limit is set to 4020 MiB. On MIPS32 2000 MiB + is used instead. (The values 0 and max aren't affected by this. + A similar feature doesn't exist for decompression.) This can be + helpful when a 32-bit executable has access to 4 GiB address + space (2 GiB on MIPS32) while hopefully doing no harm in other + situations. See also the section Memory usage. @@ -569,35 +601,96 @@ the file will fail. See --memlimit-compress=limit for possible ways to specify the limit. + --memlimit-mt-decompress=limit + Set a memory usage limit for multi-threaded decompression. This + can only affect the number of threads; this will never make xz + refuse to decompress a file. If limit is too low to allow any + multi-threading, the limit is ignored and xz will continue in + single-threaded mode. Note that if also --memlimit-decompress + is used, it will always apply to both single-threaded and multi- + threaded modes, and so the effective limit for multi-threading + will never be higher than the limit set with --memlimit-decom- + press. + + In contrast to the other memory usage limit options, --mem- + limit-mt-decompress=limit has a system-specific default limit. + xz --info-memory can be used to see the current value. + + This option and its default value exist because without any + limit the threaded decompressor could end up allocating an in- + sane amount of memory with some input files. If the default + limit is too low on your system, feel free to increase the limit + but never set it to a value larger than the amount of usable RAM + as with appropriate input files xz will attempt to use that + amount of memory even with a low number of threads. Running out + of memory or swapping will not improve decompression perfor- + mance. + + See --memlimit-compress=limit for possible ways to specify the + limit. Setting limit to 0 resets the limit to the default sys- + tem-specific value. + + + -M limit, --memlimit=limit, --memory=limit This is equivalent to specifying --memlimit-compress=limit - --memlimit-decompress=limit. + --memlimit-decompress=limit --memlimit-mt-decompress=limit. --no-adjust - Display an error and exit if the compression settings exceed the - memory usage limit. The default is to adjust the settings down- - wards so that the memory usage limit is not exceeded. Automatic - adjusting is always disabled when creating raw streams (--for- - mat=raw). + Display an error and exit if the memory usage limit cannot be + met without adjusting settings that affect the compressed out- + put. That is, this prevents xz from switching the encoder from + multi-threaded mode to single-threaded mode and from reducing + the LZMA2 dictionary size. Even when this option is used the + number of threads may be reduced to meet the memory usage limit + as that won't affect the compressed output. + Automatic adjusting is always disabled when creating raw streams + (--format=raw). + -T threads, --threads=threads Specify the number of worker threads to use. Setting threads to - a special value 0 makes xz use as many threads as there are CPU - cores on the system. The actual number of threads can be less - than threads if the input file is not big enough for threading - with the given settings or if using more threads would exceed - the memory usage limit. + a special value 0 makes xz use up to as many threads as the pro- + cessor(s) on the system support. The actual number of threads + can be fewer than threads if the input file is not big enough + for threading with the given settings or if using more threads + would exceed the memory usage limit. + The single-threaded and multi-threaded compressors produce dif- + ferent output. Single-threaded compressor will give the small- + est file size but only the output from the multi-threaded com- + pressor can be decompressed using multiple threads. Setting + threads to 1 will use the single-threaded mode. Setting threads + to any other value, including 0, will use the multi-threaded + compressor even if the system supports only one hardware thread. + (xz 5.2.x used single-threaded mode in this situation.) + + To use multi-threaded mode with only one thread, set threads to + +1. The + prefix has no effect with values other than 1. A + memory usage limit can still make xz switch to single-threaded + mode unless --no-adjust is used. Support for the + prefix was + added in xz 5.4.0. + + If an automatic number of threads has been requested and no mem- + ory usage limit has been specified, then a system-specific de- + fault soft limit will be used to possibly limit the number of + threads. It is a soft limit in sense that it is ignored if the + number of threads becomes one, thus a soft limit will never stop + xz from compressing or decompressing. This default soft limit + will not make xz switch from multi-threaded mode to single- + threaded mode. The active limits can be seen with xz + --info-memory. + Currently the only threading method is to split the input into blocks and compress them independently from each other. The de- fault block size depends on the compression level and can be overridden with the --block-size=size option. - Threaded decompression hasn't been implemented yet. It will - only work on files that contain multiple blocks with size infor- - mation in block headers. All files compressed in multi-threaded - mode meet this condition, but files compressed in single- - threaded mode don't even if --block-size=size is used. + Threaded decompression only works on files that contain multiple + blocks with size information in block headers. All large enough + files compressed in multi-threaded mode meet this condition, but + files compressed in single-threaded mode don't even if + --block-size=size has been used. Custom compressor filter chains A custom filter chain allows specifying the compression settings in de- @@ -695,19 +788,19 @@ The literal coding makes an assumption that the highest lc bits of the previous uncompressed byte correlate with - the next byte. E.g. in typical English text, an upper- - case letter is often followed by a lower-case letter, and - a lower-case letter is usually followed by another lower- - case letter. In the US-ASCII character set, the highest - three bits are 010 for upper-case letters and 011 for - lower-case letters. When lc is at least 3, the literal - coding can take advantage of this property in the uncom- - pressed data. + the next byte. For example, in typical English text, an + upper-case letter is often followed by a lower-case let- + ter, and a lower-case letter is usually followed by an- + other lower-case letter. In the US-ASCII character set, + the highest three bits are 010 for upper-case letters and + 011 for lower-case letters. When lc is at least 3, the + literal coding can take advantage of this property in the + uncompressed data. The default value (3) is usually good. If you want maxi- mum compression, test lc=4. Sometimes it helps a little, and sometimes it makes compression worse. If it makes it - worse, test e.g. lc=2 too. + worse, test lc=2 too. lp=lp Specify the number of literal position bits. The minimum is 0 and the maximum is 4; the default is 0. @@ -724,12 +817,12 @@ alignment (2^pb=2^2=4), which is often a good choice when there's no better guess. - When the aligment is known, setting pb accordingly may - reduce the file size a little. E.g. with text files hav- - ing one-byte alignment (US-ASCII, ISO-8859-*, UTF-8), - setting pb=0 can improve compression slightly. For - UTF-16 text, pb=1 is a good choice. If the alignment is - an odd number like 3 bytes, pb=0 might be the best + When the alignment is known, setting pb accordingly may + reduce the file size a little. For example, with text + files having one-byte alignment (US-ASCII, ISO-8859-*, + UTF-8), setting pb=0 can improve compression slightly. + For UTF-16 text, pb=1 is a good choice. If the alignment + is an odd number like 3 bytes, pb=0 might be the best choice. Even though the assumed alignment can be adjusted with pb @@ -811,10 +904,11 @@ dictionary size. LZMA1 needs also lc, lp, and pb. --x86[=options] - --powerpc[=options] - --ia64[=options] --arm[=options] --armthumb[=options] + --arm64[=options] + --powerpc[=options] + --ia64[=options] --sparc[=options] Add a branch/call/jump (BCJ) filter to the filter chain. These filters can be used only as a non-last filter in the filter @@ -822,89 +916,77 @@ A BCJ filter converts relative addresses in the machine code to their absolute counterparts. This doesn't change the size of - the data, but it increases redundancy, which can help LZMA2 to + the data but it increases redundancy, which can help LZMA2 to produce 0-15 % smaller .xz file. The BCJ filters are always re- versible, so using a BCJ filter for wrong type of data doesn't cause any data loss, although it may make the compression ratio - slightly worse. + slightly worse. The BCJ filters are very fast and use an in- + significant amount of memory. - It is fine to apply a BCJ filter on a whole executable; there's - no need to apply it only on the executable section. Applying a - BCJ filter on an archive that contains both executable and non- - executable files may or may not give good results, so it gener- - ally isn't good to blindly apply a BCJ filter when compressing - binary packages for distribution. - - These BCJ filters are very fast and use insignificant amount of - memory. If a BCJ filter improves compression ratio of a file, - it can improve decompression speed at the same time. This is - because, on the same hardware, the decompression speed of LZMA2 - is roughly a fixed number of bytes of compressed data per sec- - ond. - These BCJ filters have known problems related to the compression ratio: - o Some types of files containing executable code (e.g. object - files, static libraries, and Linux kernel modules) have the - addresses in the instructions filled with filler values. - These BCJ filters will still do the address conversion, which - will make the compression worse with these files. + o Some types of files containing executable code (for example, + object files, static libraries, and Linux kernel modules) + have the addresses in the instructions filled with filler + values. These BCJ filters will still do the address conver- + sion, which will make the compression worse with these files. - o Applying a BCJ filter on an archive containing multiple simi- - lar executables can make the compression ratio worse than not - using a BCJ filter. This is because the BCJ filter doesn't - detect the boundaries of the executable files, and doesn't - reset the address conversion counter for each executable. + o If a BCJ filter is applied on an archive, it is possible that + it makes the compression ratio worse than not using a BCJ + filter. For example, if there are similar or even identical + executables then filtering will likely make the files less + similar and thus compression is worse. The contents of non- + executable files in the same archive can matter too. In + practice one has to try with and without a BCJ filter to see + which is better in each situation. - Both of the above problems will be fixed in the future in a new - filter. The old BCJ filters will still be useful in embedded - systems, because the decoder of the new filter will be bigger - and use more memory. + Different instruction sets have different alignment: the exe- + cutable file must be aligned to a multiple of this value in the + input data to make the filter work. - Different instruction sets have different alignment: - Filter Alignment Notes x86 1 32-bit or 64-bit x86 + ARM 4 + ARM-Thumb 2 + ARM64 4 4096-byte alignment is best PowerPC 4 Big endian only - ARM 4 Little endian only - ARM-Thumb 2 Little endian only - IA-64 16 Big or little endian - SPARC 4 Big or little endian + IA-64 16 Itanium + SPARC 4 - Since the BCJ-filtered data is usually compressed with LZMA2, - the compression ratio may be improved slightly if the LZMA2 op- + Since the BCJ-filtered data is usually compressed with LZMA2, + the compression ratio may be improved slightly if the LZMA2 op- tions are set to match the alignment of the selected BCJ filter. - For example, with the IA-64 filter, it's good to set pb=4 with - LZMA2 (2^4=16). The x86 filter is an exception; it's usually - good to stick to LZMA2's default four-byte alignment when com- - pressing x86 executables. + For example, with the IA-64 filter, it's good to set pb=4 or + even pb=4,lp=4,lc=0 with LZMA2 (2^4=16). The x86 filter is an + exception; it's usually good to stick to LZMA2's default four- + byte alignment when compressing x86 executables. All BCJ filters support the same options: start=offset Specify the start offset that is used when converting be- - tween relative and absolute addresses. The offset must + tween relative and absolute addresses. The offset must be a multiple of the alignment of the filter (see the ta- - ble above). The default is zero. In practice, the de- + ble above). The default is zero. In practice, the de- fault is good; specifying a custom offset is almost never useful. --delta[=options] - Add the Delta filter to the filter chain. The Delta filter can + Add the Delta filter to the filter chain. The Delta filter can be only used as a non-last filter in the filter chain. - Currently only simple byte-wise delta calculation is supported. - It can be useful when compressing e.g. uncompressed bitmap im- - ages or uncompressed PCM audio. However, special purpose algo- - rithms may give significantly better results than Delta + LZMA2. - This is true especially with audio, which compresses faster and - better e.g. with flac(1). + Currently only simple byte-wise delta calculation is supported. + It can be useful when compressing, for example, uncompressed + bitmap images or uncompressed PCM audio. However, special pur- + pose algorithms may give significantly better results than Delta + + LZMA2. This is true especially with audio, which compresses + faster and better, for example, with flac(1). Supported options: dist=distance - Specify the distance of the delta calculation in bytes. + Specify the distance of the delta calculation in bytes. distance must be 1-256. The default is 1. For example, with dist=2 and eight-byte input A1 B1 A2 B3 @@ -912,52 +994,53 @@ Other options -q, --quiet - Suppress warnings and notices. Specify this twice to suppress + Suppress warnings and notices. Specify this twice to suppress errors too. This option has no effect on the exit status. That - is, even if a warning was suppressed, the exit status to indi- + is, even if a warning was suppressed, the exit status to indi- cate a warning is still used. -v, --verbose - Be verbose. If standard error is connected to a terminal, xz - will display a progress indicator. Specifying --verbose twice + Be verbose. If standard error is connected to a terminal, xz + will display a progress indicator. Specifying --verbose twice will give even more verbose output. The progress indicator shows the following information: - o Completion percentage is shown if the size of the input file + o Completion percentage is shown if the size of the input file is known. That is, the percentage cannot be shown in pipes. - o Amount of compressed data produced (compressing) or consumed + o Amount of compressed data produced (compressing) or consumed (decompressing). - o Amount of uncompressed data consumed (compressing) or pro- + o Amount of uncompressed data consumed (compressing) or pro- duced (decompressing). o Compression ratio, which is calculated by dividing the amount - of compressed data processed so far by the amount of uncom- + of compressed data processed so far by the amount of uncom- pressed data processed so far. - o Compression or decompression speed. This is measured as the - amount of uncompressed data consumed (compression) or pro- - duced (decompression) per second. It is shown after a few + o Compression or decompression speed. This is measured as the + amount of uncompressed data consumed (compression) or pro- + duced (decompression) per second. It is shown after a few seconds have passed since xz started processing the file. o Elapsed time in the format M:SS or H:MM:SS. - o Estimated remaining time is shown only when the size of the - input file is known and a couple of seconds have already - passed since xz started processing the file. The time is - shown in a less precise format which never has any colons, - e.g. 2 min 30 s. + o Estimated remaining time is shown only when the size of the + input file is known and a couple of seconds have already + passed since xz started processing the file. The time is + shown in a less precise format which never has any colons, + for example, 2 min 30 s. - When standard error is not a terminal, --verbose will make xz + When standard error is not a terminal, --verbose will make xz print the filename, compressed size, uncompressed size, compres- - sion ratio, and possibly also the speed and elapsed time on a + sion ratio, and possibly also the speed and elapsed time on a single line to standard error after compressing or decompressing the file. The speed and elapsed time are included only when the - operation took at least a few seconds. If the operation didn't - finish, e.g. due to user interruption, also the completion per- - centage is printed if the size of the input file is known. + operation took at least a few seconds. If the operation didn't + finish, for example, due to user interruption, also the comple- + tion percentage is printed if the size of the input file is + known. -Q, --no-warn Don't set the exit status to 2 even if a condition worth a warn- @@ -974,26 +1057,27 @@ --info-memory Display, in human-readable format, how much physical memory - (RAM) xz thinks the system has and the memory usage limits for - compression and decompression, and exit successfully. + (RAM) and how many processor threads xz thinks the system has + and the memory usage limits for compression and decompression, + and exit successfully. -h, --help - Display a help message describing the most commonly used op- + Display a help message describing the most commonly used op- tions, and exit successfully. -H, --long-help - Display a help message describing all features of xz, and exit + Display a help message describing all features of xz, and exit successfully -V, --version - Display the version number of xz and liblzma in human readable - format. To get machine-parsable output, specify --robot before + Display the version number of xz and liblzma in human readable + format. To get machine-parsable output, specify --robot before --version. ROBOT MODE The robot mode is activated with the --robot option. It makes the out- put of xz easier to parse by other programs. Currently --robot is sup- - ported only together with --version, --info-memory, and --list. It + ported only together with --version, --info-memory, and --list. It will be supported for compression and decompression in the future. Version @@ -1005,10 +1089,10 @@ X Major version. - YYY Minor version. Even numbers are stable. Odd numbers are alpha + YYY Minor version. Even numbers are stable. Odd numbers are alpha or beta versions. - ZZZ Patch level for stable releases or just a counter for develop- + ZZZ Patch level for stable releases or just a counter for develop- ment releases. S Stability. 0 is alpha, 1 is beta, and 2 is stable. S should be @@ -1020,19 +1104,34 @@ Examples: 4.999.9beta is 49990091 and 5.0.0 is 50000002. Memory limit information - xz --robot --info-memory prints a single line with three tab-separated + xz --robot --info-memory prints a single line with three tab-separated columns: - 1. Total amount of physical memory (RAM) in bytes + 1. Total amount of physical memory (RAM) in bytes. - 2. Memory usage limit for compression in bytes. A special value of - zero indicates the default setting, which for single-threaded mode - is the same as no limit. + 2. Memory usage limit for compression in bytes (--memlimit-compress). + A special value of 0 indicates the default setting which for sin- + gle-threaded mode is the same as no limit. - 3. Memory usage limit for decompression in bytes. A special value of - zero indicates the default setting, which for single-threaded mode - is the same as no limit. + 3. Memory usage limit for decompression in bytes (--memlimit-decom- + press). A special value of 0 indicates the default setting which + for single-threaded mode is the same as no limit. + 4. Since xz 5.3.4alpha: Memory usage for multi-threaded decompression + in bytes (--memlimit-mt-decompress). This is never zero because a + system-specific default value shown in the column 5 is used if no + limit has been specified explicitly. This is also never greater + than the value in the column 3 even if a larger value has been + specified with --memlimit-mt-decompress. + + 5. Since xz 5.3.4alpha: A system-specific default memory usage limit + that is used to limit the number of threads when compressing with + an automatic number of threads (--threads=0) and no memory usage + limit has been specified (--memlimit-compress). This is also used + as the default value for --memlimit-mt-decompress. + + 6. Since xz 5.3.4alpha: Number of available processor threads. + In the future, the output of xz --robot --info-memory may have more columns, but never more than a single line. @@ -1069,7 +1168,7 @@ 3. Total number of blocks in the stream(s) 4. Compressed size of the file 5. Uncompressed size of the file - 6. Compression ratio, for example 0.123. If ratio is over + 6. Compression ratio, for example, 0.123. If ratio is over 9.999, three dashes (---) are displayed instead of the ra- tio. 7. Comma-separated list of integrity check names. The follow- @@ -1183,14 +1282,14 @@ XZ_OPT This is for passing options to xz when it is not possible to set the options directly on the xz command line. This is the case - e.g. when xz is run by a script or tool, e.g. GNU tar(1): + when xz is run by a script or tool, for example, GNU tar(1): XZ_OPT=-2v tar caf foo.tar.xz foo - Scripts may use XZ_OPT e.g. to set script-specific default com- - pression options. It is still recommended to allow users to - override XZ_OPT if that is reasonable, e.g. in sh(1) scripts one - may use something like this: + Scripts may use XZ_OPT, for example, to set script-specific de- + fault compression options. It is still recommended to allow + users to override XZ_OPT if that is reasonable. For example, in + sh(1) scripts one may use something like this: XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT @@ -1244,8 +1343,8 @@ LZMA Utils does that when compressing regular files. The alternative is to mark that uncompressed size is unknown and use end-of-payload marker to indicate where the decompressor should stop. LZMA Utils uses - this method when uncompressed size isn't known, which is the case for - example in pipes. + this method when uncompressed size isn't known, which is the case, for + example, in pipes. xz supports decompressing .lzma files with or without end-of-payload marker, but all .lzma files created by xz will use end-of-payload @@ -1327,8 +1426,8 @@ xz -dk bar.xz Create baz.tar.xz with the preset -4e (-4 --extreme), which is slower - than e.g. the default -6, but needs less memory for compression and de- - compression (48 MiB and 5 MiB, respectively): + than the default -6, but needs less memory for compression and decom- + pression (48 MiB and 5 MiB, respectively): tar cf - baz | xz -4e > baz.tar.xz @@ -1392,6 +1491,7 @@ Preset CompCPU -0 0 + -1 1 -2 2 -3 3 @@ -1401,10 +1501,10 @@ -5e 7 -6e 8 - If you know that a file requires somewhat big dictionary (e.g. 32 MiB) - to compress well, but you want to compress it quicker than xz -8 would - do, a preset with a low CompCPU value (e.g. 1) can be modified to use a - bigger dictionary: + If you know that a file requires somewhat big dictionary (for example, + 32 MiB) to compress well, but you want to compress it quicker than xz + -8 would do, a preset with a low CompCPU value (for example, 1) can be + modified to use a bigger dictionary: xz --lzma2=preset=1,dict=32MiB foo.tar @@ -1431,27 +1531,27 @@ files. Sometimes the compression time doesn't matter, but the decompressor - memory usage has to be kept low e.g. to make it possible to decompress - the file on an embedded system. The following command uses -6e (-6 - --extreme) as a base and sets the dictionary to only 64 KiB. The re- - sulting file can be decompressed with XZ Embedded (that's why there is - --check=crc32) using about 100 KiB of memory. + memory usage has to be kept low, for example, to make it possible to + decompress the file on an embedded system. The following command uses + -6e (-6 --extreme) as a base and sets the dictionary to only 64 KiB. + The resulting file can be decompressed with XZ Embedded (that's why + there is --check=crc32) using about 100 KiB of memory. xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo If you want to squeeze out as many bytes as possible, adjusting the number of literal context bits (lc) and number of position bits (pb) can sometimes help. Adjusting the number of literal position bits (lp) - might help too, but usually lc and pb are more important. E.g. a - source code archive contains mostly US-ASCII text, so something like + might help too, but usually lc and pb are more important. For example, + a source code archive contains mostly US-ASCII text, so something like the following might give slightly (like 0.1 %) smaller file than xz -6e (try also without lc=4): xz --lzma2=preset=6e,pb=0,lc=4 source_code.tar Using another filter together with LZMA2 can improve compression with - certain file types. E.g. to compress a x86-32 or x86-64 shared library - using the x86 BCJ filter: + certain file types. For example, to compress a x86-32 or x86-64 shared + library using the x86 BCJ filter: xz --x86 --lzma2 libfoo.so @@ -1464,17 +1564,17 @@ images. It should usually beat PNG, which has a few more advanced fil- ters than simple delta but uses Deflate for the actual compression. - The image has to be saved in uncompressed format, e.g. as uncompressed - TIFF. The distance parameter of the Delta filter is set to match the - number of bytes per pixel in the image. E.g. 24-bit RGB bitmap needs - dist=3, and it is also good to pass pb=0 to LZMA2 to accommodate the - three-byte alignment: + The image has to be saved in uncompressed format, for example, as un- + compressed TIFF. The distance parameter of the Delta filter is set to + match the number of bytes per pixel in the image. For example, 24-bit + RGB bitmap needs dist=3, and it is also good to pass pb=0 to LZMA2 to + accommodate the three-byte alignment: xz --delta=dist=3 --lzma2=pb=0 foo.tiff - If multiple images have been put into a single archive (e.g. .tar), the - Delta filter will work on that too as long as all images have the same - number of bytes per pixel. + If multiple images have been put into a single archive (for example, + .tar), the Delta filter will work on that too as long as all images + have the same number of bytes per pixel. SEE ALSO xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), @@ -1482,8 +1582,8 @@ XZ Utils: XZ Embedded: - LZMA SDK: + LZMA SDK: -Tukaani 2020-02-01 XZ(1) +Tukaani 2022-12-01 XZ(1) diff -ur xz-5.2.5/doc/man/txt/xzdiff.txt xz-5.4.3/doc/man/txt/xzdiff.txt --- xz-5.2.5/doc/man/txt/xzdiff.txt 2020-03-17 17:31:44 +++ xz-5.4.3/doc/man/txt/xzdiff.txt 2023-05-04 17:33:11 @@ -13,24 +13,25 @@ DESCRIPTION xzcmp and xzdiff invoke cmp(1) or diff(1) on files compressed with - xz(1), lzma(1), gzip(1), bzip2(1), or lzop(1). All options specified - are passed directly to cmp(1) or diff(1). If only one file is speci- - fied, then the files compared are file1 (which must have a suffix of a - supported compression format) and file1 from which the compression for- - mat suffix has been stripped. If two files are specified, then they - are uncompressed if necessary and fed to cmp(1) or diff(1). The exit - status from cmp(1) or diff(1) is preserved. + xz(1), lzma(1), gzip(1), bzip2(1), lzop(1), or zstd(1). All options + specified are passed directly to cmp(1) or diff(1). If only one file + is specified, then the files compared are file1 (which must have a suf- + fix of a supported compression format) and file1 from which the com- + pression format suffix has been stripped. If two files are specified, + then they are uncompressed if necessary and fed to cmp(1) or diff(1). + The exit status from cmp(1) or diff(1) is preserved unless a decompres- + sion error occurs; then exit status is 2. The names lzcmp and lzdiff are provided for backward compatibility with LZMA Utils. SEE ALSO - cmp(1), diff(1), xz(1), gzip(1), bzip2(1), lzop(1), zdiff(1) + cmp(1), diff(1), xz(1), gzip(1), bzip2(1), lzop(1), zstd(1), zdiff(1) BUGS - Messages from the cmp(1) or diff(1) programs refer to temporary file- + Messages from the cmp(1) or diff(1) programs refer to temporary file- names instead of those specified. -Tukaani 2011-03-19 XZDIFF(1) +Tukaani 2021-06-04 XZDIFF(1) diff -ur xz-5.2.5/doc/man/txt/xzgrep.txt xz-5.4.3/doc/man/txt/xzgrep.txt --- xz-5.2.5/doc/man/txt/xzgrep.txt 2020-03-17 17:31:44 +++ xz-5.4.3/doc/man/txt/xzgrep.txt 2023-05-04 17:33:12 @@ -6,7 +6,7 @@ xzgrep - search compressed files for a regular expression SYNOPSIS - xzgrep [grep_options] [-e] pattern file... + xzgrep [grep_options] [-e] pattern [file...] xzegrep ... xzfgrep ... lzgrep ... @@ -15,25 +15,35 @@ DESCRIPTION xzgrep invokes grep(1) on files which may be either uncompressed or - compressed with xz(1), lzma(1), gzip(1), bzip2(1), or lzop(1). All op- - tions specified are passed directly to grep(1). + compressed with xz(1), lzma(1), gzip(1), bzip2(1), lzop(1), or zstd(1). + All options specified are passed directly to grep(1). If no file is specified, then standard input is decompressed if neces- sary and fed to grep(1). When reading from standard input, gzip(1), - bzip2(1), and lzop(1) compressed files are not supported. + bzip2(1), lzop(1), and zstd(1) compressed files are not supported. - If xzgrep is invoked as xzegrep or xzfgrep then egrep(1) or fgrep(1) is + If xzgrep is invoked as xzegrep or xzfgrep then grep -E or grep -F is used instead of grep(1). The same applies to names lzgrep, lzegrep, and lzfgrep, which are provided for backward compatibility with LZMA Utils. +EXIT STATUS + 0 At least one match was found from at least one of the input + files. No errors occurred. + + 1 No matches were found from any of the input files. No errors + occurred. + + >1 One or more errors occurred. It is unknown if matches were + found. + ENVIRONMENT - GREP If the GREP environment variable is set, xzgrep uses it instead - of grep(1), egrep(1), or fgrep(1). + GREP If the GREP environment variable is set, xzgrep uses it instead + of grep(1), grep -E, or grep -F. SEE ALSO - grep(1), xz(1), gzip(1), bzip2(1), lzop(1), zgrep(1) + grep(1), xz(1), gzip(1), bzip2(1), lzop(1), zstd(1), zgrep(1) -Tukaani 2011-03-19 XZGREP(1) +Tukaani 2022-07-19 XZGREP(1) diff -ur xz-5.2.5/doc/xz-file-format.txt xz-5.4.3/doc/xz-file-format.txt --- xz-5.2.5/doc/xz-file-format.txt 2020-03-17 17:28:50 +++ xz-5.4.3/doc/xz-file-format.txt 2023-05-04 17:21:05 @@ -2,7 +2,7 @@ The .xz File Format =================== -Version 1.0.4 (2009-08-27) +Version 1.1.0 (2022-12-11) 0. Preface @@ -93,6 +93,10 @@ Version Date Description + 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 + 1.0.4 2009-08-27 Language improvements in Sections 1.2, 2.1.1.2, 3.1.1, 3.1.2, and 5.3.1 @@ -915,10 +919,21 @@ 0x04 1 byte x86 filter (BCJ) 0x05 4 bytes PowerPC (big endian) filter 0x06 16 bytes IA64 filter - 0x07 4 bytes ARM (little endian) filter - 0x08 2 bytes ARM Thumb (little endian) filter + 0x07 4 bytes ARM filter [1] + 0x08 2 bytes ARM Thumb filter [1] 0x09 4 bytes SPARC filter + 0x0A 4 bytes ARM64 filter [2] + [1] These are for little endian instruction encoding. + This must not be confused with data endianness. + A processor configured for big endian data access + may still use little endian instruction encoding. + The filters don't care about the data endianness. + + [2] 4096-byte alignment gives the best results + because the address in the ADRP instruction + is a multiple of 4096 bytes. + If the size of Filter Properties is four bytes, the Filter Properties field contains the start offset used for address conversions. It is stored as an unsigned 32-bit little endian @@ -987,12 +1002,12 @@ 5.4. Custom Filter IDs - If a developer wants to use custom Filter IDs, he has two + If a developer wants to use custom Filter IDs, there are two choices. The first choice is to contact Lasse Collin and ask him to allocate a range of IDs for the developer. - The second choice is to generate a 40-bit random integer, - which the developer can use as his personal Developer ID. + The second choice is to generate a 40-bit random integer + which the developer can use as a personal Developer ID. To minimize the risk of collisions, Developer ID has to be a randomly generated integer, not manually selected "hex word". The following command, which works on many free operating @@ -1000,7 +1015,7 @@ dd if=/dev/urandom bs=5 count=1 | hexdump - The developer can then use his Developer ID to create unique + The developer can then use the Developer ID to create unique (well, hopefully unique) Filter IDs. Bits Mask Description diff -ur xz-5.2.5/dos/INSTALL.txt xz-5.4.3/dos/INSTALL.txt --- xz-5.2.5/dos/INSTALL.txt 2020-03-17 17:28:50 +++ xz-5.4.3/dos/INSTALL.txt 2023-05-04 17:21:05 @@ -17,7 +17,7 @@ Getting and Installing DJGPP - You may use to help + You may use to help deciding what to download. If you are only interested in building XZ Utils, the zip-picker may list files that you don't strictly need. However, using the zip-picker can still be worth it to get a @@ -25,7 +25,7 @@ from readme.1st too). For a more manual method, first select a mirror from - and go the + and go the subdirectory named "current". You need the following files: unzip32.exe (if you don't already have a LFN-capable unzipper) diff -ur xz-5.2.5/dos/Makefile xz-5.4.3/dos/Makefile --- xz-5.2.5/dos/Makefile 2020-03-17 17:28:54 +++ xz-5.4.3/dos/Makefile 2023-05-04 17:21:05 @@ -62,6 +62,7 @@ ../src/liblzma/common/block_header_encoder.c \ ../src/liblzma/common/block_util.c \ ../src/liblzma/common/common.c \ + ../src/liblzma/common/file_info.c \ ../src/liblzma/common/filter_common.c \ ../src/liblzma/common/filter_decoder.c \ ../src/liblzma/common/filter_encoder.c \ @@ -72,11 +73,13 @@ ../src/liblzma/common/index_decoder.c \ ../src/liblzma/common/index_encoder.c \ ../src/liblzma/common/index_hash.c \ + ../src/liblzma/common/lzip_decoder.c \ ../src/liblzma/common/stream_decoder.c \ ../src/liblzma/common/stream_encoder.c \ ../src/liblzma/common/stream_flags_common.c \ ../src/liblzma/common/stream_flags_decoder.c \ ../src/liblzma/common/stream_flags_encoder.c \ + ../src/liblzma/common/string_conversion.c \ ../src/liblzma/common/vli_decoder.c \ ../src/liblzma/common/vli_encoder.c \ ../src/liblzma/common/vli_size.c \ @@ -96,6 +99,7 @@ ../src/liblzma/lzma/lzma_encoder_presets.c \ ../src/liblzma/rangecoder/price_table.c \ ../src/liblzma/simple/arm.c \ + ../src/liblzma/simple/arm64.c \ ../src/liblzma/simple/armthumb.c \ ../src/liblzma/simple/ia64.c \ ../src/liblzma/simple/powerpc.c \ diff -ur xz-5.2.5/dos/config.h xz-5.4.3/dos/config.h --- xz-5.2.5/dos/config.h 2020-03-17 17:28:50 +++ xz-5.4.3/dos/config.h 2023-05-04 17:21:05 @@ -16,6 +16,9 @@ /* Define to 1 if arm decoder is enabled. */ #define HAVE_DECODER_ARM 1 +/* Define to 1 if arm64 decoder is enabled. */ +#define HAVE_DECODER_ARM64 1 + /* Define to 1 if armthumb decoder is enabled. */ #define HAVE_DECODER_ARMTHUMB 1 @@ -46,6 +49,9 @@ /* Define to 1 if arm encoder is enabled. */ #define HAVE_ENCODER_ARM 1 +/* Define to 1 if arm64 encoder is enabled. */ +#define HAVE_ENCODER_ARM64 1 + /* Define to 1 if armthumb encoder is enabled. */ #define HAVE_ENCODER_ARMTHUMB 1 @@ -76,6 +82,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#define HAVE_LZIP_DECODER 1 + /* Define to 1 to enable bt2 match finder. */ #define HAVE_MF_BT2 1 @@ -128,7 +137,7 @@ #define NDEBUG 1 /* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" +#define PACKAGE_BUGREPORT "xz@tukaani.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "XZ Utils" Only in xz-5.4.3: doxygen diff -ur xz-5.2.5/lib/Makefile.in xz-5.4.3/lib/Makefile.in --- xz-5.2.5/lib/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/lib/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -193,6 +193,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -203,8 +205,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -257,6 +261,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -315,6 +320,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -421,7 +427,6 @@ cscope cscopelist: - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -462,7 +467,8 @@ installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am +install-exec: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -565,7 +571,7 @@ uninstall-am: -.MAKE: all check install install-am install-strip +.MAKE: all check install install-am install-exec install-strip .PHONY: all all-am am--depfiles check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES cscopelist-am ctags-am \ diff -ur xz-5.2.5/m4/ax_pthread.m4 xz-5.4.3/m4/ax_pthread.m4 --- xz-5.2.5/m4/ax_pthread.m4 2020-03-17 17:28:50 +++ xz-5.4.3/m4/ax_pthread.m4 2023-05-04 17:21:05 @@ -14,20 +14,24 @@ # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). (This -# is necessary on AIX to use the special cc_r compiler alias.) +# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is +# needed for multi-threaded programs (defaults to the value of CC +# respectively CXX otherwise). (This is necessary on e.g. AIX to use the +# special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" +# CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to @@ -83,7 +87,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 27 +#serial 31 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ @@ -105,6 +109,7 @@ ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) + AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) @@ -386,7 +391,7 @@ # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do @@ -482,18 +487,28 @@ [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], - [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], - [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + [ + AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) + AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) + ], + [ + AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) + AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) + ] + ) + ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) +AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then diff -ur xz-5.2.5/m4/gettext.m4 xz-5.4.3/m4/gettext.m4 --- xz-5.2.5/m4/gettext.m4 2020-03-17 17:29:25 +++ xz-5.4.3/m4/gettext.m4 2023-05-04 17:27:40 @@ -1,15 +1,15 @@ -# gettext.m4 serial 70 (gettext-0.20) -dnl Copyright (C) 1995-2014, 2016, 2018 Free Software Foundation, Inc. +# gettext.m4 serial 72 (gettext-0.21.1) +dnl Copyright (C) 1995-2014, 2016, 2018-2020 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. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -55,22 +55,22 @@ AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], , + m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])]) - ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old], [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. ])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], - ifelse([$1], [external], [no], [yes])) + m4_if([$1], [external], [no], [yes])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) @@ -88,7 +88,7 @@ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. - ifelse(gt_included_intl, yes, , [ + m4_if(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) @@ -98,7 +98,7 @@ dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) @@ -118,7 +118,7 @@ dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], @@ -174,7 +174,7 @@ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ + m4_if(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL @@ -261,7 +261,7 @@ INCINTL= fi - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. @@ -273,8 +273,8 @@ dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" + LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" + LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi @@ -341,7 +341,7 @@ POSUB=po fi - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' dnl because some of the testsuite requires it. BUILD_INCLUDED_LIBINTL=yes diff -ur xz-5.2.5/m4/host-cpu-c-abi.m4 xz-5.4.3/m4/host-cpu-c-abi.m4 --- xz-5.2.5/m4/host-cpu-c-abi.m4 2020-03-17 17:29:25 +++ xz-5.4.3/m4/host-cpu-c-abi.m4 2023-05-04 17:27:40 @@ -1,5 +1,5 @@ -# host-cpu-c-abi.m4 serial 11 -dnl Copyright (C) 2002-2019 Free Software Foundation, Inc. +# host-cpu-c-abi.m4 serial 15 +dnl Copyright (C) 2002-2022 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. @@ -55,7 +55,7 @@ [case "$host_cpu" in changequote(,)dnl - i[4567]86 ) + i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; @@ -211,7 +211,7 @@ # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail @@ -382,6 +382,9 @@ #ifndef __ia64__ #undef __ia64__ #endif +#ifndef __loongarch64__ +#undef __loongarch64__ +#endif #ifndef __m68k__ #undef __m68k__ #endif @@ -457,7 +460,8 @@ dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI -dnl (application binary interface) is a 32-bit one, or to 'no' otherwise. +dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit +dnl one, or to 'unknown' if unknown. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ @@ -467,15 +471,45 @@ case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; - *) + x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; + *) + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in + # CPUs that only support a 32-bit ABI. + arc \ + | bfin \ + | cris* \ + | csky \ + | epiphany \ + | ft32 \ + | h8300 \ + | m68k \ + | microblaze | microblazeel \ + | nds32 | nds32le | nds32be \ + | nios2 | nios2eb | nios2el \ + | or1k* \ + | or32 \ + | sh | sh[1234] | sh[1234]e[lb] \ + | tic6x \ + | xtensa* ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + # CPUs that only support a 64-bit ABI. changequote(,)dnl - i[4567]86 ) + alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ + | mmix ) changequote([,])dnl + gl_cv_host_cpu_c_abi_32bit=no + ;; + +changequote(,)dnl + i[34567]86 ) +changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=yes ;; @@ -574,7 +608,7 @@ # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail @@ -634,7 +668,7 @@ ;; *) - gl_cv_host_cpu_c_abi_32bit=no + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi diff -ur xz-5.2.5/m4/iconv.m4 xz-5.4.3/m4/iconv.m4 --- xz-5.2.5/m4/iconv.m4 2020-03-17 17:29:25 +++ xz-5.4.3/m4/iconv.m4 2023-05-04 17:27:40 @@ -1,5 +1,5 @@ -# iconv.m4 serial 21 -dnl Copyright (C) 2000-2002, 2007-2014, 2016-2019 Free Software Foundation, +# iconv.m4 serial 24 +dnl Copyright (C) 2000-2002, 2007-2014, 2016-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -7,6 +7,12 @@ dnl From Bruno Haible. +AC_PREREQ([2.64]) + +dnl Note: AM_ICONV is documented in the GNU gettext manual +dnl . +dnl Don't make changes that are incompatible with that documentation! + AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. @@ -86,8 +92,9 @@ #endif ]], [[int result = 0; - /* Test against AIX 5.1 bug: Failures are not distinguishable from successful - returns. */ + /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from + successful returns. This is even documented in + */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) @@ -225,8 +232,7 @@ AC_SUBST([LTLIBICONV]) ]) -dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to -dnl avoid warnings like +dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. @@ -234,54 +240,43 @@ dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. -m4_define([gl_iconv_AC_DEFUN], - m4_version_prereq([2.64], - [[AC_DEFUN_ONCE( - [$1], [$2])]], - [m4_ifdef([gl_00GNULIB], - [[AC_DEFUN_ONCE( - [$1], [$2])]], - [[AC_DEFUN( - [$1], [$2])]])])) -gl_iconv_AC_DEFUN([AM_ICONV], +AC_DEFUN_ONCE([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then - AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL([am_cv_proto_iconv], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ + AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature], + [gl_cv_iconv_nonconst], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ #include #include extern #ifdef __cplusplus "C" #endif -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif - ]], - [[]])], - [am_cv_proto_iconv_arg1=""], - [am_cv_proto_iconv_arg1="const"]) - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) - am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([ - $am_cv_proto_iconv]) + ]], + [[]])], + [gl_cv_iconv_nonconst=yes], + [gl_cv_iconv_nonconst=no]) + ]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. - am_cv_proto_iconv_arg1="" + gl_cv_iconv_nonconst=yes fi - AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + if test $gl_cv_iconv_nonconst = yes; then + iconv_arg1="" + else + iconv_arg1="const" + fi + AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) - if test -n "$am_cv_proto_iconv_arg1"; then + if test $gl_cv_iconv_nonconst != yes; then ICONV_CONST="const" fi ]) diff -ur xz-5.2.5/m4/intlmacosx.m4 xz-5.4.3/m4/intlmacosx.m4 --- xz-5.2.5/m4/intlmacosx.m4 2020-03-17 17:29:25 +++ xz-5.4.3/m4/intlmacosx.m4 2023-05-04 17:27:40 @@ -1,15 +1,15 @@ -# intlmacosx.m4 serial 6 (gettext-0.20) -dnl Copyright (C) 2004-2014, 2016, 2019 Free Software Foundation, Inc. +# intlmacosx.m4 serial 8 (gettext-0.20.2) +dnl Copyright (C) 2004-2014, 2016, 2019-2022 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. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -33,21 +33,15 @@ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi - dnl Check for API introduced in Mac OS X 10.5. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[CFLocaleCopyCurrent();]])], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], - [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi + dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, + dnl because in macOS 10.13.4 it has the following behaviour: + dnl When two or more languages are specified in the + dnl "System Preferences > Language & Region > Preferred Languages" panel, + dnl it returns en_CC where CC is the territory (even when English is not among + dnl the preferred languages!). What we want instead is what + dnl CFLocaleCopyCurrent returned in earlier macOS releases and what + dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the + dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" @@ -64,7 +58,6 @@ fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ - || test $gt_cv_func_CFLocaleCopyCurrent = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi diff -ur xz-5.2.5/m4/lib-ld.m4 xz-5.4.3/m4/lib-ld.m4 --- xz-5.2.5/m4/lib-ld.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/lib-ld.m4 2023-05-04 17:27:40 @@ -1,5 +1,5 @@ -# lib-ld.m4 serial 9 -dnl Copyright (C) 1996-2003, 2009-2019 Free Software Foundation, Inc. +# lib-ld.m4 serial 10 +dnl Copyright (C) 1996-2003, 2009-2022 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. @@ -122,7 +122,7 @@ *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail diff -ur xz-5.2.5/m4/lib-link.m4 xz-5.4.3/m4/lib-link.m4 --- xz-5.2.5/m4/lib-link.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/lib-link.m4 2023-05-04 17:27:40 @@ -1,5 +1,5 @@ -# lib-link.m4 serial 28 -dnl Copyright (C) 2001-2019 Free Software Foundation, Inc. +# lib-link.m4 serial 33 +dnl Copyright (C) 2001-2022 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. @@ -192,10 +192,12 @@ AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], -[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib - --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[[ --with-]]PACK[[-prefix[=DIR] search for ]]PACKLIBS[[ in DIR/include and DIR/lib + --without-]]PACK[[-prefix don't search for ]]PACKLIBS[[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no @@ -204,17 +206,23 @@ AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= @@ -270,48 +278,54 @@ shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - dnl The same code as in the loop below: - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do @@ -321,7 +335,7 @@ dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -331,14 +345,14 @@ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -349,7 +363,7 @@ fi dnl Then look for a static library. if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -375,7 +389,8 @@ dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else @@ -475,6 +490,13 @@ fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. @@ -525,19 +547,21 @@ for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -548,29 +572,29 @@ haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi @@ -607,7 +631,20 @@ ;; -l*) dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dnl But on GNU systems, ignore -lc options, because + dnl - linking with libc is the default anyway, + dnl - linking with libc.a may produce an error + dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" + dnl or may produce an executable that always crashes, see + dnl . + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) dnl Handle this in the next round. Throw away the .la's @@ -718,7 +755,8 @@ dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= @@ -728,7 +766,8 @@ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; diff -ur xz-5.2.5/m4/lib-prefix.m4 xz-5.4.3/m4/lib-prefix.m4 --- xz-5.2.5/m4/lib-prefix.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/lib-prefix.m4 2023-05-04 17:27:40 @@ -1,5 +1,5 @@ -# lib-prefix.m4 serial 14 -dnl Copyright (C) 2001-2005, 2008-2019 Free Software Foundation, Inc. +# lib-prefix.m4 serial 20 +dnl Copyright (C) 2001-2005, 2008-2022 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. @@ -147,21 +147,24 @@ ]) dnl AC_LIB_PREPARE_MULTILIB creates -dnl - a variable acl_libdirstem, containing the basename of the libdir, either -dnl "lib" or "lib64" or "lib/64", -dnl - a variable acl_libdirstem2, as a secondary possible value for -dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or -dnl "lib/amd64". +dnl - a function acl_is_expected_elfclass, that tests whether standard input +dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, +dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing +dnl the basename of the libdir to try in turn, either "lib" or "lib64" or +dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ - dnl There is no formal standard regarding lib and lib64. - dnl On glibc systems, the current practice is that on a system supporting + dnl There is no formal standard regarding lib, lib32, and lib64. + dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine - dnl the compiler's default mode by looking at the compiler's library search - dnl path. If at least one of its elements ends in /lib64 or points to a - dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. - dnl Otherwise we use the default, namely "lib". + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on + dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go + dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. + dnl We determine the compiler's default mode by looking at the compiler's + dnl library search path. If at least one of its elements ends in /lib64 or + dnl points to a directory whose absolute pathname ends in /lib64, we use that + dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, + dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or @@ -169,27 +172,75 @@ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) - case "$host_os" in - solaris*) - AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], - [AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifdef _LP64 - int ok; - #else - error fail - #endif - ]])], - [gl_cv_solaris_64bit=yes], - [gl_cv_solaris_64bit=no]) - ]);; - esac + AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], + [AC_EGREP_CPP([Extensible Linking Format], + [#if defined __ELF__ || (defined __linux__ && defined __EDG__) + Extensible Linking Format + #endif + ], + [gl_cv_elf=yes], + [gl_cv_elf=no]) + ]) + if test $gl_cv_elf = yes; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi + # Use 'expr', not 'test', to compare the values of func_elfclass, because on + # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, + # not 1 or 2. +changequote(,)dnl + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac +changequote([,])dnl + else + acl_is_expected_elfclass () + { + : + } + fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], - [acl_libdirstem=lib + [dnl Try 'lib' first, because that's the default for libdir in GNU, see + dnl . + acl_libdirstem=lib acl_libdirstem2= + acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment @@ -197,53 +248,76 @@ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are - dnl surely under $prefix/lib, not $prefix/lib64. - if test "$HOST_CPU_C_ABI_32BIT" != yes; then - dnl The result is a property of the system. However, non-system - dnl compilers sometimes have odd library search paths. Therefore - dnl prefer asking /usr/bin/gcc, if available, rather than $CC. - searchpath=`(if test -f /usr/bin/gcc \ - && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ - LC_ALL=C /usr/bin/gcc -print-search-dirs; \ - else \ - LC_ALL=C $CC -print-search-dirs; \ - fi) 2>/dev/null \ - | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" + dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. + dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries + dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. + dnl Find the compiler's search path. However, non-system compilers + dnl sometimes have odd library search paths. But we can't simply invoke + dnl '/usr/bin/gcc -print-search-dirs' because that would not take into + dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 fi fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= + fi + fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" - acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) - # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. + dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and + dnl acl_libdirstem3. +changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` - acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` +changequote([,])dnl ]) diff -ur xz-5.2.5/m4/libtool.m4 xz-5.4.3/m4/libtool.m4 --- xz-5.2.5/m4/libtool.m4 2020-03-17 17:29:27 +++ xz-5.4.3/m4/libtool.m4 2023-05-04 17:31:27 @@ -1,6 +1,7 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996-2001, 2003-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -31,7 +32,7 @@ # along with this program. If not, see . ]) -# serial 58 LT_INIT +# serial 59 LT_INIT # LT_PREREQ(VERSION) @@ -181,6 +182,7 @@ m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl @@ -777,7 +779,7 @@ # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || @@ -1066,17 +1068,12 @@ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[[012]][[,.]]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -1125,12 +1122,12 @@ output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else @@ -1244,7 +1241,8 @@ # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) +[m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot @@ -1261,7 +1259,7 @@ fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( @@ -1291,7 +1289,7 @@ # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -1308,7 +1306,7 @@ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -1320,7 +1318,7 @@ ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -1342,7 +1340,7 @@ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -1350,7 +1348,7 @@ emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -1358,7 +1356,7 @@ emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -1378,14 +1376,14 @@ # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -1453,7 +1451,7 @@ # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -1726,7 +1724,7 @@ lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1769,7 +1767,7 @@ sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -2570,7 +2568,7 @@ case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; @@ -2580,7 +2578,7 @@ ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -2606,7 +2604,7 @@ done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -2676,7 +2674,7 @@ shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -3475,7 +3473,7 @@ bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -3509,14 +3507,14 @@ lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -3530,7 +3528,7 @@ ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' @@ -3577,7 +3575,7 @@ newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -3704,13 +3702,13 @@ mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -3736,7 +3734,7 @@ # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -3976,7 +3974,7 @@ if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -3994,20 +3992,20 @@ # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -4049,9 +4047,9 @@ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -4338,7 +4336,7 @@ ;; esac ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) @@ -4421,7 +4419,7 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -4757,7 +4755,7 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -5065,7 +5063,7 @@ _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -5192,7 +5190,7 @@ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -5235,7 +5233,7 @@ _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes @@ -5247,7 +5245,7 @@ if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -5263,7 +5261,7 @@ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -5672,7 +5670,7 @@ ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes @@ -6784,7 +6782,7 @@ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes @@ -6921,7 +6919,7 @@ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in @@ -7061,13 +7059,13 @@ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' @@ -8212,6 +8210,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) + +# _LT_DECL_FILECMD +# ---------------- +# Check for a file(cmd) program that can be used to detect file type and magic +m4_defun([_LT_DECL_FILECMD], +[AC_CHECK_TOOL([FILECMD], [file], [:]) +_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) +])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ diff -ur xz-5.2.5/m4/ltoptions.m4 xz-5.4.3/m4/ltoptions.m4 --- xz-5.2.5/m4/ltoptions.m4 2020-03-17 17:29:27 +++ xz-5.4.3/m4/ltoptions.m4 2023-05-04 17:31:28 @@ -1,7 +1,7 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004-2005, 2007-2009, 2011-2018 Free Software -# Foundation, Inc. +# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives diff -ur xz-5.2.5/m4/ltsugar.m4 xz-5.4.3/m4/ltsugar.m4 --- xz-5.2.5/m4/ltsugar.m4 2020-03-17 17:29:27 +++ xz-5.4.3/m4/ltsugar.m4 2023-05-04 17:31:28 @@ -1,6 +1,6 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007-2008, 2011-2018 Free Software +# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # diff -ur xz-5.2.5/m4/ltversion.m4 xz-5.4.3/m4/ltversion.m4 --- xz-5.2.5/m4/ltversion.m4 2020-03-17 17:29:27 +++ xz-5.4.3/m4/ltversion.m4 2023-05-04 17:31:28 @@ -1,6 +1,7 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004, 2011-2018 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, +# Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives @@ -9,15 +10,15 @@ # @configure_input@ -# serial 4221 ltversion.m4 +# serial 4249 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.6.42-b88ce-dirty]) -m4_define([LT_PACKAGE_REVISION], [2.4.6.42]) +m4_define([LT_PACKAGE_VERSION], [2.4.7.4-1ec8f-dirty]) +m4_define([LT_PACKAGE_REVISION], [2.4.7.4]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.6.42-b88ce-dirty' -macro_revision='2.4.6.42' +[macro_version='2.4.7.4-1ec8f-dirty' +macro_revision='2.4.7.4' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff -ur xz-5.2.5/m4/lt~obsolete.m4 xz-5.4.3/m4/lt~obsolete.m4 --- xz-5.2.5/m4/lt~obsolete.m4 2020-03-17 17:29:27 +++ xz-5.4.3/m4/lt~obsolete.m4 2023-05-04 17:31:28 @@ -1,7 +1,7 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007, 2009, 2011-2018 Free Software -# Foundation, Inc. +# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives diff -ur xz-5.2.5/m4/nls.m4 xz-5.4.3/m4/nls.m4 --- xz-5.2.5/m4/nls.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/nls.m4 2023-05-04 17:27:40 @@ -1,16 +1,16 @@ -# nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019 Free Software -dnl Foundation, Inc. +# nls.m4 serial 6 (gettext-0.20.2) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2022 Free +dnl 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. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. diff -ur xz-5.2.5/m4/po.m4 xz-5.4.3/m4/po.m4 --- xz-5.2.5/m4/po.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/po.m4 2023-05-04 17:27:40 @@ -1,15 +1,15 @@ -# po.m4 serial 30 (gettext-0.20) -dnl Copyright (C) 1995-2014, 2016, 2018-2019 Free Software Foundation, Inc. +# po.m4 serial 32 (gettext-0.21.1) +dnl Copyright (C) 1995-2014, 2016, 2018-2022 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. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -179,7 +179,9 @@ # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then @@ -379,7 +381,9 @@ # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then diff -ur xz-5.2.5/m4/progtest.m4 xz-5.4.3/m4/progtest.m4 --- xz-5.2.5/m4/progtest.m4 2020-03-17 17:29:26 +++ xz-5.4.3/m4/progtest.m4 2023-05-04 17:27:40 @@ -1,22 +1,22 @@ -# progtest.m4 serial 7 (gettext-0.18.2) -dnl Copyright (C) 1996-2003, 2005, 2008-2019 Free Software Foundation, Inc. +# progtest.m4 serial 9 (gettext-0.21.1) +dnl Copyright (C) 1996-2003, 2005, 2008-2022 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. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. -AC_PREREQ([2.50]) +AC_PREREQ([2.53]) # Search path for a program which passes the given test. @@ -61,7 +61,7 @@ ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do + for ac_dir in m4_if([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do @@ -77,12 +77,12 @@ IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +m4_if([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then +if test m4_if([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) diff -ur xz-5.2.5/m4/tuklib_cpucores.m4 xz-5.4.3/m4/tuklib_cpucores.m4 --- xz-5.2.5/m4/tuklib_cpucores.m4 2020-03-17 17:28:54 +++ xz-5.4.3/m4/tuklib_cpucores.m4 2023-05-04 17:21:05 @@ -95,7 +95,6 @@ #ifdef __QNX__ compile error #endif -#include #ifdef HAVE_SYS_PARAM_H # include #endif @@ -103,7 +102,12 @@ int main(void) { +#ifdef HW_NCPUONLINE + /* This is preferred on OpenBSD, see tuklib_cpucores.c. */ + int name[2] = { CTL_HW, HW_NCPUONLINE }; +#else int name[2] = { CTL_HW, HW_NCPU }; +#endif int cpus; size_t cpus_size = sizeof(cpus); sysctl(name, 2, &cpus, &cpus_size, NULL, 0); diff -ur xz-5.2.5/m4/tuklib_integer.m4 xz-5.4.3/m4/tuklib_integer.m4 --- xz-5.2.5/m4/tuklib_integer.m4 2020-03-17 17:28:54 +++ xz-5.4.3/m4/tuklib_integer.m4 2023-05-04 17:21:05 @@ -8,8 +8,8 @@ # Checks for tuklib_integer.h: # - Endianness # - Does the compiler or the operating system provide byte swapping macros -# - Does the hardware support fast unaligned access to 16-bit -# and 32-bit integers +# - Does the hardware support fast unaligned access to 16-bit, 32-bit, +# and 64-bit integers # # COPYING # @@ -64,8 +64,9 @@ 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 and 32-bit integers. By default, this is enabled - only on x86, x86_64, and big endian PowerPC.]), + with 16-bit, 32-bit, and 64-bit integers. By default, + 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 # TODO: There may be other architectures, on which unaligned access @@ -74,6 +75,17 @@ i?86|x86_64|powerpc|powerpc64) enable_unaligned_access=yes ;; + 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([ +#ifndef __ARM_FEATURE_UNALIGNED +compile error +#endif +int main(void) { return 0; } +])], [enable_unaligned_access=yes], [enable_unaligned_access=no]) + ;; *) enable_unaligned_access=no ;; @@ -81,8 +93,8 @@ fi if test "x$enable_unaligned_access" = xyes ; then AC_DEFINE([TUKLIB_FAST_UNALIGNED_ACCESS], [1], [Define to 1 if - the system supports fast unaligned access to 16-bit and - 32-bit integers.]) + the system supports fast unaligned access to 16-bit, + 32-bit, and 64-bit integers.]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) diff -ur xz-5.2.5/m4/tuklib_physmem.m4 xz-5.4.3/m4/tuklib_physmem.m4 --- xz-5.2.5/m4/tuklib_physmem.m4 2020-03-17 17:28:54 +++ xz-5.4.3/m4/tuklib_physmem.m4 2023-05-04 17:21:05 @@ -88,7 +88,6 @@ ]])], [tuklib_cv_physmem_method=sysconf], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include #ifdef HAVE_SYS_PARAM_H # include #endif diff -ur xz-5.2.5/m4/tuklib_progname.m4 xz-5.4.3/m4/tuklib_progname.m4 --- xz-5.2.5/m4/tuklib_progname.m4 2020-03-17 17:28:50 +++ xz-5.4.3/m4/tuklib_progname.m4 2023-05-04 17:21:05 @@ -21,5 +21,8 @@ AC_DEFUN_ONCE([TUKLIB_PROGNAME], [ AC_REQUIRE([TUKLIB_COMMON]) -AC_CHECK_DECLS([program_invocation_name], [], [], [#include ]) +AC_CHECK_DECL([program_invocation_name], [AC_DEFINE( + [HAVE_PROGRAM_INVOCATION_NAME], [1], + [Define to 1 if `program_invocation_name' is declared in .])], + [], [#include ]) ])dnl diff -ur xz-5.2.5/po/LINGUAS xz-5.4.3/po/LINGUAS --- xz-5.2.5/po/LINGUAS 2020-03-17 17:28:54 +++ xz-5.4.3/po/LINGUAS 2023-05-04 17:21:05 @@ -1,12 +1,23 @@ +ca cs da de +eo +es fi fr +hr hu it +ko pl +pt pt_BR +ro +sr +sv +tr +uk vi zh_CN zh_TW diff -ur xz-5.2.5/po/Makefile.in.in xz-5.4.3/po/Makefile.in.in --- xz-5.2.5/po/Makefile.in.in 2020-03-17 17:29:26 +++ xz-5.4.3/po/Makefile.in.in 2023-05-04 17:27:40 @@ -1,13 +1,13 @@ # Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-2000 Ulrich Drepper -# Copyright (C) 2000-2019 Free Software Foundation, Inc. +# Copyright (C) 2000-2020 Free Software Foundation, Inc. # # 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. # -# Origin: gettext-0.20 +# Origin: gettext-0.21 GETTEXT_MACRO_VERSION = 0.20 PACKAGE = @PACKAGE@ @@ -90,6 +90,9 @@ # Makevars gets inserted here. (Don't remove this line!) +all: all-@USE_NLS@ + + .SUFFIXES: .SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update @@ -107,7 +110,8 @@ # the .pot file. This eliminates the need to update the .po files when the # .pot file has changed, which would be troublesome if the .po files are put # under version control. -.po.gmo: $(srcdir)/$(DOMAIN).pot +$(GMOFILES): $(srcdir)/$(DOMAIN).pot +.po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \ @@ -123,8 +127,6 @@ mv t-$@ $@ -all: all-@USE_NLS@ - all-yes: $(srcdir)/stamp-po all-no: @@ -413,12 +415,17 @@ @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(srcdir)/stamp-po $(DISTFILES) - dists="$(DISTFILES)"; \ + @dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ + else \ + case $(XGETTEXT) in \ + :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \ + *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \ + esac; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ Only in xz-5.4.3/po: ca.gmo Only in xz-5.4.3/po: ca.po Binary files xz-5.2.5/po/cs.gmo and xz-5.4.3/po/cs.gmo differ diff -ur xz-5.2.5/po/cs.po xz-5.4.3/po/cs.po --- xz-5.2.5/po/cs.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/cs.po 2023-05-04 17:32:20 @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: xz-utils\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2010-12-03 11:32+0100\n" "Last-Translator: Marek Černocký \n" "Language-Team: Czech \n" @@ -18,99 +18,121 @@ "X-Poedit-Language: Czech\n" "X-Poedit-SourceCharset: utf-8\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Neznámý typ formátu souboru" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Neznámý typ kontroly integrity" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Spolu s přepínači „--files“ nebo „--files0“ může být zadán pouze jeden soubor" -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Proměnná prostředí %s obsahuje příliš mnoho argumentů" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: S přepínačem --format=raw je vyžadován --sufix=.PRIP, vyjma zápisu do standardního výstupu" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Maximální počet filtrů je čtyři" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Omezení použitelné paměti je příliš malé pro dané nastavení filtru." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Použití přednastavení v režimu raw je nevhodné." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Přesné volby u přednastavení se mohou lišit mezi různými verzemi softwaru." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Formát .lzma podporuje pouze filtr LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 nelze použít s formátem .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "" -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Nepodporovaný omezující filtr nebo volby filtru" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Dekomprimace bude vyžadovat %s MiB paměti." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Přizpůsobit velikost slovníku LZMA%c z %s MiB na %s MiB, tak aby nebylo překročeno omezení použitelné paměti %s MiB" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." msgstr "" -#: src/xz/coder.c:354 +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Přizpůsobit velikost slovníku LZMA%c z %s MiB na %s MiB, tak aby nebylo překročeno omezení použitelné paměti %s MiB" + +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Přizpůsobit velikost slovníku LZMA%c z %s MiB na %s MiB, tak aby nebylo překročeno omezení použitelné paměti %s MiB" @@ -120,11 +142,11 @@ msgid "Error creating a pipe: %s" msgstr "" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "" @@ -139,195 +161,341 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Vypadá to, že soubor byl přesunut, proto nebude odstraněn" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Nelze odstranit: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Nelze nastavit vlastníka souboru: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Nelze nastavit skupinu souboru: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Nelze nastavit oprávnění souboru: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Jedná se o symbolický odkaz, vynechává se" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Jedná se o složku, vynechává se" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Nejedná se o běžný soubor, vynechává se" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Soubor má nastavený bit setuid nebo setgid, vynechává se" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Soubor má nastavený bit sticky, vynechává se" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Vstupní soubor má více než jeden pevný odkaz, vynechává se" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Prázdný název souboru, vynechává se" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Chyba při obnovení příznaku O_APPEND na standardní výstup: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Selhalo zavření souboru: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Selhalo nastavení pozice při pokusu o vytvoření souboru řídké matice: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Chyba čtení: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Chyba při posunu v rámci souboru: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Neočekávaný konec souboru" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Chyba zápisu: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Vypnuto" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "Celkové množství fyzické paměti (RAM): " -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Omezení použitelné paměti pro komprimaci: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "Omezení použitelné paměti pro dekomprimaci:" +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "Dosaženo omezení použitelné paměti" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " Komprimovaná velikost: %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " Nekomprimovaná velikost: %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " Zarovnání proudu: %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " Potřebná paměť: %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " Velikosti v hlavičkách: %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " Počet souborů: %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "Celkem:" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "žádná" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "neznámá-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "neznámá-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "neznámá-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "neznámá-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "neznámá-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "neznámá-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "neznámá-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "neznámá-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "neznámá-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "neznámá-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "neznámá-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "neznámá-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Soubor je prázdný" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Je příliš malý na to, aby to mohl být platný soubor .xz" @@ -336,105 +504,26 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Proud Bloky Komprim Nekomprim Poměr Kontrl Název souboru" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Proudů: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Bloků: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Komprimovaná velikost: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Nekomprimovaná velikost: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Poměr komprimace: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Typ kontroly: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Zarovnání proudu: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Proudy:\n" -" Proud Bloky KomprPozice NekomprPozice KomprVelikost NekomprVelikost Poměr Kontrola Zarovnání" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Bloky:\n" -" Proud Blok KomprPozice NekomprPozice CelkVelikost NekomprVelikost Poměr Kontrola" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " KontrHod %*s Hlavič Příznaky KomprVel PoužiPam Filtry" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Potřebná paměť: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Velikosti v hlavičkách: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Ano" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Ne" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr "" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" @@ -442,20 +531,15 @@ msgstr[1] "%s soubory\n" msgstr[2] "%s souborů\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Celkem:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Počet souborů: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list pracuje pouze se soubory .xz (--format=xz nebo --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list nepodporuje čtení ze standardního vstupu" @@ -474,11 +558,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Byl nalezen nulový znak při čtení názvů souborů; nechtěli jste náhodou použít „--files0“ místo „--files“?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Komprimace a dekomprimace s přepínačem --robot není zatím podporovaná." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Ze standardního vstupu nelze číst data, když se ze standardního vstupu načítají názvy souborů" @@ -486,68 +570,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "" -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Interní chyba" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Nelze ustanovit ovladač signálu" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Žádná kontrola integrity; integrita souboru se nebude ověřovat" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Nepodporovaný typ kontroly integrity; integrita souboru se nebude ověřovat" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Dosaženo omezení použitelné paměti" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Formát souboru nebyl rozpoznán" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Nepodporovaná volba" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Komprimovaná data jsou poškozená" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Neočekávaný konec vstupu" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "" -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "Je vyžadováno %s MiB paměti. Limit je %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Omezující filtr: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Zkuste „%s --help“ pro více informací" -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -558,15 +642,15 @@ "Komprimuje nebo dekomprimuje SOUBORy ve formátu xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Povinné argumenty pro dlouhé přepínače jsou povinné rovněž pro krátké přepínače.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr "Operační režim:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -578,7 +662,7 @@ " -t, --test testovat integritu komprimovaného souboru\n" " -l, --list vypsat informace o souborech .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -586,7 +670,7 @@ "\n" "Modifikátory operací:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -596,13 +680,13 @@ " -f, --force vynutit přepis výstupního souboru a de/komprimovat odkazy\n" " -c, --stdout zapisovat na standardní výstup a nemazat vstupní soubory" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" msgstr "" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -618,7 +702,7 @@ " názvy souborů musí být zakončeny znakem nového řádku\n" " --files0[=SOUBOR] stejné jako --files, ale použít k zakončování nulový znak" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -626,10 +710,16 @@ "\n" "Základní přepínače pro formát souboru a komprimaci:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 +#, fuzzy +#| msgid "" +#| " -F, --format=FMT file format to encode or decode; possible values are\n" +#| " `auto' (default), `xz', `lzma', and `raw'\n" +#| " -C, --check=CHECK integrity check type: `none' (use with caution),\n" +#| " `crc32', `crc64' (default), or `sha256'" msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" @@ -638,11 +728,11 @@ " -C, --check=KONTROLA typ kontroly integrity: „none“ (používejte s rozmyslem),\n" " „crc32“, „crc64“ (výchozí) nebo „sha256“" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr "" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -650,7 +740,7 @@ " -0 .. -9 přednastavení komprimace; výchozí je 6; než použijete\n" " hodnoty 7 – 9, vezměte do úvahy množství použité paměti" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -658,27 +748,27 @@ " -e, --extreme zkusit zlepšit poměr komprimace využitím více času\n" " procesoru; nemá vliv na paměťové nároky dekomprimace" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" msgstr "" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" " use this to set the block size for threaded compression" msgstr "" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" " intervals of uncompressed data" msgstr "" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -686,14 +776,22 @@ " would block, all pending data is flushed out" msgstr "" -#: src/xz/message.c:1172 -#, no-c-format +#: src/xz/message.c:1043 +#, fuzzy, no-c-format +#| msgid "" +#| " --memlimit-compress=LIMIT\n" +#| " --memlimit-decompress=LIMIT\n" +#| " -M, --memlimit=LIMIT\n" +#| " set memory usage limit for compression, decompression,\n" +#| " or both; LIMIT is in bytes, % of RAM, or 0 for defaults" msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" @@ -702,7 +800,7 @@ " dekomprimaci nebo obojí; LIMIT je v bajtech, % z paměti\n" " RAM nebo 0 pro výchozí" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -710,7 +808,7 @@ " --no-adjust pokud nastavení komprimace přesáhne omezení použitelné\n" " paměti, předat chybu namísto snížení nastavení" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -718,7 +816,7 @@ "\n" "Vlastní omezující filtr pro komprimaci (alternativa k použití přednastavených):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -747,14 +845,26 @@ " depth=POČ maximální hloubka prohledávání;\n" " 0 = automaticky (výchozí)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 +#, fuzzy +#| msgid "" +#| "\n" +#| " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +#| " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +#| " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" +#| " --arm[=OPTS] ARM BCJ filter (little endian only)\n" +#| " --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +#| " --sparc[=OPTS] SPARC BCJ filter\n" +#| " Valid OPTS for all BCJ filters:\n" +#| " start=NUM start offset for conversions (default=0)" msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" @@ -769,7 +879,7 @@ " Platné volby pro všechny filtry BCJ:\n" " start=POČ počáteční posun pro převody (výchozí=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -781,7 +891,7 @@ " dist=POČ vzdálenost mezi bajty, které jsou odečítány\n" " jeden od druhého (1 – 256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -789,7 +899,7 @@ "\n" " Ostatní přepínače:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -798,17 +908,17 @@ " -v, --verbose podrobnější zprávy; zadáním dvakrát, budou ještě\n" " podrobnější" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn způsobí, že varování neovlivní stav ukončení" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot použít strojově analyzovatelné zprávy (užitečné pro\n" " skripty)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -816,7 +926,7 @@ " --info-memory zobrazit celkové množství paměti RAM a současné aktivní\n" " omezení použitelné paměti a skončit" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -824,7 +934,7 @@ " -h, --help zobrazit krátkou nápovědu (vypíše jen základní přepínače)\n" " -H, --long-help zobrazit tuto úplnou nápovědu a skončit" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -832,11 +942,11 @@ " -h, --help zobrazit tuto zkrácenou nápovědu a skončit\n" " -H, --long-help zobrazit úplnou nápovědu (vypíše i pokročilé přepínače)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version zobrazit číslo verze a skončit" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -848,17 +958,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "Chyby hlaste na <%s> (v angličtině nebo finštině).\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Domovská stránka %s: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "" @@ -886,27 +996,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Součet lc a lp nesmí překročit hodnotu 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Vybraný vyhledávač shod vyžaduje minimálně nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: S přepínačem --format=raw je vyžadován --sufix=.PRIP, vyjma zápisu do standardního výstupu" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Název souboru má neznámou příponu, vynechává se" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Soubor již má příponu „%s“, vynechává se" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Neplatná přípona názvu souboru" @@ -930,15 +1030,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Hodnota volby „%s“ musí být v rozsahu [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Prázdný název souboru, vynechává se" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Z terminálu nelze číst komprimovaná data" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Do terminálu nelze zapisovat komprimovaná data" @@ -949,6 +1045,48 @@ #: src/common/tuklib_exit.c:43 msgid "Unknown error" msgstr "Neznámá chyba" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Omezení použitelné paměti pro komprimaci: " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " Proudů: %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " Bloků: %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " Poměr komprimace: %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " Typ kontroly: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Proudy:\n" +#~ " Proud Bloky KomprPozice NekomprPozice KomprVelikost NekomprVelikost Poměr Kontrola Zarovnání" + +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Bloky:\n" +#~ " Proud Blok KomprPozice NekomprPozice CelkVelikost NekomprVelikost Poměr Kontrola" + +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " KontrHod %*s Hlavič Příznaky KomprVel PoužiPam Filtry" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Vybraný vyhledávač shod vyžaduje minimálně nice=%" #~ msgid "Limit was %s MiB, but %s MiB would have been needed" #~ msgstr "Limit byl %s MiB, ale bylo by zapotřebí %s MiB" Binary files xz-5.2.5/po/da.gmo and xz-5.4.3/po/da.gmo differ diff -ur xz-5.2.5/po/da.po xz-5.4.3/po/da.po --- xz-5.2.5/po/da.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/da.po 2023-05-04 17:32:20 @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2019-03-04 23:08+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" @@ -17,99 +17,121 @@ "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Ugyldigt parameter til --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: For mange argumenter til --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 kan kun bruges som det sidste element i --block-list" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Ukendt filformattype" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Typen for integritetkontrol er ikke understøttet" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Kun en fil kan angives med »--files« eller »--files0«." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Miljøvariablen %s indeholder for mange argumenter" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Komprimeringsunderstøttelse blev deaktiveret på byggetidspunktet" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Dekomprimeringsunderstøttelse blev deaktiveret på byggetidspunktet" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: med --format=raw, --suffix=.SUF er krævet med mindre der skrives til standardud" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Maksimalt antal filtre er fire" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Begræsningen for brug af hukommelse er for lav for den givne filteropsætning." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Det frarådes at bruge en forhåndskonfiguration i rå tilstand (raw mode)." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "De præcise indstillinger for forhåndskonfigurationerne kan variere mellem programversioner." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Formatet .lzma understøtter kun LZMA1-filteret" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 kan ikke bruges med .xz-formatet" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "Filterkæden er ikke kompatibel med --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Skifter til enkelt trådet tilstand på grund af --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Bruger op til % tråde." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Filterkæde eller filterindstillinger er ikke understøttet" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Dekomprimering vil kræve %s MiB hukommelse." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Justerede antallet af tråde fra %s til %s for ikke at overskride begræsningen på brug af hukommelse på %s MiB" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" msgstr "Justerede antallet af tråde fra %s til %s for ikke at overskride begræsningen på brug af hukommelse på %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Justerede LZMA%c-ordbogsstørrelsen fra %s MiB til %s MiB for ikke at overskride begrænsningen på brug af hukommelse på %s MiB" @@ -119,11 +141,11 @@ msgid "Error creating a pipe: %s" msgstr "Det opstod en fejl under oprettelse af en datakanal: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Kunne ikke aktivere sandkassen" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() mislykkedes: %s" @@ -138,195 +160,341 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Filen er vist blevet flyttet, sletter ikke" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Kan ikke fjerne: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Kan ikke angive filejeren: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Kan ikke angive filgruppen: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Kan ikke angive filtilladelser: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Der opstod en fejl under indhentelse af filstatusflag fra standardind: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Er en symbolsk henvisning, udelader" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Er en mappe, udelader" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Er ikke en normal fil, udelader" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Filen har setuid- eller setgid-bitsæt, udelader" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Fil har klæbende bitsæt, udelader" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Inddatafil har mere end en hård henvisning, udelader" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Tomt filnavn, udelader" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Der opstod en fejl under gendannelse af statusflagene til standardind: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Der opstod en fejl under indhentelse af filstatusflag fra standardud: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Der opstod en fejl under gendannelse af flaget O_APPEND til standardud: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Lukning af filen fejlede: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Søgning fejlede under forsøg på at oprette en tynd fil: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Læsefejl: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Der opstod en fejl under søgning efter filen: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Uventet filafslutning" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Skrivefejl: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Deaktiveret" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "Samlet mængde fysisk hukommelse (RAM): " -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Grænse for hukommelsesforbrug til komprimering: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "Grænse for hukommelsesforbug til dekomprimering: " +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "Begrænsning på brug af hukommelse er nået" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " Komprimeret str.: %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " Ukomprimeret str.: %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " Strømfyld: %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " Hukommelse krævet: %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " Størrelser i teksthoveder: %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " Antal filer: %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "I alt:" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Ingen" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Ukendt-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Ukendt-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Ukendt-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Ukendt-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Ukendt-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Ukendt-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Ukendt-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Ukendt-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Ukendt-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Ukendt-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Ukendt-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Ukendt-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Filen er tom" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: For lille til at være en gyldig .xz-fil" @@ -335,125 +503,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Strømme: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blokke: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Komprimeret str.: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Ukomprimeret str.: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Pakkeforhold: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Kontrol: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Strømfyld: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Strømme:\n" -" Strøm Blokke KompForsk. DekompForsk. KompStr. DekompStr. Forh. Kontrol Fyld" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blokke:\n" -" Strøm Blok KompForsk. DekompForsk. Ialtstr. DekompStr. Forh. Kontrol" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " KontrolVær %*sTeksth Flag Kompstr. HukForb. Filtre" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Hukommelse krævet: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Størrelser i teksthoveder: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Ja" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Nej" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Minimum for XZ Utils-version: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s fil\n" msgstr[1] "%s filer\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "I alt:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Antal filer: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list understøtter ikke læsning fra standardind" @@ -472,11 +556,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Komprimering og dekomprimering med --robot er endnu ikke understøttet." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "" @@ -484,68 +568,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Intern fejl (fejl)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Kan ikke etbalere signalhåndteringer" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Ingen integritetkontrol; verificerer ikke filintegritet" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Begrænsning på brug af hukommelse er nået" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Filformatet blev ikke genkendt" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Tilvalg er ikke understøttede" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Komprimerede data er ødelagte" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Uventet afslutning på inddata" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB hukommelse er krævet. Begrænseren er deaktiveret." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB hukommelse er krævet. Begrænsningen er %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Filterkæde: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Prøv »%s --help« for yderligere information." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -553,17 +637,17 @@ "\n" msgstr "" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Obligatoriske argumenter til lange tilvalg er også obligatoriske for korte\n" "tilvalg.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Operationstilstand:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -571,7 +655,7 @@ " -l, --list list information about .xz files" msgstr "" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -579,20 +663,20 @@ "\n" "Operationsændrere:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" " -c, --stdout write to standard output and don't delete input files" msgstr "" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" msgstr "" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -602,57 +686,57 @@ " --files0[=FILE] like --files but use the null character as terminator" msgstr "" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" msgstr "" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr "" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" msgstr "" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" msgstr "" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" msgstr "" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" " use this to set the block size for threaded compression" msgstr "" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" " intervals of uncompressed data" msgstr "" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -660,29 +744,31 @@ " would block, all pending data is flushed out" msgstr "" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" msgstr "" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" msgstr "" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -698,20 +784,21 @@ " depth=NUM maximum search depth; 0=automatic (default)" msgstr "" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -719,7 +806,7 @@ " from each other (1-256; 1)" msgstr "" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -727,29 +814,29 @@ "\n" "Andre tilvalg:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" msgstr "" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr "" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot brug beskeder der kan fortolkes maskinelt (nyttigt\n" " for skripter)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" msgstr "" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -758,7 +845,7 @@ " tilvalg)\n" " -H, --long-help vis den lange hjælpetekst og afslut" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -767,11 +854,11 @@ " -H, --long-help vis den lange hjælpetekst (viser også de avancerede\n" " tilvalg)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version vis versionsnummer og afslut" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -783,19 +870,19 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" "Rapporter fejl til <%s> (på engelsk eller finsk).\n" "Rapporter oversættelsesfejl til .\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s hjemmeside: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "DETTE ER EN UDVIKLINGSVERSION - BRUG IKKE I PRODUKTION." @@ -823,27 +910,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Summen af lc og lp må ikke være højere end 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Den valgte matchfinder kræver mindst nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: med --format=raw, --suffix=.SUF er krævet med mindre der skrives til standardud" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Filnavn har ukendt endelse, udelader" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Filen har allrede endelsen »%s«, udelader." -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Ugyldig filnavnendelse" @@ -867,15 +944,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Værdien for tilvalget »%s« skal være i intervallet [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Tomt filnavn, udelader" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Komprimerede data kan ikke læses fra en terminal" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Komprimerede data kan ikke skrives til en terminal" @@ -892,3 +965,45 @@ #~ msgid "Sandbox was successfully enabled" #~ msgstr "Sandkassen blev aktiveret" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Grænse for hukommelsesforbrug til komprimering: " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " Strømme: %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " Blokke: %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " Pakkeforhold: %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " Kontrol: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Strømme:\n" +#~ " Strøm Blokke KompForsk. DekompForsk. KompStr. DekompStr. Forh. Kontrol Fyld" + +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Blokke:\n" +#~ " Strøm Blok KompForsk. DekompForsk. Ialtstr. DekompStr. Forh. Kontrol" + +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " KontrolVær %*sTeksth Flag Kompstr. HukForb. Filtre" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Den valgte matchfinder kræver mindst nice=%" Binary files xz-5.2.5/po/de.gmo and xz-5.4.3/po/de.gmo differ diff -ur xz-5.2.5/po/de.po xz-5.4.3/po/de.po --- xz-5.2.5/po/de.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/de.po 2023-05-04 17:32:20 @@ -3,13 +3,13 @@ # # André Noll , 2010. # Anna Henningsen , 2015. -# Mario Blättermann , 2019. +# Mario Blättermann , 2019, 2022. msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2019-04-12 11:00+0200\n" +"Project-Id-Version: xz 5.4.0-pre2\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2022-12-05 18:55+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" @@ -18,102 +18,122 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 18.12.3\n" +"X-Generator: Lokalize 22.08.3\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Ungültiges Argument für --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Zu viele Argumente für --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 kann nur das letzte Element in --block-list sein" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Unbekanntes Dateiformat" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Integritätsprüfungstyp nicht unterstützt" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Nur eine Datei kann als Argument für »--files« oder »--files0« angegeben werden." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Die Umgebungsvariable %s enthält zu viele Argumente" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Die Unterstützung für Kompression wurde zum Zeitpunkt der Erstellung deaktiviert" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Die Unterstützung für Dekompression wurde zum Zeitpunkt der Erstellung deaktiviert" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "Kompression von lzip-Dateien (.lz) wird nicht unterstützt" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: Mit --format=raw ist --suffix=.SUF notwendig, falls nicht in die Standardausgabe geschrieben wird" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Maximal vier Filter möglich" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Die Speicherbedarfsbegrenzung ist für die gegebene Filter-Konfiguration zu niedrig." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Verwendung einer Voreinstellung im Roh-Modus wird nicht empfohlen." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Die genauen Optionen der Voreinstellung können zwischen Softwareversionen variieren." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Das .lzma-Format unterstützt nur den LZMA1-Filter" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 kann nicht mit dem .xz-Format verwendet werden" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "Diese Filterkette ist inkompatibel zu --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Wegen --flush-timeout wird auf den Einzelthread-Modus umgeschaltet" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Bis zu % Threads werden benutzt." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Filterkette oder Filteroptionen werden nicht unterstützt" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Dekompression wird %s MiB Speicher brauchen." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" -msgstr "Anzahl der Threads wurde von %s auf %s angepasst, um die Speicherbedarfsbegrenzung von %s MiB nicht zu übersteigen" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Anzahl der Threads wurde von %s auf %s reduziert, um die Speicherbedarfsbegrenzung von %s MiB nicht zu übersteigen" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "Anzahl der Threads wurde von %s auf einen reduziert. Die automatische Begrenzung des Speicherverbrauchs auf %s MiB wird immer noch überschritten. %s MiB an Speicher sind erforderlich. Es wird dennoch fortgesetzt." + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Es wurde in den Einzelthread-Modus gewechselt, um die Speicherbedarfsbegrenzung von %s MiB nicht zu übersteigen" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Die LZMA%c-Wörterbuchgröße wurde von %s MiB auf %s MiB angepasst, um die Speicherbedarfsbegrenzung von %s MiB nicht zu übersteigen" @@ -122,11 +142,11 @@ msgid "Error creating a pipe: %s" msgstr "Fehler beim Erzeugen der Pipeline: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Sandbox konnte nicht aktiviert werden" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() ist fehlgeschlagen: %s" @@ -141,195 +161,321 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Datei scheint verschoben worden zu sein, daher wird sie nicht gelöscht" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Löschen nicht möglich: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Dateieigentümer kann nicht gesetzt werden: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Dateigruppe kann nicht gesetzt werden: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Zugriffsrechte können nicht gesetzt werden: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Dateistatus-Markierungen können nicht aus der Standardeingabe ermittelt werden: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Ist ein symbolischer Link, wird übersprungen" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Ist ein Verzeichnis, wird übersprungen" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Keine reguläre Datei, wird übersprungen" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Datei hat das setuid- oder setgid-Bit gesetzt, wird übersprungen" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Datei hat sticky-Bit gesetzt, wird übersprungen" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Eingabedatei hat mehr als einen harten Link, wird übersprungen" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Leerer Dateiname, wird übersprungen" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Fehler beim Wiederherstellen der Status-Markierungen für die Standardeingabe: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Status-Markierungen der Standardausgabe können nicht ermittelt werden: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Fehler beim Wiederherstellen der O_APPEND-Markierungen für die Standardausgabe: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Fehler beim Schließen der Datei: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Positionierungsfehler beim Versuch, eine Sparse-Datei (dünnbesetzte Datei) zu erzeugen: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Lesefehler: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Fehler beim Durchsuchen der Datei: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Unerwartetes Ende der Datei" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Schreibfehler: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Deaktiviert" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "Gesamtmenge physischer Speicher (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "Gesamtmenge physischer Speicher (RAM):" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Speicherbedarfsbegrenzung für Kompression: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "Anzahl der Prozessor-Threads:" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "Speicherbedarfsbegrenzung für Dekompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "Kompression:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "Dekompression:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "Multithread-Dekompression:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "Vorgabe für -T0:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "Hardware-Information:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "Speicherbedarfsbegrenzung:" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "Datenströme:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "Blöcke:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "Größe komprimiert:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "Größe unkomprimiert:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "Verhältnis:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "Prüfung:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "Datenstromauffüllung:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "Benötigter Speicher:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "Größe in Köpfen:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "Anzahl Dateien:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "Datenstrom" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "Block" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "Blöcke" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "KompVers" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "UnkompVers" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "KompGröße" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "UnkompGröße" + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "Gesamt" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "Verhältnis" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "Prüfung" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "Prüfwert" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "Auffüllung" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "Kopf" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "Flags" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "SpeichVerb" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "Filter" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Keine" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Unbek.2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Unbek.3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Unbek.5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Unbek.6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Unbek.7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Unbek.8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Unbek.9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Unbek.11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Unbek.12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Unbek.13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Unbek.14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Unbek.15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Datei ist leer" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Zu klein, um eine gültige .xz-Datei zu sein" @@ -338,125 +484,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr " Str. Blöcke Kompr. Unkompr. Verh. Check Dateiname" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Datenströme: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blöcke: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Größe komprimiert: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Größe unkomprimiert: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Verhältnis: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Check: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Datenstromauffüllung: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Datenströme:\n" -" D.Strom Blöcke KompOffset UnkompOffset KompGröße UnkompGröße Verh. Check Auffüllung" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blöcke:\n" -" Strom Block KompOffset UnkompOffset TotalGröße UnkompGröße Verh. Check" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " PrüfWert %*s Kopf Schalter KompGröße Speicher Filter" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Benötigter Speicher: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Größe in Köpfen: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Ja" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Nein" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Minimal erforderliche XZ Utils-Version: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s Datei\n" msgstr[1] "%s Dateien\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Gesamt:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Anzahl Dateien: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list funktioniert nur mit .xz-Dateien (--format=xz oder --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list unterstützt kein Lesen aus der Standardeingabe" @@ -475,11 +537,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Null-Zeichen beim Lesen der Dateinamen gefunden; meinten Sie »--files0« statt »--files«?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Kompression und Dekompression mit --robot wird noch nicht unterstützt." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Lesen der Daten aus der Standardeingabe ist nicht möglich, wenn die Dateinamen auch aus der Standardeingabe gelesen werden" @@ -487,68 +549,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Interner Fehler (Bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Signalroutine kann nicht gesetzt werden" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Keine Integritätsprüfung; Integrität der Datei wird nicht überprüft" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Typ der Integritätsprüfung wird nicht unterstützt; Integrität der Datei wird nicht überprüft" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Speicherbedarfsbegrenzung erreicht" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Dateiformat nicht erkannt" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Optionen nicht unterstützt" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Komprimierte Daten sind beschädigt" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Unerwartetes Ende der Eingabe" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB Speicher wird benötigt. Die Begrenzung ist deaktiviert." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB Speicher wird benötigt. Die Begrenzung ist %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Filterkette: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Versuchen Sie »%s --help« für mehr Informationen." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -559,17 +621,17 @@ "Komprimiert oder dekomprimiert .xz-DATEI(EN).\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Obligatorische Argumente für lange Optionen sind auch für kurze Optionen\n" "zwingend.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Aktionsmodus:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -581,7 +643,7 @@ " -t, --test Dateiintegrität überprüfen\n" " -l, --list Dateiinformationen anzeigen" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -589,7 +651,7 @@ "\n" " Aktionsmodifikatoren:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -601,7 +663,7 @@ " -c, --stdout In die Standardausgabe schreiben und die\n" " Eingabedateien nicht löschen" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -610,7 +672,7 @@ " stillschweigend mögliche weitere Eingabedaten\n" " ignorieren" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -631,7 +693,7 @@ " --files0=[DATEI] Wie --files, aber das Null-Zeichen wird als\n" " Trenner benutzt" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -639,26 +701,26 @@ "\n" " Grundlegende Optionen für Dateiformat und Kompression:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" " -F, --format=FMT Dateiformat zur Kodierung oder Dekodierung; mögliche\n" -" Werte sind »auto« (Voreinstellung), »xz«, »lzma« und\n" -" »raw«\n" +" Werte sind »auto« (Voreinstellung), »xz«, »lzma«,\n" +" »lzip« und »raw«\n" " -C, --check=PRÜFUNG Typ der Integritätsprüfung: »none« (Vorsicht),\n" " »crc32«, »crc64« (Voreinstellung) oder »sha256«" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr "" " --ignore-check Integritätsprüfung beim Dekomprimieren\n" " nicht ausführen" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -667,7 +729,7 @@ " Beachten Sie den Speicherbedarf des Kompressors\n" " *und* des Dekompressors, wenn Sie 7-9 benutzen!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -676,7 +738,7 @@ " Kompressionsverhältnis zu verbessern. Dies beeinflusst\n" " den Speicherbedarf des Dekompressors nicht." -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -686,7 +748,7 @@ " wird, dann werden so viele Threads erzeugt, wie\n" " Prozessorkerne vorhanden sind" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -698,7 +760,7 @@ " Option, um die Blockgröße für die Kompression mit\n" " mehreren Threads zu setzen" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -709,7 +771,7 @@ " Kommata getrennten Intervalle an unkomprimierten\n" " Daten beginnen" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -723,17 +785,20 @@ " Eingabedaten den Prozess blockieren würde, dann werden\n" " alle noch ausstehenden Daten geschrieben" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=BEGRENZUNG\n" " --memlimit-decompress=BEGRENZUNG\n" +" --memlimit-mt-decompress=BEGRENZUNG\n" " -M, --memlimit=BEGRENZUNG\n" " Speicherbedarfsbegrenzung für Kompression,\n" " Dekompression oder beides setzen; die BEGRENZUNG\n" @@ -741,7 +806,7 @@ " Geben Sie 0 an, um die Grundeinstellungen zu\n" " verwenden." -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -751,7 +816,7 @@ " Fehler ausgegeben, statt die Einstellungen\n" " nach unten anzupassen." -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -759,7 +824,7 @@ "\n" " Benutzerdefinierte Filterkette für Kompression (alternativ zu Voreinstellung):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -784,38 +849,40 @@ " lc=ZAHL Anzahl der Literal-Kontext-Bits (0-4; 3)\n" " lp=ZAHL Anzahl der Literal-Positions-Bits (0-4; 0)\n" " pb=ZAHL Anzahl der Positions-Bits (0-4; 2)\n" -" mode=MODUS Kompressionsmodus (fast, normal; normal)\n" -" nice=ZAHL Nice-Länge eines Treffers (2-273; 64)\n" -" mf=NAME Algorithmus zum Auffinden von\n" -" Übereinstimmungen\n" -" (hc3, hc4, bt2, bt3, bt4; bt4)\n" -" depth=ZAHL Maximale Suchtiefe; 0=automatisch\n" -" (Voreinstellung)" +" mode=MODUS Kompressionsmodus (fast, normal; normal)\n" +" nice=ZAHL Nice-Länge eines Treffers (2-273; 64)\n" +" mf=NAME Algorithmus zum Auffinden von\n" +" Übereinstimmungen (hc3, hc4, bt2, bt3, bt4;\n" +" bt4)\n" +" depth=ZAHL Maximale Suchtiefe; 0=automatisch\n" +" (Voreinstellung)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=OPTIONEN] x86 BCJ-Filter (32-bit und 64-bit)\n" +" --arm[=OPTIONEN] ARM-BCJ-Filter\n" +" --armthumb[=OPTIONEN] ARM-Thumb-BCJ-Filter\n" +" --arm64[=OPTIONEN] ARM64-BCJ-Filter\n" " --powerpc[=OPTIONEN] PowerPC-BCJ-Filter (nur Big Endian)\n" " --ia64[=OPTIONEN] IA64-(Itanium-)BCJ-Filter\n" -" --arm[=OPTIONEN] ARM-BCJ-Filter (nur Little Endian)\n" -" --armthumb[=OPTIONEN] ARM-Thumb-BCJ-Filter (nur Little Endian)\n" " --sparc[=OPTIONEN] SPARC-BCJ-Filter\n" " Zulässige Optionen für alle BCJ-Filter:\n" " start=ZAHL Startversatz für Konversion\n" " (Voreinstellung=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -828,7 +895,7 @@ " dist=NUM Abstand zwischen den Bytes, die voneinander\n" " subtrahiert werden (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -836,7 +903,7 @@ "\n" " Andere Optionen:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -846,17 +913,17 @@ " -v, --verbose Ausführlicher Modus; wird diese Option zweimal\n" " angegeben, erfolgen noch ausführlichere Ausgaben" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn Warnungen verändern nicht den Exit-Status" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot Maschinenlesbare Meldungen ausgeben (nützlich für\n" " Skripte)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -865,7 +932,7 @@ " Speicherbedarfsbegrenzung anzeigen\n" " und das Programm beenden" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -874,7 +941,7 @@ " Optionen)\n" " -H, --long-help Diese lange Hilfe anzeigen und das Programm beenden" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -883,11 +950,11 @@ " -H, --long-help Die lange Hilfe (und damit auch fortgeschrittene\n" " Optionen) anzeigen" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version Versionsnummer anzeigen und beenden" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -900,17 +967,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "Melden Sie Fehler an <%s> (auf Englisch oder Finnisch).\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-Homepage: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "DIES IST EINE NICHT FÜR DEN PRODUKTIVBETRIEB GEEIGNETE ENTWICKLERVERSION." @@ -938,27 +1005,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Die Summe aus lc und lp darf höchstens 4 sein" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Der ausgewählte Algorithmus zum Auffinden von Übereinstimmungen braucht mindestens nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: Mit --format=raw ist --suffix=.SUF notwendig, falls nicht in die Standardausgabe geschrieben wird" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Dateiname hat unbekanntes Suffix, wird übersprungen" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Datei hat bereits das Suffix »%s«, wird übersprungen" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Ungültige Dateiendung" @@ -982,15 +1039,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Wert der Option »%s« muss im Bereich [%, %] sein" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Leerer Dateiname, wird übersprungen" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Komprimierte Daten können nicht vom Terminal gelesen werden" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Komprimierte Daten können nicht auf das Terminal geschrieben werden" @@ -1001,9 +1054,3 @@ #: src/common/tuklib_exit.c:43 msgid "Unknown error" msgstr "Unbekannter Fehler" - -#~ msgid "Sandbox is disabled due to incompatible command line arguments" -#~ msgstr "Sandbox ist wegen inkompatibler Befehlszeilenargumente deaktiviert" - -#~ msgid "Sandbox was successfully enabled" -#~ msgstr "Sandbox wurde erfolgreich aktiviert" Only in xz-5.4.3/po: eo.gmo Only in xz-5.4.3/po: eo.po Only in xz-5.4.3/po: es.gmo Only in xz-5.4.3/po: es.po Binary files xz-5.2.5/po/fi.gmo and xz-5.4.3/po/fi.gmo differ diff -ur xz-5.2.5/po/fi.po xz-5.4.3/po/fi.po --- xz-5.2.5/po/fi.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/fi.po 2023-05-04 17:32:20 @@ -1,118 +1,138 @@ # Finnish translations for xz package # Suomenkielinen käännös xz-paketille. # This file is put in the public domain. -# Lauri Nurmi , 2019, 2020. +# Lauri Nurmi , 2019, 2020, 2022. # msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2020-02-14 18:33+0200\n" +"Project-Id-Version: xz 5.4.0-pre1\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2022-11-10 16:17+0200\n" "Last-Translator: Lauri Nurmi \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.2.4\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.2\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Virheellinen argumentti valitsimelle --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Liian monta argumenttia valitsimelle --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0:aa voi käyttää vain viimeisenä alkiona valitsimen --block-list kanssa" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Tuntematon tiedostomuototyyppi" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Eheystarkistuksen tyyppiä ei tueta" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Vain yksi tiedosto voidaan antaa valitsimille ”--files” ja ”--files0”." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Ympäristömuuttuja %s sisältää liian monta argumenttia" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Tiivistämistuki on poistettu käytöstä käännösaikana" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Purkutuki on poistettu käytöstä käännösaikana" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "Lzip-tiedostojen (.lz) pakkaamista ei tueta" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: --format=raw vaatii, että --suffix=.PÄÄTE on annettu, ellei kirjoiteta vakiotulosteeseen" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Suodattimien enimmäismäärä on neljä" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Muistinkäytön raja on liian matala valituille suotimille." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Esiasetusten käyttö raw-tilassa ei ole suositeltavaa." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Esiasetusten tarkat asetukset saattavat vaihdella ohjelmistoversioiden välillä." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr ".lzma-muoto tukee vain LZMA1-suodinta" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1:tä ei voi käyttää .xz-muodon kanssa" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "Suodinketju on yhteensopimaton valitsimen --flush-timeout kanssa" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Vaihdetaan yksisäikeiseen tilaan valitsimen --flush-timeout vuoksi" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Käytetään enintään % säiettä." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Ei-tuettu suodinketju tai suotimen asetukset" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Purkaminen vaatii %s MiB muistia." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" msgstr "Pudotettiin säikeiden määrä %s säikeestä %s:een, jottei ylitettäisi %s MiB:n rajaa muistinkäytölle" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "Pudotettiin säikeiden määrä %s säikeestä yhteen. Automaattinen %s MiB:n raja muistinkäytölle ylittyy silti. Vaaditaan %s MiB muistia. Jatketaan kaikesta huolimatta." + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Siirrytään yhden säikeen tilaan, jottei ylitettäisi %s MiB:n rajaa muistinkäytölle" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Pudotettiin LZMA%c-sanaston koko %s MiB:stä %s MiB:hen, jottei ylitettäisi %s MiB:n rajaa muistinkäytölle" @@ -121,11 +141,11 @@ msgid "Error creating a pipe: %s" msgstr "Virhe putkea luodessa: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Hiekkalaatikon ottaminen käyttöön epäonnistui" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll()-kutsu epäonnistui: %s" @@ -140,195 +160,321 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Tiedosto on nähtävästi siirretty, ei poisteta" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Ei voi poistaa: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Tiedoston omistajaa ei voi asettaa: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Tiedoston ryhmää ei voi asettaa: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Tiedoston oikeuksia ei voi asettaa: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Virhe tiedoston tilalippujen noutamisessa vakiosyötteelle: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: On symbolinen linkki, ohitetaan" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: On hakemisto, ohitetaan" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Ei ole tavallinen tiedosto, ohitetaan" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Tiedostolla on setuid- tai setgid-bitti, ohitetaan" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Tiedostolla on sticky-bitti, ohitetaan" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Syötetiedostoon on yli yksi kova linkki, ohitetaan" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Tyhjä tiedostonimi, ohitetaan" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Virhe tilalippujen palauttamisessa vakiosyötteelle: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Virhe tiedoston tilalippujen noutamisessa vakiotulosteelle: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Virhe O_APPEND-lipun palauttamisessa vakiosyötteelle: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Tiedoston sulkeminen epäonnistui: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Siirtyminen epäonnistui yritettäessä luoda hajanaista tiedostoa: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Lukuvirhe: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Virhe tiedostossa siirtymisessä: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Odottamaton tiedoston loppu" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Kirjoitusvirhe: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Pois käytöstä" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "Fyysisen muistin kokonaismäärä (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "Fyysisen muistin kokonaismäärä (RAM):" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Muistinkäytön raja tiivistykselle: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "Suoritinsäikeiden määrä:" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "Muistinkäytön raja purkamiselle: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "Tiivistys:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "Purku:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "Monisäikeinen purku:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "-T0:n oletusarvo:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "Laitteiston tiedot:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "Muistinkäytön rajat:" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "Virrat:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "Lohkot:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "Tiivistetty koko:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "Tiivistämätön koko:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "Suhde:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "Tarkistus:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "Virran tasaus:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "Tarvittava muisti:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "Koot otsakkeissa:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "Tiedostojen määrä:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "Virta" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "Lohko" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "Lohkot" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "TiivSiirr." + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "Tv:tönSiirr." + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "TiivKoko" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "Tv:tönKoko" + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "Yht.Koko" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "Suhde" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "Tark." + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "Tark.arvo" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "Tasaus" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "Otsake" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "Liput" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "Muist.käyt." + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "Suodattimet" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Ei mitään" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Tuntematon-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Tuntematon-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Tuntematon-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Tuntematon-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Tuntematon-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Tuntematon-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Tuntematon-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Tuntematon-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Tuntematon-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Tuntematon-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Tuntematon-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Tuntematon-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Tiedosto on tyhjä" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Liian pieni kelvolliseksi .xz-tiedostoksi" @@ -337,125 +483,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Virrat Lohkot Tiivist. Tiivistämätön Suhde Tark. Tiedostonimi" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Virrat: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Lohkot: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Tiivistetty koko: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Tiivistämätön koko: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Suhde: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Tarkistus: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Virran tasaus: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Virrat:\n" -" Virta Lohkot TiivSiirr. Tv:tönSiirr. TiivKoko Tv:tönKoko Suhde Tark. Tasaus" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Lohkot:\n" -" Virta Lohko TiivSiirr. Tv:tönSiirr. Yht.Koko Tv:tönKoko Suhde Tark." - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " Tark.arvo%*s Otsake Liput TiivKoko Muist.käyt. Suotimet" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Tarvittava muisti: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Koot otsakkeissa: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Kyllä" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Ei" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " XZ Utilsin vähimmäisversio: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s tiedosto\n" msgstr[1] "%s tiedostoa\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Yhteensä:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Tiedostojen määrä: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list toimii vain .xz-tiedostoille (--format=xz tai --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list ei tue lukemista vakiosyötteestä" @@ -474,11 +536,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Nul-merkki kohdattiin tiedostonimiä lukiessa; oliko tarkoitus antaa valitsin ”--files0” eikä ”--files”?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Tiivistys ja purku --robot -valitsimen kanssa eivät ole vielä tuettuja." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Dataa ei voi lukea vakiosyötteestä kun tiedostonimiä luetaan vakiosyötteestä" @@ -486,68 +548,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Sisäinen virhe (ohjelmistovika)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Signaalinkäsittelimiä ei voi muodostaa" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Ei eheystarkastusta; ei varmenneta tiedoston eheyttä" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Ei-tuettu eheystarkastuksen tyyppi; ei varmenneta tiedoston eheyttä" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Muistinkäytön raja saavutettu" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Tiedostomuotoa ei tunnistettu" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Ei-tuetut valitsimet" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Tiivistetty data on turmeltunut" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Odottamaton syötteen loppu" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB muistia vaaditaan. Rajoitin on poistettu käytöstä." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB muistia vaaditaan. Raja on %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Suodinketju: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Komento ”%s --help” antaa lisää tietoa." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -558,15 +620,15 @@ "Tiivistä tai pura .xz-muotoisia TIEDOSTOja.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Pitkien valitsinten pakolliset argumentit ovat pakollisia myös lyhyille.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Toimintatila:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -578,7 +640,7 @@ " -t, --test testaa tiivistetyn tiedoston eheys\n" " -l, --list näytä tietoja .xz-tiedostoista" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -586,7 +648,7 @@ "\n" " Toimintomääreet:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -597,7 +659,7 @@ " linkit\n" " -c, --stdout kirjoita vakiotulosteeseen äläkä poista syötetiedostoja" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -605,7 +667,7 @@ " --single-stream pura vain ensimmäinen virta, ja ohita\n" " hiljaisesti mahdollinen jäljellä oleva syötedata" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -621,7 +683,7 @@ " tiedostonimet on päätettävä rivinvaihtomerkillä\n" " --files0[=TIED] kuten --files mutta käytä päättämiseen nul-merkkiä" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -629,23 +691,23 @@ "\n" " Tiedostomuodon ja tiivistyksen perusvalitsimet:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" -" -F, --format=MUOTO tuotettava tai luettava tiedostomuotoa; vaihtoehdot\n" -" ovat ”auto” (oletus), ”xz”, ”lzma” ja ”raw”\n" +" -F, --format=MUOTO tuotettava tai luettava tiedostomuoto; vaihtoehdot\n" +" ovat ”auto” (oletus), ”xz”, ”lzma”, ”lzip” ja ”raw”\n" " -C, --check=CHECK eheystarkastuksen tyyppi: ”none” (käytä varoen),\n" " ”crc32”, ”crc64” (oletus) tai ”sha256”" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check älä suorita eheystarkastusta purettaessa" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -654,7 +716,7 @@ " *ja* purun muistinkäyttö huomioon ennen kuin käytät\n" " arvoja 7–9!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -662,7 +724,7 @@ " -e, --extreme yritä parantaa tiivistyssuhdetta käyttämällä enemmän\n" " suoritinaikaa; ei vaikuta purkimen muistivaatimuksiin" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -670,7 +732,7 @@ " -T, --threads=MÄÄRÄ käytä enintää MÄÄRÄä säiettä; oletus on 1; asettamalla\n" " 0:ksi käytetään suoritinytimien määrän verran säikeitä" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -680,7 +742,7 @@ " aloita uusi .xz-lohko aina KOKO syötetavun jälkeen; käytä\n" " tätä säikeistetyn tiivistyksen lohkokoon asettamiseen" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -691,7 +753,7 @@ " käsitelty pilkuilla erotellut tavumäärät" # FIXME: tarvitaan kiva suomenkielinen termi block-verbille tässä merkityksessä -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -703,23 +765,25 @@ " edellisestä huuhtomisesta ja syötteen lukemisen\n" " jatkaminen pysähtyisi, kaikki odottava data huuhdellaan" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=RAJA\n" " --memlimit-decompress=RAJA\n" " -M, --memlimit=RAJA\n" -" aseta muistinkäytön raja tiivistykselle, purkamiselle\n" -" tai molemmille; RAJA on tavuja, %-osuus RAM-muistista\n" -" tai 0 oletusarvojen käyttämiseksi" +" aseta muistinkäytön raja tiivistykselle, purkamiselle,\n" +" säikeistetylle purkamisella tai näille kaikille; RAJA\n" +" on tavuja, %-osuus RAMista tai 0 oletusarvoille" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -727,7 +791,7 @@ " --no-adjust jos tiivistysasetukset ylittävät muistinkäytön rajan,\n" " anna virhe äläkä pudota asetuksia alaspäin" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -735,7 +799,7 @@ "\n" " Mukautettu suodinketju tiivistykselle (vaihtoehto esiasetuksille):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -765,29 +829,31 @@ " bt4; bt4)\n" " depth=LUKU enimmäishakusyvyys; 0=automaattinen (oletus)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=ASET] x86:n BCJ-suodin (32- ja 64-bittiset)\n" +" --arm[=ASET] ARMin BCJ-suodin\n" +" --armthumb[=ASET] ARM-Thumbin BCJ-suodin\n" +" --arm64[=ASET] ARM64:n BCJ-suodin\n" " --powerpc[=ASET] PowerPC:n BCJ-suodin (vain big endian)\n" " --ia64[=ASET] IA-64:n (Itanium) BCJ-suodin\n" -" --arm[=ASET] ARMin BCJ-suodin (vain little endian)\n" -" --armthumb[=ASET] ARM-Thumbin BCJ-suodin (vain little endian)\n" " --sparc[=ASET] SPARCin BCJ-suodin\n" " Kelvolliset ASETukset kaikille BCJ-suotimille:\n" " start=LUKU muunnoksien aloitussiirtymä (oletus=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -799,7 +865,7 @@ " dist=LUKU toisistaan vähennettävien tavujen\n" " välinen etäisyys (1–256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -807,7 +873,7 @@ "\n" " Muut valitsimet:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -815,15 +881,15 @@ " -q, --quiet vaienna varoitukset; kahdesti antamalla myös virheet\n" " -v, --verbose ole lavea; kahdesti antamalla vieläkin laveampi" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn älkööt varoitukset vaikuttako paluuarvoon" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot käytä koneluettavia viestejä (sopii skripteihin)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -831,7 +897,7 @@ " --info-memory näytä RAM-muistin kokonaismäärä ja parhaillaan\n" " vallitsevat muistinkäytön rajat, ja poistu" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -839,7 +905,7 @@ " -h, --help näytä lyhyt ohje (kertoo vain perusvalitsimet)\n" " -H, --long-help näytä tämä pitkä ohje ja poistu" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -847,11 +913,11 @@ " -h, --help näytä tämä lyhyt ohje ja poistu\n" " -H, --long-help näytä pitkä ohje (kertoo myös lisävalitsimet)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version näytä versionumero ja poistu" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -863,17 +929,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "Ilmoita ohjelmistovioista (suomeksi) osoitteeseen <%s>.\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s -kotisivu: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "TÄMÄ ON KEHITYSVERSIO, JOTA EI OLE TARKOITETTU TUOTANTOKÄYTTÖÖN." @@ -901,27 +967,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "lc:n ja lp:n summa ei saa olla yli 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Valittu täsmäävyydenetsin vaatii vähintään nice-arvon=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: --format=raw vaatii, että --suffix=.PÄÄTE on annettu, ellei kirjoiteta vakiotulosteeseen" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Tiedostonimen pääte on tuntematon, ohitetaan" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Tiedostolla on jo ”%s”-pääte, ohitetaan" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Virheellinen tiedostonimen pääte" @@ -945,15 +1001,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Valitsimen ”%s” arvon on oltava välillä [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Tyhjä tiedostonimi, ohitetaan" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Tiivistettyä dataa ei voi lukea päätteestä" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Tiivistettyä dataa ei voi kirjoittaa päätteeseen" @@ -965,8 +1017,44 @@ msgid "Unknown error" msgstr "Tuntematon virhe" +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Valittu täsmäävyydenetsin vaatii vähintään nice-arvon=%" + #~ msgid "Sandbox is disabled due to incompatible command line arguments" #~ msgstr "Hiekkalaatikko on poistettu käytöstä yhteensopimattomien komentoriviargumenttien vuoksi" #~ msgid "Sandbox was successfully enabled" #~ msgstr "Hiekkalaatikko otettiin onnistuneesti käyttöön" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Muistinkäytön raja tiivistykselle: " + +#~ msgid " Streams: %s\n" +#~ msgstr " Virrat: %s\n" + +#~ msgid " Blocks: %s\n" +#~ msgstr " Lohkot: %s\n" + +#~ msgid " Ratio: %s\n" +#~ msgstr " Suhde: %s\n" + +#~ msgid " Check: %s\n" +#~ msgstr " Tarkistus: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Virrat:\n" +#~ " Virta Lohkot TiivSiirr. Tv:tönSiirr. TiivKoko Tv:tönKoko Suhde Tark. Tasaus" + +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Lohkot:\n" +#~ " Virta Lohko TiivSiirr. Tv:tönSiirr. Yht.Koko Tv:tönKoko Suhde Tark." + +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " Tark.arvo%*s Otsake Liput TiivKoko Muist.käyt. Suotimet" Binary files xz-5.2.5/po/fr.gmo and xz-5.4.3/po/fr.gmo differ diff -ur xz-5.2.5/po/fr.po xz-5.4.3/po/fr.po --- xz-5.2.5/po/fr.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/fr.po 2023-05-04 17:32:20 @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: xz-5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2019-05-12 05:46+0200\n" "Last-Translator: Stéphane Aulery \n" "Language-Team: French \n" @@ -18,99 +18,121 @@ "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s : argument de l'option --block-list invalide" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s : trop d'arguments pour l'option --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 peut seulement être utilisé en dernier élément de --block-list" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s : Format de fichier inconnu" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s : Type de vérification d'intégrité inconnu" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Un seul fichier peut être spécifié avec `--files' ou `--files0'." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "La variable d'environnement %s contient trop d'arguments" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Le support de la compression à était désactivé lors de la compilaton" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Le support de la décompression a été désactivé lors de la compilation" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s : Avec --format=raw, --suffix=.SUF est nécessaire sauf lors de l'écriture vers stdout" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Le nombre maximal de filtres est quatre" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "La limite d'utilisation mémoire est trop basse pour la configuration de filtres donnée." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Utiliser un préréglage en mode `raw' est déconseillé." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Le détail des préréglages peut varier entre différentes versions du logiciel." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Le format .lzma ne prend en charge que le filtre LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "Le filtre LZMA1 ne peut être utilisé avec le format .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "La Chaine de filtre est incompatible avec --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Bascule en mode mono-processus à cause de --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Jusqu'à % threads seront utilisés." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Enchaînement ou options de filtres non pris en charge" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "La décompression nécessitera %s MiB de mémoire." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Nombre de threads réduit de %s à %s pour ne pas dépasser la limite d'utilisation mémoire de %s MiB" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" msgstr "Nombre de threads réduit de %s à %s pour ne pas dépasser la limite d'utilisation mémoire de %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Taille du dictionnaire LZMA%c réduite de %s MiB à %s MiB pour ne pas dépasser la limite d'utilisation mémoire de %s MiB" @@ -120,11 +142,11 @@ msgid "Error creating a pipe: %s" msgstr "Impossible de créer un tube anonyme (pipe) : %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Echec de l'activation de la sandboxe" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s : L'appel à la fonction poll() a échoué : %s" @@ -139,27 +161,27 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s : Le fichier a apparemment été déplacé, suppression annulée" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s : Impossible de supprimer : %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s : Impossible de modifier le propriétaire du fichier : %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s : Impossible de modifier le groupe propriétaire du fichier : %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s : Impossible de modifier les permissions du fichier : %s" @@ -172,172 +194,318 @@ # - make it more difficult to look up in search engines; it might happen one in # a million times, if we dilute the error message in 20 languages, it will be # almost impossible to find an explanation and support for the error. -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Echec de la lecture du drapeau d'état du fichier depuis la sortie standard : %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s est un lien symbolique : ignoré" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s est un répertoire : ignoré" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s n'est pas un fichier régulier : ignoré" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s : Le fichier possède les bits `setuid' ou `setgid' : ignoré" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s : Le fichier possède le bit `sticky' : ignoré" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s : Le fichier d'entrée a plus d'un lien matériel : ignoré" +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Nom de fichier vide, ignoré" + # See note from translator above titled "file status flags". -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Erreur de restauration du drapeau d'état de l'entrée standard : %s" # See note from translator above titled "file status flags". -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Erreur de lecture du drapeau d'état du fichier depuis la sortie standard : %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Impossible de rétablir le drapeau O_APPEND sur la sortie standard : %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s : Impossible de fermer le fichier : %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s : Impossible de se déplacer dans le fichier pour créer un 'sparse file' : %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s : Erreur d'écriture : %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s : Impossible de se déplacer dans le fichier : %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s : Fin de fichier inattendue" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s : Erreur d'écriture : %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Désactivé" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "Quantité totale de mémoire physique (RAM) : " -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Limite d'utilisation pour la compression : " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "Limite d'utilisation pour la décompression : " +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "Limite d'utilisation mémoire atteinte" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " Taille données avec compression : %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " Taille données sans compression : %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " Octets de rembourrage du flux : %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " Mémoire nécessaire : %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " Tailles stockées dans l'en-tête : %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " Nombre de fichiers : %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "Totaux :" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Aucune" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Inconnue-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Inconnue-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Inconnue-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Inconnue-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Inconnue-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Inconnue-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Inconnue-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Inconnue-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Inconnue-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Inconnue-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Inconnue-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Inconnue-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s : Le fichier est vide" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s : Trop petit pour être un fichier xz valide." @@ -346,125 +514,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Flux Blocs Compressé Décompressé Ratio Vérif. Nom de fichier" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Flux : %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blocs : %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Taille données avec compression : %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Taille données sans compression : %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Ratio : %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Vérification : %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Octets de rembourrage du flux : %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Flux :\n" -" Flux Blocs PositionComp PositionDécomp TailleComp TailleDécomp Ratio Vérif. Bourrage" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blocs :\n" -" Flux Bloc PositionComp PositionDécomp TailleTot TailleDécomp Ratio Vérif." - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " ValVérif %*sEn-tête Drapeaux TailleComp UtilMém Filtres" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Mémoire nécessaire : %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Tailles stockées dans l'en-tête : %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Oui" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Non" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Version minimale de XZ Utils : %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s fichier\n" msgstr[1] "%s fichiers\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Totaux :" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Nombre de fichiers : %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list ne marche que sur les fichiers .xz (--format=xz ou --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list est incompatible avec la lecture sur l'entrée standard" @@ -483,11 +567,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s : Caractère NULL détecté lors de la lecture des noms de fichiers ; peut-être pensiez-vous à `--files0' plutot qu'a `--files' ?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "La compression et la décompression ne marchent pas encore avec --robot." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Impossible de lire à la fois les données et les noms de fichiers depuis l'entrée standard" @@ -495,68 +579,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s : " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Erreur interne (bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Impossible d'installer le gestionnaire de signaux" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Pas de données de vérification d'intégrité ; vérification non effectuée" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Méthode de vérification d'intégrité non prise en charge ; vérification non effectuée" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Limite d'utilisation mémoire atteinte" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Format de fichier inconnu" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Options non prises en charge" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Les données compressées sont corrompues" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Fin des données inattendue " -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB de mémoire sont nécessaires. La limite est désactivée." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB de mémoire sont nécessaires, la limite étant %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s : Enchaînement de filtres : %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Éxécutez `%s --help' pour obtenir davantage d'informations." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -567,17 +651,17 @@ "Compresse ou decompresse FICHIER(s) au format .xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Les arguments obligatoires pour les options longues le sont aussi pour les\n" "options courtes.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Mode d'opération :\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -589,7 +673,7 @@ " -t, --test tester l'intégrité du fichier compressé\n" " -l, --list lister les informations sur les fichiers .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -597,7 +681,7 @@ "\n" " Modificateurs :\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -609,7 +693,7 @@ " -c, --stdout écrire sur la sortie standard et ne pas supprimer les\n" " fichiers d'entrée" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -617,7 +701,7 @@ " --single-stream décompresser uniquement le premier flux et ignorer\n" " silencieusement les données éventuellement restantes" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -633,7 +717,7 @@ " et doivent être suivis d'un caractère retour à la ligne\n" " --files0[=FILE] comme --files mais avec un caractère null comme séparateur" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -641,10 +725,16 @@ "\n" " Options basiques de format de fichier et de compression :\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 +#, fuzzy +#| msgid "" +#| " -F, --format=FMT file format to encode or decode; possible values are\n" +#| " `auto' (default), `xz', `lzma', and `raw'\n" +#| " -C, --check=CHECK integrity check type: `none' (use with caution),\n" +#| " `crc32', `crc64' (default), or `sha256'" msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" @@ -653,13 +743,13 @@ " -C, --check=CHECK type de vérification d'intégrité : `none' (à utiliser avec\n" " précaution), `crc32', `crc64' (par défaut) ou `sha256'" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr "" " --ignore-check ne pas vérifier l'intégrité des données lors de\n" " la décompression" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -668,7 +758,7 @@ " l'utilisation mémoire du compresseur *et* du décompresseur\n" " avant d'utiliser 7, 8 ou 9 !" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -677,7 +767,7 @@ " de temps processeur ;\n" " n'affecte pas les besoins mémoire du décompresseur" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -686,7 +776,7 @@ " valeur 0 est spéciale et équivaut au nombre de processeurs\n" " de la machine" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -696,7 +786,7 @@ " débuter un bloc XZ après chaque TAILLE octets de données\n" " d'entrée ; ce réglage sert pour la compression paralléle" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -706,7 +796,7 @@ " débuter des blocs XZ après les TAILLES octets de données\n" " spécifiées avec des virgules pour séparateur" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -718,14 +808,22 @@ " depuis le dernier flush et que la lecture est bloquée,\n" " toutes les données en attente snt écrites" -#: src/xz/message.c:1172 -#, no-c-format +#: src/xz/message.c:1043 +#, fuzzy, no-c-format +#| msgid "" +#| " --memlimit-compress=LIMIT\n" +#| " --memlimit-decompress=LIMIT\n" +#| " -M, --memlimit=LIMIT\n" +#| " set memory usage limit for compression, decompression,\n" +#| " or both; LIMIT is in bytes, % of RAM, or 0 for defaults" msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" @@ -734,7 +832,7 @@ " décompression ou les deux ; LIMIT est en octets,\n" " pourcentage de RAM, ou 0 pour la valeur par défaut" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -743,7 +841,7 @@ " d'utilisation mémoire, renvoyer une erreur plutôt que de\n" " diminuer les réglages" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -751,7 +849,7 @@ "\n" " Chaîne de filtres de compression personnalisée (en lieu des préréglages) :" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -780,14 +878,26 @@ " depth=NUM profondeur de recherche maximale ;\n" " 0=automatique (par défaut)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 +#, fuzzy +#| msgid "" +#| "\n" +#| " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +#| " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +#| " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" +#| " --arm[=OPTS] ARM BCJ filter (little endian only)\n" +#| " --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +#| " --sparc[=OPTS] SPARC BCJ filter\n" +#| " Valid OPTS for all BCJ filters:\n" +#| " start=NUM start offset for conversions (default=0)" msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" @@ -802,7 +912,7 @@ " OPTS valides pour tous les filtres BCJ :\n" " start=NUM position de début de la conversion (défaut=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -814,7 +924,7 @@ " dist=NUM distance entre les octets soustraits les\n" " uns aux autres (1-256 ; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -822,7 +932,7 @@ "\n" " Autres options :\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -831,17 +941,17 @@ " aussi masquer les erreurs\n" " -v, --verbose être bavard ; spécifier deux fois pour l'être davantage" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn les avertissements ne modifient pas le code de sortie" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot utiliser des messages lisibles par un programme\n" " (utile pour les scripts)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -849,7 +959,7 @@ " --info-memory afficher la quantité totale de RAM ainsi que la limite\n" " actuelle d'utilisation mémoire puis quitter" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -857,7 +967,7 @@ " -h, --help afficher l'aide courte (ne liste que les options de base)\n" " -H, --long-help afficher l'aide longue (ceci) puis quitter" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -865,11 +975,11 @@ " -h, --help afficher l'aide courte (ceci) puis quitter\n" " -H, --long-help afficher l'aide longue (liste aussi les options avancées)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version afficher le numéro de version puis quitter" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -881,19 +991,19 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" "Signaler les bogues à <%s> (en anglais ou en finnois).\n" "Signaler les bogues de traduction à .\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Page du projet %s : <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "CECI EST UNE VERSION DE DEVELOPPEMENT QUI NE DOIT PAS ÊTRE UTILISEE EN PRODUCTION." @@ -921,27 +1031,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "La somme de lc et lp ne doit pas dépasser 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Le `match finder' choisi nécessite au moins nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s : Avec --format=raw, --suffix=.SUF est nécessaire sauf lors de l'écriture vers stdout" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s : Le fichier a un suffixe inconnu, ignoré" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s : Le fichier a déjà le suffixe '%s', ignoré" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Suffixe de nom de fichier invalide" @@ -965,15 +1065,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "La valeur de l'option '%s' doit être inclue entre % et %" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Nom de fichier vide, ignoré" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Les données compressées ne peuvent pas être lues depuis un terminal" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Les données compressées ne peuvent pas être écrites dans un terminal" @@ -990,6 +1086,48 @@ #~ msgid "Sandbox was successfully enabled" #~ msgstr "La sandboxe a été activée avec succès" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Limite d'utilisation pour la compression : " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " Flux : %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " Blocs : %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " Ratio : %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " Vérification : %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Flux :\n" +#~ " Flux Blocs PositionComp PositionDécomp TailleComp TailleDécomp Ratio Vérif. Bourrage" + +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Blocs :\n" +#~ " Flux Bloc PositionComp PositionDécomp TailleTot TailleDécomp Ratio Vérif." + +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " ValVérif %*sEn-tête Drapeaux TailleComp UtilMém Filtres" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Le `match finder' choisi nécessite au moins nice=%" #~ msgid "Error setting O_NONBLOCK on standard input: %s" #~ msgstr "Impossible d'établir le drapeau O_NONBLOCK sur la sortie standard : %s" Only in xz-5.4.3/po: hr.gmo Only in xz-5.4.3/po: hr.po Binary files xz-5.2.5/po/hu.gmo and xz-5.4.3/po/hu.gmo differ diff -ur xz-5.2.5/po/hu.po xz-5.4.3/po/hu.po --- xz-5.2.5/po/hu.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/hu.po 2023-05-04 17:32:20 @@ -1,117 +1,137 @@ # Hungarian translation for xz. # This file is put in the public domain. # -# Meskó Balázs , 2019. +# Meskó Balázs , 2019, 2022. msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2019-11-18 09:57+0100\n" +"Project-Id-Version: xz 5.4.0-pre1\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2022-11-10 12:13+0100\n" "Last-Translator: Meskó Balázs \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"plural-forms: nplurals=2; plural=(n != 1);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 19.08.2\n" +"X-Generator: Poedit 3.1.1\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Érvénytelen argumentum a --block-list kapcsolóhoz" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Túl sok argumentum a --block-list kapcsolóhoz" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "A 0 csak utolsó elemként használható a --block-list kapcsolónál" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Ismeretlen fájlformátumtípus" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Nem támogatott integritás-ellenőrzési típus" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Csak egy fájl adható meg a „--files” vagy „--files0” kapcsolóknál." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "A(z) %s környezeti változó túl sok argumentumot tartalmaz" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "A tömörítési támogatás ki lett kapcsolva fordítási időben" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "A kibontási támogatás ki lett kapcsolva fordítási időben" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "Az lzip-fájlok (.lz) tömörítése nem támogatott" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: --format=raw esetén, --suffix=.SUF szükséges, hacsak nem a szabványosra kimenetre ír" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "A szűrők legnagyobb száma négy" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "A memóriahasználat túl alacsony a megadott szűrőbeállításokhoz." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Az előbeállítások használata nyers módban nem javasolt." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Az előbeállítások pontos beállításai különbözhetnek a szoftververziók között." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Az .lzma formátum csak az LZMA1 szűrőt támogatja" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "Az LZMA1 nem használható az .xz formátummal" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "A szűrőlánc nem kompatibilis a --flush-timeout kapcsolóval" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Egyszálú módra váltás a --flush-timeout kapcsoló miatt" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Legfeljebb % szál használata." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Nem támogatott szűrőlánc vagy szűrőkapcsolók" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "A kibontáshoz %s MiB memória szükséges." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" -msgstr "A szálak számának módosítása erről: %s, erre: %s, hogy ne lépje túl a(z) %s MiB-os korlátot" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "A szálak számának csökkentése erről: %s, erre: %s, hogy ne lépje túl a(z) %s MiB-os korlátot" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "A szálak számának csökkentése erről: %s, egyre. A(z) %s MiB-os automatikus memóriahasználati korlát így is túl lett lépve. %s MiB memória szükséges. Ennek ellenére folytatás mindenképpen." + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Egyszálú módra váltás, hogy ne lépje túl a(z) %s MiB-os memóriahasználati korlátot" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Az LZMA%c szótár méretének módosítása erről: %s MiB, erre: %s MiB, hogy ne lépje túl a(z) %s MiB-os korlátot" @@ -120,11 +140,11 @@ msgid "Error creating a pipe: %s" msgstr "Hiba a csővezeték létrehozásakor: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "A homokozó engedélyezése sikertelen" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() sikertelen: %s" @@ -139,195 +159,321 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Úgy tűnik, hogy a fájl át lett helyezve, nincs eltávolítás" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Nem távolítható el: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: A fájl tulajdonosa nem adható meg: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: A fájl csoportja nem adható meg: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: A fájl jogosultságai nem adhatók meg: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Hiba a fájl állapotjelzőinek lekérdezésekor a szabványos bemenetről: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Szimbolikus link, kihagyás" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Könyvtár, kihagyás" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Nem szabályos fájl, kihagyás" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: A fájlon setuid vagy setgid bit van beállítva, kihagyás" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: A fájlon sticky bit van beállítva, kihagyás" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: A bemeneti fájlhoz több mint egy hard link tartozik, kihagyás" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Üres fájlnév, kihagyás" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Hiba a fájl állapotjelzőinek visszaállításakor a szabványos bemenetre: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Hiba a fájl állapotjelzőinek lekérdezésekor a szabványos kimenetről: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Hiba az O_APPEND visszaállításakor a szabványos kimenetre: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: A fájl lezárása sikertelen: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: A pozícionálás sikertelen a ritka fájl létrehozásának kísérletekor: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Olvasási hiba: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Hiba a fájlban pozícionáláskor: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Váratlan fájlvég" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Írási hiba: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Letiltva" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "Az összes fizikai memória (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "Fizikai memória (RAM) mennyisége:" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Memóriahasználat korlátja tömörítéskor: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "Processzorszálak száma:" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "Memóriahasználat korlátja kibontáskor: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "Tömörítés:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "Kibontás:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "Többszálás kibontás:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "A -T0 alapértelmezése:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "Hardverjellemzők:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "Memóriahasználat korlátja:" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "Adatfolyamok:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "Blokkok:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "Tömörített méret:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "Kibontott méret:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "Arány:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "Ellenőrzés:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "Adatfolyam kerete:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "Szükséges memória:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "Méretek a fejlécekben:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "Fájlok száma:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "Adatfolyam" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "Blokk" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "Blokkok" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "Tömörített eltolás" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "Kibontott eltolás" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "Tömörített méret" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "Kibontott méret" + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "Teljes méret" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "Arány" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "Ellenőrzés" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "Ellenőrzőérték" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "Keret" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "Fejléc" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "Jelzők" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "Memóriahasználat" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "Szűrők" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Nincs" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Névtelen-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Névtelen-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Névtelen-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Névtelen-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Névtelen-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Névtelen-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Névtelen-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Névtelen-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Névtelen-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Névtelen-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Névtelen-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Névtelen-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: A fájl üres" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Túl kicsi, hogy érvényes .xz fájl legyen" @@ -336,125 +482,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Folyam Blokkok Tömörített Kibontott Arány Ellenőrzés Fájlnév" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Adatfolyamok: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blokkok: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Tömörített méret: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Kibontott méret: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Arány: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Ellenőrzés: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Adatfolyam kerete: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Adatfolyamok:\n" -" Folyam Blokkok TömEltolás KibEltolás TömMéret KibMéret Arány Ellenőrzés Keret" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blokkok:\n" -" Folyam Blokkok TömEltolás KibEltolás TömMéret KibMéret Arány Ellenőrzés" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " ÉrtékEll %*s Fejléc Jelzők TömMéret MemHasználat Szűrők" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Szükséges memória: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Méretek a fejlécekben: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Igen" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Nem" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Legkisebb XZ Utils verzió: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s fájl\n" msgstr[1] "%s fájl\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Összesen:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Fájlok száma: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "A --list csak .xz fájlokkal működik (--format=xz vagy --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "A --list nem támogatja a szabványos bemenetről beolvasást" @@ -473,11 +535,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Null karakter található a fájlnevek olvasásakor; talán a „--files0” kapcsolóra gondolt a „--files” helyett?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "A tömörítés és kibontás még nem támogatott a --robot kapcsolóval." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Az adatok nem olvashatók be a szabványos bemenetről a fájlnevek olvasásakor" @@ -485,68 +547,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Belső hiba (bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "A szignálkezelők nem hozhatók létre" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Nincs integritás-ellenőrzés; a fájl épsége nem lesz ellenőrizve" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Nem támogatott integritás-ellenőrzési típus; a fájl épsége nem lesz ellenőrizve" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Memóriahasználat korlátja elérve" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "A fájlformátum nem felismert" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Nem támogatott kapcsolók" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "A tömörített adatok megsérültek" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "A bemenet váratlanul véget ért" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB memória szükséges. A korlátozás letiltva." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB memória szükséges. A korlát %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Szűrőlánc: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "További információkért adja ki a következő parancsot: „%s --help”." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -557,15 +619,15 @@ ".xz formátumú FÁJLok tömörítése vagy kibontása.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "A hosszú kapcsolók kötelező argumentumai a rövid kapcsolók esetén is kötelezők.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Működési mód:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -577,7 +639,7 @@ " -t, --test tömörített fájl épségének tesztelése\n" " -l, --list információk kiírása az .xz fájlokról" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -585,7 +647,7 @@ "\n" " Műveleti módosítók:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -597,7 +659,7 @@ " -c, --stdout írás a szabványos kimenetre írás, és nem törli a\n" " bemeneti fájlokat" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -605,7 +667,7 @@ " --single-stream csak az első adatfolyam kibontása, és a\n" " lehetséges hátralévő bemeneti adatok mellőzése" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -616,13 +678,14 @@ msgstr "" " --no-sparse ne hozzon létre ritka fájlokat kibontáskor\n" " -S, --suffix=.SUF a „.SUF” utótag használata a tömörített fájlokon\n" -" --files[=FÁJL] fájlnevek beolvasása a FÁJLból; ha a FÁJL nincs megadva,\n" -" akkor a fájlnevek a szabványos bemenetről lesznek\n" -" beolvasva; a fájlneveket újsor karakterrel kell zárni\n" -" --files0[=FÁJL] mint a --files, de a null karakter használata\n" -" elválasztóként" +" --files[=FÁJL] fájlnevek beolvasása a FÁJLból; ha a FÁJL nincs\n" +" megadva, akkor a fájlnevek a szabványos bemenetről\n" +" lesznek beolvasva; a fájlneveket újsor karakterrel\n" +" kell zárni\n" +" --files0[=FÁJL] mint a --files, de a null karaktert használja\n" +" használja elválasztóként" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -630,24 +693,24 @@ "\n" " Alapvető fájlformátum és tömörítési beállítások:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" " -F, --format=FMT a kódoláshoz vagy dekódoláshoz használt fájlformátum;\n" " lehetséges értékek „auto” (alapértelmezett), „xz”,\n" -" „lzma” és „raw”\n" +" „lzma”, „lzip” és „raw”\n" " -C, --check=ELL integritás-ellenőrzés típusa: „none” (óvatosan használja),\n" " „crc32”, „crc64” (alapértelmezett) vagy „sha256”" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check kibontáskor ne ellenőrizze az épséget" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -656,7 +719,7 @@ " a 7-9 használata előtt vegye figyelembe a tömörítő\n" " *és* kibontó memóriahasználatát!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -664,7 +727,7 @@ " -e, --extreme a tömörítési arány javítási kísérlete több CPU-idő\n" " használatával; nincs hatással a kibontó memóriaigényére" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -673,7 +736,7 @@ " állítsa 0-ra, hogy annyi szálat használjon, amennyi\n" " processzormag áll rendelkezésre" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -683,7 +746,7 @@ " új .xz blokk indítása minden MÉRETnyi bájt bemenet után;\n" " a többszálas tömörítés blokkméretének megadásához" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -693,7 +756,7 @@ " új .xz blokk indítása a vesszőkkel felsorolva megadott\n" " méretű tömörítetlen adatszakaszok után" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -705,23 +768,27 @@ " telt el az előző kiírástól, és a bemenetolvasás\n" " blokkolna, akkor minden adat ki lesz írva" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=KORLÁT\n" " --memlimit-decompress=KORLÁT\n" +" --memlimit-mt-decompress=KORLÁT\n" " -M, --memlimit=KORLÁT\n" " a memóriahasználati korlát megadása tömörítéshez,\n" -" kibontáshoz vagy mindkettőhöz; a KORLÁT bájtokban van\n" -" megadva, a RAM %-ában, vagy 0 az alapértelmezéshez" +" kibontáshoz, többszálú kibontású vagy mindháromhoz; a\n" +" KORLÁT bájtokban van megadva, a RAM %-ában, vagy 0 az\n" +" alapértelmezéshez" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -730,7 +797,7 @@ " korlátot, akkor hibát fog adni a beállítások lefelé\n" " állítása helyett" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -738,7 +805,7 @@ "\n" " Egyéni szűrőlánc a tömörítéshez (alternatíva az előbeállításokra):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -768,30 +835,32 @@ " depth=SZÁM legnagyobb keresési mélység; 0=automatikus\n" " (alapértelmezett)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=KAPCS] x86 BCJ szűrő (32 bites és 64 bites)\n" +" --arm[=KAPCS] ARM BCJ szűrő\n" +" --armthumb[=KAPCS] ARM-Thumb BCJ szűrő\n" +" --arm64[=KAPCS] ARM64 BCJ szűrő\n" " --powerpc[=KAPCS] PowerPC BCJ szűrő (csak big endian esetén)\n" " --ia64[=KAPCS] IA-64 (Itanium) BCJ szűrő\n" -" --arm[=KAPCS] ARM BCJ szűrő (csak little endian esetén)\n" -" --armthumb[=KAPCS] ARM-Thumb BCJ szűrő (csak little endian esetén)\n" " --sparc[=KAPCS] SPARC BCJ szűrő\n" " Érvényes KAPCS az összes BCJ szűrőhöz:\n" " start=SZÁM kezdési eltolás az átalakításokhoz\n" -" (alapértelmezett=0)" +" (alapértelmezett=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -804,7 +873,7 @@ " dist=SZÁM az egymásból kivont bájtok közti\n" " távolság (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -812,7 +881,7 @@ "\n" " Egyéb kapcsolók:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -822,19 +891,19 @@ " -v, --verbose legyen bőbeszédű; adja meg kétszer, hogy még bőbeszédűbb\n" " legyen" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr "" " -Q, --no-warn a figyelmeztetések nem befolyásolják a kilépési\n" " állapotkódot" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot géppel értelmezhető üzenetek használata\n" " (parancsfájlok esetén hasznos)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -842,7 +911,7 @@ " --info-memory az összes RAM mennyiségének és a jelenlegi\n" " memóriahasználati korlátok megjelenítése, és kilépés" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -850,7 +919,7 @@ " -h, --help a rövid súgó megjelenítése (csak az alapvető kapcsolók)\n" " -H, --long-help ezen hosszú súgó megjelenítése, és kilépés" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -858,11 +927,11 @@ " -h, --help ezen rövid súgó megjelenítése, és kilépés\n" " -H, --long-help a hosszú súgó megjelenítése (speciális kapcsolókhoz)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version a verziószám kiírása és kilépés" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -874,17 +943,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "Ide jelentse a hibákat: <%s> (angolul vagy finnül).\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s honlap: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "EZ EGY FEJLESZTŐI VÁLTOZAT, NEM ÉLES HASZNÁLATRA SZÁNT." @@ -912,27 +981,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Az lc és lp összege nem haladhatja meg a 4-et" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "A kiválasztott egyezéskeresőhöz legalább nice=% szükséges" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: --format=raw esetén, --suffix=.SUF szükséges, hacsak nem a szabványosra kimenetre ír" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: A fájlnév utótagja ismeretlen, kihagyás" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: A(z) „%s” fájlnak már van utótagja, kihagyás" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Érvénytelen fájlnév utótag" @@ -956,15 +1015,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "A(z) „%s” kapcsoló értékének a(z) [%, %] tartományban kell lennie" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Üres fájlnév, kihagyás" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "A tömörített adatokat nem lehet beolvasni a terminálból" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "A tömörített adatokat nem lehet kiírni a terminálba" @@ -976,8 +1031,44 @@ msgid "Unknown error" msgstr "Ismeretlen hiba" +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "A kiválasztott egyezéskeresőhöz legalább nice=% szükséges" + #~ msgid "Sandbox is disabled due to incompatible command line arguments" #~ msgstr "A homokozó ki lett kapcsolva a nem kompatibilis parancssori argumentumok miatt" #~ msgid "Sandbox was successfully enabled" #~ msgstr "A homokozó sikeresen engedélyezve" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Memóriahasználat korlátja tömörítéskor: " + +#~ msgid " Streams: %s\n" +#~ msgstr " Adatfolyamok: %s\n" + +#~ msgid " Blocks: %s\n" +#~ msgstr " Blokkok: %s\n" + +#~ msgid " Ratio: %s\n" +#~ msgstr " Arány: %s\n" + +#~ msgid " Check: %s\n" +#~ msgstr " Ellenőrzés: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Adatfolyamok:\n" +#~ " Folyam Blokkok TömEltolás KibEltolás TömMéret KibMéret Arány Ellenőrzés Keret" + +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Blokkok:\n" +#~ " Folyam Blokkok TömEltolás KibEltolás TömMéret KibMéret Arány Ellenőrzés" + +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " ÉrtékEll %*s Fejléc Jelzők TömMéret MemHasználat Szűrők" Binary files xz-5.2.5/po/it.gmo and xz-5.4.3/po/it.gmo differ diff -ur xz-5.2.5/po/it.po xz-5.4.3/po/it.po --- xz-5.2.5/po/it.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/it.po 2023-05-04 17:32:20 @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2019-03-04 14:21+0100\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" @@ -21,99 +21,121 @@ "X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: argomento non valido per --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: troppi argomenti per --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 può essere usato solo come ultimo elemento in --block-list" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: tipo di formato del file sconosciuto" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: tipo di controllo integrità non supportato" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Solo un file può essere specificato con \"--files\" o \"--files0\"." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "La variabile d'ambiente %s contiene troppi argomenti" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Il supporto alla compressione è stato disabilitato in fase di compilazione" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Il supporto alla decompressione è stato disabilitato in fase di compilazione" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: con --format=raw, --suffix=.SUF è richiesto a meno che non si scriva sullo stdout" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Il numero massimo di filtri è quattro" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Il limite dell'uso della memoria è troppo basso per l'impostazione del filtro dato." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Non è consigliato usare un preset nella modalità raw." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Le opzioni esatte per i preset possono variare tra le versioni del software." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Il formato .lzma supporta solo il filtro LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 non può essere usato con il formato .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "La catena di filtri non è compatibile con --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Passaggio a modalità singolo thread poiché viene usato --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Vengono usati circa % thread." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Catena di filtri od opzioni del filtro non supportata" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "L'estrazione necessita di %s MiB di memoria." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Regolato il numero di thread da %s a %s per non eccedere il limite di utilizzo della memoria di %s MiB" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" msgstr "Regolato il numero di thread da %s a %s per non eccedere il limite di utilizzo della memoria di %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Regolata la dimensione del dizionario LZMA%c da %s MiB a %s MiB per non superare il limite dell'uso della memoria di %s MiB" @@ -123,11 +145,11 @@ msgid "Error creating a pipe: %s" msgstr "Errore nel creare una pipe: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Abilitazione modalità sandbox non riuscita" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() non riuscita: %s" @@ -142,195 +164,341 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: sembra che il file sia stato spostato, non viene rimosso" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: impossibile rimuovere: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: impossibile impostare il proprietario del file: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: impossibile impostare il gruppo del file: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: impossibile impostare i permessi del file: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Errore nel recuperare le flag di stato del file dallo standard input: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: è un collegamento simbolico, viene saltato" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: è una directory, viene saltata" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: non è un file regolare, viene saltato" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: il file ha il bit setuid o setgid impostato, viene saltato" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: il file ha lo sticky bit impostato, viene saltato" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: il file di input ha più di un collegamento fisico, viene saltato" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Nome file vuoto, viene saltato" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Errore nel ripristinare le flag di stato sullo standard input: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Errore nel recuperare le flag di stato del file dallo standard output: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Errore nel ripristinare la flag O_APPEND sullo standard output: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: chiusura del file non riuscita: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: posizionamento non riuscito nel tentativo di creare un file sparso: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: errore di lettura: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: errore nel cercare il file: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: fine del file inaspettata" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: errore di scrittura: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Disabilitato" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "Quantità totale di memoria fisica (RAM): " -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Limite utilizzo memoria per la compressione: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "Limite utilizzo memoria per l'estrazione: " +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "Limite di utilizzo della memoria raggiunto" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " Dim. compresso: %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " Dim. estratto: %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " Padding dello stream: %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " Memoria necessaria: %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " Dim. negli header: %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " Numero di file: %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "Totali:" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Nessuno" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Sconosc2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Sconosc3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Sconosc5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Sconosc6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Sconosc7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Sconosc8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Sconosc9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Sconosc11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Sconosc12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Sconosc13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Sconosc14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Sconosc15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: il file è vuoto" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: troppo piccolo per essere un file .xz valido" @@ -339,125 +507,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr " Strm Blocc. Compresso Estratto Rapp. Contr Nome file" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Stream: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blocchi: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Dim. compresso: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Dim. estratto: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Rapporto: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Controllo: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Padding dello stream: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -"Stream:\n" -" Stream Blocc. Offset comp. Offset estr. Dim. comp. Dim. estratto Rapp. Contr Padding" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blocchi:\n" -" Stream Blocc. Offset comp. Offset estratto Dim. tot. Dim. estratto Rapp. Contr" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " Val.cont %*s Header Flag Dim.compr. Uso mem. Filtri" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Memoria necessaria: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Dim. negli header: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Sì" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "No" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Versione \"XZ Utils\" minima: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s file\n" msgstr[1] "%s file\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Totali:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Numero di file: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list funziona solamente con file .xz (--format=xz o --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list non è in grado di leggere dallo standard input" @@ -476,11 +560,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: nessun carattere trovato durante la lettura dei nomi dei file; forse si intendeva usare \"--files0\" invece di \"--files\"?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "La compressione e l'estrazione con --robot non sono ancora supportate." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Impossibile leggere i dati dallo standard input durante la lettura dei nomi dei file dallo standard input" @@ -488,68 +572,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Errore interno (bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Impossibile stabilire i gestori dei segnali" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Nessun controllo d'integrità; l'integrità del file non viene verificata" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Tipo di controllo di integrità non supportato; l'integrità del file non viene verificata" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Limite di utilizzo della memoria raggiunto" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Formato di file non riconosciuto" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Opzioni non supportate" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "I dati compressi sono danneggiati" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Fine dell'input non attesa" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB di memoria sono richiesti. Il limite è disabilitato." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB di memoria sono richiesti. Il limite è %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: catena di filtri: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Provare \"%s --help\" per maggiori informazioni." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -560,15 +644,15 @@ "Comprime o estrae i FILE nel formato .xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Gli argomenti obbligatori per le opzioni lunghe lo sono anche per quelle brevi.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Modalità di operazione:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -580,7 +664,7 @@ " -t, --test Verifica l'integrità dei file compressi\n" " -l, --list Elenca informazioni sui file .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -588,7 +672,7 @@ "\n" " Modificatori di operazioni:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -599,7 +683,7 @@ " collegamenti\n" " -c, --stdout Scrive sullo standard output e non elimina i file di input" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -607,7 +691,7 @@ " --single-stream Decomprime solamente il primo stream e ignora\n" " silenziosamente i restanti dati di input" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -624,7 +708,7 @@ " di newline\n" " --files0=[FILE] Come --files ma usa il carattere null come terminatore" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -632,10 +716,16 @@ "\n" " Formato file di base e opzioni di compressione:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 +#, fuzzy +#| msgid "" +#| " -F, --format=FMT file format to encode or decode; possible values are\n" +#| " `auto' (default), `xz', `lzma', and `raw'\n" +#| " -C, --check=CHECK integrity check type: `none' (use with caution),\n" +#| " `crc32', `crc64' (default), or `sha256'" msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" @@ -644,11 +734,11 @@ " -C, --check=CHECK Tipo di verifica integrità: \"none\" (usare con attenzione),\n" " \"crc32\", \"crc64\" (predefinito) o \"sha256\"" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check Non verifica il codice di integrità quando decomprime" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -657,7 +747,7 @@ " l'utilizzo di memoria per comprimere ed estrarre prima\n" " di usare 7-9" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -666,7 +756,7 @@ " utilizzando più tempo di CPU; non cambia i requisiti di\n" " memoria in fase di estrazione" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -675,7 +765,7 @@ " impostare a 0 per usare tanti thread quanti core la CPU\n" " ha a disposizione" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -686,7 +776,7 @@ " usare per impostare la dimensione del blocco durante la\n" " compressione con thread" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -696,7 +786,7 @@ " Avvia un nuovo blocco .xz dopo gli intervalli, sperati\n" " da virgole, di dati non compressi" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -709,14 +799,22 @@ " ulteriore input risulterebbe bloccata, viene eseguito il\n" " flush di tutti i dati pendenti" -#: src/xz/message.c:1172 -#, no-c-format +#: src/xz/message.c:1043 +#, fuzzy, no-c-format +#| msgid "" +#| " --memlimit-compress=LIMIT\n" +#| " --memlimit-decompress=LIMIT\n" +#| " -M, --memlimit=LIMIT\n" +#| " set memory usage limit for compression, decompression,\n" +#| " or both; LIMIT is in bytes, % of RAM, or 0 for defaults" msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" @@ -725,7 +823,7 @@ " compressione, l'estrazione o entrambe; LIMIT è in byte,\n" " % della memoria RAM oppure 0 per il valore predefinito" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -734,7 +832,7 @@ " utilizzo della memoria, lancia un errore invece di\n" " utilizzare valori più piccoli" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -743,7 +841,7 @@ " Catena di filtri personalizzati per la compressione (alternative per\n" " l'utilizzo di preset):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -776,14 +874,26 @@ " depth=NUM Profondità massima di ricerca; 0=automatica\n" " (predefinito)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 +#, fuzzy +#| msgid "" +#| "\n" +#| " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +#| " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +#| " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" +#| " --arm[=OPTS] ARM BCJ filter (little endian only)\n" +#| " --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +#| " --sparc[=OPTS] SPARC BCJ filter\n" +#| " Valid OPTS for all BCJ filters:\n" +#| " start=NUM start offset for conversions (default=0)" msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" @@ -799,7 +909,7 @@ " start=NUM Offset iniziale per le conversioni\n" " (predefinito=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -811,7 +921,7 @@ " dist=NUM Distanza tra byte sottratti\n" " gli uni dagli altri (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -819,7 +929,7 @@ "\n" " Altre opzioni:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -829,15 +939,15 @@ " -v, --verbose Output prolisso; specificare due volte per output ancora\n" " più prolisso" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn Gli avvisi non influenzano lo stato d'uscita" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot Usa messaggi analizzabili (utile per gli script)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -845,7 +955,7 @@ " --info-memory Visualizza la quantità totale di RAM, il limite attuale\n" " attivo di utilizzo della memore ed esce" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -853,7 +963,7 @@ " -h, --help Stampa l'aiuto breve (elenca solo le opzioni di base)\n" " -H, --long-help Stampa questo lungo aiuto ed esce" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -861,11 +971,11 @@ " -h, --help Stampa questo breve aiuto ed esce\n" " -H, --long-help Stampa l'aiuto lungo (elenca anche le opzioni avanzate)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version Stampa il numero della versione ed esce" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -877,19 +987,19 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" "Segnalare i bug a <%s> (in inglese o finlandese).\n" "Segnalare i bug di traduzione a .\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Sito web di %s: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "Questa è una versione di sviluppo non adatta per utilizzi in produzione." @@ -917,27 +1027,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "La somma di lc e lp non deve superare 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Lo strumento per cercare corrispondenze selezionato richiede almeno nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: con --format=raw, --suffix=.SUF è richiesto a meno che non si scriva sullo stdout" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: il nome del file ha un suffisso sconosciuto, viene saltato" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: il file ha già il suffisso \"%s\", viene saltato" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: suffisso del nome del file non valido" @@ -961,15 +1061,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Il valore dell'opzione \"%s\" deve essere nell'intervallo [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Nome file vuoto, viene saltato" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "I dati compressi non possono essere letti da un terminale" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "I dati compressi non possono essere scritti ad un terminale" @@ -986,3 +1082,45 @@ #~ msgid "Sandbox was successfully enabled" #~ msgstr "Sandbox abilitata con successo" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Limite utilizzo memoria per la compressione: " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " Stream: %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " Blocchi: %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " Rapporto: %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " Controllo: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ "Stream:\n" +#~ " Stream Blocc. Offset comp. Offset estr. Dim. comp. Dim. estratto Rapp. Contr Padding" + +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Blocchi:\n" +#~ " Stream Blocc. Offset comp. Offset estratto Dim. tot. Dim. estratto Rapp. Contr" + +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " Val.cont %*s Header Flag Dim.compr. Uso mem. Filtri" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Lo strumento per cercare corrispondenze selezionato richiede almeno nice=%" Only in xz-5.4.3/po: ko.gmo Only in xz-5.4.3/po: ko.po Binary files xz-5.2.5/po/pl.gmo and xz-5.4.3/po/pl.gmo differ diff -ur xz-5.2.5/po/pl.po xz-5.4.3/po/pl.po --- xz-5.2.5/po/pl.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/pl.po 2023-05-04 17:32:20 @@ -1,13 +1,13 @@ # Polish translation for xz. # This file is put in the public domain. -# Jakub Bogusz , 2011-2019. +# Jakub Bogusz , 2011-2022. # msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2019-03-05 05:30+0100\n" +"Project-Id-Version: xz 5.4.0-pre1\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2022-11-10 18:02+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -17,100 +17,120 @@ "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Błędny argument dla --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Zbyt dużo argumentów dla --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 w --block-list może być użyte wyłącznie jako ostatni element" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Nieznany typ formatu pliku" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Nieobsługiwany typ kontroli spójności" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Wraz z opcją `--files' lub `--files0' można podać tylko jeden plik." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Zmienna środowiskowa %s zawiera zbyt dużo argumentów" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Obsługa kompresji została wyłączona na etapie budowania" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Obsługa dekompresji została wyłączona na etapie budowania" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "Kompresja plików lzip (.lz) nie jest osbługiwana" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: Przy --format=raw i zapisie do pliku wymagana jest opcja --suffix=.ROZ" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Maksymalna liczba filtrów to cztery" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Limit użycia pamięci jest zbyt mały dla podanej konfiguracji filtra." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Użycie ustawień predefiniowanych w trybie surowym jest odradzane." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Dokładne opcje ustawień predefiniowanych mogą różnić się między wersjami oprogramowania." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Format .lzma obsługuje tylko filtr LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 nie może być używany z formatem .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "Łańcuch filtrów jest niezgodny z --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Przełączanie w tryb jednowątkowy z powodu --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Maksymalna liczba używanych wątków: %." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Nieobsługiwany łańcuch filtrów lub opcje filtra" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Dekompresja będzie wymagała %s MiB pamięci." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" -msgstr "Skorygowano liczbę wątków z %s do %s, aby nie przekroczyć limitu użycia pamięci %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Zmniejszono liczbę wątków z %s do %s, aby nie przekroczyć limitu użycia pamięci %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "Zmniejszono liczbę wątków z %s do jednego. Automatyczny limit użycia pamięci %s MiB jest nadal przekroczony - wymagane jest %s MiB. Kontynuacja mimo to." + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Przełączenie w tryb jednowątkowy, aby nie przekroczyć limitu użycia pamięci %s MiB" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Skorygowano rozmiar słownika LZMA%c z %s MiB do %s MiB aby nie przekroczyć limitu użycia pamięci %s MiB" @@ -119,11 +139,11 @@ msgid "Error creating a pipe: %s" msgstr "Błąd tworzenia potoku: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Nie udało się włączyć piaskownicy" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() nie powiodło się: %s" @@ -138,195 +158,321 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Plik wygląda na przeniesiony, nie zostanie usunięty" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Nie można usunąć: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Nie można ustawić właściciela pliku: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Nie można ustawić grupy pliku: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Nie można ustawić uprawnień pliku: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wejścia: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Jest dowiązaniem symbolicznym, pominięto" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Jest katalogiem, pominięto" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Nie jest zwykłym plikiem, pominięto" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Plik ma ustawiony bit setuid lub setgid, pominięto" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Plik ma ustawiony bit sticky, pominięto" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Plik wejściowy ma więcej niż jedno dowiązanie zwykłe, pominięto" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Pusta nazwa pliku, pominięto" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Błąd podczas odtwarzania flag stanu dla standardowego wejścia: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wyjścia: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Błąd podczas odtwarzania flagi O_APPEND dla standardowego wyjścia: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Zamknięcie pliku nie powiodło się: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Zmiana pozycji nie powiodła się podczas próby utworzenia pliku rzadkiego: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Błąd odczytu: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Błąd podczas zmiany pozycji w pliku: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Nieoczekiwany koniec pliku" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Błąd zapisu: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Wyłączony" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "Całkowita ilość pamięci fizycznej (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "Rozmiar pamięci fizycznej (RAM):" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Limit użycia pamięci dla kompresji: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "Liczba wątków procesora:" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "Limit użycia pamięci dla dekompresji: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "Kompresja:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "Dekompresja:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "Dekompresja wielowątkowa:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "Domyślnie dla -T0:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "Informacje o sprzęcie:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "Limity użycia pamięci" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "Strumienie:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "Bloki:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "Rozmiar spakowany:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "Rozmiar rozpakowany:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "Współczynnik:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "Kontrola spójności:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "Wyrównanie strumienia:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "Wymagana pamięć:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "Rozmiar w nagłówkach:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "Liczba plików:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "Strumień" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "Blok" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "Bloki" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "Offset spak." + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "Offset rozp." + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "Rozm.spak." + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "Rozm.rozp." + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "Rozm.całk." + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "Wsp." + +#: src/xz/list.c:131 +msgid "Check" +msgstr "Kontrola" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "S.kontr." + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "Wyrównanie" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "Nagłówek" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "Flagi" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "Uż.pamięci" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "Filtry" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Brak" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Nieznany-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Nieznany-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Nieznany-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Nieznany-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Nieznany-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Nieznany-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Nieznany-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Nieznany11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Nieznany12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Nieznany13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Nieznany14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Nieznany15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Plik jest pusty" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Za mały na poprawny plik .xz" @@ -335,105 +481,26 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Strum. Bloki Spakowany Rozpakowany Wsp. Kontrola Nazwa pliku" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Strumienie: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Bloki: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Rozmiar spakowany: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Rozmiar rozpakowany: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Współczynnik: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Kontrola spójności: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Wyrównanie strumienia: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Strumienie:\n" -" Strumień Bloki Offset spak. Offset rozp. Rozm.spak. Rozm.rozp. Wsp. Kontrola Wyrównanie" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Bloki:\n" -" Strumień Blok Offset spak. Offset rozp. Rozm.całkowity Rozm.rozp. Wsp. Kontrola" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " S.kontr. %*sNagłówek Flagi Rozm. spak. Uż.pamięci Filtry" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Wymagana pamięć: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Rozmiar w nagłówkach: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Tak" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Nie" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Minimalna wersja XZ Utils: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" @@ -441,20 +508,15 @@ msgstr[1] "%s pliki\n" msgstr[2] "%s plików\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Sumarycznie:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Liczba plików: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list działa tylko z plikami .xz (--format=xz lub --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list nie obsługuje odczytu ze standardowego wejścia" @@ -473,11 +535,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Napotkano znak NUL podczas odczytu nazw plików; może miało być `--files0' zamiast `--files'?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Kompresja i dekompresja z opcją --robot nie jest jeszcze obsługiwana." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Nie można odczytać danych ze standardowego wejścia przy czytaniu nazw plików ze standardowego wejścia" @@ -485,68 +547,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Błąd wewnętrzny" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Nie można ustawić obsługi sygnałów" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Brak kontroli spójności; poprawność plików nie będzie weryfikowana" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Nieobsługiwany typ kontroli spójności; poprawność plików nie będzie weryfikowana" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Osiągnięto limit użycia pamięci" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Nie rozpoznany format pliku" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Nieobsługiwane opcje" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Dane skompresowane są uszkodzone" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Nieoczekiwany koniec wejścia" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "Wymagane jest %s MiB pamięci. Limit jest wyłączony." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "Wymagane jest %s MiB pamięci. Limit to %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Łańcuch filtrów: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Polecenie `%s --help' pokaże więcej informacji." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -557,17 +619,17 @@ "Kompresja lub dekompresja PLIKÓW w formacie .xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Argumenty obowiązkowe dla opcji długich są obowiązkowe również dla opcji\n" "krótkich.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Tryb pracy:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -579,7 +641,7 @@ " -t, --test sprawdzenie spójności plików skompresowanych\n" " -l, --list wypisanie informacji o plikach .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -587,7 +649,7 @@ "\n" " Modyfikatory operacji:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -597,7 +659,7 @@ " -f, --force nadpisywanie plików wyjściowych i (de)kompresja dowiązań\n" " -c, --stdout zapis na standardowe wyjście, nieusuwanie plików wej." -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -605,7 +667,7 @@ " --single-stream dekompresja tylko pierwszego strumienia, ciche\n" " zignorowanie pozostałych danych wejściowych" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -621,7 +683,7 @@ " wejścia; muszą być zakończone znakiem nowej linii\n" " --files0[=PLIK] podobnie do --files, ale znakiem kończącym musi być NUL" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -629,23 +691,23 @@ "\n" " Podstawowe opcje formatu pliku i kompresji:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" " -F, --format=FORM format pliki do kodowania lub dekodowania; możliwe to\n" -" `auto' (domyślny), `xz', 'lzma' i `raw'\n" +" `auto' (domyślny), `xz', 'lzma', `lzip' i `raw'\n" " -C, --check=TEST typ kontroli spójności: `none' (ostrożnie!),\n" " `crc32', `crc64' (domyślny) lub `sha256'" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check bez kontroli sprawdzania integralności przy dekompresji" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -654,7 +716,7 @@ " użyciem wartości 7-9 należy wziąć pod uwagę wykorzystanie\n" " pamięci przy kompresji *oraz* dekompresji!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -663,7 +725,7 @@ " ilości czasu procesora; nie wpływa na wymagania\n" " pamięciowe dekompresora" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -671,7 +733,7 @@ " -T, --threads=ILE użycie maksymalnie ILU wątków; domyślnie 1; 0 oznacza\n" " tyle, ile jest rdzeni procesorów" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -682,7 +744,7 @@ " opcja służy do ustawienia rozmiaru bloku dla kompresji\n" " wielowątkowej" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -692,7 +754,7 @@ " rozpoczęcie nowego bloku .xz po rozdzielonych przecinkiem\n" " przedziałach danych nieskompresowanych" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -704,23 +766,26 @@ " ostatniegu zapisu bloku, a odczyt kolejnych danych byłby\n" " blokujący, wszystkie gotowe dane są zapisywane" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " ustawienie limitu użycia pamięci dla kompresji,\n" -" dekompresji lub obu; LIMIT jest w bajtach, % RAM lub 0\n" -" dla limitów domyślnych" +" dekompresji, dekompresji wielowątkowej lub wszystkich;\n" +" LIMIT jest w bajtach, % RAM lub 0 dla limitów domyślnych" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -729,7 +794,7 @@ " pamięci, zostanie zgłoszony błąd zamiast zmniejszania\n" " ustawień" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -737,7 +802,7 @@ "\n" " Łańcuch własnych filtrów do kompresji (alternatywa do używania -0 .. -9):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -766,29 +831,31 @@ " mf=NAZWA dopasowywacz (hc3, hc4, bt2, bt3, bt4; bt4)\n" " depth=ILE maks. głębokość szukania; 0=auto (domyślne)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=OPCJE] Filtr BCJ x86 (32-bitowy lub 64-bitowy)\n" +" --arm[=OPCJE] Filtr BCJ ARM\n" +" --armthumb[=OPCJE] Filtr BCJ ARM-Thumb\n" +" --arm64[=OPCJE] Filtr BCJ ARM64\n" " --powerpc[=OPCJE] Filtr BCJ PowerPC (tylko big-endian)\n" " --ia64[=OPCJE] Filtr BCJ IA-64 (Itanium)\n" -" --arm[=OPCJE] Filtr BCJ ARM (tylko little-endian)\n" -" --armthumb[=OPCJE] Filtr BCJ ARM-Thumb (tylko little-endian)\n" " --sparc[=OPCJE] Filtr BCJ SPARC\n" " Poprawne OPCJE dla wszystkich filtrów BCJ:\n" " start=ILE offset początku konwersji (domyślnie=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -800,7 +867,7 @@ " dist=ILE odległość między bajtami odejmowanymi od\n" " siebie (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -808,7 +875,7 @@ "\n" " Inne opcje:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -816,15 +883,15 @@ " -q, --quiet pominięcie ostrzeżeń; dwukrotne podanie pomija też błędy\n" " -v, --verbose więcej informacji; dwukrotne podanie to jeszcze więcej" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn ostrzeżenia nie mają wpływu na status zakończenia" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot komunikaty w formacie dla maszyny (do skryptów)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -832,7 +899,7 @@ " --info-memory wyświetlenie całkowitej ilości pamięci RAM oraz aktualnie\n" " aktywnych limitów pamięci i zakończenie pracy" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -840,7 +907,7 @@ " -h, --help wyświetlenie krótkiego opisu (tylko podstawowe opcje)\n" " -H, --long-help wyświetlenie tego długiego opisu i zakończenie" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -848,11 +915,11 @@ " -h, --help wyświetlenie tego krótkiego opisu i zakończenie\n" " -H, --long-help wyświetlenie długiego opisu (także opcje zaawansowane)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version wyświetlenie informacji o wersji i zakończenie" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -864,7 +931,7 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" @@ -873,12 +940,12 @@ "Błędy w tłumaczeniu prosimy zgłaszać na adres\n" ".\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Strona domowa %s: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "TA WERSJA JEST ROZWOJOWA, NIE PRZEZNACZONA DO UŻYTKU PRODUKCYJNEGO." @@ -906,27 +973,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Suma lc i lp nie może przekroczyć 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Wybrany dopasowywacz wymaga przynajmniej nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: Przy --format=raw i zapisie do pliku wymagana jest opcja --suffix=.ROZ" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Nazwa pliku ma nieznane rozszerzenie, pominięto" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Plik już ma rozszerzenie `%s', pominięto" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Błędne rozszerzenie nazwy pliku" @@ -950,15 +1007,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Wartość opcji `%s' musi być w przedziale [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Pusta nazwa pliku, pominięto" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Dane skompresowane nie mogą być czytane z terminala" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Dane skompresowane nie mogą być zapisywane na terminal" @@ -970,8 +1023,6 @@ msgid "Unknown error" msgstr "Nieznany błąd" -#~ msgid "Sandbox is disabled due to incompatible command line arguments" -#~ msgstr "Piaskownica jest wyłączona ze względu na niezgodne opcje linii poleceń" - -#~ msgid "Sandbox was successfully enabled" -#~ msgstr "Piaskownica została włączona" +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Wybrany dopasowywacz wymaga przynajmniej nice=%" Only in xz-5.4.3/po: pt.gmo Only in xz-5.4.3/po: pt.po Binary files xz-5.2.5/po/pt_BR.gmo and xz-5.4.3/po/pt_BR.gmo differ diff -ur xz-5.2.5/po/pt_BR.po xz-5.4.3/po/pt_BR.po --- xz-5.2.5/po/pt_BR.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/pt_BR.po 2023-05-04 17:32:20 @@ -1,13 +1,14 @@ # Brazilian Portuguese translations for xz package # Traduções em português brasileiro para o pacote xz. # This file is put in the public domain. -# Rafael Fontenelle , 2019. +# Rafael Fontenelle , 2019-2023. +# msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2019-03-05 20:30-0200\n" +"Project-Id-Version: xz 5.4.0-pre2\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2023-01-12 14:40-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -15,103 +16,123 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Virtaal 1.0.0-beta1\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 42.0\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Argumento inválido para --block-list" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Argumentos demais para --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 só pode ser usado como o último elemento em --block-list" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Tipo de formato de arquivo desconhecido" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Tipo de verificação de integridade sem suporte" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Somente um arquivo pode ser especificado com \"--files\" ou \"--files0\"." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "A variável de ambiente %s contém argumentos demais" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "Suporte a compressão foi desabilitado em tempo de compilação" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "Suporte a descompressão foi desabilitado em tempo de compilação" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "A compactação de arquivos lzip (.lz) não é suportada" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: Com --format=raw, --suffix=.SUF é exigido, a menos que esteja escrevendo para stdout" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "O número máximo de filtros é quatro" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "O limite de uso de memória é baixo demais para a configuração de filtro dada." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "O uso de uma predefinição em modo bruto é desencorajado." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "As opções exatas de predefinições podem variar entre versões do software." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "O formato .lzma possui suporte apenas ao filtro LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 não pode ser usado com o formato .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "A cadeia de filtros é incompatível com --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Alternando para o modo de thread única por causa de --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Usando até % threads." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Opções de filtro ou cadeia de filtros sem suporte" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "A descompressão precisará de %s MiB de memória." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" -msgstr "Ajustado o número de threads de %s de %s para não exceder o limite de uso de memória de %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Reduzido o número de threads de %s para %s para não exceder o limite de uso de memória de %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "Reduzido o número de threads de %s para um. O limite de uso de memória automática de %s MiB ainda está sendo excedido. %s MiB de memória é necessário. Continuando de qualquer maneira." + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "Alternando para o modo de thread única para não exceder o limite de uso de memória de %s MiB" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Ajustado o tamanho de dicionário de LZMA%c de %s MiB para %s MiB para não exceder o limite de uso de memória de %s MiB" @@ -120,11 +141,11 @@ msgid "Error creating a pipe: %s" msgstr "Erro ao criar um pipe: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "Falha ao habilitar o sandbox" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: poll() falhou: %s" @@ -139,209 +160,332 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: O arquivo parece ter sido movido, não será removido" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Não foi possível remover: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Não foi possível definir o dono do arquivo: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Não foi possível definir o grupo do arquivo: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Não foi possível definir as permissões do arquivo: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Erro ao obter os sinalizadores de status da entrada padrão: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: É um link simbólico, ignorando" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: É um diretório, ignorando" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Não é um arquivo comum, ignorando" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: O arquivo possui o bit setuid ou setgid definido, ignorando" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: O arquivo possui o bit sticky definido, ignorando" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" -msgstr "%s: O arquivo de entrada possui mais de um link absoluto, ignorando" +msgstr "%s: O arquivo de entrada possui mais de um link físico, ignorando" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Nome de arquivo vazio, ignorando" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Erro ao restaurar os sinalizadores de status para entrada padrão: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Erro ao obter os sinalizadores de status de arquivo da saída padrão: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Erro ao restaurar o sinalizador O_APPEND para a saída padrão: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Fechamento do arquivo falhou: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Busca falhou ao tentar criar um arquivo esparso: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Erro de leitura: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Erro ao buscar o arquivo: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Fim de arquivo inesperado" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Erro de escrita: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Desabilitado" -# Espaços adicionados para manter alinhamento com mensagens adjacentes -- Rafael -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "Quantidade total de memória física (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "Quantidade total de memória física (RAM):" -# Espaços adicionados para manter alinhamento com mensagens adjacentes -- Rafael -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Limite de uso de memória para compressão: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "Número de threads de processador:" -# Espaços reduzidos para manter alinhamento com mensagens adjacentes -- Rafael -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "Limite de uso de memória para descompressão: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "Compactação:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "Descompactação:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "Descompactação com várias threads:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "Padrão para -T0:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "Informações de hardware:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "Memory usage limits:" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "Fluxos:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "Blocos:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "Tamanho compactado:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "Tamanho não compactado:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "Proporção:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "Verificação:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "Ajuste do fluxo:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "Memória exigida:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "Tamanhos nos cabeçalhos:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "Número de arquivos:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "Fluxo" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "Bloco" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "Blocos" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "DeslocComp" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "DeslocDescomp" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "TamComp" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "TamDescomp" + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "TamTotal" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "Proporção" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "Verificação" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "ValorVerific." + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "Preench." + +#: src/xz/list.c:134 +msgid "Header" +msgstr "Cabeçalho" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "Sinalizadores" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "UsoMem" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "Filtros" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Nenhuma" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Incógnito2" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Incógnito3" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Incógnito5" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Incógnito6" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Incógnito7" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Incógnito8" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Incógnito9" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "Incógnito11" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "Incógnito12" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "Incógnito13" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "Incógnito14" # Não exceder 10 caracteres e espaços não são permitidos -- Rafael -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "Incógnito15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: O arquivo está vazio" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Pequeno demais para ser um arquivo .xz válido" @@ -350,126 +494,41 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Fluxos Blocos Comprimido Descomprimid Propo Verif Nome de Arquivo" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Fluxos: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Blocos: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Tam. comprimido: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Tam. descomprimido: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Proporção: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Verificação: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Ajuste do fluxo: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Fluxos:\n" -" Fluxo Blocos DeslocComp DeslocDescomp TamanhoComp TamanhoDescomp Propo Verif Ajuste" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Blocos:\n" -" Fluxo Bloco DeslocComp DeslocDescomp TamanhoTotal TamanhoDecomp Propo Verif" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " ValVerif %*s Cabeç Sinaliz TamComp UsoMem Filtros" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Memória exigida: %s MiB\n" - -# Espaço adicionado para promover alinhamento, vide "xz -lvv foo.xz" -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Tam. cabeçalhos: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Sim" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Não" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Versão mínima do XZ Utils: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s arquivo\n" msgstr[1] "%s arquivos\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Totais:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Núm. de arquivos: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list funciona apenas em arquivos .xz (--format=xz ou --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list não possui suporte a leitura da entrada padrão" @@ -488,11 +547,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Caractere nulo encontrado ao ler nomes de arquivos; talvez você queria usar \"--files0\" em vez de \"--files\"?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Ainda não há suporte a compressão e descompressão com --robot." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Não é possível ler dados da entrada padrão ao ler nomes de arquivos da entrada padrão" @@ -500,68 +559,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Erro interno (bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Não foi possível estabelecer manipuladores de sinais" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Sem verificação de integridade; não será verificada a integridade do arquivo" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Tipo de verificação de integridade sem suporte; não será verificada a integridade do arquivo" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Limite de uso de memória alcançado" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Formato de arquivo não reconhecido" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Opções sem suporte" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Os dados comprimidos estão corrompidos" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Fim da entrada inesperado" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "%s MiB de memória é necessário. O limitador está desabilitado." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "%s MiB de memória é necessário. O limite é %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Cadeia de filtros: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Tente \"%s --help\" para mais informações." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -572,15 +631,15 @@ "Comprime e descomprime ARQUIVOs no formato .xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Argumentos obrigatórios para opções longas também o são para opções curtas.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Modo de operação:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -592,7 +651,7 @@ " -t, --test testa a integridade do arquivo comprimido\n" " -l, --list lista informações sobre arquivos .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -600,7 +659,7 @@ "\n" " Modificadores de opções:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -612,7 +671,7 @@ " -c, --stdout escreve a entrada padrão e não exclui os arquivos\n" " de entrada" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -620,7 +679,7 @@ " --single-stream descomprime apenas o primeiro fluxo, e ignora de forma\n" " silenciosa possíveis dados de entrada restantes" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -640,7 +699,7 @@ " similar a --files, mas usa o caractere nulo como\n" " terminador" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -648,24 +707,24 @@ "\n" " Opções básicas de formato de arquivo e compressão:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" " -F, --format=FMT formato de arquivo para codificar ou decodificar;\n" " valores possíveis são\n" -" \"auto\" (padrão), \"xz\", \"lzma\" e \"raw\"\n" +" \"auto\" (padrão), \"xz\", \"lzma\", \"lzip\" e \"raw\"\n" " -C, --check=VERIF tipo de verificação de integridade: \"none\" (cuidado!),\n" " \"crc32\", \"crc64\" (padrão) ou \"sha256\"" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check não faz a verificação de integridade ao descomprimir" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -674,7 +733,7 @@ " memória do compressor *e* descompressor em conta\n" " antes de usar 7-9!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -683,7 +742,7 @@ " tempo de CPU; não afeta os requisitos de memória do\n" " descompressor" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -692,7 +751,7 @@ " 0 para usar o máximo de threads que há de núcleos de\n" " processador" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -703,7 +762,7 @@ " use isso para definido o tamanho de bloco para\n" " compressão com threads" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -713,7 +772,7 @@ " inicia um novo bloco .xz após os intervalos dados,\n" " separados por vírgula, de dados descomprimidos" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -726,23 +785,26 @@ " de mais entrada bloquearia, todos os dados pendentes\n" " serão liberados" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=LIMITE\n" " --memlimit-decompress=LIMITE\n" +" --memlimit-mt-decompress=LIMITE\n" " -M, --memlimit=LIMITE\n" " define o limite de uso de memória para compressão,\n" -" descompressão ou ambos; LIMITE é em bytes, % de RAM\n" -" ou 0 para padrões" +" descompressão, compactação em threads ou todas essas;\n" +" LIMITE é em bytes, % de RAM ou 0 para padrões" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -751,7 +813,7 @@ " de uso de memória, fornece um erro em vez de\n" " ajustar as configurações para baixo" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -759,7 +821,7 @@ "\n" " Cadeia de filtros personalizada para compressão (alternativa à predefinição):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -789,30 +851,32 @@ " depth=NUM máximo de profundidade de pesquisa;\n" " 0=automatic (padrão)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=OPÇÕES] filtro BCJ x86 (32 bits e 64 bits)\n" +" --arm[=OPÇÕES] filtro BCJ ARM\n" +" --armthumb[=OPÇÕES] filtro BCJ ARM-Thumb\n" +" --arm64[=OPÇÕES] filtro BCJ ARM64\n" " --powerpc[=OPÇÕES] filtro BCJ PowerPC (big endian apenas)\n" " --ia64[=OPÇÕES] filtro BCJ IA-64 (Itanium)\n" -" --arm[=OPÇÕES] filtro BCJ ARM (little endian apenas)\n" -" --armthumb[=OPÇÕES] filtro BCJ ARM-Thumb (little endian apenas)\n" " --sparc[=OPÇÕES] filtro BCJ SPARC\n" " OPÇÕES válidas para todos os filtros BCJ:\n" " start=NUM deslocamento inicial para conversões\n" -" (default=0)" +" (padrão=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -824,7 +888,7 @@ " dist=NÚM distância entre bytes sendo subtraído\n" " de cada um (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -832,7 +896,7 @@ "\n" " Outras opções:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -840,15 +904,15 @@ " -q, --quiet suprime avisos, use duas vezes para suprimir erros também\n" " -v, --verbose ser detalhado; use duas vezes para ainda mais detalhes" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn faz os avisos não afetarem o status de saída" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot usa mensagens analisáveis por máquina (útil p/ scripts)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -856,7 +920,7 @@ " --info-memory exibe a quantidade total de RAM e os limites de uso\n" " de memória atualmente ativos e sai" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -864,7 +928,7 @@ " -h, --help exibe a ajuda curto (lista apenas as opções básicas)\n" " -H, --long-help exibe essa ajuda longa e sai" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -872,11 +936,11 @@ " -h, --help exibe essa ajuda curta e sai\n" " -H, --long-help exibe a ajuda longa (lista também as opções avançadas)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version exibe o número de versão e sai" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -888,19 +952,19 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" "Relate erros para <%s> (em inglês ou finlandês).\n" "Relate erros de tradução para .\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Site do %s: <%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "ESSA É UMA VERSÃO DE DESENVOLVIMENTO, NÃO DESTINADA PARA USO EM PRODUÇÃO." @@ -928,27 +992,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "A soma de lc e lp não deve exceder 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "O localizador de correspondência selecionado requer pelo menos nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: Com --format=raw, --suffix=.SUF é exigido, a menos que esteja escrevendo para stdout" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: O nome de arquivo tem um sufixo desconhecido, ignorando" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: O arquivo já tem o sufixo \"%s\", ignorando" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Sufixo de nome de arquivo inválido" @@ -972,15 +1026,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "O valor da opção \"%s\" deve estar no intervalo [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Nome de arquivo vazio, ignorando" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Dados comprimidos não podem ser lidos de um terminal" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Dados comprimidos não podem ser escrito para um terminal" @@ -997,3 +1047,39 @@ #~ msgid "Sandbox was successfully enabled" #~ msgstr "Sandbox foi habilitado com sucesso" + +# Espaços adicionados para manter alinhamento com mensagens adjacentes -- Rafael +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Limite de uso de memória para compressão: " + +#~ msgid " Streams: %s\n" +#~ msgstr " Fluxos: %s\n" + +#~ msgid " Blocks: %s\n" +#~ msgstr " Blocos: %s\n" + +#~ msgid " Ratio: %s\n" +#~ msgstr " Proporção: %s\n" + +#~ msgid " Check: %s\n" +#~ msgstr " Verificação: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Fluxos:\n" +#~ " Fluxo Blocos DeslocComp DeslocDescomp TamanhoComp TamanhoDescomp Propo Verif Ajuste" + +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Blocos:\n" +#~ " Fluxo Bloco DeslocComp DeslocDescomp TamanhoTotal TamanhoDecomp Propo Verif" + +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " ValVerif %*s Cabeç Sinaliz TamComp UsoMem Filtros" + +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "O localizador de correspondência selecionado requer pelo menos nice=%" Only in xz-5.4.3/po: ro.gmo Only in xz-5.4.3/po: ro.po Only in xz-5.4.3/po: sr.gmo Only in xz-5.4.3/po: sr.po Only in xz-5.4.3/po: sv.gmo Only in xz-5.4.3/po: sv.po Only in xz-5.4.3/po: tr.gmo Only in xz-5.4.3/po: tr.po Only in xz-5.4.3/po: uk.gmo Only in xz-5.4.3/po: uk.po Binary files xz-5.2.5/po/vi.gmo and xz-5.4.3/po/vi.gmo differ diff -ur xz-5.2.5/po/vi.po xz-5.4.3/po/vi.po --- xz-5.2.5/po/vi.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/vi.po 2023-05-04 17:32:21 @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: xz 5.1.4beta\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2014-09-25 09:06+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" @@ -18,99 +18,121 @@ "Plural-Forms: nplurals=1; plural=0;\n" "X-Poedit-Basepath: ../\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s: Đối số cho --block-list không hợp lệ" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s: Quá nhiều đối số cho --block-list" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 chỉ có thể dùng như là phần tử cuối trong --block-list" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s: Không hiểu kiểu định dạng tập tin" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s: Không hỗ trợ kiểu kiểm tra toàn vẹn" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "Chỉ được đưa ra một tập tin cho “--files” hay “--files0”." -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "Biến môi trường %s chứa quá nhiều đối số" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s: Nếu --format=raw, --suffix=.SUF sẽ được yêu cầu trừ trường hợp ghi ra đầu ra tiêu chuẩn" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "Số lượng bộ lọc tối đa là bốn" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "Mức giới hạn dùng bộ nhớ là quá thấp cho việc cài đặt bộ lọc đã cho." -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "Dùng hiện tại trong chế độ thô là ngớ ngẩn." -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "Các tùy chọn trích xuất của chỉnh trước có thể biến đổi phụ thuộc vào phiên bản." -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "Định dạng .lzma chỉ hỗ trợ bộ lọc LZMA1" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 không thể được dùng với định dạng .xz" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "Móc xích lọc là không tương thích với --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "Chuyển sang chế độ đơn tuyến trình bởi vì --flush-timeout" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "Dùng đến % tuyến trình." -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "Không hỗ trợ lọc móc xích hay tùy chọn lọc" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "Giải nén sẽ cần %s MiB bộ nhớ." -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "Chỉnh số lượng tuyến trình từ %s thành %s để không vượt quá giới hạn tiêu dùng bộ nhớ là %s MiB" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" msgstr "Chỉnh số lượng tuyến trình từ %s thành %s để không vượt quá giới hạn tiêu dùng bộ nhớ là %s MiB" -#: src/xz/coder.c:354 +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "Chỉnh cỡ từ điển LZMA%c từ %s MiB thành %s MiB để không vượt quá giới hạn tiêu dùng bộ nhớ là %s MiB" @@ -120,11 +142,11 @@ msgid "Error creating a pipe: %s" msgstr "Gặp lỗi khi tạo một ống dẫn: %s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s: hàm poll() bị lỗi: %s" @@ -139,195 +161,341 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s: Tập tin có lẽ đã bị di chuyển, không phải gỡ bỏ" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s: Không thể gỡ bỏ: %s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s: Không thể đặt chủ sở hữu tập tin: %s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s: Không thể đặt nhóm tập tin: %s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s: Không thể đặt chế độ đọc ghi cho tập tin: %s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "Gặp lỗi khi lấy các cờ trạng thái tập tin từ đầu vào tiêu chuẩn: %s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s: Là một liên kết mềm nên bỏ qua" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s: Không phải là một thư mục nên bỏ qua" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s: Không phải là tập tin thường nên bỏ qua" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s: Tập tin có đặt bít setuid hoặc setgid nên bỏ qua" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s: Tập tin có bít sticky nên bỏ qua" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s: Tập tin đầu vào có nhiều hơn một liên kết cứng nên bỏ qua" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "Tên tập tin trống rỗng nên bỏ qua" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "Gặp lỗi khi phục hồi các cờ trạng thái tới đầu vào tiêu chuẩn: %s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "Gặp lỗi khi lấy các cờ trạng thái tập tin từ đầu vào tiêu chuẩn: %s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "Gặp lỗi khi phục hồi cờ O_APPEND trên đầu ra tiêu chuẩn: %s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s: Gặp lỗi khi đóng tập tin: %s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s: Gặp lỗi khi di chuyển vị trí đọc khi cố tạo một tập tin rải rác: %s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s: Lỗi đọc: %s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s: Gặp lỗi khi di chuyển vị trí đọc tập tin: %s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s: Kết thúc tập tin bất ngờ" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s: Lỗi ghi: %s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "Bị tắt" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "Tổng dung lượng bộ nhớ vật lý (RAM): " -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "Mức giới hạn dùng bộ nhớ cho nén: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "Mức giới hạn dùng bộ nhớ cho giải nén:" +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "Đã chạm mốc giới hạn sử dụng bộ nhớ" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " Cỡ khi bị nén: %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " Cỡ sau giải nén: %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " Đệm luồng dữ liệu: %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " Bộ nhớ cần: %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " Kích cỡ phần đầu: %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " Số tập tin: %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "Tổng cộng:" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "Không" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "Chưa_biết2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "Chưa_biết3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "Chưa_biết5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "Chưa_biết6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "Chưa_biết7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "Chưa_biết8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "Chưa_biết9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "ChưaBiết11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "ChưaBiết12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "ChưaBiết13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "ChưaBiết14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "ChưaBiết15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s: Tập tin trống rỗng" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s: Là quá nhỏ đối với tập tin .xz hợp lệ" @@ -336,124 +504,40 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr "Luồng Khối Nén Giải nén Tỷ lệ Ktra Tập tin" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " Luồng dữ liệu: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " Khối: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " Cỡ khi bị nén: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " Cỡ sau giải nén: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " Tỷ lệ nén: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " Kiểm tra: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " Đệm luồng dữ liệu: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" Luồng dữ liệu:\n" -" Luồng Khối BùNén BùGiảiNén CỡNén CỡGiảiNén TỷLệ Ktra Đệm" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" Khối:\n" -" Luồng Khối BùNén BùGiảiNén CỡTổng CỡGiảiNén TỷLệ Ktra" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " GTrịKiểm %*s Đầu Cờ CỡNén DùngRAM BộLọc" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " Bộ nhớ cần: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " Kích cỡ phần đầu: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "Có" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "Không" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " Phiên bản “XZ Utils” tối thiểu: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s tập tin\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "Tổng cộng:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " Số tập tin: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list chỉ hoạt động trên các tập tin .xz (--format=xz hay --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list không hỗ trợ đọc từ đầu vào tiêu chuẩn" @@ -472,11 +556,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s: Gặp ký hiệu Null khi đọc tên tập tin; có lẽ ý bạn muốn là dùng “--files0” chứ không phải “--files'?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "Nén và giải nén với --robot vẫn chưa được hỗ trợ." -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "Không thể đọc dữ liệu từ đầu vào tiêu chuẩn khi đọc tập tin từ đầu vào tiêu chuẩn" @@ -484,68 +568,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s: " -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "Lỗi nội bộ (lỗi)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "Không thể thiết lập bộ xử lý tín hiệu" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "Không có kiểm tra toàn vẹn nên không thể thẩm tra tính toàn vẹn của tập tin" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "Kiểu kiểm tra toàn vẹn chưa được hỗ trợ; nên không thể thẩm tra tính toàn vẹn của tập tin" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "Đã chạm mốc giới hạn sử dụng bộ nhớ" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "Không nhận ra định dạng tập tin" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "Tùy chọn không được hỗ trợ" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "Dữ liệu đã nén bị hỏng" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "Gặp kết thúc đầu vào bất ngờ" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "Yêu cầu cần có %s MiB bộ nhớ. Nhưng giới hạn bị tắt." -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "Yêu cầu cần có %s MiB bộ nhớ. Nhưng giới hạn là %s." -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s: Móc xích lọc: %s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "Hãy chạy lệnh “%s --help” để xem thông tin thêm." -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -556,15 +640,15 @@ "Nén hoặc giải nén các TẬP TIN có định dạng .xz.\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Các tùy chọn dài bắt buộc phải có đối số thì với tùy chọn ngắn cũng vậy.\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " Chế độ thao tác:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -576,7 +660,7 @@ " -t, --test kiểm tra tính toàn vẹn của tập tin nén\n" " -l, --list liệt kê các thông tin về tập tin .xz" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -584,7 +668,7 @@ "\n" " Bộ chỉnh sửa thao tác:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -594,7 +678,7 @@ " -f, --force buộc ghi đè tập tin đầu ra và (giải) nén các liên kết\n" " -c, --stdout ghi ra đầu ra tiêu chuẩn và không xóa tập tin đầu vào" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -602,7 +686,7 @@ " --single-stream chỉ giải nén luồng dữ liệu đầu, và bỏ qua\n" " dữ liệu đầu vào còn lại có thể" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -618,7 +702,7 @@ " chuẩn; chúng phải được kết thúc bằng ký tự dòng mới\n" " --files0[=TẬP-TIN] giống --files nhưng ký tự kết thúc là null" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -626,10 +710,16 @@ "\n" " Các tùy chọn về định dạng và nén cơ bản:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 +#, fuzzy +#| msgid "" +#| " -F, --format=FMT file format to encode or decode; possible values are\n" +#| " `auto' (default), `xz', `lzma', and `raw'\n" +#| " -C, --check=CHECK integrity check type: `none' (use with caution),\n" +#| " `crc32', `crc64' (default), or `sha256'" msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" @@ -638,11 +728,11 @@ " -C, --check=KIỂM kiểu kiểm tra toàn vẹn: “none” (thận trọng khi dùng),\n" " “crc32”, “crc64” (mặc định), hay “sha256”" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check không thẩm tra tính toàn vẹn khi giải nén" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -650,7 +740,7 @@ " -0 ... -9 đặt mức nén; mặc định là 6; tiêu dùng nhiều bộ nhớ khi nén\n" " và giải nén, nên tính toán trước khi dùng 7-9!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -658,7 +748,7 @@ " -e, --extreme cố gắng nâng cao mức nén bằng cách dùng nhiều CPU hơn;\n" " nhưng không yêu cần nhiều bộ nhớ khi giải nén" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -666,7 +756,7 @@ " -T, --threads=SỐ dùng tối đa là SỐ tuyến trình; mặc định là 1; đặt\n" " thành 0 để dùng số lượng bằng số lõi vi xử lý" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -676,7 +766,7 @@ " bắt đầu một khối .xz mới sau mỗi CỠ byte của đầu vào;\n" " dùng tùy chọn này để đặt cỡ khối cho nén tuyến trình" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -686,7 +776,7 @@ " bắt đầu một khối .xz mới sau một danh sách ngăn\n" " cách bằng dấu phẩy nhịp dữ của dữ liệu chưa nén" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -698,14 +788,22 @@ " kể từ lần đẩy dữ liệu lên đĩa trước đó và đang đọc thêm\n" " khối nữa, mọi dữ liệu đang chờ sẽ được ghi lên đĩa" -#: src/xz/message.c:1172 -#, no-c-format +#: src/xz/message.c:1043 +#, fuzzy, no-c-format +#| msgid "" +#| " --memlimit-compress=LIMIT\n" +#| " --memlimit-decompress=LIMIT\n" +#| " -M, --memlimit=LIMIT\n" +#| " set memory usage limit for compression, decompression,\n" +#| " or both; LIMIT is in bytes, % of RAM, or 0 for defaults" msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=GIỚI_HẠN\n" " --memlimit-decompress=GIỚI_HẠN\n" @@ -714,7 +812,7 @@ " hoặc cả hai; GIỚI_HẠN có đơn vị là byte, % của RAM,\n" " hay 0 cho mặc định" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -722,7 +820,7 @@ " --no-adjust nếu các cài đặt nén vượt quá giới hạn dùng bộ nhớ,\n" " đưa ra một lỗi thay vì sửa đổi các cài đặt xuống" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -730,7 +828,7 @@ "\n" " Móc xích lọc tùy chỉnh cho nén (thay cho việc dùng chỉnh trước):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -758,14 +856,26 @@ " mf=TÊN bộ tìm khớp (hc3, hc4, bt2, bt3, bt4; bt4)\n" " depth=SỐ mức sâu tìm kiếm tối đa; 0=tự động (mặc định)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 +#, fuzzy +#| msgid "" +#| "\n" +#| " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +#| " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +#| " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" +#| " --arm[=OPTS] ARM BCJ filter (little endian only)\n" +#| " --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +#| " --sparc[=OPTS] SPARC BCJ filter\n" +#| " Valid OPTS for all BCJ filters:\n" +#| " start=NUM start offset for conversions (default=0)" msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" @@ -780,7 +890,7 @@ " các tùy chọn hợp lệ cho mọi bộ lọc BCJ:\n" " start=SỐ khoảng bù khởi đầu cho chuyển đổi (mặc định=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -793,7 +903,7 @@ " dist=SỐ khoảng cách giữa các byte được trừ từ\n" " những cái khác (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -801,7 +911,7 @@ "\n" " Tùy chọn khác:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -810,17 +920,17 @@ " chỉ định hai lần nến bạn muốn chặn cả báo lỗi\n" " -v, --verbose thông báo chi tiết; dùng hai lần nếu muốn chi tiết hơn" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn làm cho các cảnh báo không ảnh hưởng đến trạng thái thoát" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" " --robot dùng các thông điệp máy có thể phân tích\n" " (hữu dụng với scripts)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" @@ -828,7 +938,7 @@ " --info-memory hiển thị tổng lượng RAM và mức giới hạn tiêu dùng\n" " bộ nhớ hiện tại, rồi thoát" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -837,7 +947,7 @@ " (chỉ liệt kê các tùy chọn cơ bản)\n" " -H, --long-help hiển thị trợ giúp đầy đủ rồi thoát" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -846,11 +956,11 @@ " -H, --long-help hiển thị trợ giúp đầy đủ\n" " (liệt kê cả những tùy chọn cấp cao)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version hiển thị số phiên bản và thoát" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -862,19 +972,19 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" "Hãy báo cáo lỗi cho <%s> (bằng tiếng Anh hoặc Phần Lan).\n" "Thông báo lỗi dịch cho: .\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "Trang chủ %s: <%s>.\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "ĐÂY LÀ PHIÊN BẢN PHÁT TRIỂN VÀ NÓ KHÔNG PHÙ HỢP VỚI MỤC ĐÍCH SẢN XUẤT." @@ -902,27 +1012,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "Tổng số lượng lc và lp không được vượt quá 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "Bộ tìm khớp đã chọn yêu cầu mức “tốt” ít nhất là nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s: Nếu --format=raw, --suffix=.SUF sẽ được yêu cầu trừ trường hợp ghi ra đầu ra tiêu chuẩn" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s: Tên tập tin có phần hậu tố chưa biết nên bỏ qua" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s: Tập tin đã sẵn có hậu tố “%s” nên bỏ qua" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s: Hậu tố tên tập tin không hợp lệ" @@ -946,15 +1046,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "Giá trị cuả tùy chọn “%s” phải nằm trong vùng [%, %]" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "Tên tập tin trống rỗng nên bỏ qua" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "Dữ liệu đã nén không thể đọc từ thiết bị cuối" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "Dữ liệu đã nén không thể ghi ra thiết bị cuối" @@ -965,6 +1061,48 @@ #: src/common/tuklib_exit.c:43 msgid "Unknown error" msgstr "Lỗi chưa biết" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "Mức giới hạn dùng bộ nhớ cho nén: " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " Luồng dữ liệu: %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " Khối: %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " Tỷ lệ nén: %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " Kiểm tra: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " Luồng dữ liệu:\n" +#~ " Luồng Khối BùNén BùGiảiNén CỡNén CỡGiảiNén TỷLệ Ktra Đệm" + +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " Khối:\n" +#~ " Luồng Khối BùNén BùGiảiNén CỡTổng CỡGiảiNén TỷLệ Ktra" + +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " GTrịKiểm %*s Đầu Cờ CỡNén DùngRAM BộLọc" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "Bộ tìm khớp đã chọn yêu cầu mức “tốt” ít nhất là nice=%" #~ msgid "Error setting O_NONBLOCK on standard input: %s" #~ msgstr "Lỗi cài đặt O_NONBLOCK trên đầu vào tiêu chuẩn: %s" diff -ur xz-5.2.5/po/xz.pot xz-5.4.3/po/xz.pot --- xz-5.2.5/po/xz.pot 2020-03-17 17:29:58 +++ xz-5.4.3/po/xz.pot 2023-05-04 17:32:20 @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: xz 5.2.5\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Project-Id-Version: xz 5.4.3\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,100 +17,118 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "" -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "" -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "" -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "" -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr "" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "" -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "" -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" msgstr "" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "" @@ -119,11 +137,11 @@ msgid "Error creating a pipe: %s" msgstr "" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "" @@ -138,318 +156,364 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" msgstr "" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" msgstr "" -#. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 -msgid "None" +#: src/xz/hardware.c:272 +msgid "Decompression:" msgstr "" -#. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "" + #: src/xz/list.c:72 -msgid "Unknown-2" +msgid "Ratio:" msgstr "" #: src/xz/list.c:73 -msgid "Unknown-3" +msgid "Check:" msgstr "" +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "" + #: src/xz/list.c:75 -msgid "Unknown-5" +msgid "Memory needed:" msgstr "" #: src/xz/list.c:76 -msgid "Unknown-6" +msgid "Sizes in headers:" msgstr "" -#: src/xz/list.c:77 -msgid "Unknown-7" +#: src/xz/list.c:79 +msgid "Number of files:" msgstr "" -#: src/xz/list.c:78 -msgid "Unknown-8" +#: src/xz/list.c:122 +msgid "Stream" msgstr "" -#: src/xz/list.c:79 -msgid "Unknown-9" +#: src/xz/list.c:123 +msgid "Block" msgstr "" -#: src/xz/list.c:81 -msgid "Unknown-11" +#: src/xz/list.c:124 +msgid "Blocks" msgstr "" -#: src/xz/list.c:82 -msgid "Unknown-12" +#: src/xz/list.c:125 +msgid "CompOffset" msgstr "" -#: src/xz/list.c:83 -msgid "Unknown-13" +#: src/xz/list.c:126 +msgid "UncompOffset" msgstr "" -#: src/xz/list.c:84 -msgid "Unknown-14" +#: src/xz/list.c:127 +msgid "CompSize" msgstr "" -#: src/xz/list.c:85 -msgid "Unknown-15" +#: src/xz/list.c:128 +msgid "UncompSize" msgstr "" -#: src/xz/list.c:153 -#, c-format -msgid "%s: File is empty" +#: src/xz/list.c:129 +msgid "TotalSize" msgstr "" -#: src/xz/list.c:158 -#, c-format -msgid "%s: Too small to be a valid .xz file" +#: src/xz/list.c:130 +msgid "Ratio" msgstr "" -#. TRANSLATORS: These are column headings. From Strms (Streams) -#. to Ratio, the columns are right aligned. Check and Filename -#. are left aligned. If you need longer words, it's OK to -#. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 -msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" +#: src/xz/list.c:131 +msgid "Check" msgstr "" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" +#: src/xz/list.c:132 +msgid "CheckVal" msgstr "" -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" +#: src/xz/list.c:133 +msgid "Padding" msgstr "" -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" +#: src/xz/list.c:134 +msgid "Header" msgstr "" -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" +#: src/xz/list.c:135 +msgid "Flags" msgstr "" -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" +#: src/xz/list.c:136 +msgid "MemUsage" msgstr "" -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" +#: src/xz/list.c:137 +msgid "Filters" msgstr "" -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" +#. TRANSLATORS: Indicates that there is no integrity check. +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 +msgid "None" msgstr "" -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#. TRANSLATORS: Indicates that integrity check name is not known, +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 +msgid "Unknown-2" msgstr "" -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#: src/xz/list.c:176 +msgid "Unknown-3" msgstr "" -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#: src/xz/list.c:178 +msgid "Unknown-5" msgstr "" -#: src/xz/list.c:903 src/xz/list.c:1078 +#: src/xz/list.c:179 +msgid "Unknown-6" +msgstr "" + +#: src/xz/list.c:180 +msgid "Unknown-7" +msgstr "" + +#: src/xz/list.c:181 +msgid "Unknown-8" +msgstr "" + +#: src/xz/list.c:182 +msgid "Unknown-9" +msgstr "" + +#: src/xz/list.c:184 +msgid "Unknown-11" +msgstr "" + +#: src/xz/list.c:185 +msgid "Unknown-12" +msgstr "" + +#: src/xz/list.c:186 +msgid "Unknown-13" +msgstr "" + +#: src/xz/list.c:187 +msgid "Unknown-14" +msgstr "" + +#: src/xz/list.c:188 +msgid "Unknown-15" +msgstr "" + +#: src/xz/list.c:351 #, c-format -msgid " Memory needed: %s MiB\n" +msgid "%s: File is empty" msgstr "" -#: src/xz/list.c:905 src/xz/list.c:1080 +#: src/xz/list.c:356 #, c-format -msgid " Sizes in headers: %s\n" +msgid "%s: Too small to be a valid .xz file" msgstr "" -#: src/xz/list.c:906 src/xz/list.c:1081 +#. TRANSLATORS: These are column headings. From Strms (Streams) +#. to Ratio, the columns are right aligned. Check and Filename +#. are left aligned. If you need longer words, it's OK to +#. use two lines here. Test with "xz -l foo.xz". +#: src/xz/list.c:730 +msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" +msgstr "" + +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr "" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "" msgstr[1] "" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr "" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "" @@ -468,11 +532,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "" -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "" @@ -480,68 +544,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "" -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "" -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "" -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "" -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -549,15 +613,15 @@ "\n" msgstr "" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr "" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -565,26 +629,26 @@ " -l, --list list information about .xz files" msgstr "" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" msgstr "" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" " -c, --stdout write to standard output and don't delete input files" msgstr "" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" msgstr "" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -594,57 +658,57 @@ " --files0[=FILE] like --files but use the null character as terminator" msgstr "" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" msgstr "" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr "" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" msgstr "" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" msgstr "" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" msgstr "" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" " use this to set the block size for threaded compression" msgstr "" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" " intervals of uncompressed data" msgstr "" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -652,29 +716,31 @@ " would block, all pending data is flushed out" msgstr "" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" msgstr "" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" msgstr "" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -690,20 +756,21 @@ " depth=NUM maximum search depth; 0=automatic (default)" msgstr "" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -711,49 +778,49 @@ " from each other (1-256; 1)" msgstr "" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" msgstr "" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" msgstr "" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr "" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr "" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" msgstr "" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" msgstr "" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" msgstr "" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr "" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -763,17 +830,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "" @@ -801,27 +868,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "" @@ -845,15 +902,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "" Binary files xz-5.2.5/po/zh_CN.gmo and xz-5.4.3/po/zh_CN.gmo differ diff -ur xz-5.2.5/po/zh_CN.po xz-5.4.3/po/zh_CN.po --- xz-5.2.5/po/zh_CN.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/zh_CN.po 2023-05-04 17:32:21 @@ -1,118 +1,138 @@ # Chinese translations for xz package # xz 软件包的简体中文翻译。 # This file is put in the public domain. -# Boyuan Yang <073plan@gmail.com>, 2019. +# Boyuan Yang <073plan@gmail.com>, 2019, 2022. # msgid "" msgstr "" -"Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2019-03-20 15:25-0400\n" +"Project-Id-Version: xz 5.4.0-pre1\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" +"PO-Revision-Date: 2022-11-30 13:31-0500\n" "Last-Translator: Boyuan Yang <073plan@gmail.com>\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.2.1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.2\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s:--block-list 的无效参数" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s:--block-list 得到过多参数" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 仅可用于 --block-list 的最后一个元素" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s:位置文件格式类型" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s:不支持的完整性检查类型" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "仅可使用“--files”或“--files0”指定一个文件。" -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "环境变量 %s 包含过多参数" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "压缩支持已在构建时禁用" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "解压支持已在构建时禁用" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "不支持对 lzip 文件 (.lz) 的压缩" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s:在启用 --format-raw 选项时,必须指定 --suffix=.SUF 获知写入至标准输出" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "过滤器最多数量为四" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "内存用量限制对指定过滤器设置过低。" -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "不推荐在 raw 模式使用预设等级。" -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "各个预设等级所使用的准确选项列表在不同软件版本之间可能不同。" -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr ".lzma 格式只支持 LZMA1 过滤器" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 无法用于 .xz 格式" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "过滤器链和 --flush-timeout 不兼容" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "因 --flush-timeout 而切换至单线程模式" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "使用最多 % 个线程。" -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "不支持的过滤器链或过滤器选项" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "解压缩需要 %s MiB 的内存。" -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" -msgstr "已将所使用的线程数从 %s 调整为 %s,以不超出 %s MiB 的内存用量限制" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "已将所使用的线程数从 %s 减小为 %s,以不超出 %s MiB 的内存用量限制" -#: src/xz/coder.c:354 +#: src/xz/coder.c:329 #, c-format +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "已将所使用的线程数从 %s 减小为 1。这仍然超出了自动的内存使用限制 %s MiB。需要 %s MiB 的内存。继续操作。" + +#: src/xz/coder.c:356 +#, c-format +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" +msgstr "正在切换到单线程模式以不超出 %s MiB 的内存用量限制" + +#: src/xz/coder.c:411 +#, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "已调整 LZMA%c 字典大小(从 %s MiB 调整为 %s MiB),以不超出 %s MiB 的内存用量限制" @@ -121,11 +141,11 @@ msgid "Error creating a pipe: %s" msgstr "创建管道时出错:%s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "沙盒启用失败" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s:poll() 失败:%s" @@ -140,195 +160,321 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s:文件似乎已移动,不再进行删除操作" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s:无法删除:%s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s:无法设置文件所有者:%s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s:无法设置文件所有组:%s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s:无法设置文件权限:%s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "从标准输入获取文件状态标志出错:%s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s:是符号链接,跳过" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s:是目录,跳过" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s:不是标准文件,跳过" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s:文件有设置用户ID或设置组ID标识,跳过" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s:文件有粘滞位标识,跳过" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s:输入文件有多于一个硬链接,跳过" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "空文件名,跳过" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "回复标准输入的状态标志时出错:%s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "获取标准输出的文件状态标志时出错:%s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "恢复标准输出的 O_APPEND 标志时出错:%s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s:关闭文件失败:%s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s:尝试创建稀疏文件时 seek 失败:%s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s:读取错误:%s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s:seek 文件时出错:%s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s:未预期的文件结束" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s:写入错误:%s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "已禁用" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " -msgstr "物理内存(RAM)总量: " +#: src/xz/hardware.c:269 +msgid "Amount of physical memory (RAM):" +msgstr "物理内存(RAM)用量:" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "用于压缩的内存用量限制: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "处理器线程数:" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " -msgstr "用于解压缩的内存用量限制: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "压缩:" +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "解压缩:" + +#: src/xz/hardware.c:273 +msgid "Multi-threaded decompression:" +msgstr "多线程解压缩:" + +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "-T0 的默认值:" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "硬件信息:" + +#: src/xz/hardware.c:299 +msgid "Memory usage limits:" +msgstr "内存使用限制:" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "流:" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "块:" + +#: src/xz/list.c:70 +msgid "Compressed size:" +msgstr "压缩后大小:" + +#: src/xz/list.c:71 +msgid "Uncompressed size:" +msgstr "解压缩大小:" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "比例:" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "校验:" + +#: src/xz/list.c:74 +msgid "Stream Padding:" +msgstr "流填充大小:" + +#: src/xz/list.c:75 +msgid "Memory needed:" +msgstr "所需内存:" + +#: src/xz/list.c:76 +msgid "Sizes in headers:" +msgstr "头部存放大小:" + +#: src/xz/list.c:79 +msgid "Number of files:" +msgstr "文件数量:" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "流" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "块" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "块" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "压缩偏移量" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "解压偏移量" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "压缩后大小" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "解压缩大小" + +#: src/xz/list.c:129 +msgid "TotalSize" +msgstr "总大小" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "比例" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "校验" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "校验值" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "填充" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "头部" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "标志" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "内存用量" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "过滤器" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "无" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "未知-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "未知-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "未知-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "未知-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "未知-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "未知-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "未知-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "未知-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "未知-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "未知-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "未知-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "未知-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s:文件为空" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s:过小而不是有效的 .xz 文件" @@ -337,124 +483,40 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr " 流 块 压缩大小 解压大小 比例 校验 文件名" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " 流: %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " 块: %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " 压缩后大小: %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " 解压缩大小: %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " 压缩比: %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " 校验方式: %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " 流填充大小: %s\n" - -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" 流:\n" -" 流 块 压缩偏移量 解压偏移量 压缩大小 解压大小 比例 校验 填充" - -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" 块:\n" -" 流 块 压缩偏移量 解压偏移量 总计大小 解压大小 比例 校验" - -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " CheckVal %*s 头部 标记 压缩大小 内存使用 过滤器" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " 所需内存: %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " 头部存放大小: %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "是" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "否" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " 最低 XZ Utils 版本:%s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s 文件\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "总计:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " 文件数量: %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list 仅适用于 .xz 文件(--format=xz 或 --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list 不支持从标准输入读取" @@ -473,11 +535,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s:读取文件名列表时获得了空字符;您可能想要使用“--files0”而非“--files”?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "尚不支持带 --robot 的压缩和解压缩。" -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "无法同时从标准输入读取数据和文件名列表" @@ -485,68 +547,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s:" -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "内部错误(bug)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "无法建立信号处理器" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "无完整性检查;将不验证文件完整性" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "不支持的完整性检查类型;将不验证文件完整性" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "达到内存使用限制" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "无法识别文件格式" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "不支持的选项" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "压缩数据已损坏" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "输入意外结束" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "需要 %s MiB 的内存空间。限制已禁用。" -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "需要 %s MiB 的内存空间。限制为 %s。" -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s:过滤器链:%s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "请尝试执行“%s --help”来获取更多信息。" -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -557,15 +619,15 @@ "使用 .xz 格式压缩或解压缩文件。\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "必选参数对长短选项同时适用。\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " 操作模式:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -577,7 +639,7 @@ " -t, --test 测试压缩文件完整性\n" " -l, --list 列出 .xz 文件的信息" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -585,7 +647,7 @@ "\n" " 操作修饰符:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -595,13 +657,13 @@ " -f, --force 强制覆写输出文件和(解)压缩链接\n" " -c, --stdout 向标准输出写入,同时不要删除输入文件" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" msgstr " --single-stream 仅解压缩第一个流,忽略其后可能继续出现的输入数据" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -616,7 +678,7 @@ " 将从标准输入读取文件名列表;文件名必须使用换行符分隔\n" " --files0[=文件] 类似 --files,但使用空字符进行分隔" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -624,23 +686,24 @@ "\n" " 基本文件格式和压缩选项:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" " -F, --format=格式 要编码或解码的文件格式;可能的值包括\n" -" “auto”(默认)、“xz”、“lzma”和“raw”\n" +" “auto”(默认)、“xz”、“lzma”、\n" +" “lzip”和“raw”\n" " -C, --check=类型 完整性检查类型:“none”(请谨慎使用)、\n" " “crc32”、“crc64”(默认)或“sha256”" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check 解压缩时不要进行完整性检查验证" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -648,7 +711,7 @@ " -0 ... -9 压缩预设等级;默认为 6;使用 7-9 的等级之前,请先考虑\n" " 压缩和解压缩所需的内存用量!(会占用大量内存空间)" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -656,7 +719,7 @@ " -e, --extreme 尝试使用更多 CPU 时间来改进压缩比率;\n" " 不会影响解压缩的内存需求量" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -664,7 +727,7 @@ " -T, --threads=数量 使用最多指定数量的线程;默认值为 1;设置为 0\n" " 可以使用与处理器内核数量相同的线程数" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -674,7 +737,7 @@ " 输入每读取指定块大小的数据后即开始一个新的 .xz 块;\n" " 使用该选项可以设置多线程压缩中的块大小" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" @@ -684,7 +747,7 @@ " 在所给出的未压缩数据间隔大小的数据之后开始一个新的\n" " .xz 块(使用逗号分隔)" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -695,29 +758,32 @@ " 进行压缩时,如果从上次刷洗输出之后经过了指定的超时时间\n" " 且读取更多数据会被阻塞,则刷洗输出所有缓冲数据" -#: src/xz/message.c:1172 +#: src/xz/message.c:1043 #, no-c-format msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=限制用量\n" " --memlimit-decompress=限制用量\n" +" --memlimit-mt-decompress=限制用量\n" " -M, --memlimit=限制用量\n" -" 设置压缩、解压缩或者两者共同的内存用量限制;\n" +" 设置压缩、解压缩、多线程解压缩或者共同的内存用量限制;\n" " 所指定限制量单位为字节,或以百分号 % 结尾表示内存比例,\n" " 或者指定 0 取软件默认值" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" msgstr " --no-adjust 如果压缩设置超出内存用量限制,不调整设置而直接报错" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -725,7 +791,7 @@ "\n" " 用于压缩的自定义过滤器链(不使用预设等级时的备选用法):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -754,29 +820,31 @@ " (hc3, hc4, bt2, bt3, bt4; bt4)\n" " depth=数字 最大搜索深度; 0=自动(默认)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" msgstr "" "\n" " --x86[=选项] x86 BCJ 过滤器(32 位和 64 位)\n" +" --arm[=选项] ARM BCJ 过滤器\n" +" --armthumb[=选项] ARM-Thumb BCJ 过滤器\n" +" --arm64[=选项] ARM64 BCJ 过滤器\n" " --powerpc[=选项] PowerPC BCJ 过滤器(仅大端序)\n" " --ia64[=选项] IA-64 (Itanium,安腾) BCJ 过滤器\n" -" --arm[=选项] ARM BCJ 过滤器(仅小端序)\n" -" --armthumb[=选项] ARM-Thumb BCJ 过滤器(仅小端序)\n" " --sparc[=选项] SPARC BCJ 过滤器\n" " 所有过滤器可用选项:\n" " start=数字 转换的起始偏移量(默认=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -787,7 +855,7 @@ " --delta[=选项] 增量过滤器;有效选项(有效值;默认值):\n" " dist=NUM 相减的字节之间的距离 (1-256; 1)" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -795,7 +863,7 @@ "\n" " 其它选项:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -803,21 +871,21 @@ " -q, --quiet 不显示警告信息;指定两次可不显示错误信息\n" " -v, --verbose 输出详细信息;指定两次可以输出更详细的信息" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn 使得警告信息不影响程序退出返回值" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot 使用机器可解析的信息(对于脚本有用)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" msgstr " --info-memory 显示 RAM 总量和当前配置的内存用量限制,然后退出" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -825,7 +893,7 @@ " -h, --help 显示短帮助信息(仅列出基本选项)\n" " -H, --long-help 显示本长帮助信息" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -833,11 +901,11 @@ " -h, --help 显示本短帮助信息并退出\n" " -H, --long-help 显示长帮助信息(同时列出高级选项)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version 显示软件版本号并退出" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -849,7 +917,7 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "" @@ -857,12 +925,12 @@ "请使用中文向 TP 简体中文翻译团队 \n" "报告软件的简体中文翻译错误。\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 主页:<%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "这是开发版本,不适用于生产环境使用。" @@ -890,27 +958,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "lc 和 lp 的和必须不大于 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "所选中的匹配搜索器(match finder)至少需要 nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s:在启用 --format-raw 选项时,必须指定 --suffix=.SUF 获知写入至标准输出" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s:文件名有未知后缀,跳过" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s:文件已有“%s”后缀名,跳过" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s:无效的文件名后缀" @@ -934,15 +992,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "选项“%s”的值必须位于 [%, %] 范围内" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "空文件名,跳过" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "压缩数据不能从终端读取" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "压缩数据不能向终端写入" @@ -954,8 +1008,44 @@ msgid "Unknown error" msgstr "未知错误" +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "所选中的匹配搜索器(match finder)至少需要 nice=%" + #~ msgid "Sandbox is disabled due to incompatible command line arguments" #~ msgstr "沙盒已因不兼容的命令行参数而禁用" #~ msgid "Sandbox was successfully enabled" #~ msgstr "已成功启用沙盒" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "用于压缩的内存用量限制: " + +#~ msgid " Streams: %s\n" +#~ msgstr " 流: %s\n" + +#~ msgid " Blocks: %s\n" +#~ msgstr " 块: %s\n" + +#~ msgid " Ratio: %s\n" +#~ msgstr " 压缩比: %s\n" + +#~ msgid " Check: %s\n" +#~ msgstr " 校验方式: %s\n" + +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " 流:\n" +#~ " 流 块 压缩偏移量 解压偏移量 压缩大小 解压大小 比例 校验 填充" + +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " 块:\n" +#~ " 流 块 压缩偏移量 解压偏移量 总计大小 解压大小 比例 校验" + +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " CheckVal %*s 头部 标记 压缩大小 内存使用 过滤器" Binary files xz-5.2.5/po/zh_TW.gmo and xz-5.4.3/po/zh_TW.gmo differ diff -ur xz-5.2.5/po/zh_TW.po xz-5.4.3/po/zh_TW.po --- xz-5.2.5/po/zh_TW.po 2020-03-17 17:29:58 +++ xz-5.4.3/po/zh_TW.po 2023-05-04 17:32:21 @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: xz 5.2.4\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" +"Report-Msgid-Bugs-To: xz@tukaani.org\n" +"POT-Creation-Date: 2023-05-04 22:32+0800\n" "PO-Revision-Date: 2019-04-23 22:00+0800\n" "Last-Translator: pan93412 \n" "Language-Team: Chinese (traditional) \n" @@ -19,99 +19,121 @@ "X-Generator: Poedit 2.2.1\n" "X-Poedit-SourceCharset: UTF-8\n" -#: src/xz/args.c:63 +#: src/xz/args.c:77 #, c-format msgid "%s: Invalid argument to --block-list" msgstr "%s:傳入 --block-list 的參數無效" -#: src/xz/args.c:73 +#: src/xz/args.c:87 #, c-format msgid "%s: Too many arguments to --block-list" msgstr "%s:傳入 --block-list 的參數過多" -#: src/xz/args.c:102 +#: src/xz/args.c:116 msgid "0 can only be used as the last element in --block-list" msgstr "0 只能作為 --block-list 的最後一個元素" -#: src/xz/args.c:406 +#: src/xz/args.c:451 #, c-format msgid "%s: Unknown file format type" msgstr "%s:未知檔案格式類型" -#: src/xz/args.c:429 src/xz/args.c:437 +#: src/xz/args.c:474 src/xz/args.c:482 #, c-format msgid "%s: Unsupported integrity check type" msgstr "%s:不支援的完整性檢查類型" -#: src/xz/args.c:473 +#: src/xz/args.c:518 msgid "Only one file can be specified with `--files' or `--files0'." msgstr "「--files」或「--files0」只能指定一個檔案。" -#: src/xz/args.c:541 +#: src/xz/args.c:586 #, c-format msgid "The environment variable %s contains too many arguments" msgstr "%s 環境變數包含過多參數" -#: src/xz/args.c:643 +#: src/xz/args.c:688 msgid "Compression support was disabled at build time" msgstr "已在編譯時停用壓縮支援" -#: src/xz/args.c:650 +#: src/xz/args.c:695 msgid "Decompression support was disabled at build time" msgstr "已在編譯時停用解壓縮支援" -#: src/xz/coder.c:110 +#: src/xz/args.c:701 +msgid "Compression of lzip files (.lz) is not supported" +msgstr "" + +#: src/xz/args.c:732 +#, fuzzy +#| msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "%s:搭配 --format=raw 時,除非寫入標準輸出,否則需要 --suffix=.SUF" + +#: src/xz/coder.c:115 msgid "Maximum number of filters is four" msgstr "最多只能指定 4 個篩選器" -#: src/xz/coder.c:129 +#: src/xz/coder.c:134 msgid "Memory usage limit is too low for the given filter setup." msgstr "記憶體用量限制過低,不足以設定指定的篩選器。" -#: src/xz/coder.c:159 +#: src/xz/coder.c:169 msgid "Using a preset in raw mode is discouraged." msgstr "不建議在 Raw 模式使用設定檔。" -#: src/xz/coder.c:161 +#: src/xz/coder.c:171 msgid "The exact options of the presets may vary between software versions." msgstr "設定檔的選項可能因軟體版本而有異。" -#: src/xz/coder.c:184 +#: src/xz/coder.c:194 msgid "The .lzma format supports only the LZMA1 filter" msgstr ".lzma 格式僅支援 LZMA1 篩選器" -#: src/xz/coder.c:192 +#: src/xz/coder.c:202 msgid "LZMA1 cannot be used with the .xz format" msgstr "LZMA1 不能與 .xz 格式一同使用" -#: src/xz/coder.c:209 +#: src/xz/coder.c:219 msgid "The filter chain is incompatible with --flush-timeout" msgstr "篩選鏈不相容 --flush-timeout" -#: src/xz/coder.c:215 +#: src/xz/coder.c:225 msgid "Switching to single-threaded mode due to --flush-timeout" msgstr "因指定 --flush-timeout,因此切換到單執行緒模式" -#: src/xz/coder.c:235 +#: src/xz/coder.c:249 #, c-format msgid "Using up to % threads." msgstr "使用最多 % 個執行緒。" -#: src/xz/coder.c:251 +#: src/xz/coder.c:265 msgid "Unsupported filter chain or filter options" msgstr "不支援的篩選鏈或篩選器選項" -#: src/xz/coder.c:263 +#: src/xz/coder.c:277 #, c-format msgid "Decompression will need %s MiB of memory." msgstr "解壓縮將需要 %s MiB 的記憶體。" -#: src/xz/coder.c:300 +#: src/xz/coder.c:309 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgstr "已將 %s 個執行緒調整至 %s,以不超過記憶體用量的 %s MiB 限制" + +#: src/xz/coder.c:329 #, c-format -msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Reduced the number of threads from %s to one. The automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is required. Continuing anyway." +msgstr "" + +#: src/xz/coder.c:356 +#, fuzzy, c-format +#| msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB" +msgid "Switching to single-threaded mode to not exceed the memory usage limit of %s MiB" msgstr "已將 %s 個執行緒調整至 %s,以不超過記憶體用量的 %s MiB 限制" -#: src/xz/coder.c:354 +#: src/xz/coder.c:411 #, c-format msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB" msgstr "已將 LZMA%c 的字典大小從 %s MiB 調整至 %s MiB,以不超過記憶體用量的 %s MiB 限制" @@ -121,11 +143,11 @@ msgid "Error creating a pipe: %s" msgstr "建立管線時發生錯誤:%s" -#: src/xz/file_io.c:224 +#: src/xz/file_io.c:252 msgid "Failed to enable the sandbox" msgstr "無法啟用沙盒" -#: src/xz/file_io.c:266 +#: src/xz/file_io.c:294 #, c-format msgid "%s: poll() failed: %s" msgstr "%s:poll() 失敗:%s" @@ -140,195 +162,341 @@ #. it is possible that the user has put a new file in place #. of the original file, and in that case it obviously #. shouldn't be removed. -#: src/xz/file_io.c:333 +#: src/xz/file_io.c:361 #, c-format msgid "%s: File seems to have been moved, not removing" msgstr "%s:檔案似乎已經遷移,不移除" -#: src/xz/file_io.c:340 src/xz/file_io.c:882 +#: src/xz/file_io.c:368 src/xz/file_io.c:924 #, c-format msgid "%s: Cannot remove: %s" msgstr "%s:無法移除:%s" -#: src/xz/file_io.c:366 +#: src/xz/file_io.c:394 #, c-format msgid "%s: Cannot set the file owner: %s" msgstr "%s:無法設定檔案所有者:%s" -#: src/xz/file_io.c:372 +#: src/xz/file_io.c:407 #, c-format msgid "%s: Cannot set the file group: %s" msgstr "%s:無法設定檔案群組:%s" -#: src/xz/file_io.c:391 +#: src/xz/file_io.c:426 #, c-format msgid "%s: Cannot set the file permissions: %s" msgstr "%s:無法設定檔案權限:%s" -#: src/xz/file_io.c:517 +#: src/xz/file_io.c:552 #, c-format msgid "Error getting the file status flags from standard input: %s" msgstr "從標準輸入取得檔案狀態旗標時發生錯誤:%s" -#: src/xz/file_io.c:574 src/xz/file_io.c:636 +#: src/xz/file_io.c:610 src/xz/file_io.c:672 #, c-format msgid "%s: Is a symbolic link, skipping" msgstr "%s:是個符號連結,跳過" -#: src/xz/file_io.c:665 +#: src/xz/file_io.c:701 #, c-format msgid "%s: Is a directory, skipping" msgstr "%s:是個目錄,跳過" -#: src/xz/file_io.c:671 +#: src/xz/file_io.c:707 #, c-format msgid "%s: Not a regular file, skipping" msgstr "%s:不是一般檔案,跳過" -#: src/xz/file_io.c:688 +#: src/xz/file_io.c:724 #, c-format msgid "%s: File has setuid or setgid bit set, skipping" msgstr "%s:檔案已設定 setuid 或 setgid 位元,跳過" -#: src/xz/file_io.c:695 +#: src/xz/file_io.c:731 #, c-format msgid "%s: File has sticky bit set, skipping" msgstr "%s:檔案已設定黏性位元(sticky bit),跳過" -#: src/xz/file_io.c:702 +#: src/xz/file_io.c:738 #, c-format msgid "%s: Input file has more than one hard link, skipping" msgstr "%s:輸入檔有超過一個實際連結 (hard link),跳過" -#: src/xz/file_io.c:792 +#: src/xz/file_io.c:780 +msgid "Empty filename, skipping" +msgstr "空檔名,跳過" + +#: src/xz/file_io.c:834 #, c-format msgid "Error restoring the status flags to standard input: %s" msgstr "將狀態旗標還原到標準輸入時發生錯誤:%s" -#: src/xz/file_io.c:840 +#: src/xz/file_io.c:882 #, c-format msgid "Error getting the file status flags from standard output: %s" msgstr "從標準輸出取得檔案狀態旗標時發生錯誤:%s" -#: src/xz/file_io.c:1018 +#: src/xz/file_io.c:1060 #, c-format msgid "Error restoring the O_APPEND flag to standard output: %s" msgstr "將 O_APPEND 旗標還原到標準輸出時發生錯誤:%s" -#: src/xz/file_io.c:1030 +#: src/xz/file_io.c:1072 #, c-format msgid "%s: Closing the file failed: %s" msgstr "%s:關閉檔案失敗:%s" -#: src/xz/file_io.c:1066 src/xz/file_io.c:1309 +#: src/xz/file_io.c:1108 src/xz/file_io.c:1371 #, c-format msgid "%s: Seeking failed when trying to create a sparse file: %s" msgstr "%s:嘗試建立疏鬆檔案時發生搜尋失敗:%s" -#: src/xz/file_io.c:1167 +#: src/xz/file_io.c:1209 #, c-format msgid "%s: Read error: %s" msgstr "%s:讀取時發生錯誤:%s" -#: src/xz/file_io.c:1191 +#: src/xz/file_io.c:1239 #, c-format msgid "%s: Error seeking the file: %s" msgstr "%s:搜尋檔案時發生錯誤:%s" -#: src/xz/file_io.c:1201 +#: src/xz/file_io.c:1263 #, c-format msgid "%s: Unexpected end of file" msgstr "%s:非期望的檔案結尾" -#: src/xz/file_io.c:1260 +#: src/xz/file_io.c:1322 #, c-format msgid "%s: Write error: %s" msgstr "%s:寫入時發生錯誤:%s" -#: src/xz/hardware.c:137 +#: src/xz/hardware.c:238 msgid "Disabled" msgstr "已停用" -#. TRANSLATORS: Test with "xz --info-memory" to see if -#. the alignment looks nice. -#: src/xz/hardware.c:156 -msgid "Total amount of physical memory (RAM): " +#: src/xz/hardware.c:269 +#, fuzzy +#| msgid "Total amount of physical memory (RAM): " +msgid "Amount of physical memory (RAM):" msgstr "實體記憶體 (RAM) 總量:" -#: src/xz/hardware.c:158 -msgid "Memory usage limit for compression: " -msgstr "壓縮記憶體限制: " +#: src/xz/hardware.c:270 +msgid "Number of processor threads:" +msgstr "" -#: src/xz/hardware.c:160 -msgid "Memory usage limit for decompression: " +#: src/xz/hardware.c:271 +msgid "Compression:" +msgstr "" + +#: src/xz/hardware.c:272 +msgid "Decompression:" +msgstr "" + +#: src/xz/hardware.c:273 +#, fuzzy +#| msgid "Memory usage limit for decompression: " +msgid "Multi-threaded decompression:" msgstr "解壓縮記憶體限制: " +#: src/xz/hardware.c:274 +msgid "Default for -T0:" +msgstr "" + +#: src/xz/hardware.c:292 +msgid "Hardware information:" +msgstr "" + +#: src/xz/hardware.c:299 +#, fuzzy +#| msgid "Memory usage limit reached" +msgid "Memory usage limits:" +msgstr "達到記憶體用量上限" + +#: src/xz/list.c:68 +msgid "Streams:" +msgstr "" + +#: src/xz/list.c:69 +msgid "Blocks:" +msgstr "" + +#: src/xz/list.c:70 +#, fuzzy +#| msgid " Compressed size: %s\n" +msgid "Compressed size:" +msgstr " 壓縮大小:       %s\n" + +#: src/xz/list.c:71 +#, fuzzy +#| msgid " Uncompressed size: %s\n" +msgid "Uncompressed size:" +msgstr " 未壓縮大小:      %s\n" + +#: src/xz/list.c:72 +msgid "Ratio:" +msgstr "" + +#: src/xz/list.c:73 +msgid "Check:" +msgstr "" + +#: src/xz/list.c:74 +#, fuzzy +#| msgid " Stream padding: %s\n" +msgid "Stream Padding:" +msgstr " 串流填充:       %s\n" + +#: src/xz/list.c:75 +#, fuzzy +#| msgid " Memory needed: %s MiB\n" +msgid "Memory needed:" +msgstr " 所需記憶體量:     %s MiB\n" + +#: src/xz/list.c:76 +#, fuzzy +#| msgid " Sizes in headers: %s\n" +msgid "Sizes in headers:" +msgstr " 檔頭中標示大小:    %s\n" + +#: src/xz/list.c:79 +#, fuzzy +#| msgid " Number of files: %s\n" +msgid "Number of files:" +msgstr " 檔案數:        %s\n" + +#: src/xz/list.c:122 +msgid "Stream" +msgstr "" + +#: src/xz/list.c:123 +msgid "Block" +msgstr "" + +#: src/xz/list.c:124 +msgid "Blocks" +msgstr "" + +#: src/xz/list.c:125 +msgid "CompOffset" +msgstr "" + +#: src/xz/list.c:126 +msgid "UncompOffset" +msgstr "" + +#: src/xz/list.c:127 +msgid "CompSize" +msgstr "" + +#: src/xz/list.c:128 +msgid "UncompSize" +msgstr "" + +#: src/xz/list.c:129 +#, fuzzy +#| msgid "Totals:" +msgid "TotalSize" +msgstr "總計:" + +#: src/xz/list.c:130 +msgid "Ratio" +msgstr "" + +#: src/xz/list.c:131 +msgid "Check" +msgstr "" + +#: src/xz/list.c:132 +msgid "CheckVal" +msgstr "" + +#: src/xz/list.c:133 +msgid "Padding" +msgstr "" + +#: src/xz/list.c:134 +msgid "Header" +msgstr "" + +#: src/xz/list.c:135 +msgid "Flags" +msgstr "" + +#: src/xz/list.c:136 +msgid "MemUsage" +msgstr "" + +#: src/xz/list.c:137 +msgid "Filters" +msgstr "" + #. TRANSLATORS: Indicates that there is no integrity check. -#. This string is used in tables, so the width must not -#. exceed ten columns with a fixed-width font. -#: src/xz/list.c:65 +#. This string is used in tables. In older xz version this +#. string was limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:169 msgid "None" msgstr "無" #. TRANSLATORS: Indicates that integrity check name is not known, -#. but the Check ID is known (here 2). This and other "Unknown-N" -#. strings are used in tables, so the width must not exceed ten -#. columns with a fixed-width font. It's OK to omit the dash if -#. you need space for one extra letter, but don't use spaces. -#: src/xz/list.c:72 +#. but the Check ID is known (here 2). In older xz version these +#. strings were limited to ten columns in a fixed-width font, but +#. nowadays there is no strict length restriction anymore. +#: src/xz/list.c:175 msgid "Unknown-2" msgstr "未知-2" -#: src/xz/list.c:73 +#: src/xz/list.c:176 msgid "Unknown-3" msgstr "未知-3" -#: src/xz/list.c:75 +#: src/xz/list.c:178 msgid "Unknown-5" msgstr "未知-5" -#: src/xz/list.c:76 +#: src/xz/list.c:179 msgid "Unknown-6" msgstr "未知-6" -#: src/xz/list.c:77 +#: src/xz/list.c:180 msgid "Unknown-7" msgstr "未知-7" -#: src/xz/list.c:78 +#: src/xz/list.c:181 msgid "Unknown-8" msgstr "未知-8" -#: src/xz/list.c:79 +#: src/xz/list.c:182 msgid "Unknown-9" msgstr "未知-9" -#: src/xz/list.c:81 +#: src/xz/list.c:184 msgid "Unknown-11" msgstr "未知-11" -#: src/xz/list.c:82 +#: src/xz/list.c:185 msgid "Unknown-12" msgstr "未知-12" -#: src/xz/list.c:83 +#: src/xz/list.c:186 msgid "Unknown-13" msgstr "未知-13" -#: src/xz/list.c:84 +#: src/xz/list.c:187 msgid "Unknown-14" msgstr "未知-14" -#: src/xz/list.c:85 +#: src/xz/list.c:188 msgid "Unknown-15" msgstr "未知-15" -#: src/xz/list.c:153 +#: src/xz/list.c:351 #, c-format msgid "%s: File is empty" msgstr "%s:檔案是空的" -#: src/xz/list.c:158 +#: src/xz/list.c:356 #, c-format msgid "%s: Too small to be a valid .xz file" msgstr "%s:因過小而不認為是個有效 .xz 檔" @@ -337,127 +505,40 @@ #. to Ratio, the columns are right aligned. Check and Filename #. are left aligned. If you need longer words, it's OK to #. use two lines here. Test with "xz -l foo.xz". -#: src/xz/list.c:677 +#: src/xz/list.c:730 msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename" msgstr " 串流  區塊    已壓縮    未壓縮  比例 檢驗碼 檔名" -#: src/xz/list.c:717 -#, c-format -msgid " Streams: %s\n" -msgstr " 串流:         %s\n" - -#: src/xz/list.c:719 -#, c-format -msgid " Blocks: %s\n" -msgstr " 區塊:         %s\n" - -#: src/xz/list.c:721 -#, c-format -msgid " Compressed size: %s\n" -msgstr " 壓縮大小:       %s\n" - -#: src/xz/list.c:724 -#, c-format -msgid " Uncompressed size: %s\n" -msgstr " 未壓縮大小:      %s\n" - -#: src/xz/list.c:727 -#, c-format -msgid " Ratio: %s\n" -msgstr " 壓縮比:        %s\n" - -#: src/xz/list.c:729 -#, c-format -msgid " Check: %s\n" -msgstr " 檢驗碼:        %s\n" - -#: src/xz/list.c:730 -#, c-format -msgid " Stream padding: %s\n" -msgstr " 串流填充:       %s\n" - -# 下方的文字因排版有一些障礙,因此暫時不理他。 -#. TRANSLATORS: The second line is column headings. All except -#. Check are right aligned; Check is left aligned. Test with -#. "xz -lv foo.xz". -#: src/xz/list.c:758 -msgid "" -" Streams:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" -msgstr "" -" 串流:\n" -" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" - -# 下方的文字因排版有一些障礙,因此暫時不理他。 -#. TRANSLATORS: The second line is column headings. All -#. except Check are right aligned; Check is left aligned. -#: src/xz/list.c:813 -#, c-format -msgid "" -" Blocks:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" -msgstr "" -" 區塊:\n" -" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" - -# 下方的文字因排版有一些障礙,因此暫時不理他。 -#. TRANSLATORS: These are additional column headings -#. for the most verbose listing mode. CheckVal -#. (Check value), Flags, and Filters are left aligned. -#. Header (Block Header Size), CompSize, and MemUsage -#. are right aligned. %*s is replaced with 0-120 -#. spaces to make the CheckVal column wide enough. -#. Test with "xz -lvv foo.xz". -#: src/xz/list.c:825 -#, c-format -msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" -msgstr " CheckVal %*s Header Flags CompSize MemUsage Filters" - -#: src/xz/list.c:903 src/xz/list.c:1078 -#, c-format -msgid " Memory needed: %s MiB\n" -msgstr " 所需記憶體量:     %s MiB\n" - -#: src/xz/list.c:905 src/xz/list.c:1080 -#, c-format -msgid " Sizes in headers: %s\n" -msgstr " 檔頭中標示大小:    %s\n" - -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "Yes" msgstr "是" -#: src/xz/list.c:906 src/xz/list.c:1081 +#: src/xz/list.c:1025 src/xz/list.c:1203 msgid "No" msgstr "否" -#: src/xz/list.c:907 src/xz/list.c:1082 +#: src/xz/list.c:1027 src/xz/list.c:1205 #, c-format msgid " Minimum XZ Utils version: %s\n" msgstr " 最小 XZ 工具程式版本: %s\n" #. TRANSLATORS: %s is an integer. Only the plural form of this #. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz". -#: src/xz/list.c:1057 +#: src/xz/list.c:1178 #, c-format msgid "%s file\n" msgid_plural "%s files\n" msgstr[0] "%s 個檔案\n" -#: src/xz/list.c:1070 +#: src/xz/list.c:1191 msgid "Totals:" msgstr "總計:" -#: src/xz/list.c:1071 -#, c-format -msgid " Number of files: %s\n" -msgstr " 檔案數:        %s\n" - -#: src/xz/list.c:1146 +#: src/xz/list.c:1269 msgid "--list works only on .xz files (--format=xz or --format=auto)" msgstr "--list 只能在 .xz 檔使用(--format=xz 或 --format=auto)" -#: src/xz/list.c:1152 +#: src/xz/list.c:1275 msgid "--list does not support reading from standard input" msgstr "--list 不支援從標準輸入讀取" @@ -476,11 +557,11 @@ msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" msgstr "%s:讀取檔名時發現空字元;或許您想使用「--files0」而非「--files」?" -#: src/xz/main.c:174 +#: src/xz/main.c:188 msgid "Compression and decompression with --robot are not supported yet." msgstr "尚未支援搭配 --robot 壓縮和解壓縮。" -#: src/xz/main.c:252 +#: src/xz/main.c:266 msgid "Cannot read data from standard input when reading filenames from standard input" msgstr "從標準輸入讀取檔名時,無法從標準輸入讀取資料" @@ -488,68 +569,68 @@ #. of the line in messages. Usually it becomes "xz: ". #. This is a translatable string because French needs #. a space before a colon. -#: src/xz/message.c:728 +#: src/xz/message.c:725 #, c-format msgid "%s: " msgstr "%s:" -#: src/xz/message.c:791 src/xz/message.c:841 +#: src/xz/message.c:797 src/xz/message.c:856 msgid "Internal error (bug)" msgstr "內部錯誤(臭蟲)" -#: src/xz/message.c:798 +#: src/xz/message.c:804 msgid "Cannot establish signal handlers" msgstr "無法確立信號處理器" -#: src/xz/message.c:807 +#: src/xz/message.c:813 msgid "No integrity check; not verifying file integrity" msgstr "沒有完整性檢查;不驗證檔案完整性" -#: src/xz/message.c:810 +#: src/xz/message.c:816 msgid "Unsupported type of integrity check; not verifying file integrity" msgstr "未知完整性檢查類型;不驗證檔案完整性" -#: src/xz/message.c:817 +#: src/xz/message.c:823 msgid "Memory usage limit reached" msgstr "達到記憶體用量上限" -#: src/xz/message.c:820 +#: src/xz/message.c:826 msgid "File format not recognized" msgstr "無法識別檔案格式" -#: src/xz/message.c:823 +#: src/xz/message.c:829 msgid "Unsupported options" msgstr "不支援的選項" -#: src/xz/message.c:826 +#: src/xz/message.c:832 msgid "Compressed data is corrupt" msgstr "壓縮資料是損壞的" -#: src/xz/message.c:829 +#: src/xz/message.c:835 msgid "Unexpected end of input" msgstr "遇到非預期輸入結尾" -#: src/xz/message.c:862 +#: src/xz/message.c:877 #, c-format msgid "%s MiB of memory is required. The limiter is disabled." msgstr "需要 %s MiB 的記憶體。已停用記憶體限制器。" -#: src/xz/message.c:890 +#: src/xz/message.c:905 #, c-format msgid "%s MiB of memory is required. The limit is %s." msgstr "需要 %s MiB 的記憶體。記憶體限制為 %s。" -#: src/xz/message.c:1057 +#: src/xz/message.c:924 #, c-format msgid "%s: Filter chain: %s\n" msgstr "%s:篩選鏈:%s\n" -#: src/xz/message.c:1067 +#: src/xz/message.c:935 #, c-format msgid "Try `%s --help' for more information." msgstr "嘗試「%s --help」取得更多資訊。" -#: src/xz/message.c:1093 +#: src/xz/message.c:961 #, c-format msgid "" "Usage: %s [OPTION]... [FILE]...\n" @@ -560,15 +641,15 @@ "用 .xz 格式壓縮,或解壓縮 .xz 格式中的 <檔案>。\n" "\n" -#: src/xz/message.c:1100 +#: src/xz/message.c:968 msgid "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "長選項的必填參數,對短選項也是必填。\n" -#: src/xz/message.c:1104 +#: src/xz/message.c:972 msgid " Operation mode:\n" msgstr " 操作模式:\n" -#: src/xz/message.c:1107 +#: src/xz/message.c:975 msgid "" " -z, --compress force compression\n" " -d, --decompress force decompression\n" @@ -580,7 +661,7 @@ " -t, --test 測試壓縮檔完整性\n" " -l, --list 列出 .xz 檔的資訊" -#: src/xz/message.c:1113 +#: src/xz/message.c:981 msgid "" "\n" " Operation modifiers:\n" @@ -588,7 +669,7 @@ "\n" " 操作修飾詞:\n" -#: src/xz/message.c:1116 +#: src/xz/message.c:984 msgid "" " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" @@ -598,7 +679,7 @@ " -f, --force 強制覆寫輸出檔並(解)壓縮連結\n" " -c, --stdout 寫入標準輸出並不刪除輸入檔" -#: src/xz/message.c:1122 +#: src/xz/message.c:993 msgid "" " --single-stream decompress only the first stream, and silently\n" " ignore possible remaining input data" @@ -606,7 +687,7 @@ " --single-stream 僅解壓縮第一個串流,再\n" " 安靜地忽略可能剩餘的輸入檔" -#: src/xz/message.c:1125 +#: src/xz/message.c:996 msgid "" " --no-sparse do not create sparse files when decompressing\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" @@ -621,7 +702,7 @@ " 則從標準輸入讀取檔名;檔名必須以換行字元作為結尾\n" " --files0[=檔案] 類似 --files 但是以 null 空字元作結尾" -#: src/xz/message.c:1134 +#: src/xz/message.c:1005 msgid "" "\n" " Basic file format and compression options:\n" @@ -629,10 +710,16 @@ "\n" " 基本檔案格式與壓縮選項:\n" -#: src/xz/message.c:1136 +#: src/xz/message.c:1007 +#, fuzzy +#| msgid "" +#| " -F, --format=FMT file format to encode or decode; possible values are\n" +#| " `auto' (default), `xz', `lzma', and `raw'\n" +#| " -C, --check=CHECK integrity check type: `none' (use with caution),\n" +#| " `crc32', `crc64' (default), or `sha256'" msgid "" " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'" msgstr "" @@ -641,11 +728,11 @@ " -C, --check=檢查碼 完整性檢查類型:「none」(請小心使用)、「crc32」、\n" " 「crc64」(預設值)或「sha256」" -#: src/xz/message.c:1141 +#: src/xz/message.c:1012 msgid " --ignore-check don't verify the integrity check when decompressing" msgstr " --ignore-check 不在解壓縮時驗證完整性" -#: src/xz/message.c:1145 +#: src/xz/message.c:1016 msgid "" " -0 ... -9 compression preset; default is 6; take compressor *and*\n" " decompressor memory usage into account before using 7-9!" @@ -653,7 +740,7 @@ " -0 ... -9 壓縮設定檔;預設值為 6;使用 7-9 前請考慮\n" " 壓縮和解壓縮所使用的記憶體!" -#: src/xz/message.c:1149 +#: src/xz/message.c:1020 msgid "" " -e, --extreme try to improve compression ratio by using more CPU time;\n" " does not affect decompressor memory requirements" @@ -661,7 +748,7 @@ " -e, --extreme 使用更多 CPU 時間以嘗試改善壓縮比;\n" " 不影響解壓縮器的記憶體需求" -#: src/xz/message.c:1153 +#: src/xz/message.c:1024 msgid "" " -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " to use as many threads as there are processor cores" @@ -669,7 +756,7 @@ " -T, --threads=NUM 使用最多 NUM 個執行緒;預設為 1;設成 0 則使用所有的\n" " 處理機核心" -#: src/xz/message.c:1158 +#: src/xz/message.c:1029 msgid "" " --block-size=SIZE\n" " start a new .xz block after every SIZE bytes of input;\n" @@ -679,14 +766,14 @@ " 輸入每 <大小> 位元組後,開始一個新 .xz 區塊;\n" " 使用此功能以設定多執行緒壓縮的區塊大小" -#: src/xz/message.c:1162 +#: src/xz/message.c:1033 msgid "" " --block-list=SIZES\n" " start a new .xz block after the given comma-separated\n" " intervals of uncompressed data" msgstr "" -#: src/xz/message.c:1166 +#: src/xz/message.c:1037 msgid "" " --flush-timeout=TIMEOUT\n" " when compressing, if more than TIMEOUT milliseconds has\n" @@ -694,14 +781,22 @@ " would block, all pending data is flushed out" msgstr "" -#: src/xz/message.c:1172 -#, no-c-format +#: src/xz/message.c:1043 +#, fuzzy, no-c-format +#| msgid "" +#| " --memlimit-compress=LIMIT\n" +#| " --memlimit-decompress=LIMIT\n" +#| " -M, --memlimit=LIMIT\n" +#| " set memory usage limit for compression, decompression,\n" +#| " or both; LIMIT is in bytes, % of RAM, or 0 for defaults" msgid "" " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults" +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults" msgstr "" " --memlimit-compress=限制\n" " --memlimit-decompress=限制\n" @@ -709,7 +804,7 @@ " 限制壓縮、解壓縮或兩者的記憶體用量上限;\n" " <限制> 可以是位元組、記憶體百分比 (%)、或 0(預設值)" -#: src/xz/message.c:1179 +#: src/xz/message.c:1052 msgid "" " --no-adjust if compression settings exceed the memory usage limit,\n" " give an error instead of adjusting the settings downwards" @@ -717,7 +812,7 @@ " --no-adjust 若壓縮設定超過記憶體用量上限,請給出\n" " 錯誤而非下調設定" -#: src/xz/message.c:1185 +#: src/xz/message.c:1058 msgid "" "\n" " Custom filter chain for compression (alternative for using presets):" @@ -725,7 +820,7 @@ "\n" " 自訂壓縮篩選鏈(使用設定檔時選用):" -#: src/xz/message.c:1194 +#: src/xz/message.c:1067 msgid "" "\n" " --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" @@ -753,14 +848,26 @@ " mf=名稱 尋找符合搜尋器 (hc3, hc4, bt2, bt3, bt4; bt4)\n" " depth=NUM 最大搜尋深度;0=自動(預設)" -#: src/xz/message.c:1209 +#: src/xz/message.c:1082 +#, fuzzy +#| msgid "" +#| "\n" +#| " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +#| " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +#| " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" +#| " --arm[=OPTS] ARM BCJ filter (little endian only)\n" +#| " --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +#| " --sparc[=OPTS] SPARC BCJ filter\n" +#| " Valid OPTS for all BCJ filters:\n" +#| " start=NUM start offset for conversions (default=0)" msgid "" "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)" @@ -775,7 +882,7 @@ " 所有 BCJ 篩選器可用的 OPTS:\n" " start=NUM 轉換起始位移(預設值=0)" -#: src/xz/message.c:1221 +#: src/xz/message.c:1095 msgid "" "\n" " --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" @@ -783,7 +890,7 @@ " from each other (1-256; 1)" msgstr "" -#: src/xz/message.c:1229 +#: src/xz/message.c:1103 msgid "" "\n" " Other options:\n" @@ -791,7 +898,7 @@ "\n" " 其他選項:\n" -#: src/xz/message.c:1232 +#: src/xz/message.c:1106 msgid "" " -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -v, --verbose be verbose; specify twice for even more verbose" @@ -799,21 +906,21 @@ " -q, --quiet 隱藏警告訊息;指定兩次也一併隱藏錯誤訊息\n" " -v, --verbose 輸出較詳細內容;指定兩次更詳細輸出" -#: src/xz/message.c:1237 +#: src/xz/message.c:1111 msgid " -Q, --no-warn make warnings not affect the exit status" msgstr " -Q, --no-warn 即使有警告,退出狀態碼仍不變" -#: src/xz/message.c:1239 +#: src/xz/message.c:1113 msgid " --robot use machine-parsable messages (useful for scripts)" msgstr " --robot 使用機器可解析訊息(適合用於指令稿)" -#: src/xz/message.c:1242 +#: src/xz/message.c:1116 msgid "" " --info-memory display the total amount of RAM and the currently active\n" " memory usage limits, and exit" msgstr " --info-memory 顯示記憶體總量和使用中的記憶體用量限制後退出" -#: src/xz/message.c:1245 +#: src/xz/message.c:1119 msgid "" " -h, --help display the short help (lists only the basic options)\n" " -H, --long-help display this long help and exit" @@ -821,7 +928,7 @@ " -h, --help 顯示較短說明(僅列出基本選項)\n" " -H, --long-help 顯示較長說明後退出" -#: src/xz/message.c:1249 +#: src/xz/message.c:1123 msgid "" " -h, --help display this short help and exit\n" " -H, --long-help display the long help (lists also the advanced options)" @@ -829,11 +936,11 @@ " -h, --help 顯示較短說明後退出\n" " -H, --long-help 顯示較長說明(也列出進階選項)" -#: src/xz/message.c:1254 +#: src/xz/message.c:1128 msgid " -V, --version display the version number and exit" msgstr " -V, --version 顯示版本號碼後退出" -#: src/xz/message.c:1256 +#: src/xz/message.c:1130 msgid "" "\n" "With no FILE, or when FILE is -, read standard input.\n" @@ -845,17 +952,17 @@ #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the email or WWW #. address for translation bugs. Thanks. -#: src/xz/message.c:1262 +#: src/xz/message.c:1136 #, c-format msgid "Report bugs to <%s> (in English or Finnish).\n" msgstr "請回報臭蟲至 <%s>(使用英文或芬蘭語)。\n" -#: src/xz/message.c:1264 +#: src/xz/message.c:1138 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 首頁:<%s>\n" -#: src/xz/message.c:1268 +#: src/xz/message.c:1142 msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE." msgstr "此為開發版本,不打算在生產環境使用。" @@ -883,27 +990,17 @@ msgid "The sum of lc and lp must not exceed 4" msgstr "lc 和 lp 的總和不能超過 4" -#: src/xz/options.c:359 +#: src/xz/suffix.c:160 #, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "選取的符合搜尋工具需要至少 nice=%" - -#: src/xz/suffix.c:133 src/xz/suffix.c:258 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "%s:搭配 --format=raw 時,除非寫入標準輸出,否則需要 --suffix=.SUF" - -#: src/xz/suffix.c:164 -#, c-format msgid "%s: Filename has an unknown suffix, skipping" msgstr "%s:檔名有未知後綴,跳過" -#: src/xz/suffix.c:185 +#: src/xz/suffix.c:181 #, c-format msgid "%s: File already has `%s' suffix, skipping" msgstr "%s:檔案已有「%s」後綴,跳過" -#: src/xz/suffix.c:393 +#: src/xz/suffix.c:388 #, c-format msgid "%s: Invalid filename suffix" msgstr "%s:檔名後綴無效" @@ -927,15 +1024,11 @@ msgid "Value of the option `%s' must be in the range [%, %]" msgstr "選項「%s」的數值必須在 [%, %] 範圍內" -#: src/xz/util.c:267 -msgid "Empty filename, skipping" -msgstr "空檔名,跳過" - -#: src/xz/util.c:281 +#: src/xz/util.c:269 msgid "Compressed data cannot be read from a terminal" msgstr "不能從終端機讀入已壓縮資料" -#: src/xz/util.c:294 +#: src/xz/util.c:282 msgid "Compressed data cannot be written to a terminal" msgstr "不能將已壓縮資料寫入終端機" @@ -952,3 +1045,48 @@ #~ msgid "Sandbox was successfully enabled" #~ msgstr "已成功啟用沙盒" + +#~ msgid "Memory usage limit for compression: " +#~ msgstr "壓縮記憶體限制: " + +#, c-format +#~ msgid " Streams: %s\n" +#~ msgstr " 串流:         %s\n" + +#, c-format +#~ msgid " Blocks: %s\n" +#~ msgstr " 區塊:         %s\n" + +#, c-format +#~ msgid " Ratio: %s\n" +#~ msgstr " 壓縮比:        %s\n" + +#, c-format +#~ msgid " Check: %s\n" +#~ msgstr " 檢驗碼:        %s\n" + +# 下方的文字因排版有一些障礙,因此暫時不理他。 +#~ msgid "" +#~ " Streams:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" +#~ msgstr "" +#~ " 串流:\n" +#~ " Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding" + +# 下方的文字因排版有一些障礙,因此暫時不理他。 +#, c-format +#~ msgid "" +#~ " Blocks:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" +#~ msgstr "" +#~ " 區塊:\n" +#~ " Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check" + +# 下方的文字因排版有一些障礙,因此暫時不理他。 +#, c-format +#~ msgid " CheckVal %*s Header Flags CompSize MemUsage Filters" +#~ msgstr " CheckVal %*s Header Flags CompSize MemUsage Filters" + +#, c-format +#~ msgid "The selected match finder requires at least nice=%" +#~ msgstr "選取的符合搜尋工具需要至少 nice=%" diff -ur xz-5.2.5/po4a/de.po xz-5.4.3/po4a/de.po --- xz-5.2.5/po4a/de.po 2020-03-17 17:29:36 +++ xz-5.4.3/po4a/de.po 2023-05-04 17:27:44 @@ -1,13 +1,13 @@ # XZ Utils man pages German translation # This file is put in the public domain. # -# Mario Blättermann , 2015, 2019-2020. +# Mario Blättermann , 2015, 2019-2020, 2022. msgid "" msgstr "" -"Project-Id-Version: xz 5.2.5\n" +"Project-Id-Version: xz-man 5.4.0-pre2\n" "Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2020-03-17 16:29+0200\n" -"PO-Revision-Date: 2020-02-14 18:40+0100\n" +"POT-Creation-Date: 2023-05-04 22:27+0800\n" +"PO-Revision-Date: 2022-12-07 20:17+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" @@ -16,7 +16,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 19.12.2\n" +"X-Generator: Lokalize 22.08.3\n" #. type: TH #: ../src/xz/xz.1:8 @@ -27,8 +27,8 @@ #. type: TH #: ../src/xz/xz.1:8 #, no-wrap -msgid "2020-02-01" -msgstr "1. Februar 2020" +msgid "2022-12-01" +msgstr "1. Dezember 2022" #. type: TH #: ../src/xz/xz.1:8 ../src/xzdec/xzdec.1:7 ../src/lzmainfo/lzmainfo.1:7 @@ -128,21 +128,23 @@ msgstr "BESCHREIBUNG" #. type: Plain text -#: ../src/xz/xz.1:65 +#: ../src/xz/xz.1:70 msgid "" "B is a general-purpose data compression tool with command line syntax " "similar to B(1) and B(1). The native file format is the B<." "xz> format, but the legacy B<.lzma> format used by LZMA Utils and raw " -"compressed streams with no container format headers are also supported." +"compressed streams with no container format headers are also supported. In " +"addition, decompression of the B<.lz> format used by B is supported." msgstr "" "B ist ein Allzweckwerkzeug zur Datenkompression, dessen " "Befehlszeilensyntax denen von B(1) und B(1) ähnelt. Das native " "Dateiformat ist das B<.xz>-Format, aber das veraltete, von den LZMA-" "Dienstprogrammen verwendete Format sowie komprimierte Rohdatenströme ohne " -"Containerformat-Header werden ebenfalls unterstützt." +"Containerformat-Header werden ebenfalls unterstützt. Außerdem wird die " +"Dekompression des von B verwendeten B<.lz>-Formats unterstützt." #. type: Plain text -#: ../src/xz/xz.1:87 +#: ../src/xz/xz.1:92 msgid "" "B compresses or decompresses each I according to the selected " "operation mode. If no I are given or I is B<->, B reads " @@ -161,7 +163,7 @@ "diese ein Terminal ist." #. type: Plain text -#: ../src/xz/xz.1:97 +#: ../src/xz/xz.1:102 msgid "" "Unless B<--stdout> is specified, I other than B<-> are written to a " "new file whose name is derived from the source I name:" @@ -171,20 +173,20 @@ "(außer wenn B<--stdout> angegeben ist):" #. type: IP -#: ../src/xz/xz.1:97 ../src/xz/xz.1:103 ../src/xz/xz.1:127 ../src/xz/xz.1:132 -#: ../src/xz/xz.1:135 ../src/xz/xz.1:138 ../src/xz/xz.1:154 ../src/xz/xz.1:395 -#: ../src/xz/xz.1:398 ../src/xz/xz.1:405 ../src/xz/xz.1:621 ../src/xz/xz.1:623 -#: ../src/xz/xz.1:722 ../src/xz/xz.1:733 ../src/xz/xz.1:742 ../src/xz/xz.1:750 -#: ../src/xz/xz.1:965 ../src/xz/xz.1:974 ../src/xz/xz.1:986 ../src/xz/xz.1:1552 -#: ../src/xz/xz.1:1558 ../src/xz/xz.1:1674 ../src/xz/xz.1:1678 -#: ../src/xz/xz.1:1681 ../src/xz/xz.1:1684 ../src/xz/xz.1:1688 -#: ../src/xz/xz.1:1695 ../src/xz/xz.1:1697 +#: ../src/xz/xz.1:102 ../src/xz/xz.1:108 ../src/xz/xz.1:133 ../src/xz/xz.1:138 +#: ../src/xz/xz.1:141 ../src/xz/xz.1:144 ../src/xz/xz.1:160 ../src/xz/xz.1:421 +#: ../src/xz/xz.1:424 ../src/xz/xz.1:431 ../src/xz/xz.1:676 ../src/xz/xz.1:678 +#: ../src/xz/xz.1:777 ../src/xz/xz.1:788 ../src/xz/xz.1:797 ../src/xz/xz.1:805 +#: ../src/xz/xz.1:1033 ../src/xz/xz.1:1042 ../src/xz/xz.1:1054 +#: ../src/xz/xz.1:1729 ../src/xz/xz.1:1735 ../src/xz/xz.1:1853 +#: ../src/xz/xz.1:1857 ../src/xz/xz.1:1860 ../src/xz/xz.1:1863 +#: ../src/xz/xz.1:1867 ../src/xz/xz.1:1874 ../src/xz/xz.1:1876 #, no-wrap msgid "\\(bu" msgstr "\\(bu" #. type: Plain text -#: ../src/xz/xz.1:103 +#: ../src/xz/xz.1:108 msgid "" "When compressing, the suffix of the target file format (B<.xz> or B<.lzma>) " "is appended to the source filename to get the target filename." @@ -194,18 +196,18 @@ "Zieldatei gebildet." #. type: Plain text -#: ../src/xz/xz.1:117 +#: ../src/xz/xz.1:123 msgid "" -"When decompressing, the B<.xz> or B<.lzma> suffix is removed from the " -"filename to get the target filename. B also recognizes the suffixes B<." -"txz> and B<.tlz>, and replaces them with the B<.tar> suffix." +"When decompressing, the B<.xz>, B<.lzma>, or B<.lz> suffix is removed from " +"the filename to get the target filename. B also recognizes the suffixes " +"B<.txz> and B<.tlz>, and replaces them with the B<.tar> suffix." msgstr "" -"Bei der Dekompression wird das Suffix B<.xz> oder B<.lzma> vom Dateinamen " -"entfernt und so der Name der Zieldatei gebildet. Außerdem erkennt B die " -"Suffixe B<.txz> und B<.tlz> und ersetzt diese durch B<.tar>." +"Bei der Dekompression wird das Suffix B<.xz>, B<.lzma> oder B<.lz> vom " +"Dateinamen entfernt und so der Name der Zieldatei gebildet. Außerdem erkennt " +"B die Suffixe B<.txz> und B<.tlz> und ersetzt diese durch B<.tar>." #. type: Plain text -#: ../src/xz/xz.1:121 +#: ../src/xz/xz.1:127 msgid "" "If the target file already exists, an error is displayed and the I is " "skipped." @@ -214,7 +216,7 @@ "die I übersprungen." #. type: Plain text -#: ../src/xz/xz.1:127 +#: ../src/xz/xz.1:133 msgid "" "Unless writing to standard output, B will display a warning and skip the " "I if any of the following applies:" @@ -223,7 +225,7 @@ "überspringt die I, wenn eine der folgenden Bedingungen zutreffend ist:" #. type: Plain text -#: ../src/xz/xz.1:132 +#: ../src/xz/xz.1:138 msgid "" "I is not a regular file. Symbolic links are not followed, and thus " "they are not considered to be regular files." @@ -232,18 +234,18 @@ "gefolgt und daher nicht zu den regulären Dateien gezählt." #. type: Plain text -#: ../src/xz/xz.1:135 +#: ../src/xz/xz.1:141 msgid "I has more than one hard link." msgstr "Die I hat mehr als eine harte Verknüpfung." #. type: Plain text -#: ../src/xz/xz.1:138 +#: ../src/xz/xz.1:144 msgid "I has setuid, setgid, or sticky bit set." msgstr "" "Für die I ist das »setuid«-, »setgid«- oder »sticky«-Bit gesetzt." #. type: Plain text -#: ../src/xz/xz.1:154 +#: ../src/xz/xz.1:160 msgid "" "The operation mode is set to compress and the I already has a suffix " "of the target file format (B<.xz> or B<.txz> when compressing to the B<.xz> " @@ -255,18 +257,18 @@ "lzma>-Format)." #. type: Plain text -#: ../src/xz/xz.1:163 +#: ../src/xz/xz.1:170 msgid "" "The operation mode is set to decompress and the I doesn't have a " -"suffix of any of the supported file formats (B<.xz>, B<.txz>, B<.lzma>, or " -"B<.tlz>)." +"suffix of any of the supported file formats (B<.xz>, B<.txz>, B<.lzma>, B<." +"tlz>, or B<.lz>)." msgstr "" "Der Aktionsmodus wird auf Dekompression gesetzt und die I hat nicht " "das Suffix eines der unterstützten Zieldateiformate (B<.xz>, B<.txz>, B<." -"lzma> oder B<.tlz>)." +"lzma>, B<.tlz> oder B<.lz>)." #. type: Plain text -#: ../src/xz/xz.1:178 +#: ../src/xz/xz.1:185 msgid "" "After successfully compressing or decompressing the I, B copies " "the owner, group, permissions, access time, and modification time from the " @@ -286,19 +288,19 @@ "unterstützt." #. type: Plain text -#: ../src/xz/xz.1:187 +#: ../src/xz/xz.1:195 msgid "" "Once the target file has been successfully closed, the source I is " "removed unless B<--keep> was specified. The source I is never removed " -"if the output is written to standard output." +"if the output is written to standard output or if an error occurs." msgstr "" "Sobald die Zieldatei erfolgreich geschlossen wurde, wird die Ursprungs-" "I entfernt. Dies wird durch die Option B<--keep> verhindert. Die " "Ursprungs-I wird niemals entfernt, wenn die Ausgabe in die " -"Standardausgabe geschrieben wird." +"Standardausgabe geschrieben wird oder falls ein Fehler auftritt." #. type: Plain text -#: ../src/xz/xz.1:199 +#: ../src/xz/xz.1:207 msgid "" "Sending B or B to the B process makes it print " "progress information to standard error. This has only limited use since " @@ -312,13 +314,13 @@ "automatisch aktualisierter Fortschrittsanzeiger angezeigt." #. type: SS -#: ../src/xz/xz.1:200 +#: ../src/xz/xz.1:208 #, no-wrap msgid "Memory usage" msgstr "Speicherbedarf" #. type: Plain text -#: ../src/xz/xz.1:216 +#: ../src/xz/xz.1:224 msgid "" "The memory usage of B varies from a few hundred kilobytes to several " "gigabytes depending on the compression settings. The settings used when " @@ -330,7 +332,7 @@ "gigabytes of memory to decompress." msgstr "" "In Abhängigkeit von den gewählten Kompressionseinstellungen bewegt sich der " -"Speicherverbrauch zwischen wenigen hundert Kilobyte und mehrere Gigabyte. " +"Speicherverbrauch zwischen wenigen hundert Kilobyte und mehreren Gigabyte. " "Die Einstellungen bei der Kompression einer Datei bestimmen dabei den " "Speicherbedarf bei der Dekompression. Die Dekompression benötigt " "üblicherweise zwischen 5\\ % und 20\\ % des Speichers, der bei der " @@ -341,14 +343,14 @@ # cripple → lahmlegen...? War mir hier zu sehr Straßenslang. #. type: Plain text -#: ../src/xz/xz.1:228 +#: ../src/xz/xz.1:236 msgid "" "Especially users of older systems may find the possibility of very large " "memory usage annoying. To prevent uncomfortable surprises, B has a " "built-in memory usage limiter, which is disabled by default. While some " "operating systems provide ways to limit the memory usage of processes, " -"relying on it wasn't deemed to be flexible enough (e.g. using B(1) " -"to limit virtual memory tends to cripple B(2))." +"relying on it wasn't deemed to be flexible enough (for example, using " +"B(1) to limit virtual memory tends to cripple B(2))." msgstr "" "Insbesondere für Benutzer älterer Systeme wird eventuell ein sehr großer " "Speicherbedarf ärgerlich sein. Um unangenehme Überraschungen zu vermeiden, " @@ -360,11 +362,11 @@ "beeinträchtigen)." #. type: Plain text -#: ../src/xz/xz.1:248 +#: ../src/xz/xz.1:258 msgid "" "The memory usage limiter can be enabled with the command line option B<--" "memlimit=>I. Often it is more convenient to enable the limiter by " -"default by setting the environment variable B, e.g.\\& " +"default by setting the environment variable B, for example, " "B. It is possible to set the limits " "separately for compression and decompression by using B<--memlimit-" "compress=>I and B<--memlimit-decompress=>I. Using these two " @@ -386,7 +388,7 @@ "in der Befehlszeile eingeben." #. type: Plain text -#: ../src/xz/xz.1:265 +#: ../src/xz/xz.1:277 msgid "" "If the specified memory usage limit is exceeded when decompressing, B " "will display an error and decompressing the file will fail. If the limit is " @@ -394,9 +396,9 @@ "the limit is no longer exceeded (except when using B<--format=raw> or B<--no-" "adjust>). This way the operation won't fail unless the limit is very " "small. The scaling of the settings is done in steps that don't match the " -"compression level presets, e.g. if the limit is only slightly less than the " -"amount required for B, the settings will be scaled down only a " -"little, not all the way down to B." +"compression level presets, for example, if the limit is only slightly less " +"than the amount required for B, the settings will be scaled down only " +"a little, not all the way down to B." msgstr "" "Wenn die angegebene Speicherbegrenzung bei der Dekompression überschritten " "wird, schlägt der Vorgang fehl und B zeigt eine Fehlermeldung an. Wird " @@ -411,13 +413,13 @@ "nicht vollständig herunter zu den Werten für B" #. type: SS -#: ../src/xz/xz.1:266 +#: ../src/xz/xz.1:278 #, no-wrap msgid "Concatenation and padding with .xz files" msgstr "Verkettung und Auffüllung von .xz-Dateien" #. type: Plain text -#: ../src/xz/xz.1:274 +#: ../src/xz/xz.1:286 msgid "" "It is possible to concatenate B<.xz> files as is. B will decompress " "such files as if they were a single B<.xz> file." @@ -426,12 +428,13 @@ "von B genauso dekomprimiert wie eine einzelne B<.xz>-Datei." #. type: Plain text -#: ../src/xz/xz.1:283 +#: ../src/xz/xz.1:295 msgid "" "It is possible to insert padding between the concatenated parts or after the " "last part. The padding must consist of null bytes and the size of the " -"padding must be a multiple of four bytes. This can be useful e.g. if the B<." -"xz> file is stored on a medium that measures file sizes in 512-byte blocks." +"padding must be a multiple of four bytes. This can be useful, for example, " +"if the B<.xz> file is stored on a medium that measures file sizes in 512-" +"byte blocks." msgstr "" "Es ist weiterhin möglich, eine Auffüllung zwischen den verketteten Teilen " "oder nach dem letzten Teil einzufügen. Die Auffüllung muss aus Null-Bytes " @@ -441,7 +444,7 @@ "Blöcken speichert." #. type: Plain text -#: ../src/xz/xz.1:287 +#: ../src/xz/xz.1:299 msgid "" "Concatenation and padding are not allowed with B<.lzma> files or raw streams." msgstr "" @@ -449,19 +452,19 @@ "nicht erlaubt." #. type: SH -#: ../src/xz/xz.1:288 ../src/xzdec/xzdec.1:61 +#: ../src/xz/xz.1:300 ../src/xzdec/xzdec.1:61 #, no-wrap msgid "OPTIONS" msgstr "OPTIONEN" #. type: SS -#: ../src/xz/xz.1:290 +#: ../src/xz/xz.1:302 #, no-wrap msgid "Integer suffixes and special values" msgstr "Ganzzahlige Suffixe und spezielle Werte" #. type: Plain text -#: ../src/xz/xz.1:294 +#: ../src/xz/xz.1:306 msgid "" "In most places where an integer argument is expected, an optional suffix is " "supported to easily indicate large integers. There must be no space between " @@ -472,13 +475,13 @@ "Ganzzahl und dem Suffix dürfen sich keine Leerzeichen befinden." #. type: TP -#: ../src/xz/xz.1:294 +#: ../src/xz/xz.1:306 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:305 +#: ../src/xz/xz.1:317 msgid "" "Multiply the integer by 1,024 (2^10). B, B, B, B, and B " "are accepted as synonyms for B." @@ -487,13 +490,13 @@ "B werden als Synonyme für B akzeptiert." #. type: TP -#: ../src/xz/xz.1:305 +#: ../src/xz/xz.1:317 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:315 +#: ../src/xz/xz.1:327 msgid "" "Multiply the integer by 1,048,576 (2^20). B, B, B, and B are " "accepted as synonyms for B." @@ -502,13 +505,13 @@ "werden als Synonyme für B akzeptiert." #. type: TP -#: ../src/xz/xz.1:315 +#: ../src/xz/xz.1:327 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:325 +#: ../src/xz/xz.1:337 msgid "" "Multiply the integer by 1,073,741,824 (2^30). B, B, B, and B " "are accepted as synonyms for B." @@ -517,7 +520,7 @@ "B werden als Synonyme für B akzeptiert." #. type: Plain text -#: ../src/xz/xz.1:330 +#: ../src/xz/xz.1:342 msgid "" "The special value B can be used to indicate the maximum integer value " "supported by the option." @@ -526,13 +529,13 @@ "jeweiligen Option akzeptierten maximalen Ganzzahlwert anzugeben." #. type: SS -#: ../src/xz/xz.1:331 +#: ../src/xz/xz.1:343 #, no-wrap msgid "Operation mode" msgstr "Aktionsmodus" #. type: Plain text -#: ../src/xz/xz.1:334 +#: ../src/xz/xz.1:346 msgid "" "If multiple operation mode options are given, the last one takes effect." msgstr "" @@ -540,13 +543,13 @@ "verwendet." #. type: TP -#: ../src/xz/xz.1:334 +#: ../src/xz/xz.1:346 #, no-wrap msgid "B<-z>, B<--compress>" msgstr "B<-z>, B<--compress>" #. type: Plain text -#: ../src/xz/xz.1:343 +#: ../src/xz/xz.1:355 msgid "" "Compress. This is the default operation mode when no operation mode option " "is specified and no other operation mode is implied from the command name " @@ -557,24 +560,24 @@ "werden kann (der Befehl B impliziert zum Beispiel B<--decompress>)." #. type: TP -#: ../src/xz/xz.1:343 ../src/xzdec/xzdec.1:62 +#: ../src/xz/xz.1:355 ../src/xzdec/xzdec.1:62 #, no-wrap msgid "B<-d>, B<--decompress>, B<--uncompress>" msgstr "B<-d>, B<--decompress>, B<--uncompress>" #. type: Plain text -#: ../src/xz/xz.1:346 +#: ../src/xz/xz.1:358 msgid "Decompress." msgstr "dekomprimpiert." #. type: TP -#: ../src/xz/xz.1:346 +#: ../src/xz/xz.1:358 #, no-wrap msgid "B<-t>, B<--test>" msgstr "B<-t>, B<--test>" #. type: Plain text -#: ../src/xz/xz.1:355 +#: ../src/xz/xz.1:367 msgid "" "Test the integrity of compressed I. This option is equivalent to B<--" "decompress --stdout> except that the decompressed data is discarded instead " @@ -586,13 +589,13 @@ "werden keine Dateien erstellt oder entfernt." #. type: TP -#: ../src/xz/xz.1:355 +#: ../src/xz/xz.1:367 #, no-wrap msgid "B<-l>, B<--list>" msgstr "B<-l>, B<--list>" #. type: Plain text -#: ../src/xz/xz.1:364 +#: ../src/xz/xz.1:376 msgid "" "Print information about compressed I. No uncompressed output is " "produced, and no files are created or removed. In list mode, the program " @@ -605,14 +608,14 @@ "Standardeingabe oder anderen nicht durchsuchbaren Quellen lesen." #. type: Plain text -#: ../src/xz/xz.1:379 +#: ../src/xz/xz.1:391 msgid "" "The default listing shows basic information about I, one file per " "line. To get more detailed information, use also the B<--verbose> option. " "For even more information, use B<--verbose> twice, but note that this may be " "slow, because getting all the extra information requires many seeks. The " -"width of verbose output exceeds 80 characters, so piping the output to e.g." -"\\& B may be convenient if the terminal isn't wide enough." +"width of verbose output exceeds 80 characters, so piping the output to, for " +"example, B may be convenient if the terminal isn't wide enough." msgstr "" "Die Liste zeigt in der Standardeinstellung grundlegende Informationen zu den " "I an, zeilenweise pro Datei. Detailliertere Informationen erhalten " @@ -625,7 +628,7 @@ "Terminal nicht breit genug ist." #. type: Plain text -#: ../src/xz/xz.1:386 +#: ../src/xz/xz.1:398 msgid "" "The exact output may vary between B versions and different locales. For " "machine-readable output, B<--robot --list> should be used." @@ -635,35 +638,50 @@ "Ausgabe gewünscht ist, dann sollten Sie B<--robot --list> verwenden." #. type: SS -#: ../src/xz/xz.1:387 +#: ../src/xz/xz.1:399 #, no-wrap msgid "Operation modifiers" msgstr "Aktionsattribute" #. type: TP -#: ../src/xz/xz.1:388 ../src/xzdec/xzdec.1:69 +#: ../src/xz/xz.1:400 ../src/xzdec/xzdec.1:69 #, no-wrap msgid "B<-k>, B<--keep>" msgstr "B<-k>, B<--keep>" #. type: Plain text -#: ../src/xz/xz.1:391 +#: ../src/xz/xz.1:403 msgid "Don't delete the input files." msgstr "verhindert das Löschen der Eingabedateien." +#. type: Plain text +#: ../src/xz/xz.1:417 +msgid "" +"Since B 5.2.6, this option also makes B compress or decompress even " +"if the input is a symbolic link to a regular file, has more than one hard " +"link, or has the setuid, setgid, or sticky bit set. The setuid, setgid, and " +"sticky bits are not copied to the target file. In earlier versions this was " +"only done with B<--force>." +msgstr "" +"Seit der B-Version 5.2.6 wird die Kompression oder Dekompression auch " +"dann ausgeführt, wenn die Eingabe ein symbolischer Link zu einer regulären " +"Datei ist, mehr als einen harten Link hat oder das »setuid«-, »setgid«- oder " +"»sticky«-Bit gesetzt ist. Die genannten Bits werden nicht in die Zieldatei " +"kopiert. In früheren Versionen geschah dies nur mit B<--force>." + #. type: TP -#: ../src/xz/xz.1:391 +#: ../src/xz/xz.1:417 #, no-wrap msgid "B<-f>, B<--force>" msgstr "B<-f>, B<--force>" #. type: Plain text -#: ../src/xz/xz.1:394 +#: ../src/xz/xz.1:420 msgid "This option has several effects:" msgstr "Diese Option hat verschiedene Auswirkungen:" #. type: Plain text -#: ../src/xz/xz.1:398 +#: ../src/xz/xz.1:424 msgid "" "If the target file already exists, delete it before compressing or " "decompressing." @@ -672,7 +690,7 @@ "Dekompression gelöscht." #. type: Plain text -#: ../src/xz/xz.1:405 +#: ../src/xz/xz.1:431 msgid "" "Compress or decompress even if the input is a symbolic link to a regular " "file, has more than one hard link, or has the setuid, setgid, or sticky bit " @@ -684,7 +702,7 @@ "Die genannten Bits werden nicht in die Zieldatei kopiert." #. type: Plain text -#: ../src/xz/xz.1:430 +#: ../src/xz/xz.1:456 msgid "" "When used with B<--decompress> B<--stdout> and B cannot recognize the " "type of the source file, copy the source file as is to standard output. " @@ -705,13 +723,13 @@ "können Sie B anweisen, nur ein einzelnes Dateiformat zu dekomprimieren." #. type: TP -#: ../src/xz/xz.1:431 ../src/xzdec/xzdec.1:76 +#: ../src/xz/xz.1:457 ../src/xzdec/xzdec.1:76 #, no-wrap msgid "B<-c>, B<--stdout>, B<--to-stdout>" msgstr "B<-c>, B<--stdout>, B<--to-stdout>" #. type: Plain text -#: ../src/xz/xz.1:437 +#: ../src/xz/xz.1:463 msgid "" "Write the compressed or decompressed data to standard output instead of a " "file. This implies B<--keep>." @@ -720,13 +738,13 @@ "anstatt in eine Datei. Dies impliziert B<--keep>." #. type: TP -#: ../src/xz/xz.1:437 +#: ../src/xz/xz.1:463 #, no-wrap msgid "B<--single-stream>" msgstr "B<--single-stream>" #. type: Plain text -#: ../src/xz/xz.1:446 +#: ../src/xz/xz.1:472 msgid "" "Decompress only the first B<.xz> stream, and silently ignore possible " "remaining input data following the stream. Normally such trailing garbage " @@ -738,7 +756,7 @@ "Fehlermeldung ausgibt." #. type: Plain text -#: ../src/xz/xz.1:455 +#: ../src/xz/xz.1:481 msgid "" "B never decompresses more than one stream from B<.lzma> files or raw " "streams, but this option still makes B ignore the possible trailing data " @@ -750,7 +768,7 @@ "ignoriert." #. type: Plain text -#: ../src/xz/xz.1:460 +#: ../src/xz/xz.1:486 msgid "" "This option has no effect if the operation mode is not B<--decompress> or " "B<--test>." @@ -759,13 +777,13 @@ "oder B<--test> ist." #. type: TP -#: ../src/xz/xz.1:460 +#: ../src/xz/xz.1:486 #, no-wrap msgid "B<--no-sparse>" msgstr "B<--no-sparse>" #. type: Plain text -#: ../src/xz/xz.1:472 +#: ../src/xz/xz.1:498 msgid "" "Disable creation of sparse files. By default, if decompressing into a " "regular file, B tries to make the file sparse if the decompressed data " @@ -785,13 +803,13 @@ "durch Verringerung der Ein-/Ausgaben der Platte." #. type: TP -#: ../src/xz/xz.1:472 +#: ../src/xz/xz.1:498 #, no-wrap msgid "B<-S> I<.suf>, B<--suffix=>I<.suf>" msgstr "B<-S> I<.suf>, B<--suffix=>I<.suf>" #. type: Plain text -#: ../src/xz/xz.1:484 +#: ../src/xz/xz.1:510 msgid "" "When compressing, use I<.suf> as the suffix for the target file instead of " "B<.xz> or B<.lzma>. If not writing to standard output and the source file " @@ -804,20 +822,20 @@ "angezeigt und die Datei übersprungen." #. type: Plain text -#: ../src/xz/xz.1:497 +#: ../src/xz/xz.1:524 msgid "" "When decompressing, recognize files with the suffix I<.suf> in addition to " -"files with the B<.xz>, B<.txz>, B<.lzma>, or B<.tlz> suffix. If the source " -"file has the suffix I<.suf>, the suffix is removed to get the target " +"files with the B<.xz>, B<.txz>, B<.lzma>, B<.tlz>, or B<.lz> suffix. If the " +"source file has the suffix I<.suf>, the suffix is removed to get the target " "filename." msgstr "" "berücksichtigt bei der Dekompression zusätzlich zu Dateien mit den Suffixen " -"B<.xz>, B<.txz>, B<.lzma> oder B<.tlz> auch jene mit dem Suffix I<.suf>. " -"Falls die Quelldatei das Suffix I<.suf> hat, wird dieses entfernt und so der " -"Name der Zieldatei abgeleitet." +"B<.xz>, B<.txz>, B<.lzma>, B<.tlz> oder B<.lz> auch jene mit dem Suffix I<." +"suf>. Falls die Quelldatei das Suffix I<.suf> hat, wird dieses entfernt und " +"so der Name der Zieldatei abgeleitet." #. type: Plain text -#: ../src/xz/xz.1:503 +#: ../src/xz/xz.1:530 msgid "" "When compressing or decompressing raw streams (B<--format=raw>), the suffix " "must always be specified unless writing to standard output, because there is " @@ -829,13 +847,13 @@ "vorgegebenes Suffix für Rohdatenströme gibt." #. type: TP -#: ../src/xz/xz.1:503 +#: ../src/xz/xz.1:530 #, no-wrap msgid "B<--files>[B<=>I]" msgstr "B<--files>[B<=>I]" #. type: Plain text -#: ../src/xz/xz.1:517 +#: ../src/xz/xz.1:544 msgid "" "Read the filenames to process from I; if I is omitted, filenames " "are read from standard input. Filenames must be terminated with the newline " @@ -851,13 +869,13 @@ "angegeben sind, werden diese vor den Dateinamen aus der I verarbeitet." #. type: TP -#: ../src/xz/xz.1:517 +#: ../src/xz/xz.1:544 #, no-wrap msgid "B<--files0>[B<=>I]" msgstr "B<--files0>[B<=>I]" #. type: Plain text -#: ../src/xz/xz.1:521 +#: ../src/xz/xz.1:548 msgid "" "This is identical to B<--files>[B<=>I] except that each filename must " "be terminated with the null character." @@ -866,31 +884,31 @@ "Dateiname mit einem Null-Zeichen abgeschlossen werden muss." #. type: SS -#: ../src/xz/xz.1:522 +#: ../src/xz/xz.1:549 #, no-wrap msgid "Basic file format and compression options" msgstr "Grundlegende Dateiformat- und Kompressionsoptionen" #. type: TP -#: ../src/xz/xz.1:523 +#: ../src/xz/xz.1:550 #, no-wrap msgid "B<-F> I, B<--format=>I" msgstr "B<-F> I, B<--format=>I" #. type: Plain text -#: ../src/xz/xz.1:528 +#: ../src/xz/xz.1:555 msgid "Specify the file I to compress or decompress:" msgstr "" "gibt das I der zu komprimierenden oder dekomprimierenden Datei an:" #. type: TP -#: ../src/xz/xz.1:529 +#: ../src/xz/xz.1:556 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:541 +#: ../src/xz/xz.1:568 msgid "" "This is the default. When compressing, B is equivalent to B. " "When decompressing, the format of the input file is automatically detected. " @@ -903,13 +921,13 @@ "format=raw> erzeugt werden, nicht automatisch erkannt werden können." #. type: TP -#: ../src/xz/xz.1:541 +#: ../src/xz/xz.1:568 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:548 +#: ../src/xz/xz.1:575 msgid "" "Compress to the B<.xz> file format, or accept only B<.xz> files when " "decompressing." @@ -918,13 +936,13 @@ "Dateien bei der Dekompression." #. type: TP -#: ../src/xz/xz.1:548 +#: ../src/xz/xz.1:575 #, no-wrap msgid "B, B" msgstr "B, B" #. type: Plain text -#: ../src/xz/xz.1:558 +#: ../src/xz/xz.1:585 msgid "" "Compress to the legacy B<.lzma> file format, or accept only B<.lzma> files " "when decompressing. The alternative name B is provided for backwards " @@ -935,13 +953,58 @@ "B dient der Abwärtskompatibilität zu den LZMA-Dienstprogrammen." #. type: TP -#: ../src/xz/xz.1:558 +#: ../src/xz/xz.1:585 #, no-wrap +msgid "B" +msgstr "B" + +#. type: Plain text +#: ../src/xz/xz.1:591 +msgid "" +"Accept only B<.lz> files when decompressing. Compression is not supported." +msgstr "" +"Akzeptiert nur B<.lz>-Dateien bei der Dekompression. Kompression wird nicht " +"unterstützt." + +#. type: Plain text +#: ../src/xz/xz.1:604 +msgid "" +"The B<.lz> format version 0 and the unextended version 1 are supported. " +"Version 0 files were produced by B 1.3 and older. Such files aren't " +"common but may be found from file archives as a few source packages were " +"released in this format. People might have old personal files in this " +"format too. Decompression support for the format version 0 was removed in " +"B 1.18." +msgstr "" +"Das B<.lz>-Format wird in Version 0 und der unerweiterten Version 1 " +"unterstützt. Dateien der Version 0 wurden B 1.3 und älter erstellt. " +"Solche Dateien sind nicht sehr weit verbreitet, können aber in Dateiarchiven " +"gefunden werden, da einige Quellpakete in diesem Format veröffentlicht " +"wurden. Es ist auch möglich, dass Benutzer alte persönliche Dateien in " +"diesem Format haben. Die Dekompressionsunterstützung für das Format der " +"Version 0 wurde mit der Version 1.18 aus B entfernt." + +#. type: Plain text +#: ../src/xz/xz.1:613 +msgid "" +"B 1.4 and later create files in the format version 1. The sync flush " +"marker extension to the format version 1 was added in B 1.6. This " +"extension is rarely used and isn't supported by B (diagnosed as corrupt " +"input)." +msgstr "" +"B-Versionen ab 1.4 erstellen Dateien im Format der Version 0. Die " +"Erweiterung »Sync Flush Marker« zur Formatversion 1 wurde in B 1.6 " +"hinzugefügt. Diese Erweiterung wird sehr selten verwendet und wird von B " +"nicht unterstützt (die Eingabe wird als beschädigt erkannt)." + +#. type: TP +#: ../src/xz/xz.1:613 +#, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:566 +#: ../src/xz/xz.1:621 msgid "" "Compress or uncompress a raw stream (no headers). This is meant for " "advanced users only. To decode raw streams, you need use B<--format=raw> " @@ -955,13 +1018,13 @@ "Container-Headern gespeichert worden wäre." #. type: TP -#: ../src/xz/xz.1:567 +#: ../src/xz/xz.1:622 #, no-wrap msgid "B<-C> I, B<--check=>I" msgstr "B<-C> I, B<--check=>I" #. type: Plain text -#: ../src/xz/xz.1:582 +#: ../src/xz/xz.1:637 msgid "" "Specify the type of the integrity check. The check is calculated from the " "uncompressed data and stored in the B<.xz> file. This option has an effect " @@ -977,18 +1040,18 @@ "dekomprimiert wird." #. type: Plain text -#: ../src/xz/xz.1:586 +#: ../src/xz/xz.1:641 msgid "Supported I types:" msgstr "Folgende Typen von I werden unterstützt:" #. type: TP -#: ../src/xz/xz.1:587 +#: ../src/xz/xz.1:642 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:593 +#: ../src/xz/xz.1:648 msgid "" "Don't calculate an integrity check at all. This is usually a bad idea. " "This can be useful when integrity of the data is verified by other means " @@ -999,25 +1062,25 @@ "Weise sichergestellt werden kann." #. type: TP -#: ../src/xz/xz.1:593 +#: ../src/xz/xz.1:648 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:596 +#: ../src/xz/xz.1:651 msgid "Calculate CRC32 using the polynomial from IEEE-802.3 (Ethernet)." msgstr "" "berechnet die CRC32-Prüfsumme anhand des Polynoms aus IEEE-802.3 (Ethernet)." #. type: TP -#: ../src/xz/xz.1:596 +#: ../src/xz/xz.1:651 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:601 +#: ../src/xz/xz.1:656 msgid "" "Calculate CRC64 using the polynomial from ECMA-182. This is the default, " "since it is slightly better than CRC32 at detecting damaged files and the " @@ -1028,20 +1091,20 @@ "werden und die Geschwindigkeitsdifferenz unerheblich ist." #. type: TP -#: ../src/xz/xz.1:601 +#: ../src/xz/xz.1:656 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:605 +#: ../src/xz/xz.1:660 msgid "Calculate SHA-256. This is somewhat slower than CRC32 and CRC64." msgstr "" "berechnet die SHA-256-Prüfsumme. Dies ist etwas langsamer als CRC32 und " "CRC64." #. type: Plain text -#: ../src/xz/xz.1:611 +#: ../src/xz/xz.1:666 msgid "" "Integrity of the B<.xz> headers is always verified with CRC32. It is not " "possible to change or disable it." @@ -1050,13 +1113,13 @@ "möglich, dies zu ändern oder zu deaktivieren." #. type: TP -#: ../src/xz/xz.1:611 +#: ../src/xz/xz.1:666 #, no-wrap msgid "B<--ignore-check>" msgstr "B<--ignore-check>" #. type: Plain text -#: ../src/xz/xz.1:617 +#: ../src/xz/xz.1:672 msgid "" "Don't verify the integrity check of the compressed data when decompressing. " "The CRC32 values in the B<.xz> headers will still be verified normally." @@ -1066,7 +1129,7 @@ "normal verifiziert." #. type: Plain text -#: ../src/xz/xz.1:620 +#: ../src/xz/xz.1:675 msgid "" "B Possible " "reasons to use this option:" @@ -1075,13 +1138,13 @@ "Gründe, diese Option zu verwenden:" #. type: Plain text -#: ../src/xz/xz.1:623 +#: ../src/xz/xz.1:678 msgid "Trying to recover data from a corrupt .xz file." msgstr "Versuchen, Daten aus einer beschädigten .xz-Datei wiederherzustellen." # Irgendwie ist mir »extrem gut komprimiert« hier zu diffus. Was soll »gut« hier bedeuten? Besonders stark, besonders clever, was auch immer... #. type: Plain text -#: ../src/xz/xz.1:629 +#: ../src/xz/xz.1:684 msgid "" "Speeding up decompression. This matters mostly with SHA-256 or with files " "that have compressed extremely well. It's recommended to not use this " @@ -1094,13 +1157,13 @@ "denn, die Integrität der Datei wird extern auf andere Weise überprüft." #. type: TP -#: ../src/xz/xz.1:630 +#: ../src/xz/xz.1:685 #, no-wrap msgid "B<-0> ... B<-9>" msgstr "B<-0> … B<-9>" #. type: Plain text -#: ../src/xz/xz.1:639 +#: ../src/xz/xz.1:694 msgid "" "Select a compression preset level. The default is B<-6>. If multiple " "preset levels are specified, the last one takes effect. If a custom filter " @@ -1113,7 +1176,7 @@ "angegeben wurde, wird diese durch die Festlegung der Voreinstellung geleert." #. type: Plain text -#: ../src/xz/xz.1:654 +#: ../src/xz/xz.1:709 msgid "" "The differences between the presets are more significant than with " "B(1) and B(1). The selected compression settings determine " @@ -1131,13 +1194,13 @@ "B(1) gehandhabt wird." #. type: TP -#: ../src/xz/xz.1:655 +#: ../src/xz/xz.1:710 #, no-wrap msgid "B<-0> ... B<-3>" msgstr "B<-0> … B<-3>" #. type: Plain text -#: ../src/xz/xz.1:667 +#: ../src/xz/xz.1:722 msgid "" "These are somewhat fast presets. B<-0> is sometimes faster than B " "while compressing much better. The higher ones often have speed comparable " @@ -1152,35 +1215,35 @@ "komprimierenden Daten abhängig ist." #. type: TP -#: ../src/xz/xz.1:667 +#: ../src/xz/xz.1:722 #, no-wrap msgid "B<-4> ... B<-6>" msgstr "B<-4> … B<-6>" #. type: Plain text -#: ../src/xz/xz.1:681 +#: ../src/xz/xz.1:736 msgid "" "Good to very good compression while keeping decompressor memory usage " "reasonable even for old systems. B<-6> is the default, which is usually a " -"good choice e.g. for distributing files that need to be decompressible even " -"on systems with only 16\\ MiB RAM. (B<-5e> or B<-6e> may be worth " -"considering too. See B<--extreme>.)" +"good choice for distributing files that need to be decompressible even on " +"systems with only 16\\ MiB RAM. (B<-5e> or B<-6e> may be worth considering " +"too. See B<--extreme>.)" msgstr "" "Gute bis sehr gute Kompression, wobei der Speicherbedarf für die " "Dekompression selbst auf alten Systemen akzeptabel ist. B<-6> ist die " -"Voreinstellung, welche üblicherweise eine gute Wahl ist, zum Beispiel für " -"die Verteilung von Dateien, die selbst noch auf Systemen mit nur 16\\ MiB " -"Arbeitsspeicher dekomprimiert werden müssen (B<-5e> oder B<-6e> sind " -"ebenfalls eine Überlegung wert. Siehe B<--extreme>)." +"Voreinstellung, welche üblicherweise eine gute Wahl für die Verteilung von " +"Dateien ist, die selbst noch auf Systemen mit nur 16\\ MiB Arbeitsspeicher " +"dekomprimiert werden müssen (B<-5e> oder B<-6e> sind ebenfalls eine " +"Überlegung wert. Siehe B<--extreme>)." #. type: TP -#: ../src/xz/xz.1:681 +#: ../src/xz/xz.1:736 #, no-wrap msgid "B<-7 ... -9>" msgstr "B<-7 … -9>" #. type: Plain text -#: ../src/xz/xz.1:688 +#: ../src/xz/xz.1:743 msgid "" "These are like B<-6> but with higher compressor and decompressor memory " "requirements. These are useful only when compressing files bigger than 8\\ " @@ -1191,7 +1254,7 @@ "sollen, die größer als 8\\ MiB, 16\\ MiB beziehungsweise 32\\ MiB sind." #. type: Plain text -#: ../src/xz/xz.1:696 +#: ../src/xz/xz.1:751 msgid "" "On the same hardware, the decompression speed is approximately a constant " "number of bytes of compressed data per second. In other words, the better " @@ -1206,282 +1269,283 @@ "ausgegebenen unkomprimierten Daten stark variieren kann." #. type: Plain text -#: ../src/xz/xz.1:698 +#: ../src/xz/xz.1:753 msgid "The following table summarises the features of the presets:" msgstr "" "Die folgende Tabelle fasst die Eigenschaften der Voreinstellungen zusammen:" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 ../src/xz/xz.1:2623 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 ../src/xz/xz.1:2839 #, no-wrap msgid "Preset" -msgstr "Voreinstellung" +msgstr "Voreinst." #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "DictSize" -msgstr "DictGröße" +msgstr "Wörtb.Gr" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 ../src/xz/xz.1:2623 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 ../src/xz/xz.1:2839 #, no-wrap msgid "CompCPU" -msgstr "KompCPU" +msgstr "KomprCPU" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "CompMem" -msgstr "KompSpeicher" +msgstr "KompSpeich" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "DecMem" -msgstr "DekSpeicher" +msgstr "DekompSpeich" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:2234 ../src/xz/xz.1:2259 -#: ../src/xz/xz.1:2624 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:2450 ../src/xz/xz.1:2475 +#: ../src/xz/xz.1:2840 #, no-wrap msgid "-0" msgstr "-0" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:787 ../src/xz/xz.1:2234 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:842 ../src/xz/xz.1:2450 #, no-wrap msgid "256 KiB" msgstr "256 KiB" -#. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:2624 +#. type: TP +#: ../src/xz/xz.1:761 ../src/xz/xz.1:2840 ../src/scripts/xzgrep.1:82 #, no-wrap msgid "0" msgstr "0" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:708 ../src/xz/xz.1:789 ../src/xz/xz.1:2259 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:763 ../src/xz/xz.1:844 ../src/xz/xz.1:2475 #, no-wrap msgid "3 MiB" msgstr "3 MiB" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:707 ../src/xz/xz.1:787 ../src/xz/xz.1:788 -#: ../src/xz/xz.1:2235 ../src/xz/xz.1:2236 ../src/xz/xz.1:2238 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:762 ../src/xz/xz.1:842 ../src/xz/xz.1:843 +#: ../src/xz/xz.1:2451 ../src/xz/xz.1:2452 ../src/xz/xz.1:2454 #, no-wrap msgid "1 MiB" msgstr "1 MiB" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:2235 ../src/xz/xz.1:2260 -#: ../src/xz/xz.1:2625 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:2451 ../src/xz/xz.1:2476 +#: ../src/xz/xz.1:2841 #, no-wrap msgid "-1" msgstr "-1" -#. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:1582 ../src/xz/xz.1:2625 +#. type: TP +#: ../src/xz/xz.1:762 ../src/xz/xz.1:1758 ../src/xz/xz.1:2841 +#: ../src/scripts/xzgrep.1:86 #, no-wrap msgid "1" msgstr "1" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 -#: ../src/xz/xz.1:793 ../src/xz/xz.1:2260 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:2476 #, no-wrap msgid "9 MiB" msgstr "9 MiB" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:708 ../src/xz/xz.1:788 ../src/xz/xz.1:789 -#: ../src/xz/xz.1:2236 ../src/xz/xz.1:2239 ../src/xz/xz.1:2260 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:763 ../src/xz/xz.1:843 ../src/xz/xz.1:844 +#: ../src/xz/xz.1:2452 ../src/xz/xz.1:2455 ../src/xz/xz.1:2476 #, no-wrap msgid "2 MiB" msgstr "2 MiB" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:2236 ../src/xz/xz.1:2261 -#: ../src/xz/xz.1:2626 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:2452 ../src/xz/xz.1:2477 +#: ../src/xz/xz.1:2842 #, no-wrap msgid "-2" msgstr "-2" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:1585 ../src/xz/xz.1:2626 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:1760 ../src/xz/xz.1:2842 #, no-wrap msgid "2" msgstr "2" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2261 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2477 #, no-wrap msgid "17 MiB" msgstr "17 MiB" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:2237 ../src/xz/xz.1:2262 -#: ../src/xz/xz.1:2627 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:2453 ../src/xz/xz.1:2478 +#: ../src/xz/xz.1:2843 #, no-wrap msgid "-3" msgstr "-3" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:710 ../src/xz/xz.1:787 ../src/xz/xz.1:790 -#: ../src/xz/xz.1:791 ../src/xz/xz.1:2237 ../src/xz/xz.1:2238 -#: ../src/xz/xz.1:2240 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:765 ../src/xz/xz.1:842 ../src/xz/xz.1:845 +#: ../src/xz/xz.1:846 ../src/xz/xz.1:2453 ../src/xz/xz.1:2454 +#: ../src/xz/xz.1:2456 #, no-wrap msgid "4 MiB" msgstr "4 MiB" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:2627 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:2843 #, no-wrap msgid "3" msgstr "3" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:714 ../src/xz/xz.1:795 ../src/xz/xz.1:2242 -#: ../src/xz/xz.1:2243 ../src/xz/xz.1:2262 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:769 ../src/xz/xz.1:850 ../src/xz/xz.1:2458 +#: ../src/xz/xz.1:2459 ../src/xz/xz.1:2478 #, no-wrap msgid "32 MiB" msgstr "32 MiB" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:710 ../src/xz/xz.1:790 ../src/xz/xz.1:791 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:765 ../src/xz/xz.1:845 ../src/xz/xz.1:846 #, no-wrap msgid "5 MiB" msgstr "5 MiB" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:2238 ../src/xz/xz.1:2263 -#: ../src/xz/xz.1:2628 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:2454 ../src/xz/xz.1:2479 +#: ../src/xz/xz.1:2844 #, no-wrap msgid "-4" msgstr "-4" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:1583 ../src/xz/xz.1:1584 -#: ../src/xz/xz.1:1587 ../src/xz/xz.1:2628 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:1759 ../src/xz/xz.1:1761 +#: ../src/xz/xz.1:1762 ../src/xz/xz.1:1764 ../src/xz/xz.1:2844 #, no-wrap msgid "4" msgstr "4" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:790 ../src/xz/xz.1:791 ../src/xz/xz.1:2263 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:845 ../src/xz/xz.1:846 ../src/xz/xz.1:2479 #, no-wrap msgid "48 MiB" msgstr "48 MiB" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:2239 ../src/xz/xz.1:2264 -#: ../src/xz/xz.1:2629 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:2455 ../src/xz/xz.1:2480 +#: ../src/xz/xz.1:2845 #, no-wrap msgid "-5" msgstr "-5" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 ../src/xz/xz.1:793 -#: ../src/xz/xz.1:2239 ../src/xz/xz.1:2240 ../src/xz/xz.1:2241 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 ../src/xz/xz.1:848 +#: ../src/xz/xz.1:2455 ../src/xz/xz.1:2456 ../src/xz/xz.1:2457 #, no-wrap msgid "8 MiB" msgstr "8 MiB" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:2629 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:2845 #, no-wrap msgid "5" msgstr "5" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 ../src/xz/xz.1:793 -#: ../src/xz/xz.1:2264 ../src/xz/xz.1:2265 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 ../src/xz/xz.1:848 +#: ../src/xz/xz.1:2480 ../src/xz/xz.1:2481 #, no-wrap msgid "94 MiB" msgstr "94 MiB" #. type: tbl table -#: ../src/xz/xz.1:712 ../src/xz/xz.1:2240 ../src/xz/xz.1:2265 -#: ../src/xz/xz.1:2630 +#: ../src/xz/xz.1:767 ../src/xz/xz.1:2456 ../src/xz/xz.1:2481 +#: ../src/xz/xz.1:2846 #, no-wrap msgid "-6" msgstr "-6" #. type: tbl table -#: ../src/xz/xz.1:712 ../src/xz/xz.1:713 ../src/xz/xz.1:714 ../src/xz/xz.1:715 -#: ../src/xz/xz.1:2630 +#: ../src/xz/xz.1:767 ../src/xz/xz.1:768 ../src/xz/xz.1:769 ../src/xz/xz.1:770 +#: ../src/xz/xz.1:2846 #, no-wrap msgid "6" msgstr "6" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:2241 ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:2457 ../src/xz/xz.1:2482 #, no-wrap msgid "-7" msgstr "-7" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2241 -#: ../src/xz/xz.1:2242 ../src/xz/xz.1:2263 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2457 +#: ../src/xz/xz.1:2458 ../src/xz/xz.1:2479 #, no-wrap msgid "16 MiB" msgstr "16 MiB" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2482 #, no-wrap msgid "186 MiB" msgstr "186 MiB" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:2242 ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:2458 ../src/xz/xz.1:2483 #, no-wrap msgid "-8" msgstr "-8" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:795 ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:850 ../src/xz/xz.1:2483 #, no-wrap msgid "370 MiB" msgstr "370 MiB" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:795 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:850 #, no-wrap msgid "33 MiB" msgstr "33 MiB" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:2243 ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:2459 ../src/xz/xz.1:2484 #, no-wrap msgid "-9" msgstr "-9" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 ../src/xz/xz.1:2243 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 ../src/xz/xz.1:2459 #, no-wrap msgid "64 MiB" msgstr "64 MiB" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 ../src/xz/xz.1:2484 #, no-wrap msgid "674 MiB" msgstr "674 MiB" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 #, no-wrap msgid "65 MiB" msgstr "65 MiB" #. type: Plain text -#: ../src/xz/xz.1:721 +#: ../src/xz/xz.1:776 msgid "Column descriptions:" msgstr "Spaltenbeschreibungen:" #. type: Plain text -#: ../src/xz/xz.1:733 +#: ../src/xz/xz.1:788 msgid "" "DictSize is the LZMA2 dictionary size. It is waste of memory to use a " "dictionary bigger than the size of the uncompressed file. This is why it is " @@ -1489,15 +1553,15 @@ "for them. At B<-6> and lower, the amount of memory wasted is usually low " "enough to not matter." msgstr "" -"DictGröße ist die Größe des LZMA2-Wörterbuchs. Es ist Speicherverschwendung, " -"ein Wörterbuch zu verwenden, das größer als die unkomprimierte Datei ist. " -"Daher ist es besser, die Voreinstellungen B<-7> … B<-9> zu vermeiden, falls " -"es keinen wirklichen Bedarf dafür gibt. Mit B<-6> und weniger wird " -"üblicherweise so wenig Speicher verschwendet, dass dies nicht ins Gewicht " -"fällt." +"Wörtb.Größe ist die Größe des LZMA2-Wörterbuchs. Es ist " +"Speicherverschwendung, ein Wörterbuch zu verwenden, das größer als die " +"unkomprimierte Datei ist. Daher ist es besser, die Voreinstellungen B<-7> … " +"B<-9> zu vermeiden, falls es keinen wirklichen Bedarf dafür gibt. Mit B<-6> " +"und weniger wird üblicherweise so wenig Speicher verschwendet, dass dies " +"nicht ins Gewicht fällt." #. type: Plain text -#: ../src/xz/xz.1:742 +#: ../src/xz/xz.1:797 msgid "" "CompCPU is a simplified representation of the LZMA2 settings that affect " "compression speed. The dictionary size affects speed too, so while CompCPU " @@ -1505,28 +1569,28 @@ "little slower. To get even slower and thus possibly better compression, see " "B<--extreme>." msgstr "" -"KompCPU ist eine vereinfachte Repräsentation der LZMA2-Einstellungen, welche " -"die Kompressionsgeschwindigkeit beeinflussen. Die Wörterbuchgröße wirkt sich " -"ebenfalls auf die Geschwindigkeit aus. Während KompCPU für die Stufen B<-6> " -"bis B<-9> gleich ist, tendieren höhere Stufen dazu, etwas langsamer zu sein. " -"Um eine noch langsamere, aber möglicherweise bessere Kompression zu " -"erhalten, siehe B<--extreme>." +"KomprCPU ist eine vereinfachte Repräsentation der LZMA2-Einstellungen, " +"welche die Kompressionsgeschwindigkeit beeinflussen. Die Wörterbuchgröße " +"wirkt sich ebenfalls auf die Geschwindigkeit aus. Während KompCPU für die " +"Stufen B<-6> bis B<-9> gleich ist, tendieren höhere Stufen dazu, etwas " +"langsamer zu sein. Um eine noch langsamere, aber möglicherweise bessere " +"Kompression zu erhalten, siehe B<--extreme>." #. type: Plain text -#: ../src/xz/xz.1:750 +#: ../src/xz/xz.1:805 msgid "" "CompMem contains the compressor memory requirements in the single-threaded " "mode. It may vary slightly between B versions. Memory requirements of " "some of the future multithreaded modes may be dramatically higher than that " "of the single-threaded mode." msgstr "" -"KompSpeicher enthält den Speicherbedarf des Kompressors im Einzel-Thread-" +"KompSpeich enthält den Speicherbedarf des Kompressors im Einzel-Thread-" "Modus. Dieser kann zwischen den B-Versionen leicht variieren. Der " "Speicherbedarf einiger der zukünftigen Multithread-Modi kann dramatisch " "höher sein als im Einzel-Thread-Modus." #. type: Plain text -#: ../src/xz/xz.1:757 +#: ../src/xz/xz.1:812 msgid "" "DecMem contains the decompressor memory requirements. That is, the " "compression settings determine the memory requirements of the decompressor. " @@ -1534,20 +1598,20 @@ "dictionary size, but the values in the table have been rounded up to the " "next full MiB." msgstr "" -"DekSpeicher enthält den Speicherbedarf für die Dekompression. Das bedeutet, " +"DekompSpeich enthält den Speicherbedarf für die Dekompression. Das bedeutet, " "dass die Kompressionseinstellungen den Speicherbedarf bei der Dekompression " "bestimmen. Der exakte Speicherbedarf bei der Dekompression ist geringfügig " "größer als die Größe des LZMA2-Wörterbuchs, aber die Werte in der Tabelle " "wurden auf ganze MiB aufgerundet." #. type: TP -#: ../src/xz/xz.1:758 +#: ../src/xz/xz.1:813 #, no-wrap msgid "B<-e>, B<--extreme>" msgstr "B<-e>, B<--extreme>" #. type: Plain text -#: ../src/xz/xz.1:767 +#: ../src/xz/xz.1:822 msgid "" "Use a slower variant of the selected compression preset level (B<-0> ... " "B<-9>) to hopefully get a little bit better compression ratio, but with bad " @@ -1560,10 +1624,10 @@ "Kompressionsverhältnis zu erreichen, das aber in ungünstigen Fällen auch " "schlechter werden kann. Der Speicherverbrauch bei der Dekompression wird " "dabei nicht beeinflusst, aber der Speicherverbrauch der Kompression steigt " -"in der Voreinstellungsstufen B<-0> bis B<-3> geringfügig an." +"in den Voreinstellungsstufen B<-0> bis B<-3> geringfügig an." #. type: Plain text -#: ../src/xz/xz.1:779 +#: ../src/xz/xz.1:834 msgid "" "Since there are two presets with dictionary sizes 4\\ MiB and 8\\ MiB, the " "presets B<-3e> and B<-5e> use slightly faster settings (lower CompCPU) than " @@ -1575,93 +1639,93 @@ "diese Weise sind zwei Voreinstellungen nie identisch." #. type: tbl table -#: ../src/xz/xz.1:787 +#: ../src/xz/xz.1:842 #, no-wrap msgid "-0e" msgstr "-0e" #. type: tbl table -#: ../src/xz/xz.1:787 ../src/xz/xz.1:788 ../src/xz/xz.1:789 ../src/xz/xz.1:791 -#: ../src/xz/xz.1:793 ../src/xz/xz.1:794 ../src/xz/xz.1:795 ../src/xz/xz.1:796 -#: ../src/xz/xz.1:2632 +#: ../src/xz/xz.1:842 ../src/xz/xz.1:843 ../src/xz/xz.1:844 ../src/xz/xz.1:846 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:849 ../src/xz/xz.1:850 ../src/xz/xz.1:851 +#: ../src/xz/xz.1:2848 #, no-wrap msgid "8" msgstr "8" #. type: tbl table -#: ../src/xz/xz.1:788 +#: ../src/xz/xz.1:843 #, no-wrap msgid "-1e" msgstr "-1e" #. type: tbl table -#: ../src/xz/xz.1:788 +#: ../src/xz/xz.1:843 #, no-wrap msgid "13 MiB" msgstr "13 MiB" #. type: tbl table -#: ../src/xz/xz.1:789 +#: ../src/xz/xz.1:844 #, no-wrap msgid "-2e" msgstr "-2e" #. type: tbl table -#: ../src/xz/xz.1:789 +#: ../src/xz/xz.1:844 #, no-wrap msgid "25 MiB" msgstr "25 MiB" #. type: tbl table -#: ../src/xz/xz.1:790 +#: ../src/xz/xz.1:845 #, no-wrap msgid "-3e" msgstr "-3e" #. type: tbl table -#: ../src/xz/xz.1:790 ../src/xz/xz.1:792 ../src/xz/xz.1:2631 +#: ../src/xz/xz.1:845 ../src/xz/xz.1:847 ../src/xz/xz.1:2847 #, no-wrap msgid "7" msgstr "7" #. type: tbl table -#: ../src/xz/xz.1:791 +#: ../src/xz/xz.1:846 #, no-wrap msgid "-4e" msgstr "-4e" #. type: tbl table -#: ../src/xz/xz.1:792 ../src/xz/xz.1:2631 +#: ../src/xz/xz.1:847 ../src/xz/xz.1:2847 #, no-wrap msgid "-5e" msgstr "-5e" #. type: tbl table -#: ../src/xz/xz.1:793 ../src/xz/xz.1:2632 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:2848 #, no-wrap msgid "-6e" msgstr "-6e" #. type: tbl table -#: ../src/xz/xz.1:794 +#: ../src/xz/xz.1:849 #, no-wrap msgid "-7e" msgstr "-7e" #. type: tbl table -#: ../src/xz/xz.1:795 +#: ../src/xz/xz.1:850 #, no-wrap msgid "-8e" msgstr "-8e" #. type: tbl table -#: ../src/xz/xz.1:796 +#: ../src/xz/xz.1:851 #, no-wrap msgid "-9e" msgstr "-9e" #. type: Plain text -#: ../src/xz/xz.1:808 +#: ../src/xz/xz.1:863 msgid "" "For example, there are a total of four presets that use 8\\ MiB dictionary, " "whose order from the fastest to the slowest is B<-5>, B<-6>, B<-5e>, and " @@ -1672,19 +1736,19 @@ "B<-5>, B<-6>, B<-5e> und B<-6e> ist." #. type: TP -#: ../src/xz/xz.1:808 +#: ../src/xz/xz.1:863 #, no-wrap msgid "B<--fast>" msgstr "B<--fast>" #. type: TP -#: ../src/xz/xz.1:811 +#: ../src/xz/xz.1:866 #, no-wrap msgid "B<--best>" msgstr "B<--best>" #. type: Plain text -#: ../src/xz/xz.1:822 +#: ../src/xz/xz.1:877 msgid "" "These are somewhat misleading aliases for B<-0> and B<-9>, respectively. " "These are provided only for backwards compatibility with LZMA Utils. Avoid " @@ -1695,14 +1759,14 @@ "bereitgestellt. Sie sollten diese Optionen besser nicht verwenden." #. type: TP -#: ../src/xz/xz.1:822 +#: ../src/xz/xz.1:877 #, no-wrap msgid "B<--block-size=>I" msgstr "B<--block-size=>I" # CHECK multi-threading and makes limited random-access #. type: Plain text -#: ../src/xz/xz.1:835 +#: ../src/xz/xz.1:890 msgid "" "When compressing to the B<.xz> format, split the input data into blocks of " "I bytes. The blocks are compressed independently from each other, " @@ -1719,16 +1783,16 @@ "sie kann auch im Einzel-Thread-Modus angewendet werden." #. type: Plain text -#: ../src/xz/xz.1:853 +#: ../src/xz/xz.1:908 msgid "" "In multi-threaded mode about three times I bytes will be allocated in " "each thread for buffering input and output. The default I is three " "times the LZMA2 dictionary size or 1 MiB, whichever is more. Typically a " -"good value is 2-4 times the size of the LZMA2 dictionary or at least 1 MiB. " -"Using I less than the LZMA2 dictionary size is waste of RAM because " -"then the LZMA2 dictionary buffer will never get fully used. The sizes of " -"the blocks are stored in the block headers, which a future version of B " -"will use for multi-threaded decompression." +"good value is 2\\(en4 times the size of the LZMA2 dictionary or at least 1 " +"MiB. Using I less than the LZMA2 dictionary size is waste of RAM " +"because then the LZMA2 dictionary buffer will never get fully used. The " +"sizes of the blocks are stored in the block headers, which a future version " +"of B will use for multi-threaded decompression." msgstr "" "Im Multi-Thread-Modus wird etwa die dreifache I in jedem Thread zur " "Pufferung der Ein- und Ausgabe belegt. Die vorgegebene I ist das " @@ -1741,7 +1805,7 @@ "Version von B für eine Multi-Thread-Dekompression genutzt wird." #. type: Plain text -#: ../src/xz/xz.1:862 +#: ../src/xz/xz.1:917 msgid "" "In single-threaded mode no block splitting is done by default. Setting this " "option doesn't affect memory usage. No size information is stored in block " @@ -1759,13 +1823,13 @@ "die Dateien im Multi-Thread-Modus zu dekomprimieren." #. type: TP -#: ../src/xz/xz.1:862 +#: ../src/xz/xz.1:917 #, no-wrap msgid "B<--block-list=>I" msgstr "B<--block-list=>I" #. type: Plain text -#: ../src/xz/xz.1:868 +#: ../src/xz/xz.1:923 msgid "" "When compressing to the B<.xz> format, start a new block after the given " "intervals of uncompressed data." @@ -1774,7 +1838,7 @@ "Intervallen unkomprimierter Daten einen neuen Block." #. type: Plain text -#: ../src/xz/xz.1:874 +#: ../src/xz/xz.1:929 msgid "" "The uncompressed I of the blocks are specified as a comma-separated " "list. Omitting a size (two or more consecutive commas) is a shorthand to " @@ -1786,7 +1850,7 @@ "Blocks zu verwenden." #. type: Plain text -#: ../src/xz/xz.1:884 +#: ../src/xz/xz.1:939 msgid "" "If the input file is bigger than the sum of I, the last value in " "I is repeated until the end of the file. A special value of B<0> may " @@ -1800,7 +1864,7 @@ # FIXME encoder → compressor #. type: Plain text -#: ../src/xz/xz.1:899 +#: ../src/xz/xz.1:954 msgid "" "If one specifies I that exceed the encoder's block size (either the " "default value in threaded mode or the value specified with B<--block-" @@ -1819,7 +1883,7 @@ "ist, erhalten Sie 11 Blöcke: 5, 10, 8, 10, 2, 10, 10, 4, 10, 10 und 1 MiB." #. type: Plain text -#: ../src/xz/xz.1:905 +#: ../src/xz/xz.1:960 msgid "" "In multi-threaded mode the sizes of the blocks are stored in the block " "headers. This isn't done in single-threaded mode, so the encoded output " @@ -1830,13 +1894,13 @@ "kodierte Ausgabe zu der im Multi-Thread-Modus nicht identisch sein." #. type: TP -#: ../src/xz/xz.1:905 +#: ../src/xz/xz.1:960 #, no-wrap msgid "B<--flush-timeout=>I" msgstr "B<--flush-timeout=>I" #. type: Plain text -#: ../src/xz/xz.1:922 +#: ../src/xz/xz.1:977 msgid "" "When compressing, if more than I milliseconds (a positive integer) " "has passed since the previous flush and reading more input would block, all " @@ -1856,7 +1920,7 @@ "ein besseres Kompressionsverhältnis bewirken." #. type: Plain text -#: ../src/xz/xz.1:930 +#: ../src/xz/xz.1:985 msgid "" "This feature is disabled by default. If this option is specified more than " "once, the last one takes effect. The special I value of B<0> can " @@ -1868,14 +1932,14 @@ "Funktionsmerkmal explizit zu deaktivieren." #. type: Plain text -#: ../src/xz/xz.1:932 +#: ../src/xz/xz.1:987 msgid "This feature is not available on non-POSIX systems." msgstr "" "Dieses Funktionsmerkmal ist außerhalb von POSIX-Systemen nicht verfügbar." #. FIXME #. type: Plain text -#: ../src/xz/xz.1:940 +#: ../src/xz/xz.1:995 msgid "" "B Currently B is unsuitable for " "decompressing the stream in real time due to how B does buffering." @@ -1885,13 +1949,13 @@ "ungeeignet." #. type: TP -#: ../src/xz/xz.1:940 +#: ../src/xz/xz.1:995 #, no-wrap msgid "B<--memlimit-compress=>I" msgstr "B<--memlimit-compress=>I" #. type: Plain text -#: ../src/xz/xz.1:945 +#: ../src/xz/xz.1:1000 msgid "" "Set a memory usage limit for compression. If this option is specified " "multiple times, the last one takes effect." @@ -1900,31 +1964,53 @@ "diese Option mehrmals angegeben wird, ist die zuletzt angegebene wirksam." #. type: Plain text -#: ../src/xz/xz.1:960 +#: ../src/xz/xz.1:1013 msgid "" -"If the compression settings exceed the I, B will adjust the " -"settings downwards so that the limit is no longer exceeded and display a " -"notice that automatic adjustment was done. Such adjustments are not made " -"when compressing with B<--format=raw> or if B<--no-adjust> has been " -"specified. In those cases, an error is displayed and B will exit with " -"exit status 1." +"If the compression settings exceed the I, B will attempt to " +"adjust the settings downwards so that the limit is no longer exceeded and " +"display a notice that automatic adjustment was done. The adjustments are " +"done in this order: reducing the number of threads, switching to single-" +"threaded mode if even one thread in multi-threaded mode exceeds the " +"I, and finally reducing the LZMA2 dictionary size." msgstr "" -"Falls die Kompressionseinstellungen die I überschreiten, passt B " -"die Einstellungen nach unten an, so dass die Grenze nicht mehr überschritten " -"wird und zeigt einen Hinweis an, dass eine automatische Anpassung " -"vorgenommen wurde. Solche Anpassungen erfolgen nicht, wenn mit B<--" -"format=raw> komprimiert wird oder wenn B<--no-adjust> angegeben wurde. In " -"diesen Fällen wird eine Fehlermeldung mit dem Exit-Status 1 ausgegeben und " -"B mit dem Exit-Status 1 beendet." +"Falls die Kompressionseinstellungen die I überschreiten, versucht " +"B, die Einstellungen nach unten anzupassen, so dass die Grenze nicht " +"mehr überschritten wird und zeigt einen Hinweis an, dass eine automatische " +"Anpassung vorgenommen wurde. Die Anpassungen werden in folgender Reihenfolge " +"angewendet: Reduzierung der Anzahl der Threads, Wechsel in den Einzelthread-" +"Modus, falls sogar ein einziger Thread im Multithread-Modus die I " +"überschreitet, und schlussendlich die Reduzierung der Größe des LZMA2-" +"Wörterbuchs." #. type: Plain text -#: ../src/xz/xz.1:964 +#: ../src/xz/xz.1:1021 +msgid "" +"When compressing with B<--format=raw> or if B<--no-adjust> has been " +"specified, only the number of threads may be reduced since it can be done " +"without affecting the compressed output." +msgstr "" +"Beim Komprimieren mit B<--format=raw> oder falls B<--no-adjust> angegeben " +"wurde, wird nur die Anzahl der Threads reduziert, da nur so die komprimierte " +"Ausgabe nicht beeinflusst wird." + +#. type: Plain text +#: ../src/xz/xz.1:1028 +msgid "" +"If the I cannot be met even with the adjustments described above, an " +"error is displayed and B will exit with exit status 1." +msgstr "" +"Falls die I nicht anhand der vorstehend beschriebenen Anpassungen " +"gesetzt werden kann, wird ein Fehler angezeigt und B wird mit dem Exit-" +"Status 1 beendet." + +#. type: Plain text +#: ../src/xz/xz.1:1032 msgid "The I can be specified in multiple ways:" msgstr "Die I kann auf verschiedene Arten angegeben werden:" # FIXME integer suffix #. type: Plain text -#: ../src/xz/xz.1:974 +#: ../src/xz/xz.1:1042 msgid "" "The I can be an absolute value in bytes. Using an integer suffix " "like B can be useful. Example: B<--memlimit-compress=80MiB>" @@ -1933,7 +2019,7 @@ "kann dabei hilfreich sein. Beispiel: B<--memlimit-compress=80MiB>." #. type: Plain text -#: ../src/xz/xz.1:986 +#: ../src/xz/xz.1:1054 msgid "" "The I can be specified as a percentage of total physical memory " "(RAM). This can be useful especially when setting the B " @@ -1949,52 +2035,48 @@ "compress=70%>" #. type: Plain text -#: ../src/xz/xz.1:1006 +#: ../src/xz/xz.1:1064 msgid "" "The I can be reset back to its default value by setting it to B<0>. " "This is currently equivalent to setting the I to B (no memory " -"usage limit). Once multithreading support has been implemented, there may " -"be a difference between B<0> and B for the multithreaded case, so it is " -"recommended to use B<0> instead of B until the details have been " -"decided." +"usage limit)." msgstr "" "Mit B<0> kann die I auf den Standardwert zurückgesetzt werden. Dies " "ist gegenwärtig gleichbedeutend mit dem Setzen der I auf B " -"(keine Speicherbegrenzung). Sobald die Unterstützung für Multi-Threading " -"implementiert wurde, kann es im Multi-Thread-Fall einen Unterschied zwischen " -"B<0> und B geben, daher wird empfohlen, B<0> anstelle von B zu " -"verwenden, bis die Einzelheiten hierzu geklärt sind." +"(keine Speicherbegrenzung)." #. type: Plain text -#: ../src/xz/xz.1:1026 +#: ../src/xz/xz.1:1088 msgid "" "For 32-bit B there is a special case: if the I would be over " -"B<4020\\ MiB>, the I is set to B<4020\\ MiB>. (The values B<0> and " -"B aren't affected by this. A similar feature doesn't exist for " -"decompression.) This can be helpful when a 32-bit executable has access to " -"4\\ GiB address space while hopefully doing no harm in other situations." +"B<4020\\ MiB>, the I is set to B<4020\\ MiB>. On MIPS32 B<2000\\ " +"MiB> is used instead. (The values B<0> and B aren't affected by this. " +"A similar feature doesn't exist for decompression.) This can be helpful " +"when a 32-bit executable has access to 4\\ GiB address space (2 GiB on " +"MIPS32) while hopefully doing no harm in other situations." msgstr "" "Für die 32-Bit-Version von B gibt es einen Spezialfall: Falls die Grenze " -"über B<4020\\ MiB> liegt, wird die I auf B<4020\\ MiB> gesetzt (die " -"Werte B<0> und B werden hiervon nicht beeinflusst; für die " -"Dekompression gibt es keine vergleichbare Funktion). Dies kann hilfreich " -"sein, wenn ein 32-Bit-Executable auf einen 4\\ GiB großen Adressraum " -"zugreifen kann, wobei wir hoffen wollen, dass es in anderen Situationen " -"keine negativen Effekte hat." +"über B<4020\\ MiB> liegt, wird die I auf B<4020\\ MiB> gesetzt. Auf " +"MIPS32 wird stattdessen B<2000\\ MB> verwendet (die Werte B<0> und B " +"werden hiervon nicht beeinflusst; für die Dekompression gibt es keine " +"vergleichbare Funktion). Dies kann hilfreich sein, wenn ein 32-Bit-" +"Executable auf einen 4\\ GiB großen Adressraum (2 GiB auf MIPS32) zugreifen " +"kann, wobei wir hoffen wollen, dass es in anderen Situationen keine " +"negativen Effekte hat." #. type: Plain text -#: ../src/xz/xz.1:1029 +#: ../src/xz/xz.1:1091 msgid "See also the section B." msgstr "Siehe auch den Abschnitt B." #. type: TP -#: ../src/xz/xz.1:1029 +#: ../src/xz/xz.1:1091 #, no-wrap msgid "B<--memlimit-decompress=>I" msgstr "B<--memlimit-decompress=>I" #. type: Plain text -#: ../src/xz/xz.1:1043 +#: ../src/xz/xz.1:1105 msgid "" "Set a memory usage limit for decompression. This also affects the B<--list> " "mode. If the operation is not possible without exceeding the I, " @@ -2008,65 +2090,208 @@ "zu möglichen Wegen, die I anzugeben." #. type: TP -#: ../src/xz/xz.1:1043 +#: ../src/xz/xz.1:1105 #, no-wrap +msgid "B<--memlimit-mt-decompress=>I" +msgstr "B<--memlimit-mt-decompress=>I" + +#. type: Plain text +#: ../src/xz/xz.1:1127 +msgid "" +"Set a memory usage limit for multi-threaded decompression. This can only " +"affect the number of threads; this will never make B refuse to " +"decompress a file. If I is too low to allow any multi-threading, the " +"I is ignored and B will continue in single-threaded mode. Note " +"that if also B<--memlimit-decompress> is used, it will always apply to both " +"single-threaded and multi-threaded modes, and so the effective I for " +"multi-threading will never be higher than the limit set with B<--memlimit-" +"decompress>." +msgstr "" +"legt eine Begrenzung des Speicherverbrauchs für Multithread-Dekompression " +"fest. Dies beeinflusst lediglich die Anzahl der Threads; B wird dadurch " +"niemals die Dekompression einer Datei verweigern. Falls die I für " +"jegliches Multithreading zu niedrig ist, wird sie ignoriert und B setzt " +"im Einzelthread-modus fort. Beachten Sie auch, dass bei der Verwendung von " +"B<--memlimit-decompress> dies stets sowohl auf den Einzelthread-als auch auf " +"den Multithread-Modus angewendet wird und so die effektive I für den " +"Multithread-Modus niemals höher sein wird als die mit B<--memlimit-" +"decompress> gesetzte Grenze." + +#. type: Plain text +#: ../src/xz/xz.1:1134 +msgid "" +"In contrast to the other memory usage limit options, B<--memlimit-mt-" +"decompress=>I has a system-specific default I. B can be used to see the current value." +msgstr "" +"Im Gegensatz zu anderen Optionen zur Begrenzung des Speicherverbrauchs hat " +"B<--memlimit-mt-decompress=>I eine systemspezifisch vorgegebene " +"I. Mit B können Sie deren aktuellen Wert anzeigen " +"lassen." + +#. type: Plain text +#: ../src/xz/xz.1:1150 +msgid "" +"This option and its default value exist because without any limit the " +"threaded decompressor could end up allocating an insane amount of memory " +"with some input files. If the default I is too low on your system, " +"feel free to increase the I but never set it to a value larger than " +"the amount of usable RAM as with appropriate input files B will attempt " +"to use that amount of memory even with a low number of threads. Running out " +"of memory or swapping will not improve decompression performance." +msgstr "" +"Diese Option und ihr Standardwert existieren, weil die unbegrenzte " +"threadbezogene Dekompression bei einigen Eingabedateien zu unglaublich " +"großem Speicherverbrauch führen würde. Falls die vorgegebene I auf " +"Ihrem System zu niedrig ist, können Sie die I durchaus erhöhen, aber " +"setzen Sie sie niemals auf einen Wert größer als die Menge des nutzbaren " +"Speichers, da B bei entsprechenden Eingabedateien versuchen wird, diese " +"Menge an Speicher auch bei einer geringen Anzahl von Threads zu verwnden. " +"Speichermangel oder Auslagerung verbessern die Dekomprimierungsleistung " +"nicht." + +#. type: Plain text +#: ../src/xz/xz.1:1162 +msgid "" +"See B<--memlimit-compress=>I for possible ways to specify the " +"I. Setting I to B<0> resets the I to the default " +"system-specific value." +msgstr "" +"Siehe B<--memlimit-compress=>I für mögliche Wege zur Angabe der " +"I. Sezen der I auf B<0> setzt die I auf den " +"vorgegebenen systemspezifischen Wert zurück." + +#. type: TP +#: ../src/xz/xz.1:1163 +#, no-wrap msgid "B<-M> I, B<--memlimit=>I, B<--memory=>I" msgstr "B<-M> I, B<--memlimit=>I, B<--memory=>I" #. type: Plain text -#: ../src/xz/xz.1:1047 +#: ../src/xz/xz.1:1169 msgid "" -"This is equivalent to specifying B<--memlimit-compress=>IB<--" -"memlimit-decompress=>I." +"This is equivalent to specifying B<--memlimit-compress=>I B<--" +"memlimit-decompress=>I B<--memlimit-mt-decompress=>I." msgstr "" -"Dies ist gleichbedeutend mit B<--memlimit-compress=>IB<--memlimit-" -"decompress=>I." +"Dies ist gleichbedeutend mit B<--memlimit-compress=>I B<--memlimit-" +"decompress=>I B<--memlimit-mt-decompress=>I." #. type: TP -#: ../src/xz/xz.1:1047 +#: ../src/xz/xz.1:1169 #, no-wrap msgid "B<--no-adjust>" msgstr "B<--no-adjust>" #. type: Plain text -#: ../src/xz/xz.1:1055 +#: ../src/xz/xz.1:1179 msgid "" -"Display an error and exit if the compression settings exceed the memory " -"usage limit. The default is to adjust the settings downwards so that the " -"memory usage limit is not exceeded. Automatic adjusting is always disabled " -"when creating raw streams (B<--format=raw>)." +"Display an error and exit if the memory usage limit cannot be met without " +"adjusting settings that affect the compressed output. That is, this " +"prevents B from switching the encoder from multi-threaded mode to single-" +"threaded mode and from reducing the LZMA2 dictionary size. Even when this " +"option is used the number of threads may be reduced to meet the memory usage " +"limit as that won't affect the compressed output." msgstr "" -"zeigt einen Fehler an und bricht die Ausführung ab, falls die " -"Kompressionseinstellungen die Begrenzung der Speichernutzung überschreiten. " -"Standardmäßig werden die Einstellungen nach unten korrigiert, so dass diese " -"Grenze nicht überschritten wird. Bei der Erzeugung von Rohdatenströmen (B<--" -"format=raw>) ist die automatische Korrektur stets deaktiviert." +"zeigt einen Fehler an und beendet, falls die Grenze der Speichernutzung " +"nicht ohne Änderung der Einstellungen, welche die komprimierte Ausgabe " +"beeinflussen, berücksichtigt werden kann. Das bedeutet, dass B daran " +"gehindert wird, den Encoder vom Multithread-Modus in den Einzelthread-Modus " +"zu versetzen und die Größe des LZMA2-Wörterbuchs zu reduzieren. Allerdings " +"kann bei Verwendung dieser Option dennoch die Anzahl der Threads reduziert " +"werden, um die Grenze der Speichernutzung zu halten, sofern dies die " +"komprimierte Ausgabe nicht beeinflusst." +#. type: Plain text +#: ../src/xz/xz.1:1182 +msgid "" +"Automatic adjusting is always disabled when creating raw streams (B<--" +"format=raw>)." +msgstr "" +"Die automatische Anpassung ist beim Erzeugen von Rohdatenströmen (B<--" +"format=raw>) immer deaktiviert." + #. type: TP -#: ../src/xz/xz.1:1055 +#: ../src/xz/xz.1:1182 #, no-wrap msgid "B<-T> I, B<--threads=>I" msgstr "B<-T> I, B<--threads=>I" #. type: Plain text -#: ../src/xz/xz.1:1070 +#: ../src/xz/xz.1:1197 msgid "" "Specify the number of worker threads to use. Setting I to a " -"special value B<0> makes B use as many threads as there are CPU cores on " -"the system. The actual number of threads can be less than I if the " -"input file is not big enough for threading with the given settings or if " -"using more threads would exceed the memory usage limit." +"special value B<0> makes B use up to as many threads as the processor(s) " +"on the system support. The actual number of threads can be fewer than " +"I if the input file is not big enough for threading with the given " +"settings or if using more threads would exceed the memory usage limit." msgstr "" "gibt die Anzahl der zu verwendenden Arbeits-Threads an. Wenn Sie I " -"auf einen speziellen Wert B<0> setzen, verwendet B so viele Threads, wie " -"Prozessorkerne im System verfügbar sind. Die tatsächliche Anzahl kann " -"geringer sein als die angegebenen I, wenn die Eingabedatei nicht " -"groß genug für Threading mit den gegebenen Einstellungen ist oder wenn mehr " -"Threads die Speicherbegrenzung übersteigen würden." +"auf einen speziellen Wert B<0> setzen, verwendet B maximal so viele " +"Threads, wie der/die Prozessor(en) im System untestützen. Die tatsächliche " +"Anzahl kann geringer sein als die angegebenen I, wenn die " +"Eingabedatei nicht groß genug für Threading mit den gegebenen Einstellungen " +"ist oder wenn mehr Threads die Speicherbegrenzung übersteigen würden." #. type: Plain text -#: ../src/xz/xz.1:1077 +#: ../src/xz/xz.1:1216 msgid "" +"The single-threaded and multi-threaded compressors produce different " +"output. Single-threaded compressor will give the smallest file size but " +"only the output from the multi-threaded compressor can be decompressed using " +"multiple threads. Setting I to B<1> will use the single-threaded " +"mode. Setting I to any other value, including B<0>, will use the " +"multi-threaded compressor even if the system supports only one hardware " +"thread. (B 5.2.x used single-threaded mode in this situation.)" +msgstr "" +"Die Multithread- bzw. Einzelthread-Kompressoren erzeugen unterschiedliche " +"Ausgaben. Der Einzelthread-Kompressor erzeugt die geringste Dateigröße, aber " +"nur die Ausgabe des Multithread-Kompressors kann mit mehreren Threads wieder " +"dekomprimiert werden. Das Setzen der Anzahl der I auf B<1> wird den " +"Einzelthread-Modus verwenden. Das Setzen der Anzahl der I auf " +"einen anderen Wert einschließlich B<0> verwendet den Multithread-Kompressor, " +"und zwar sogar dann, wenn das System nur einen einzigen Hardware-Thread " +"unterstützt (B 5.2.x verwendete in diesem Fall noch den Einzelthread-" +"Modus)." + +#. type: Plain text +#: ../src/xz/xz.1:1235 +msgid "" +"To use multi-threaded mode with only one thread, set I to B<+1>. " +"The B<+> prefix has no effect with values other than B<1>. A memory usage " +"limit can still make B switch to single-threaded mode unless B<--no-" +"adjust> is used. Support for the B<+> prefix was added in B 5.4.0." +msgstr "" +"Um den Multithread-Modus mit nur einem einzigen Thread zu verwenden, setzen " +"Sie die Anzahl der I auf B<+1>. Das Präfix B<+> hat mit Werten " +"verschieden von B<1> keinen Effekt. Eine Begrenzung des Speicherverbrauchs " +"kann B dennoch veranlassen, den Einzelthread-Modus zu verwenden, außer " +"wenn B<--no-adjust> verwendet wird. Die Unterstützung für das Präfix B<+> " +"wurde in B 5.4.0 hinzugefügt." + +#. type: Plain text +#: ../src/xz/xz.1:1250 +msgid "" +"If an automatic number of threads has been requested and no memory usage " +"limit has been specified, then a system-specific default soft limit will be " +"used to possibly limit the number of threads. It is a soft limit in sense " +"that it is ignored if the number of threads becomes one, thus a soft limit " +"will never stop B from compressing or decompressing. This default soft " +"limit will not make B switch from multi-threaded mode to single-threaded " +"mode. The active limits can be seen with B." +msgstr "" +"Falls das automatische Setzen der Anzahl der Threads angefordert und keine " +"Speicherbegrenzung angegeben wurde, dann wird eine systemspezifisch " +"vorgegebene weiche Grenze verwendet, um eventuell die Anzahl der Threads zu " +"begrenzen. Es ist eine weiche Grenze im Sinne davon, dass sie ignoriert " +"wird, falls die Anzahl der Threads 1 ist; daher wird eine weiche Grenze " +"B niemals an der Kompression oder Dekompression hindern. Diese " +"vorgegebene weiche Grenze veranlasst B nicht, vom Multithread-Modus in " +"den Einzelthread-Modus zu wechseln. Die aktiven Grenzen können Sie mit dem " +"Befehl B anzeigen lassen." + +#. type: Plain text +#: ../src/xz/xz.1:1257 +msgid "" "Currently the only threading method is to split the input into blocks and " "compress them independently from each other. The default block size depends " "on the compression level and can be overridden with the B<--block-" @@ -2078,33 +2303,31 @@ "size=>I außer Kraft gesetzt werden." #. type: Plain text -#: ../src/xz/xz.1:1085 +#: ../src/xz/xz.1:1265 msgid "" -"Threaded decompression hasn't been implemented yet. It will only work on " -"files that contain multiple blocks with size information in block headers. " -"All files compressed in multi-threaded mode meet this condition, but files " -"compressed in single-threaded mode don't even if B<--block-size=>I is " -"used." +"Threaded decompression only works on files that contain multiple blocks with " +"size information in block headers. All large enough files compressed in " +"multi-threaded mode meet this condition, but files compressed in single-" +"threaded mode don't even if B<--block-size=>I has been used." msgstr "" -"Eine thread-basierte Dekompression wurde bislang noch nicht implementiert. " -"Sie wird nur bei Dateien funktionieren, die mehrere Blöcke mit " -"Größeninformationen in deren Headern enthalten. Alle im Multi-Thread-Modus " -"komprimierten Dateien erfüllen diese Bedingung, im Einzel-Thread-Modus " -"komprimierte Dateien dagegen nicht, selbst wenn B<--block-size=>I " -"verwendet wird." +"Eine thread-basierte Dekompression wird nur bei Dateien funktionieren, die " +"mehrere Blöcke mit Größeninformationen in deren Headern enthalten. Alle im " +"Multi-Thread-Modus komprimierten Dateien, die groß genug sind, erfüllen " +"diese Bedingung, im Einzel-Thread-Modus komprimierte Dateien dagegen nicht, " +"selbst wenn B<--block-size=>I verwendet wurde." #. type: SS -#: ../src/xz/xz.1:1086 ../src/xz/xz.1:2603 +#: ../src/xz/xz.1:1266 ../src/xz/xz.1:2819 #, no-wrap msgid "Custom compressor filter chains" msgstr "Benutzerdefinierte Filterketten für die Kompression" #. type: Plain text -#: ../src/xz/xz.1:1097 +#: ../src/xz/xz.1:1282 msgid "" "A custom filter chain allows specifying the compression settings in detail " "instead of relying on the settings associated to the presets. When a custom " -"filter chain is specified, preset options (B<-0> ... B<-9> and B<--" +"filter chain is specified, preset options (B<-0> \\&...\\& B<-9> and B<--" "extreme>) earlier on the command line are forgotten. If a preset option is " "specified after one or more custom filter chain options, the new preset " "takes effect and the custom filter chain options specified earlier are " @@ -2120,7 +2343,7 @@ "Filterkettenoptionen werden außer Kraft gesetzt." #. type: Plain text -#: ../src/xz/xz.1:1104 +#: ../src/xz/xz.1:1289 msgid "" "A filter chain is comparable to piping on the command line. When " "compressing, the uncompressed input goes to the first filter, whose output " @@ -2137,7 +2360,7 @@ "oder zwei Filtern." #. type: Plain text -#: ../src/xz/xz.1:1112 +#: ../src/xz/xz.1:1297 msgid "" "Many filters have limitations on where they can be in the filter chain: some " "filters can work only as the last filter in the chain, some only as a non-" @@ -2153,7 +2376,7 @@ "Sicherheitsgründen vorhanden." #. type: Plain text -#: ../src/xz/xz.1:1120 +#: ../src/xz/xz.1:1305 msgid "" "A custom filter chain is specified by using one or more filter options in " "the order they are wanted in the filter chain. That is, the order of filter " @@ -2169,7 +2392,7 @@ "bei der Kompression." #. type: Plain text -#: ../src/xz/xz.1:1129 +#: ../src/xz/xz.1:1314 msgid "" "Filters take filter-specific I as a comma-separated list. Extra " "commas in I are ignored. Every option has a default value, so you " @@ -2181,7 +2404,7 @@ "die Sie ändern wollen." #. type: Plain text -#: ../src/xz/xz.1:1138 +#: ../src/xz/xz.1:1323 msgid "" "To see the whole filter chain and I, use B (that is, use " "B<--verbose> twice). This works also for viewing the filter chain options " @@ -2193,19 +2416,19 @@ "verwendeten Filterkettenoptionen." #. type: TP -#: ../src/xz/xz.1:1138 +#: ../src/xz/xz.1:1323 #, no-wrap msgid "B<--lzma1>[B<=>I]" msgstr "B<--lzma1>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1141 +#: ../src/xz/xz.1:1326 #, no-wrap msgid "B<--lzma2>[B<=>I]" msgstr "B<--lzma2>[B<=>I]" #. type: Plain text -#: ../src/xz/xz.1:1146 +#: ../src/xz/xz.1:1331 msgid "" "Add LZMA1 or LZMA2 filter to the filter chain. These filters can be used " "only as the last filter in the chain." @@ -2214,7 +2437,7 @@ "als letzte Filter in der Kette verwendet werden." #. type: Plain text -#: ../src/xz/xz.1:1158 +#: ../src/xz/xz.1:1343 msgid "" "LZMA1 is a legacy filter, which is supported almost solely due to the legacy " "B<.lzma> file format, which supports only LZMA1. LZMA2 is an updated " @@ -2230,23 +2453,23 @@ "praktisch gleich." #. type: Plain text -#: ../src/xz/xz.1:1161 +#: ../src/xz/xz.1:1346 msgid "LZMA1 and LZMA2 share the same set of I:" msgstr "LZMA1 und LZMA2 haben die gleichen I:" #. type: TP -#: ../src/xz/xz.1:1162 +#: ../src/xz/xz.1:1347 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1186 +#: ../src/xz/xz.1:1374 msgid "" "Reset all LZMA1 or LZMA2 I to I. I consist of an " "integer, which may be followed by single-letter preset modifiers. The " -"integer can be from B<0> to B<9>, matching the command line options " -"B<-0> ... B<-9>. The only supported modifier is currently B, which " +"integer can be from B<0> to B<9>, matching the command line options B<-0> " +"\\&...\\& B<-9>. The only supported modifier is currently B, which " "matches B<--extreme>. If no B is specified, the default values of " "LZMA1 or LZMA2 I are taken from the preset B<6>." msgstr "" @@ -2260,14 +2483,14 @@ "LZMA2-I der Voreinstellung B<6> entnommen." #. type: TP -#: ../src/xz/xz.1:1186 +#: ../src/xz/xz.1:1374 #, no-wrap msgid "BI" msgstr "BI" # FIXME Dezimaltrenner in 1.5 GB #. type: Plain text -#: ../src/xz/xz.1:1201 +#: ../src/xz/xz.1:1389 msgid "" "Dictionary (history buffer) I indicates how many bytes of the " "recently processed uncompressed data is kept in memory. The algorithm tries " @@ -2289,7 +2512,7 @@ "Speicherverschwendung." #. type: Plain text -#: ../src/xz/xz.1:1210 +#: ../src/xz/xz.1:1398 msgid "" "Typical dictionary I is from 64\\ KiB to 64\\ MiB. The minimum is 4\\ " "KiB. The maximum for compression is currently 1.5\\ GiB (1536\\ MiB). The " @@ -2303,7 +2526,7 @@ "für die LZMA1- und LZMA2-Datenstromformate ist." #. type: Plain text -#: ../src/xz/xz.1:1237 +#: ../src/xz/xz.1:1425 msgid "" "Dictionary I and match finder (I) together determine the memory " "usage of the LZMA1 or LZMA2 encoder. The same (or bigger) dictionary " @@ -2325,13 +2548,13 @@ "werden beim Speichern in den B<.xz>-Headern aufgerundet." #. type: TP -#: ../src/xz/xz.1:1237 +#: ../src/xz/xz.1:1425 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1246 +#: ../src/xz/xz.1:1434 msgid "" "Specify the number of literal context bits. The minimum is 0 and the " "maximum is 4; the default is 3. In addition, the sum of I and I " @@ -2342,7 +2565,7 @@ "I nicht größer als 4 sein." #. type: Plain text -#: ../src/xz/xz.1:1251 +#: ../src/xz/xz.1:1439 msgid "" "All bytes that cannot be encoded as matches are encoded as literals. That " "is, literals are simply 8-bit bytes that are encoded one at a time." @@ -2352,15 +2575,16 @@ "für sich kodiert werden." #. type: Plain text -#: ../src/xz/xz.1:1265 +#: ../src/xz/xz.1:1453 msgid "" "The literal coding makes an assumption that the highest I bits of the " -"previous uncompressed byte correlate with the next byte. E.g. in typical " -"English text, an upper-case letter is often followed by a lower-case letter, " -"and a lower-case letter is usually followed by another lower-case letter. " -"In the US-ASCII character set, the highest three bits are 010 for upper-case " -"letters and 011 for lower-case letters. When I is at least 3, the " -"literal coding can take advantage of this property in the uncompressed data." +"previous uncompressed byte correlate with the next byte. For example, in " +"typical English text, an upper-case letter is often followed by a lower-case " +"letter, and a lower-case letter is usually followed by another lower-case " +"letter. In the US-ASCII character set, the highest three bits are 010 for " +"upper-case letters and 011 for lower-case letters. When I is at least " +"3, the literal coding can take advantage of this property in the " +"uncompressed data." msgstr "" "Bei der Literalkodierung wird angenommen, dass die höchsten I-Bits des " "zuvor unkomprimierten Bytes mit dem nächsten Byte in Beziehung stehen. Zum " @@ -2372,11 +2596,11 @@ "unkomprimierten Daten ausnutzen." #. type: Plain text -#: ../src/xz/xz.1:1274 +#: ../src/xz/xz.1:1462 msgid "" "The default value (3) is usually good. If you want maximum compression, " "test B. Sometimes it helps a little, and sometimes it makes " -"compression worse. If it makes it worse, test e.g.\\& B too." +"compression worse. If it makes it worse, test B too." msgstr "" "Der Vorgabewert (3) ist üblicherweise gut. Wenn Sie die maximale Kompression " "erreichen wollen, versuchen Sie B. Manchmal hilft es ein wenig, doch " @@ -2384,13 +2608,13 @@ "zum Beispiel auch\\& B." #. type: TP -#: ../src/xz/xz.1:1274 +#: ../src/xz/xz.1:1462 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1278 +#: ../src/xz/xz.1:1466 msgid "" "Specify the number of literal position bits. The minimum is 0 and the " "maximum is 4; the default is 0." @@ -2399,7 +2623,7 @@ "Maximum 4; die Vorgabe ist 0." #. type: Plain text -#: ../src/xz/xz.1:1285 +#: ../src/xz/xz.1:1473 msgid "" "I affects what kind of alignment in the uncompressed data is assumed " "when encoding literals. See I below for more information about " @@ -2410,13 +2634,13 @@ "Informationen zur Ausrichtung." #. type: TP -#: ../src/xz/xz.1:1285 +#: ../src/xz/xz.1:1473 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1289 +#: ../src/xz/xz.1:1477 msgid "" "Specify the number of position bits. The minimum is 0 and the maximum is 4; " "the default is 2." @@ -2425,7 +2649,7 @@ "4; Standard ist 2." #. type: Plain text -#: ../src/xz/xz.1:1296 +#: ../src/xz/xz.1:1484 msgid "" "I affects what kind of alignment in the uncompressed data is assumed in " "general. The default means four-byte alignment (2^I=2^2=4), which is " @@ -2437,13 +2661,13 @@ "bessere Schätzung gibt." #. type: Plain text -#: ../src/xz/xz.1:1310 +#: ../src/xz/xz.1:1498 msgid "" -"When the aligment is known, setting I accordingly may reduce the file " -"size a little. E.g. with text files having one-byte alignment (US-ASCII, " -"ISO-8859-*, UTF-8), setting B can improve compression slightly. For " -"UTF-16 text, B is a good choice. If the alignment is an odd number " -"like 3 bytes, B might be the best choice." +"When the alignment is known, setting I accordingly may reduce the file " +"size a little. For example, with text files having one-byte alignment (US-" +"ASCII, ISO-8859-*, UTF-8), setting B can improve compression " +"slightly. For UTF-16 text, B is a good choice. If the alignment is " +"an odd number like 3 bytes, B might be the best choice." msgstr "" "Wenn die Ausrichtung bekannt ist, kann das entsprechende Setzen von I " "die Dateigröße ein wenig verringern. Wenn Textdateien zum Beispiel eine Ein-" @@ -2453,7 +2677,7 @@ "ist, könnte B die beste Wahl sein." #. type: Plain text -#: ../src/xz/xz.1:1318 +#: ../src/xz/xz.1:1506 msgid "" "Even though the assumed alignment can be adjusted with I and I, " "LZMA1 and LZMA2 still slightly favor 16-byte alignment. It might be worth " @@ -2466,18 +2690,18 @@ "wahrscheinlich oft mit LZMA1 oder LZMA2 komprimiert werden." #. type: TP -#: ../src/xz/xz.1:1318 +#: ../src/xz/xz.1:1506 #, no-wrap msgid "BI" msgstr "BI<Üf>" #. type: Plain text -#: ../src/xz/xz.1:1333 +#: ../src/xz/xz.1:1521 msgid "" "Match finder has a major effect on encoder speed, memory usage, and " "compression ratio. Usually Hash Chain match finders are faster than Binary " "Tree match finders. The default depends on the I: 0 uses B, " -"1-3 use B, and the rest use B." +"1\\(en3 use B, and the rest use B." msgstr "" "Der Übereinstimmungsfinder hat einen großen Einfluss auf die Geschwindigkeit " "des Kodierers, den Speicherbedarf und das Kompressionsverhältnis. " @@ -2487,7 +2711,7 @@ "Rest verwendet B." #. type: Plain text -#: ../src/xz/xz.1:1339 +#: ../src/xz/xz.1:1527 msgid "" "The following match finders are supported. The memory usage formulas below " "are rough approximations, which are closest to the reality when I is a " @@ -2498,138 +2722,138 @@ "am nächsten kommen, wenn I eine Zweierpotenz ist." #. type: TP -#: ../src/xz/xz.1:1340 +#: ../src/xz/xz.1:1528 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1343 +#: ../src/xz/xz.1:1531 msgid "Hash Chain with 2- and 3-byte hashing" msgstr "Hash-Kette mit 2- und 3-Byte-Hashing" #. type: Plain text -#: ../src/xz/xz.1:1347 ../src/xz/xz.1:1396 +#: ../src/xz/xz.1:1535 ../src/xz/xz.1:1584 msgid "Minimum value for I: 3" msgstr "Minimalwert für I: 3" #. type: Plain text -#: ../src/xz/xz.1:1349 ../src/xz/xz.1:1368 ../src/xz/xz.1:1398 -#: ../src/xz/xz.1:1417 +#: ../src/xz/xz.1:1537 ../src/xz/xz.1:1556 ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1605 msgid "Memory usage:" msgstr "Speicherbedarf:" #. type: Plain text -#: ../src/xz/xz.1:1354 +#: ../src/xz/xz.1:1542 msgid "I * 7.5 (if I E= 16 MiB);" msgstr "I * 7,5 (falls I E= 16 MiB);" #. type: Plain text -#: ../src/xz/xz.1:1359 +#: ../src/xz/xz.1:1547 msgid "I * 5.5 + 64 MiB (if I E 16 MiB)" msgstr "I * 5,5 + 64 MiB (falls I E 16 MiB)" #. type: TP -#: ../src/xz/xz.1:1359 +#: ../src/xz/xz.1:1547 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1362 +#: ../src/xz/xz.1:1550 msgid "Hash Chain with 2-, 3-, and 4-byte hashing" msgstr "Hash-Kette mit 2-, 3- und 4-Byte-Hashing" #. type: Plain text -#: ../src/xz/xz.1:1366 ../src/xz/xz.1:1415 +#: ../src/xz/xz.1:1554 ../src/xz/xz.1:1603 msgid "Minimum value for I: 4" msgstr "Minimaler Wert für I: 4" #. type: Plain text -#: ../src/xz/xz.1:1373 +#: ../src/xz/xz.1:1561 msgid "I * 7.5 (if I E= 32 MiB);" msgstr "I * 7,5 (falls I E= 32 MiB ist);" #. type: Plain text -#: ../src/xz/xz.1:1378 +#: ../src/xz/xz.1:1566 msgid "I * 6.5 (if I E 32 MiB)" msgstr "I * 6,5 (falls I E 32 MiB ist)" #. type: TP -#: ../src/xz/xz.1:1378 +#: ../src/xz/xz.1:1566 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1381 +#: ../src/xz/xz.1:1569 msgid "Binary Tree with 2-byte hashing" msgstr "Binärbaum mit 2-Byte-Hashing" #. type: Plain text -#: ../src/xz/xz.1:1385 +#: ../src/xz/xz.1:1573 msgid "Minimum value for I: 2" msgstr "Minimaler Wert für I: 2" #. type: Plain text -#: ../src/xz/xz.1:1389 +#: ../src/xz/xz.1:1577 msgid "Memory usage: I * 9.5" msgstr "Speicherverbrauch: I * 9.5" #. type: TP -#: ../src/xz/xz.1:1389 +#: ../src/xz/xz.1:1577 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1392 +#: ../src/xz/xz.1:1580 msgid "Binary Tree with 2- and 3-byte hashing" msgstr "Binärbaum mit 2- und 3-Byte-Hashing" #. type: Plain text -#: ../src/xz/xz.1:1403 +#: ../src/xz/xz.1:1591 msgid "I * 11.5 (if I E= 16 MiB);" msgstr "I * 11,5 (falls I E= 16 MiB ist);" #. type: Plain text -#: ../src/xz/xz.1:1408 +#: ../src/xz/xz.1:1596 msgid "I * 9.5 + 64 MiB (if I E 16 MiB)" msgstr "I * 9,5 + 64 MiB (falls I E 16 MiB ist)" #. type: TP -#: ../src/xz/xz.1:1408 +#: ../src/xz/xz.1:1596 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1411 +#: ../src/xz/xz.1:1599 msgid "Binary Tree with 2-, 3-, and 4-byte hashing" msgstr "Binärbaum mit 2-, 3- und 4-Byte-Hashing" #. type: Plain text -#: ../src/xz/xz.1:1422 +#: ../src/xz/xz.1:1610 msgid "I * 11.5 (if I E= 32 MiB);" msgstr "I * 11,5 (falls I E= 32 MiB ist);" #. type: Plain text -#: ../src/xz/xz.1:1427 +#: ../src/xz/xz.1:1615 msgid "I * 10.5 (if I E 32 MiB)" msgstr "I * 10,5 (falls I E 32 MiB ist)" #. type: TP -#: ../src/xz/xz.1:1428 +#: ../src/xz/xz.1:1616 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1449 +#: ../src/xz/xz.1:1637 msgid "" "Compression I specifies the method to analyze the data produced by the " "match finder. Supported I are B and B. The default is " -"B for I 0-3 and B for I 4-9." +"B for I 0\\(en3 and B for I 4\\(en9." msgstr "" "gibt die Methode zum Analysieren der vom Übereinstimmungsfinder gelieferten " "Daten an. Als I werden B und B unterstützt. Die Vorgabe " @@ -2637,7 +2861,7 @@ "I 4-9." #. type: Plain text -#: ../src/xz/xz.1:1458 +#: ../src/xz/xz.1:1646 msgid "" "Usually B is used with Hash Chain match finders and B with " "Binary Tree match finders. This is also what the I do." @@ -2647,13 +2871,13 @@ "machen es auch die I." #. type: TP -#: ../src/xz/xz.1:1458 +#: ../src/xz/xz.1:1646 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1465 +#: ../src/xz/xz.1:1653 msgid "" "Specify what is considered to be a nice length for a match. Once a match of " "at least I bytes is found, the algorithm stops looking for possibly " @@ -2664,23 +2888,24 @@ "Wert hat, sucht der Algorithmus nicht weiter nach besseren Übereinstimmungen." #. type: Plain text -#: ../src/xz/xz.1:1472 +#: ../src/xz/xz.1:1660 msgid "" -"I can be 2-273 bytes. Higher values tend to give better compression " -"ratio at the expense of speed. The default depends on the I." +"I can be 2\\(en273 bytes. Higher values tend to give better " +"compression ratio at the expense of speed. The default depends on the " +"I." msgstr "" "Der I-Wert kann 2-273 Byte sein. Höhere Werte tendieren zu einem " "besseren Kompressionsverhältnis, aber auf Kosten der Geschwindigkeit. Die " "Vorgabe hängt von der I ab." #. type: TP -#: ../src/xz/xz.1:1472 +#: ../src/xz/xz.1:1660 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1482 +#: ../src/xz/xz.1:1670 msgid "" "Specify the maximum search depth in the match finder. The default is the " "special value of 0, which makes the compressor determine a reasonable " @@ -2691,12 +2916,12 @@ "für I aus I<Üf> und I-Wert zu bestimmen." #. type: Plain text -#: ../src/xz/xz.1:1493 +#: ../src/xz/xz.1:1681 msgid "" -"Reasonable I for Hash Chains is 4-100 and 16-1000 for Binary Trees. " -"Using very high values for I can make the encoder extremely slow with " -"some files. Avoid setting the I over 1000 unless you are prepared to " -"interrupt the compression in case it is taking far too long." +"Reasonable I for Hash Chains is 4\\(en100 and 16\\(en1000 for Binary " +"Trees. Using very high values for I can make the encoder extremely " +"slow with some files. Avoid setting the I over 1000 unless you are " +"prepared to interrupt the compression in case it is taking far too long." msgstr "" "Die angemessene I für Hash-Ketten ist 4-100 und 16-1000 für " "Binärbäume. Hohe Werte für die I können den Kodierer bei einigen " @@ -2705,7 +2930,7 @@ "abzubrechen, wenn sie zu lange dauert." #. type: Plain text -#: ../src/xz/xz.1:1504 +#: ../src/xz/xz.1:1692 msgid "" "When decoding raw streams (B<--format=raw>), LZMA2 needs only the dictionary " "I. LZMA1 needs also I, I, and I." @@ -2714,43 +2939,49 @@ "Wörterbuch-I. LZMA1 benötigt außerdem I, I und I." #. type: TP -#: ../src/xz/xz.1:1504 +#: ../src/xz/xz.1:1692 #, no-wrap msgid "B<--x86>[B<=>I]" msgstr "B<--x86>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1507 +#: ../src/xz/xz.1:1695 #, no-wrap -msgid "B<--powerpc>[B<=>I]" -msgstr "B<--powerpc>[B<=>I]" +msgid "B<--arm>[B<=>I]" +msgstr "B<--arm>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1509 +#: ../src/xz/xz.1:1697 #, no-wrap -msgid "B<--ia64>[B<=>I]" -msgstr "B<--ia64>[B<=>I]" +msgid "B<--armthumb>[B<=>I]" +msgstr "B<--armthumb>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1511 +#: ../src/xz/xz.1:1699 #, no-wrap -msgid "B<--arm>[B<=>I]" -msgstr "B<--arm>[B<=>I]" +msgid "B<--arm64>[B<=>I]" +msgstr "B<--arm64>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1513 +#: ../src/xz/xz.1:1701 #, no-wrap -msgid "B<--armthumb>[B<=>I]" -msgstr "B<--armthumb>[B<=>I]" +msgid "B<--powerpc>[B<=>I]" +msgstr "B<--powerpc>[B<=>I]" #. type: TP -#: ../src/xz/xz.1:1515 +#: ../src/xz/xz.1:1703 #, no-wrap +msgid "B<--ia64>[B<=>I]" +msgstr "B<--ia64>[B<=>I]" + +#. type: TP +#: ../src/xz/xz.1:1705 +#, no-wrap msgid "B<--sparc>[B<=>I]" msgstr "B<--sparc>[B<=>I]" #. type: Plain text -#: ../src/xz/xz.1:1521 +#: ../src/xz/xz.1:1711 msgid "" "Add a branch/call/jump (BCJ) filter to the filter chain. These filters can " "be used only as a non-last filter in the filter chain." @@ -2759,14 +2990,15 @@ "können nicht als letzter Filter in der Filterkette verwendet werden." #. type: Plain text -#: ../src/xz/xz.1:1533 +#: ../src/xz/xz.1:1725 msgid "" "A BCJ filter converts relative addresses in the machine code to their " -"absolute counterparts. This doesn't change the size of the data, but it " -"increases redundancy, which can help LZMA2 to produce 0-15\\ % smaller B<." -"xz> file. The BCJ filters are always reversible, so using a BCJ filter for " -"wrong type of data doesn't cause any data loss, although it may make the " -"compression ratio slightly worse." +"absolute counterparts. This doesn't change the size of the data but it " +"increases redundancy, which can help LZMA2 to produce 0\\(en15\\ % smaller " +"B<.xz> file. The BCJ filters are always reversible, so using a BCJ filter " +"for wrong type of data doesn't cause any data loss, although it may make the " +"compression ratio slightly worse. The BCJ filters are very fast and use an " +"insignificant amount of memory." msgstr "" "Ein BCJ-Filter wandelt relative Adressen im Maschinencode in deren absolute " "Gegenstücke um. Die Datengröße wird dadurch nicht geändert, aber die " @@ -2774,53 +3006,22 @@ "B<.xz>-Datei zu erstellen. Die BCJ-Filter sind immer reversibel, daher " "verursacht die Anwendung eines BCJ-Filters auf den falschen Datentyp keinen " "Datenverlust, wobei aber das Kompressionsverhältnis etwas schlechter werden " -"könnte." +"könnte. Die BCJ-Filter sind sehr schnell und verbrauchen nur wenig mehr " +"Speicher." #. type: Plain text -#: ../src/xz/xz.1:1540 -msgid "" -"It is fine to apply a BCJ filter on a whole executable; there's no need to " -"apply it only on the executable section. Applying a BCJ filter on an " -"archive that contains both executable and non-executable files may or may " -"not give good results, so it generally isn't good to blindly apply a BCJ " -"filter when compressing binary packages for distribution." -msgstr "" -"Es ist in Ordnung, einen BCJ-Filter auf eine gesamte Binärdatei anzuwenden; " -"es ist nicht nötig, dies nur auf den binären Bereich zu beschränken. Die " -"Anwendung eines BCJ-Filters auf ein Archiv, das sowohl binäre als auch nicht-" -"binäre Dateien enthält, kann gute Ergebnisse liefern, muss es aber nicht. " -"Daher ist es generell nicht gut, einen BCJ-Filter blindlings anzuwenden, " -"wenn Sie Binärpakete zwecks Weitergabe komprimieren wollen." - -#. type: Plain text -#: ../src/xz/xz.1:1548 -msgid "" -"These BCJ filters are very fast and use insignificant amount of memory. If " -"a BCJ filter improves compression ratio of a file, it can improve " -"decompression speed at the same time. This is because, on the same " -"hardware, the decompression speed of LZMA2 is roughly a fixed number of " -"bytes of compressed data per second." -msgstr "" -"Diese BCJ-Filter sind sehr schnell und erhöhen den Speicherbedarf nur " -"unerheblich. Wenn ein BCJ-Filter das Kompressionsverhältnis einer Datei " -"verbessert, kann er auch gleichzeitig die Dekompressionsgeschwindigkeit " -"verbessern. Das kommt daher, dass auf der gleichen Hardware die " -"Dekompressionsgeschwindigkeit von LZMA2 ungefähr eine feste Anzahl Byte an " -"komprimierten Daten pro Sekunde ist." - -#. type: Plain text -#: ../src/xz/xz.1:1551 +#: ../src/xz/xz.1:1728 msgid "These BCJ filters have known problems related to the compression ratio:" msgstr "" "Diese BCJ-Filter haben bekannte Probleme mit dem Kompressionsverhältnis:" #. type: Plain text -#: ../src/xz/xz.1:1558 +#: ../src/xz/xz.1:1735 msgid "" -"Some types of files containing executable code (e.g. object files, static " -"libraries, and Linux kernel modules) have the addresses in the instructions " -"filled with filler values. These BCJ filters will still do the address " -"conversion, which will make the compression worse with these files." +"Some types of files containing executable code (for example, object files, " +"static libraries, and Linux kernel modules) have the addresses in the " +"instructions filled with filler values. These BCJ filters will still do the " +"address conversion, which will make the compression worse with these files." msgstr "" "In einigen Dateitypen, die ausführbaren Code enthalten (zum Beispiel " "Objektdateien, statische Bibliotheken und Linux-Kernelmodule), sind die " @@ -2829,152 +3030,157 @@ "schlechter wird." #. type: Plain text -#: ../src/xz/xz.1:1565 +#: ../src/xz/xz.1:1745 msgid "" -"Applying a BCJ filter on an archive containing multiple similar executables " -"can make the compression ratio worse than not using a BCJ filter. This is " -"because the BCJ filter doesn't detect the boundaries of the executable " -"files, and doesn't reset the address conversion counter for each executable." +"If a BCJ filter is applied on an archive, it is possible that it makes the " +"compression ratio worse than not using a BCJ filter. For example, if there " +"are similar or even identical executables then filtering will likely make " +"the files less similar and thus compression is worse. The contents of non-" +"executable files in the same archive can matter too. In practice one has to " +"try with and without a BCJ filter to see which is better in each situation." msgstr "" -"Bei der Anwendung eines BCJ-Filters auf ein Archiv, das mehrere ähnliche " -"Binärdateien enthält, kann das Kompressionsverhältnis schlechter sein als " -"ohne BCJ-Filter. Das kommt daher, weil der BCJ-Filter die Grenzen der " -"Binärdateien nicht erkennt und den Zähler der Adressumwandlung für jede " -"Binärdatei nicht zurücksetzt." +"Falls ein BCJ-Filter auf ein Archiv angewendet wird, ist es möglich, dass " +"das Kompressionsverhältnis schlechter als ohne Filter wird. Falls es " +"beispielsweise ähnliche oder sogar identische ausführbare Dateien gibt, dann " +"werden diese durch die Filterung wahrscheinlich »unähnlicher« und " +"verschlechtern dadurch das Kompressionsverhältnis. Der Inhalt nicht-" +"ausführbarer Dateien im gleichen Archiv kann sich ebenfalls darauf " +"auswirken. In der Praxis werden Sie durch Versuche mit oder ohne BCJ-Filter " +"selbst herausfinden müssen, was situationsbezogen besser ist." #. type: Plain text -#: ../src/xz/xz.1:1572 +#: ../src/xz/xz.1:1750 msgid "" -"Both of the above problems will be fixed in the future in a new filter. The " -"old BCJ filters will still be useful in embedded systems, because the " -"decoder of the new filter will be bigger and use more memory." +"Different instruction sets have different alignment: the executable file " +"must be aligned to a multiple of this value in the input data to make the " +"filter work." msgstr "" -"Beide der oben genannten Probleme werden in der Zukunft in einem neuen " -"Filter nicht mehr auftreten. Die alten BCJ-Filter werden noch in " -"eingebetteten Systemen von Nutzen sein, weil der Dekoder des neuen Filters " -"größer sein und mehr Speicher beanspruchen wird." +"Verschiedene Befehlssätze haben unterschiedliche Ausrichtungen: Die " +"ausführbare Datei muss in den Eingabedateien einem Vielfachen dieses Wertes " +"entsprechen, damit dieser Filter funktioniert." -# FIXME have have -#. type: Plain text -#: ../src/xz/xz.1:1574 -msgid "Different instruction sets have different alignment:" -msgstr "Verschiedene Befehlssätze haben unterschiedliche Ausrichtungen:" - #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Filter" msgstr "Filter" #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Alignment" msgstr "Ausrichtung" #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Notes" msgstr "Hinweise" #. type: tbl table -#: ../src/xz/xz.1:1582 +#: ../src/xz/xz.1:1758 #, no-wrap msgid "x86" msgstr "x86" #. type: tbl table -#: ../src/xz/xz.1:1582 +#: ../src/xz/xz.1:1758 #, no-wrap msgid "32-bit or 64-bit x86" msgstr "32-Bit oder 64-Bit x86" #. type: tbl table -#: ../src/xz/xz.1:1583 +#: ../src/xz/xz.1:1759 #, no-wrap -msgid "PowerPC" -msgstr "PowerPC" +msgid "ARM" +msgstr "ARM" #. type: tbl table -#: ../src/xz/xz.1:1583 +#: ../src/xz/xz.1:1760 #, no-wrap -msgid "Big endian only" -msgstr "Nur Big Endian" +msgid "ARM-Thumb" +msgstr "ARM-Thumb" #. type: tbl table -#: ../src/xz/xz.1:1584 +#: ../src/xz/xz.1:1761 #, no-wrap -msgid "ARM" -msgstr "ARM" +msgid "ARM64" +msgstr "ARM64" #. type: tbl table -#: ../src/xz/xz.1:1584 ../src/xz/xz.1:1585 +#: ../src/xz/xz.1:1761 #, no-wrap -msgid "Little endian only" -msgstr "Nur Little Endian" +msgid "4096-byte alignment is best" +msgstr "4096-Byte-Ausrichtung ist optimal" #. type: tbl table -#: ../src/xz/xz.1:1585 +#: ../src/xz/xz.1:1762 #, no-wrap -msgid "ARM-Thumb" -msgstr "ARM-Thumb" +msgid "PowerPC" +msgstr "PowerPC" #. type: tbl table -#: ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1762 #, no-wrap +msgid "Big endian only" +msgstr "Nur Big Endian" + +#. type: tbl table +#: ../src/xz/xz.1:1763 +#, no-wrap msgid "IA-64" msgstr "IA-64" #. type: tbl table -#: ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1763 #, no-wrap msgid "16" msgstr "16" #. type: tbl table -#: ../src/xz/xz.1:1586 ../src/xz/xz.1:1587 +#: ../src/xz/xz.1:1763 #, no-wrap -msgid "Big or little endian" -msgstr "Big oder Little Endian" +msgid "Itanium" +msgstr "Itanium" #. type: tbl table -#: ../src/xz/xz.1:1587 +#: ../src/xz/xz.1:1764 #, no-wrap msgid "SPARC" msgstr "SPARC" #. type: Plain text -#: ../src/xz/xz.1:1602 +#: ../src/xz/xz.1:1781 msgid "" "Since the BCJ-filtered data is usually compressed with LZMA2, the " "compression ratio may be improved slightly if the LZMA2 options are set to " "match the alignment of the selected BCJ filter. For example, with the IA-64 " -"filter, it's good to set B with LZMA2 (2^4=16). The x86 filter is an " -"exception; it's usually good to stick to LZMA2's default four-byte alignment " -"when compressing x86 executables." +"filter, it's good to set B or even B with LZMA2 " +"(2^4=16). The x86 filter is an exception; it's usually good to stick to " +"LZMA2's default four-byte alignment when compressing x86 executables." msgstr "" "Da die BCJ-gefilterten Daten üblicherweise mit LZMA2 komprimiert sind, kann " "das Kompressionsverhältnis dadurch etwas verbessert werden, dass die LZMA2-" "Optionen so gesetzt werden, dass sie der Ausrichtung des gewählten BCJ-" "Filters entsprechen. Zum Beispiel ist es beim IA-64-Filter eine gute Wahl, " -"B mit LZMA2 zu setzen (2^4=16). Der x86-Filter bildet dabei eine " -"Ausnahme; Sie sollten bei der für LZMA2 voreingestellten 4-Byte-Ausrichtung " -"bleiben, wenn Sie x86-Binärdateien komprimieren." +"B oder sogar B mit LZMA2 zu setzen (2^4=16). Der x86-" +"Filter bildet dabei eine Ausnahme; Sie sollten bei der für LZMA2 " +"voreingestellten 4-Byte-Ausrichtung bleiben, wenn Sie x86-Binärdateien " +"komprimieren." #. type: Plain text -#: ../src/xz/xz.1:1605 +#: ../src/xz/xz.1:1784 msgid "All BCJ filters support the same I:" msgstr "Alle BCJ-Filter unterstützen die gleichen I:" #. type: TP -#: ../src/xz/xz.1:1606 +#: ../src/xz/xz.1:1785 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1620 +#: ../src/xz/xz.1:1799 msgid "" "Specify the start I that is used when converting between relative " "and absolute addresses. The I must be a multiple of the alignment " @@ -2988,13 +3194,13 @@ "I ist fast immer unnütz." #. type: TP -#: ../src/xz/xz.1:1621 +#: ../src/xz/xz.1:1800 #, no-wrap msgid "B<--delta>[B<=>I]" msgstr "B<--delta>[B<=>I]" #. type: Plain text -#: ../src/xz/xz.1:1626 +#: ../src/xz/xz.1:1805 msgid "" "Add the Delta filter to the filter chain. The Delta filter can be only used " "as a non-last filter in the filter chain." @@ -3003,13 +3209,13 @@ "letzter Filter in der Filterkette verwendet werden." #. type: Plain text -#: ../src/xz/xz.1:1635 +#: ../src/xz/xz.1:1814 msgid "" "Currently only simple byte-wise delta calculation is supported. It can be " -"useful when compressing e.g. uncompressed bitmap images or uncompressed PCM " -"audio. However, special purpose algorithms may give significantly better " -"results than Delta + LZMA2. This is true especially with audio, which " -"compresses faster and better e.g. with B(1)." +"useful when compressing, for example, uncompressed bitmap images or " +"uncompressed PCM audio. However, special purpose algorithms may give " +"significantly better results than Delta + LZMA2. This is true especially " +"with audio, which compresses faster and better, for example, with B(1)." msgstr "" "Gegenwärtig wird nur eine einfache, Byte-bezogene Delta-Berechnung " "unterstützt. Beim Komprimieren von zum Beispiel unkomprimierten Bitmap-" @@ -3020,27 +3226,27 @@ "komprimieren lassen." #. type: Plain text -#: ../src/xz/xz.1:1638 +#: ../src/xz/xz.1:1817 msgid "Supported I:" msgstr "Unterstützte I:" #. type: TP -#: ../src/xz/xz.1:1639 +#: ../src/xz/xz.1:1818 #, no-wrap msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1647 +#: ../src/xz/xz.1:1826 msgid "" "Specify the I of the delta calculation in bytes. I must " -"be 1-256. The default is 1." +"be 1\\(en256. The default is 1." msgstr "" "gibt den I der Delta-Berechnung in Byte an. Zulässige Werte für den " "I sind 1 bis 256. Der Vorgabewert ist 1." #. type: Plain text -#: ../src/xz/xz.1:1652 +#: ../src/xz/xz.1:1831 msgid "" "For example, with B and eight-byte input A1 B1 A2 B3 A3 B5 A4 B7, " "the output will be A1 B1 01 02 01 02 01 02." @@ -3049,19 +3255,19 @@ "B7 die Ausgabe A1 B1 01 02 01 02 01 02 sein." #. type: SS -#: ../src/xz/xz.1:1654 +#: ../src/xz/xz.1:1833 #, no-wrap msgid "Other options" msgstr "Andere Optionen" #. type: TP -#: ../src/xz/xz.1:1655 ../src/xzdec/xzdec.1:83 +#: ../src/xz/xz.1:1834 ../src/xzdec/xzdec.1:83 #, no-wrap msgid "B<-q>, B<--quiet>" msgstr "B<-q>, B<--quiet>" #. type: Plain text -#: ../src/xz/xz.1:1662 +#: ../src/xz/xz.1:1841 msgid "" "Suppress warnings and notices. Specify this twice to suppress errors too. " "This option has no effect on the exit status. That is, even if a warning " @@ -3073,13 +3279,13 @@ "Exit-Status zur Anzeige einer Warnung dennoch verwendet wird." #. type: TP -#: ../src/xz/xz.1:1662 +#: ../src/xz/xz.1:1841 #, no-wrap msgid "B<-v>, B<--verbose>" msgstr "B<-v>, B<--verbose>" #. type: Plain text -#: ../src/xz/xz.1:1671 +#: ../src/xz/xz.1:1850 msgid "" "Be verbose. If standard error is connected to a terminal, B will " "display a progress indicator. Specifying B<--verbose> twice will give even " @@ -3090,12 +3296,12 @@ "Angabe von B<--verbose> wird die Ausgabe noch ausführlicher." #. type: Plain text -#: ../src/xz/xz.1:1673 +#: ../src/xz/xz.1:1852 msgid "The progress indicator shows the following information:" msgstr "Der Fortschrittsanzeiger stellt die folgenden Informationen dar:" #. type: Plain text -#: ../src/xz/xz.1:1678 +#: ../src/xz/xz.1:1857 msgid "" "Completion percentage is shown if the size of the input file is known. That " "is, the percentage cannot be shown in pipes." @@ -3105,7 +3311,7 @@ "Weiterleitungen (Pipes) nicht angezeigt werden kann." #. type: Plain text -#: ../src/xz/xz.1:1681 +#: ../src/xz/xz.1:1860 msgid "" "Amount of compressed data produced (compressing) or consumed " "(decompressing)." @@ -3114,7 +3320,7 @@ "verarbeiteten Daten (bei der Dekompression)." #. type: Plain text -#: ../src/xz/xz.1:1684 +#: ../src/xz/xz.1:1863 msgid "" "Amount of uncompressed data consumed (compressing) or produced " "(decompressing)." @@ -3123,7 +3329,7 @@ "erzeugten Daten (bei der Dekompression)." #. type: Plain text -#: ../src/xz/xz.1:1688 +#: ../src/xz/xz.1:1867 msgid "" "Compression ratio, which is calculated by dividing the amount of compressed " "data processed so far by the amount of uncompressed data processed so far." @@ -3133,7 +3339,7 @@ "Daten ermittelt wird." #. type: Plain text -#: ../src/xz/xz.1:1695 +#: ../src/xz/xz.1:1874 msgid "" "Compression or decompression speed. This is measured as the amount of " "uncompressed data consumed (compression) or produced (decompression) per " @@ -3147,17 +3353,17 @@ "begonnen hat." #. type: Plain text -#: ../src/xz/xz.1:1697 +#: ../src/xz/xz.1:1876 msgid "Elapsed time in the format M:SS or H:MM:SS." msgstr "Die vergangene Zeit im Format M:SS oder H:MM:SS." #. type: Plain text -#: ../src/xz/xz.1:1705 +#: ../src/xz/xz.1:1884 msgid "" "Estimated remaining time is shown only when the size of the input file is " "known and a couple of seconds have already passed since B started " "processing the file. The time is shown in a less precise format which never " -"has any colons, e.g. 2 min 30 s." +"has any colons, for example, 2 min 30 s." msgstr "" "Die geschätzte verbleibende Zeit wird nur angezeigt, wenn die Größe der " "Eingabedatei bekannt ist und bereits einige Sekunden vergangen sind, nachdem " @@ -3165,15 +3371,15 @@ "weniger präzisen Format ohne Doppelpunkte angezeigt, zum Beispiel 2 min 30 s." #. type: Plain text -#: ../src/xz/xz.1:1720 +#: ../src/xz/xz.1:1899 msgid "" "When standard error is not a terminal, B<--verbose> will make B print " "the filename, compressed size, uncompressed size, compression ratio, and " "possibly also the speed and elapsed time on a single line to standard error " "after compressing or decompressing the file. The speed and elapsed time are " "included only when the operation took at least a few seconds. If the " -"operation didn't finish, e.g. due to user interruption, also the completion " -"percentage is printed if the size of the input file is known." +"operation didn't finish, for example, due to user interruption, also the " +"completion percentage is printed if the size of the input file is known." msgstr "" "Wenn die Standardfehlerausgabe kein Terminal ist, schreibt B mit B<--" "verbose> nach dem Komprimieren oder Dekomprimieren der Datei in einer " @@ -3187,13 +3393,13 @@ "Eingabedatei bekannt ist." #. type: TP -#: ../src/xz/xz.1:1720 ../src/xzdec/xzdec.1:89 +#: ../src/xz/xz.1:1899 ../src/xzdec/xzdec.1:89 #, no-wrap msgid "B<-Q>, B<--no-warn>" msgstr "B<-Q>, B<--no-warn>" #. type: Plain text -#: ../src/xz/xz.1:1730 +#: ../src/xz/xz.1:1909 msgid "" "Don't set the exit status to 2 even if a condition worth a warning was " "detected. This option doesn't affect the verbosity level, thus both B<--" @@ -3207,13 +3413,13 @@ "andererseits auch den Exit-Status nicht zu ändern." #. type: TP -#: ../src/xz/xz.1:1730 +#: ../src/xz/xz.1:1909 #, no-wrap msgid "B<--robot>" msgstr "B<--robot>" #. type: Plain text -#: ../src/xz/xz.1:1742 +#: ../src/xz/xz.1:1921 msgid "" "Print messages in a machine-parsable format. This is intended to ease " "writing frontends that want to use B instead of liblzma, which may be " @@ -3229,30 +3435,31 @@ "B." #. type: TP -#: ../src/xz/xz.1:1742 +#: ../src/xz/xz.1:1921 #, no-wrap msgid "B<--info-memory>" msgstr "B<--info-memory>" #. type: Plain text -#: ../src/xz/xz.1:1748 +#: ../src/xz/xz.1:1928 msgid "" -"Display, in human-readable format, how much physical memory (RAM) B " -"thinks the system has and the memory usage limits for compression and " -"decompression, and exit successfully." +"Display, in human-readable format, how much physical memory (RAM) and how " +"many processor threads B thinks the system has and the memory usage " +"limits for compression and decompression, and exit successfully." msgstr "" "zeigt in einem menschenlesbaren Format an, wieviel physischen Speicher (RAM) " -"das System nach Annahme von B hat, sowie die Speicherbedarfsbegrenzung " -"für Kompression und Dekompression, und beendet das Programm erfolgreich." +"und wie viele Prozessor-Threads das System nach Annahme von B hat, sowie " +"die Speicherbedarfsbegrenzung für Kompression und Dekompression, und beendet " +"das Programm erfolgreich." #. type: TP -#: ../src/xz/xz.1:1748 ../src/xzdec/xzdec.1:96 +#: ../src/xz/xz.1:1928 ../src/xzdec/xzdec.1:96 #, no-wrap msgid "B<-h>, B<--help>" msgstr "B<-h>, B<--help>" #. type: Plain text -#: ../src/xz/xz.1:1752 +#: ../src/xz/xz.1:1932 msgid "" "Display a help message describing the most commonly used options, and exit " "successfully." @@ -3261,14 +3468,14 @@ "beendet das Programm erfolgreich." #. type: TP -#: ../src/xz/xz.1:1752 +#: ../src/xz/xz.1:1932 #, no-wrap msgid "B<-H>, B<--long-help>" msgstr "B<-H>, B<--long-help>" # FIXME Satzpunkt fehlt #. type: Plain text -#: ../src/xz/xz.1:1757 +#: ../src/xz/xz.1:1937 msgid "" "Display a help message describing all features of B, and exit " "successfully" @@ -3277,13 +3484,13 @@ "und beendet das Programm erfolgreich." #. type: TP -#: ../src/xz/xz.1:1757 ../src/xzdec/xzdec.1:99 +#: ../src/xz/xz.1:1937 ../src/xzdec/xzdec.1:99 #, no-wrap msgid "B<-V>, B<--version>" msgstr "B<-V>, B<--version>" #. type: Plain text -#: ../src/xz/xz.1:1766 +#: ../src/xz/xz.1:1946 msgid "" "Display the version number of B and liblzma in human readable format. " "To get machine-parsable output, specify B<--robot> before B<--version>." @@ -3293,13 +3500,13 @@ "robot> vor B<--version> an." #. type: SH -#: ../src/xz/xz.1:1767 +#: ../src/xz/xz.1:1947 #, no-wrap msgid "ROBOT MODE" msgstr "ROBOTER-MODUS" #. type: Plain text -#: ../src/xz/xz.1:1783 +#: ../src/xz/xz.1:1963 msgid "" "The robot mode is activated with the B<--robot> option. It makes the output " "of B easier to parse by other programs. Currently B<--robot> is " @@ -3313,13 +3520,13 @@ "Kompression und Dekompression unterstützt." #. type: SS -#: ../src/xz/xz.1:1784 +#: ../src/xz/xz.1:1964 #, no-wrap msgid "Version" msgstr "Version" #. type: Plain text -#: ../src/xz/xz.1:1789 +#: ../src/xz/xz.1:1969 msgid "" "B will print the version number of B and liblzma " "in the following format:" @@ -3328,34 +3535,34 @@ "folgenden Format aus:" #. type: Plain text -#: ../src/xz/xz.1:1791 +#: ../src/xz/xz.1:1971 msgid "BI" msgstr "BI" #. type: Plain text -#: ../src/xz/xz.1:1793 +#: ../src/xz/xz.1:1973 msgid "BI" msgstr "BI" #. type: TP -#: ../src/xz/xz.1:1793 +#: ../src/xz/xz.1:1973 #, no-wrap msgid "I" msgstr "I" #. type: Plain text -#: ../src/xz/xz.1:1796 +#: ../src/xz/xz.1:1976 msgid "Major version." msgstr "Hauptversion." #. type: TP -#: ../src/xz/xz.1:1796 +#: ../src/xz/xz.1:1976 #, no-wrap msgid "I" msgstr "I" #. type: Plain text -#: ../src/xz/xz.1:1801 +#: ../src/xz/xz.1:1981 msgid "" "Minor version. Even numbers are stable. Odd numbers are alpha or beta " "versions." @@ -3364,13 +3571,13 @@ "bezeichnen Alpha- oder Betaversionen." #. type: TP -#: ../src/xz/xz.1:1801 +#: ../src/xz/xz.1:1981 #, no-wrap msgid "I" msgstr "I" #. type: Plain text -#: ../src/xz/xz.1:1805 +#: ../src/xz/xz.1:1985 msgid "" "Patch level for stable releases or just a counter for development releases." msgstr "" @@ -3378,13 +3585,13 @@ "Entwicklungsversionen." #. type: TP -#: ../src/xz/xz.1:1805 +#: ../src/xz/xz.1:1985 #, no-wrap msgid "I" msgstr "I" #. type: Plain text -#: ../src/xz/xz.1:1813 +#: ../src/xz/xz.1:1993 msgid "" "Stability. 0 is alpha, 1 is beta, and 2 is stable. I should be always 2 " "when I is even." @@ -3393,7 +3600,7 @@ "sein, wenn I eine gerade Zahl ist." #. type: Plain text -#: ../src/xz/xz.1:1818 +#: ../src/xz/xz.1:1998 msgid "" "I are the same on both lines if B and liblzma are from the " "same XZ Utils release." @@ -3402,18 +3609,18 @@ "gleichen Veröffentlichung der XZ-Utils stammen." #. type: Plain text -#: ../src/xz/xz.1:1824 +#: ../src/xz/xz.1:2004 msgid "Examples: 4.999.9beta is B<49990091> and 5.0.0 is B<50000002>." msgstr "Beispiele: 4.999.9beta ist B<49990091> und 5.0.0 is B<50000002>." #. type: SS -#: ../src/xz/xz.1:1825 +#: ../src/xz/xz.1:2005 #, no-wrap msgid "Memory limit information" msgstr "Informationen zur Speicherbedarfsbegrenzung" #. type: Plain text -#: ../src/xz/xz.1:1828 +#: ../src/xz/xz.1:2008 msgid "" "B prints a single line with three tab-separated " "columns:" @@ -3422,55 +3629,115 @@ "Tabulatoren getrennten Spalten aus:" #. type: IP -#: ../src/xz/xz.1:1828 +#: ../src/xz/xz.1:2008 #, no-wrap msgid "1." msgstr "1." #. type: Plain text -#: ../src/xz/xz.1:1830 -msgid "Total amount of physical memory (RAM) in bytes" -msgstr "Gesamter physischer Speicher (RAM) in Byte" +#: ../src/xz/xz.1:2010 +msgid "Total amount of physical memory (RAM) in bytes." +msgstr "Gesamter physischer Speicher (RAM) in Byte." #. type: IP -#: ../src/xz/xz.1:1830 ../src/xz/xz.1:1910 ../src/xz/xz.1:1947 -#: ../src/xz/xz.1:1973 ../src/xz/xz.1:2043 ../src/xz/xz.1:2070 +#: ../src/xz/xz.1:2010 ../src/xz/xz.1:2125 ../src/xz/xz.1:2162 +#: ../src/xz/xz.1:2188 ../src/xz/xz.1:2258 ../src/xz/xz.1:2285 #, no-wrap msgid "2." msgstr "2." #. type: Plain text -#: ../src/xz/xz.1:1834 +#: ../src/xz/xz.1:2017 msgid "" -"Memory usage limit for compression in bytes. A special value of zero " -"indicates the default setting, which for single-threaded mode is the same as " -"no limit." +"Memory usage limit for compression in bytes (B<--memlimit-compress>). A " +"special value of B<0> indicates the default setting which for single-" +"threaded mode is the same as no limit." msgstr "" -"Speicherbedarfsbegrenzung für die Kompression in Byte. Ein spezieller Wert " -"von Null bezeichnet die Standardeinstellung, die im Einzelthread-Modus " -"bedeutet, dass keine Begrenzung vorhanden ist." +"Speicherbedarfsbegrenzung für die Kompression in Byte (B<--memlimit-" +"compress>). Ein spezieller Wert von B<0> bezeichnet die Standardeinstellung, " +"die im Einzelthread-Modus bedeutet, dass keine Begrenzung vorhanden ist." #. type: IP -#: ../src/xz/xz.1:1834 ../src/xz/xz.1:1912 ../src/xz/xz.1:1949 -#: ../src/xz/xz.1:1975 ../src/xz/xz.1:2048 ../src/xz/xz.1:2072 +#: ../src/xz/xz.1:2017 ../src/xz/xz.1:2127 ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2190 ../src/xz/xz.1:2263 ../src/xz/xz.1:2287 #, no-wrap msgid "3." msgstr "3." #. type: Plain text -#: ../src/xz/xz.1:1838 +#: ../src/xz/xz.1:2024 msgid "" -"Memory usage limit for decompression in bytes. A special value of zero " -"indicates the default setting, which for single-threaded mode is the same as " -"no limit." +"Memory usage limit for decompression in bytes (B<--memlimit-decompress>). A " +"special value of B<0> indicates the default setting which for single-" +"threaded mode is the same as no limit." msgstr "" -"Speicherbedarfsbegrenzung für die Dekompression in Byte. Ein spezieller Wert " -"von Null bezeichnet die Standardeinstellung, die im Einzelthread-Modus " -"bedeutet, dass keine Begrenzung vorhanden ist." +"Speicherbedarfsbegrenzung für die Dekompression in Byte (B<--memlimit-" +"decompress>). Ein spezieller Wert von B<0> bezeichnet die " +"Standardeinstellung, die im Einzelthread-Modus bedeutet, dass keine " +"Begrenzung vorhanden ist." +#. type: IP +#: ../src/xz/xz.1:2024 ../src/xz/xz.1:2129 ../src/xz/xz.1:2166 +#: ../src/xz/xz.1:2193 ../src/xz/xz.1:2273 ../src/xz/xz.1:2289 +#, no-wrap +msgid "4." +msgstr "4." + #. type: Plain text -#: ../src/xz/xz.1:1842 +#: ../src/xz/xz.1:2036 msgid "" +"Since B 5.3.4alpha: Memory usage for multi-threaded decompression in " +"bytes (B<--memlimit-mt-decompress>). This is never zero because a system-" +"specific default value shown in the column 5 is used if no limit has been " +"specified explicitly. This is also never greater than the value in the " +"column 3 even if a larger value has been specified with B<--memlimit-mt-" +"decompress>." +msgstr "" +"Seit B 5.3.4alpha: Die Speichernutzung für Multithread-Dekompression in " +"Byte (B<--memlimit-mt-decompress>). Dies ist niemals B<0>, da ein " +"systemspezifischer Vorgabewert (gezeigt in Spalte 5) verwendet wird, falls " +"keine Grenze ausdrücklich angegeben wurde. Dies ist außerdem niemals größer " +"als der Wert in in Spalte 3, selbst wenn mit B<--memlimit-mt-decompress> ein " +"größerer Wert angegeben wurde." + +#. type: IP +#: ../src/xz/xz.1:2036 ../src/xz/xz.1:2131 ../src/xz/xz.1:2168 +#: ../src/xz/xz.1:2195 ../src/xz/xz.1:2291 +#, no-wrap +msgid "5." +msgstr "5." + +#. type: Plain text +#: ../src/xz/xz.1:2048 +msgid "" +"Since B 5.3.4alpha: A system-specific default memory usage limit that is " +"used to limit the number of threads when compressing with an automatic " +"number of threads (B<--threads=0>) and no memory usage limit has been " +"specified (B<--memlimit-compress>). This is also used as the default value " +"for B<--memlimit-mt-decompress>." +msgstr "" +"Seit B 5.3.4alpha: Eine systemspezifisch vorgegebene Begrenzung des " +"Speicherverbrauchs, die zur Begrenzung der Anzahl der Threads beim " +"Komprimieren mit automatischer Anzahl der Threads (B<--threads=0>) und wenn " +"keine Speicherbedarfsbegrenzung angegeben wurde (B<--memlimit-compress>) " +"verwendet wird. Dies wird auch als Standardwert für B<--memlimit-mt-" +"decompress> verwendet." + +#. type: IP +#: ../src/xz/xz.1:2048 ../src/xz/xz.1:2133 ../src/xz/xz.1:2170 +#: ../src/xz/xz.1:2197 ../src/xz/xz.1:2293 +#, no-wrap +msgid "6." +msgstr "6." + +#. type: Plain text +#: ../src/xz/xz.1:2053 +msgid "Since B 5.3.4alpha: Number of available processor threads." +msgstr "Seit B 5.3.4alpha: Anzahl der verfügbaren Prozessorthreads." + +#. type: Plain text +#: ../src/xz/xz.1:2057 +msgid "" "In the future, the output of B may have more " "columns, but never more than a single line." msgstr "" @@ -3478,13 +3745,13 @@ "Spalten enthalten, aber niemals mehr als eine einzelne Zeile." #. type: SS -#: ../src/xz/xz.1:1843 +#: ../src/xz/xz.1:2058 #, no-wrap msgid "List mode" msgstr "Listenmodus" #. type: Plain text -#: ../src/xz/xz.1:1848 +#: ../src/xz/xz.1:2063 msgid "" "B uses tab-separated output. The first column of every " "line has a string that indicates the type of the information found on that " @@ -3495,13 +3762,13 @@ "Information, die in dieser Zeile enthalten ist:" #. type: TP -#: ../src/xz/xz.1:1848 +#: ../src/xz/xz.1:2063 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1852 +#: ../src/xz/xz.1:2067 msgid "" "This is always the first line when starting to list a file. The second " "column on the line is the filename." @@ -3510,14 +3777,14 @@ "Spalte in der Zeile enthält den Dateinamen." #. type: TP -#: ../src/xz/xz.1:1852 +#: ../src/xz/xz.1:2067 #, no-wrap msgid "B" msgstr "B" # CHECK overall #. type: Plain text -#: ../src/xz/xz.1:1860 +#: ../src/xz/xz.1:2075 msgid "" "This line contains overall information about the B<.xz> file. This line is " "always printed after the B line." @@ -3526,13 +3793,13 @@ "wird stets nach der B-Zeile ausgegeben." #. type: TP -#: ../src/xz/xz.1:1860 +#: ../src/xz/xz.1:2075 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1870 +#: ../src/xz/xz.1:2085 msgid "" "This line type is used only when B<--verbose> was specified. There are as " "many B lines as there are streams in the B<.xz> file." @@ -3542,13 +3809,13 @@ "enthalten sind." #. type: TP -#: ../src/xz/xz.1:1870 +#: ../src/xz/xz.1:2085 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1885 +#: ../src/xz/xz.1:2100 msgid "" "This line type is used only when B<--verbose> was specified. There are as " "many B lines as there are blocks in the B<.xz> file. The B " @@ -3561,13 +3828,13 @@ "Zeilentypen werden nicht verschachtelt." #. type: TP -#: ../src/xz/xz.1:1885 +#: ../src/xz/xz.1:2100 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1900 +#: ../src/xz/xz.1:2115 msgid "" "This line type is used only when B<--verbose> was specified twice. This " "line is printed after all B lines. Like the B line, the " @@ -3579,13 +3846,13 @@ "xz>-Datei." #. type: TP -#: ../src/xz/xz.1:1900 +#: ../src/xz/xz.1:2115 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:1904 +#: ../src/xz/xz.1:2119 msgid "" "This line is always the very last line of the list output. It shows the " "total counts and sizes." @@ -3594,55 +3861,34 @@ "Gesamtanzahlen und -größen an." #. type: Plain text -#: ../src/xz/xz.1:1908 +#: ../src/xz/xz.1:2123 msgid "The columns of the B lines:" msgstr "Die Spalten der B-Zeilen:" #. type: Plain text -#: ../src/xz/xz.1:1912 +#: ../src/xz/xz.1:2127 msgid "Number of streams in the file" msgstr "Anzahl der Datenströme in der Datei" #. type: Plain text -#: ../src/xz/xz.1:1914 +#: ../src/xz/xz.1:2129 msgid "Total number of blocks in the stream(s)" msgstr "Gesamtanzahl der Blöcke in den Datenströmen" -#. type: IP -#: ../src/xz/xz.1:1914 ../src/xz/xz.1:1951 ../src/xz/xz.1:1978 -#: ../src/xz/xz.1:2058 ../src/xz/xz.1:2074 -#, no-wrap -msgid "4." -msgstr "4." - #. type: Plain text -#: ../src/xz/xz.1:1916 +#: ../src/xz/xz.1:2131 msgid "Compressed size of the file" msgstr "Komprimierte Größe der Datei" -#. type: IP -#: ../src/xz/xz.1:1916 ../src/xz/xz.1:1953 ../src/xz/xz.1:1980 -#: ../src/xz/xz.1:2076 -#, no-wrap -msgid "5." -msgstr "5." - #. type: Plain text -#: ../src/xz/xz.1:1918 +#: ../src/xz/xz.1:2133 msgid "Uncompressed size of the file" msgstr "Unkomprimierte Größe der Datei" -#. type: IP -#: ../src/xz/xz.1:1918 ../src/xz/xz.1:1955 ../src/xz/xz.1:1982 -#: ../src/xz/xz.1:2078 -#, no-wrap -msgid "6." -msgstr "6." - #. type: Plain text -#: ../src/xz/xz.1:1924 +#: ../src/xz/xz.1:2139 msgid "" -"Compression ratio, for example B<0.123.> If ratio is over 9.999, three " +"Compression ratio, for example, B<0.123>. If ratio is over 9.999, three " "dashes (B<--->) are displayed instead of the ratio." msgstr "" "Das Kompressionsverhältnis, zum Beispiel B<0.123>. Wenn das Verhältnis über " @@ -3650,14 +3896,14 @@ "Kompressionsverhältnisses angezeigt." #. type: IP -#: ../src/xz/xz.1:1924 ../src/xz/xz.1:1957 ../src/xz/xz.1:1984 -#: ../src/xz/xz.1:2080 +#: ../src/xz/xz.1:2139 ../src/xz/xz.1:2172 ../src/xz/xz.1:2199 +#: ../src/xz/xz.1:2295 #, no-wrap msgid "7." msgstr "7." #. type: Plain text -#: ../src/xz/xz.1:1937 +#: ../src/xz/xz.1:2152 msgid "" "Comma-separated list of integrity check names. The following strings are " "used for the known check types: B, B, B, and " @@ -3671,117 +3917,117 @@ "zweistellig)." #. type: IP -#: ../src/xz/xz.1:1937 ../src/xz/xz.1:1959 ../src/xz/xz.1:1986 -#: ../src/xz/xz.1:2083 +#: ../src/xz/xz.1:2152 ../src/xz/xz.1:2174 ../src/xz/xz.1:2201 +#: ../src/xz/xz.1:2298 #, no-wrap msgid "8." msgstr "8." #. type: Plain text -#: ../src/xz/xz.1:1939 +#: ../src/xz/xz.1:2154 msgid "Total size of stream padding in the file" msgstr "Gesamtgröße der Datenstromauffüllung in der Datei" #. type: Plain text -#: ../src/xz/xz.1:1945 +#: ../src/xz/xz.1:2160 msgid "The columns of the B lines:" msgstr "Die Spalten der B-Zeilen:" #. type: Plain text -#: ../src/xz/xz.1:1949 +#: ../src/xz/xz.1:2164 msgid "Stream number (the first stream is 1)" msgstr "Datenstromnummer (der erste Datenstrom ist 1)" #. type: Plain text -#: ../src/xz/xz.1:1951 +#: ../src/xz/xz.1:2166 msgid "Number of blocks in the stream" msgstr "Anzahl der Blöcke im Datenstrom" #. type: Plain text -#: ../src/xz/xz.1:1953 +#: ../src/xz/xz.1:2168 msgid "Compressed start offset" msgstr "Komprimierte Startposition" #. type: Plain text -#: ../src/xz/xz.1:1955 +#: ../src/xz/xz.1:2170 msgid "Uncompressed start offset" msgstr "Unkomprimierte Startposition" #. type: Plain text -#: ../src/xz/xz.1:1957 +#: ../src/xz/xz.1:2172 msgid "Compressed size (does not include stream padding)" msgstr "Komprimierte Größe (schließt die Datenstromauffüllung nicht mit ein)" #. type: Plain text -#: ../src/xz/xz.1:1959 ../src/xz/xz.1:1988 ../src/xz/xz.1:2078 +#: ../src/xz/xz.1:2174 ../src/xz/xz.1:2203 ../src/xz/xz.1:2293 msgid "Uncompressed size" msgstr "Unkomprimierte Größe" #. type: Plain text -#: ../src/xz/xz.1:1961 ../src/xz/xz.1:1990 +#: ../src/xz/xz.1:2176 ../src/xz/xz.1:2205 msgid "Compression ratio" msgstr "Kompressionsverhältnis" #. type: IP -#: ../src/xz/xz.1:1961 ../src/xz/xz.1:1988 ../src/xz/xz.1:2085 +#: ../src/xz/xz.1:2176 ../src/xz/xz.1:2203 ../src/xz/xz.1:2300 #, no-wrap msgid "9." msgstr "9." #. type: Plain text -#: ../src/xz/xz.1:1963 ../src/xz/xz.1:1992 +#: ../src/xz/xz.1:2178 ../src/xz/xz.1:2207 msgid "Name of the integrity check" msgstr "Name der Integritätsprüfung" #. type: IP -#: ../src/xz/xz.1:1963 ../src/xz/xz.1:1990 ../src/xz/xz.1:2101 +#: ../src/xz/xz.1:2178 ../src/xz/xz.1:2205 ../src/xz/xz.1:2316 #, no-wrap msgid "10." msgstr "10." #. type: Plain text -#: ../src/xz/xz.1:1965 +#: ../src/xz/xz.1:2180 msgid "Size of stream padding" msgstr "Größe der Datenstromauffüllung" #. type: Plain text -#: ../src/xz/xz.1:1971 +#: ../src/xz/xz.1:2186 msgid "The columns of the B lines:" msgstr "Die Spalten der B-Zeilen:" #. type: Plain text -#: ../src/xz/xz.1:1975 +#: ../src/xz/xz.1:2190 msgid "Number of the stream containing this block" msgstr "Anzahl der in diesem Block enthaltenen Datenströme" #. type: Plain text -#: ../src/xz/xz.1:1978 +#: ../src/xz/xz.1:2193 msgid "" "Block number relative to the beginning of the stream (the first block is 1)" msgstr "Blocknummer relativ zum Anfang des Datenstroms (der erste Block ist 1)" #. type: Plain text -#: ../src/xz/xz.1:1980 +#: ../src/xz/xz.1:2195 msgid "Block number relative to the beginning of the file" msgstr "Blocknummer relativ zum Anfang der Datei" #. type: Plain text -#: ../src/xz/xz.1:1982 +#: ../src/xz/xz.1:2197 msgid "Compressed start offset relative to the beginning of the file" msgstr "Komprimierter Startversatz relativ zum Beginn der Datei" #. type: Plain text -#: ../src/xz/xz.1:1984 +#: ../src/xz/xz.1:2199 msgid "Uncompressed start offset relative to the beginning of the file" msgstr "Unkomprimierter Startversatz relativ zum Beginn der Datei" #. type: Plain text -#: ../src/xz/xz.1:1986 +#: ../src/xz/xz.1:2201 msgid "Total compressed size of the block (includes headers)" msgstr "Komprimierte Gesamtgröße des Blocks (einschließlich Header)" #. type: Plain text -#: ../src/xz/xz.1:2004 +#: ../src/xz/xz.1:2219 msgid "" "If B<--verbose> was specified twice, additional columns are included on the " "B lines. These are not displayed with a single B<--verbose>, because " @@ -3793,35 +4039,35 @@ "erfordert und daher recht langsam sein kann:" #. type: IP -#: ../src/xz/xz.1:2006 ../src/xz/xz.1:2106 +#: ../src/xz/xz.1:2221 ../src/xz/xz.1:2321 #, no-wrap msgid "11." msgstr "11." #. type: Plain text -#: ../src/xz/xz.1:2008 +#: ../src/xz/xz.1:2223 msgid "Value of the integrity check in hexadecimal" msgstr "Wert der Integritätsprüfung in hexadezimaler Notation" #. type: IP -#: ../src/xz/xz.1:2008 ../src/xz/xz.1:2116 +#: ../src/xz/xz.1:2223 ../src/xz/xz.1:2331 #, no-wrap msgid "12." msgstr "12." #. type: Plain text -#: ../src/xz/xz.1:2010 +#: ../src/xz/xz.1:2225 msgid "Block header size" msgstr "Block-Header-Größe" #. type: IP -#: ../src/xz/xz.1:2010 +#: ../src/xz/xz.1:2225 #, no-wrap msgid "13." msgstr "13." #. type: Plain text -#: ../src/xz/xz.1:2020 +#: ../src/xz/xz.1:2235 msgid "" "Block flags: B indicates that compressed size is present, and B " "indicates that uncompressed size is present. If the flag is not set, a dash " @@ -3835,13 +4081,13 @@ "neue Schalter am Ende der Zeichenkette hinzugefügt werden." #. type: IP -#: ../src/xz/xz.1:2020 +#: ../src/xz/xz.1:2235 #, no-wrap msgid "14." msgstr "14." #. type: Plain text -#: ../src/xz/xz.1:2023 +#: ../src/xz/xz.1:2238 msgid "" "Size of the actual compressed data in the block (this excludes the block " "header, block padding, and check fields)" @@ -3850,13 +4096,13 @@ "hierbei die Block-Header, die Blockauffüllung und die Prüffelder." #. type: IP -#: ../src/xz/xz.1:2023 +#: ../src/xz/xz.1:2238 #, no-wrap msgid "15." msgstr "15." #. type: Plain text -#: ../src/xz/xz.1:2028 +#: ../src/xz/xz.1:2243 msgid "" "Amount of memory (in bytes) required to decompress this block with this " "B version" @@ -3865,13 +4111,13 @@ "dieser B-Version benötigt wird." #. type: IP -#: ../src/xz/xz.1:2028 +#: ../src/xz/xz.1:2243 #, no-wrap msgid "16." msgstr "16." #. type: Plain text -#: ../src/xz/xz.1:2035 +#: ../src/xz/xz.1:2250 msgid "" "Filter chain. Note that most of the options used at compression time cannot " "be known, because only the options that are needed for decompression are " @@ -3882,12 +4128,12 @@ "die für die Dekompression erforderlichen Optionen gespeichert sind." #. type: Plain text -#: ../src/xz/xz.1:2041 +#: ../src/xz/xz.1:2256 msgid "The columns of the B lines:" msgstr "Die Spalten der B-Zeilen:" #. type: Plain text -#: ../src/xz/xz.1:2048 +#: ../src/xz/xz.1:2263 msgid "" "Amount of memory (in bytes) required to decompress this file with this B " "version" @@ -3896,7 +4142,7 @@ "dieser B-Version benötigt wird." #. type: Plain text -#: ../src/xz/xz.1:2054 ../src/xz/xz.1:2112 +#: ../src/xz/xz.1:2269 ../src/xz/xz.1:2327 msgid "" "B or B indicating if all block headers have both compressed size " "and uncompressed size stored in them" @@ -3905,43 +4151,43 @@ "komprimierte als auch die unkomprimierte Größe gespeichert ist." #. type: Plain text -#: ../src/xz/xz.1:2058 ../src/xz/xz.1:2116 +#: ../src/xz/xz.1:2273 ../src/xz/xz.1:2331 msgid "I B I<5.1.2alpha:>" msgstr "I B I<5.1.2alpha:>" #. type: Plain text -#: ../src/xz/xz.1:2062 ../src/xz/xz.1:2120 +#: ../src/xz/xz.1:2277 ../src/xz/xz.1:2335 msgid "Minimum B version required to decompress the file" msgstr "" "Minimale B-Version, die zur Dekompression der Datei erforderlich ist" #. type: Plain text -#: ../src/xz/xz.1:2068 +#: ../src/xz/xz.1:2283 msgid "The columns of the B line:" msgstr "Die Spalten der B-Zeile:" #. type: Plain text -#: ../src/xz/xz.1:2072 +#: ../src/xz/xz.1:2287 msgid "Number of streams" msgstr "Anzahl der Datenströme" #. type: Plain text -#: ../src/xz/xz.1:2074 +#: ../src/xz/xz.1:2289 msgid "Number of blocks" msgstr "Anzahl der Blöcke" #. type: Plain text -#: ../src/xz/xz.1:2076 +#: ../src/xz/xz.1:2291 msgid "Compressed size" msgstr "Komprimierte Größe" #. type: Plain text -#: ../src/xz/xz.1:2080 +#: ../src/xz/xz.1:2295 msgid "Average compression ratio" msgstr "Durchschnittliches Kompressionsverhältnis" #. type: Plain text -#: ../src/xz/xz.1:2083 +#: ../src/xz/xz.1:2298 msgid "" "Comma-separated list of integrity check names that were present in the files" msgstr "" @@ -3949,12 +4195,12 @@ "Dateien präsent waren." #. type: Plain text -#: ../src/xz/xz.1:2085 +#: ../src/xz/xz.1:2300 msgid "Stream padding size" msgstr "Größe der Datenstromauffüllung" #. type: Plain text -#: ../src/xz/xz.1:2091 +#: ../src/xz/xz.1:2306 msgid "" "Number of files. This is here to keep the order of the earlier columns the " "same as on B lines." @@ -3963,7 +4209,7 @@ "die in den B-Zeilen anzugleichen." #. type: Plain text -#: ../src/xz/xz.1:2099 +#: ../src/xz/xz.1:2314 msgid "" "If B<--verbose> was specified twice, additional columns are included on the " "B line:" @@ -3972,7 +4218,7 @@ "B-Zeile eingefügt:" #. type: Plain text -#: ../src/xz/xz.1:2106 +#: ../src/xz/xz.1:2321 msgid "" "Maximum amount of memory (in bytes) required to decompress the files with " "this B version" @@ -3981,7 +4227,7 @@ "mit dieser B-Version benötigt wird." #. type: Plain text -#: ../src/xz/xz.1:2126 +#: ../src/xz/xz.1:2341 msgid "" "Future versions may add new line types and new columns can be added to the " "existing line types, but the existing columns won't be changed." @@ -3991,48 +4237,49 @@ "die existierenden Spalten werden nicht geändert." #. type: SH -#: ../src/xz/xz.1:2127 ../src/xzdec/xzdec.1:104 ../src/lzmainfo/lzmainfo.1:44 +#: ../src/xz/xz.1:2342 ../src/xzdec/xzdec.1:104 ../src/lzmainfo/lzmainfo.1:44 +#: ../src/scripts/xzgrep.1:81 #, no-wrap msgid "EXIT STATUS" msgstr "EXIT-STATUS" #. type: TP -#: ../src/xz/xz.1:2128 ../src/xzdec/xzdec.1:105 ../src/lzmainfo/lzmainfo.1:45 +#: ../src/xz/xz.1:2343 ../src/xzdec/xzdec.1:105 ../src/lzmainfo/lzmainfo.1:45 #, no-wrap msgid "B<0>" msgstr "B<0>" #. type: Plain text -#: ../src/xz/xz.1:2131 ../src/lzmainfo/lzmainfo.1:48 +#: ../src/xz/xz.1:2346 ../src/lzmainfo/lzmainfo.1:48 msgid "All is good." msgstr "Alles ist in Ordnung." #. type: TP -#: ../src/xz/xz.1:2131 ../src/xzdec/xzdec.1:108 ../src/lzmainfo/lzmainfo.1:48 +#: ../src/xz/xz.1:2346 ../src/xzdec/xzdec.1:108 ../src/lzmainfo/lzmainfo.1:48 #, no-wrap msgid "B<1>" msgstr "B<1>" #. type: Plain text -#: ../src/xz/xz.1:2134 ../src/xzdec/xzdec.1:111 ../src/lzmainfo/lzmainfo.1:51 +#: ../src/xz/xz.1:2349 ../src/xzdec/xzdec.1:111 ../src/lzmainfo/lzmainfo.1:51 msgid "An error occurred." msgstr "Ein Fehler ist aufgetreten." #. type: TP -#: ../src/xz/xz.1:2134 +#: ../src/xz/xz.1:2349 #, no-wrap msgid "B<2>" msgstr "B<2>" #. type: Plain text -#: ../src/xz/xz.1:2138 +#: ../src/xz/xz.1:2353 msgid "Something worth a warning occurred, but no actual errors occurred." msgstr "" "Es ist etwas passiert, das eine Warnung rechtfertigt, aber es sind keine " "tatsächlichen Fehler aufgetreten." #. type: Plain text -#: ../src/xz/xz.1:2141 +#: ../src/xz/xz.1:2356 msgid "" "Notices (not warnings or errors) printed on standard error don't affect the " "exit status." @@ -4041,13 +4288,13 @@ "welche den Exit-Status nicht beeinflussen." #. type: SH -#: ../src/xz/xz.1:2142 ../src/scripts/xzgrep.1:80 ../src/scripts/xzless.1:52 +#: ../src/xz/xz.1:2357 ../src/scripts/xzgrep.1:94 ../src/scripts/xzless.1:52 #, no-wrap msgid "ENVIRONMENT" msgstr "UMGEBUNGSVARIABLEN" #. type: Plain text -#: ../src/xz/xz.1:2155 +#: ../src/xz/xz.1:2370 msgid "" "B parses space-separated lists of options from the environment variables " "B and B, in this order, before parsing the options from " @@ -4064,13 +4311,13 @@ "die Befehlszeilenargumente verwendet wird." #. type: TP -#: ../src/xz/xz.1:2155 +#: ../src/xz/xz.1:2370 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2379 msgid "" "User-specific or system-wide default options. Typically this is set in a " "shell initialization script to enable B's memory usage limiter by " @@ -4085,36 +4332,36 @@ "werden." #. type: TP -#: ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2379 #, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/xz/xz.1:2175 +#: ../src/xz/xz.1:2390 msgid "" "This is for passing options to B when it is not possible to set the " -"options directly on the B command line. This is the case e.g. when " -"B is run by a script or tool, e.g. GNU B(1):" +"options directly on the B command line. This is the case when B is " +"run by a script or tool, for example, GNU B(1):" msgstr "" "Dies dient der Übergabe von Optionen an B, wenn es nicht möglich ist, " -"die Optionen direkt in der Befehlszeile von B zu übergeben. Dies ist " -"beispielsweise der Fall, wenn B von einem Skript oder Dienstprogramm " -"ausgeführt wird, zum Beispiel GNU B(1):" +"die Optionen direkt in der Befehlszeile von B zu übergeben. Dies ist der " +"Fall, wenn B von einem Skript oder Dienstprogramm ausgeführt wird, zum " +"Beispiel GNU B(1):" #. type: Plain text -#: ../src/xz/xz.1:2181 +#: ../src/xz/xz.1:2396 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2194 +#: ../src/xz/xz.1:2410 msgid "" -"Scripts may use B e.g. to set script-specific default compression " -"options. It is still recommended to allow users to override B if " -"that is reasonable, e.g. in B(1) scripts one may use something like " -"this:" +"Scripts may use B, for example, to set script-specific default " +"compression options. It is still recommended to allow users to override " +"B if that is reasonable. For example, in B(1) scripts one may " +"use something like this:" msgstr "" "Skripte können B zum Beispiel zum Setzen skriptspezifischer Standard-" "Kompressionsoptionen verwenden. Es ist weiterhin empfehlenswert, Benutzern " @@ -4122,7 +4369,7 @@ "Zum Beispiel könnte in B(1)-Skripten Folgendes stehen:" #. type: Plain text -#: ../src/xz/xz.1:2201 +#: ../src/xz/xz.1:2417 #, no-wrap msgid "" "CW\n" #. type: SH -#: ../src/xz/xz.1:2206 +#: ../src/xz/xz.1:2422 #, no-wrap msgid "LZMA UTILS COMPATIBILITY" msgstr "KOMPATIBILITÄT ZU DEN LZMA-UTILS" #. type: Plain text -#: ../src/xz/xz.1:2219 +#: ../src/xz/xz.1:2435 msgid "" "The command line syntax of B is practically a superset of B, " "B, and B as found from LZMA Utils 4.32.x. In most cases, it " @@ -4153,13 +4400,13 @@ "einige Inkompatibilitäten, die manchmal Probleme verursachen können." #. type: SS -#: ../src/xz/xz.1:2220 +#: ../src/xz/xz.1:2436 #, no-wrap msgid "Compression preset levels" msgstr "Voreinstellungsstufen zur Kompression" #. type: Plain text -#: ../src/xz/xz.1:2227 +#: ../src/xz/xz.1:2443 msgid "" "The numbering of the compression level presets is not identical in B and " "LZMA Utils. The most important difference is how dictionary sizes are " @@ -4172,43 +4419,43 @@ "Wörterbuchgröße ist etwa gleich dem Speicherbedarf bei der Dekompression." #. type: tbl table -#: ../src/xz/xz.1:2233 ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2449 ../src/xz/xz.1:2474 #, no-wrap msgid "Level" msgstr "Stufe" #. type: tbl table -#: ../src/xz/xz.1:2233 ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2449 ../src/xz/xz.1:2474 #, no-wrap msgid "xz" msgstr "xz" #. type: tbl table -#: ../src/xz/xz.1:2233 +#: ../src/xz/xz.1:2449 #, no-wrap msgid "LZMA Utils" msgstr "LZMA-Utils" #. type: tbl table -#: ../src/xz/xz.1:2234 ../src/xz/xz.1:2259 +#: ../src/xz/xz.1:2450 ../src/xz/xz.1:2475 #, no-wrap msgid "N/A" msgstr "nicht verfügbar" #. type: tbl table -#: ../src/xz/xz.1:2235 +#: ../src/xz/xz.1:2451 #, no-wrap msgid "64 KiB" msgstr "64 KiB" #. type: tbl table -#: ../src/xz/xz.1:2237 +#: ../src/xz/xz.1:2453 #, no-wrap msgid "512 KiB" msgstr "512 KiB" #. type: Plain text -#: ../src/xz/xz.1:2252 +#: ../src/xz/xz.1:2468 msgid "" "The dictionary size differences affect the compressor memory usage too, but " "there are some other differences between LZMA Utils and XZ Utils, which make " @@ -4219,49 +4466,49 @@ "den LZMA-Utils und den XZ-Utils, die die Kluft noch vergrößern:" #. type: tbl table -#: ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2474 #, no-wrap msgid "LZMA Utils 4.32.x" msgstr "LZMA-Utils 4.32.x" #. type: tbl table -#: ../src/xz/xz.1:2261 ../src/xz/xz.1:2262 +#: ../src/xz/xz.1:2477 ../src/xz/xz.1:2478 #, no-wrap msgid "12 MiB" msgstr "12 MiB" #. type: tbl table -#: ../src/xz/xz.1:2264 +#: ../src/xz/xz.1:2480 #, no-wrap msgid "26 MiB" msgstr "26 MiB" #. type: tbl table -#: ../src/xz/xz.1:2265 +#: ../src/xz/xz.1:2481 #, no-wrap msgid "45 MiB" msgstr "45 MiB" #. type: tbl table -#: ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:2482 #, no-wrap msgid "83 MiB" msgstr "83 MiB" #. type: tbl table -#: ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:2483 #, no-wrap msgid "159 MiB" msgstr "159 MiB" #. type: tbl table -#: ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:2484 #, no-wrap msgid "311 MiB" msgstr "311 MiB" #. type: Plain text -#: ../src/xz/xz.1:2277 +#: ../src/xz/xz.1:2493 msgid "" "The default preset level in LZMA Utils is B<-7> while in XZ Utils it is " "B<-6>, so both use an 8 MiB dictionary by default." @@ -4271,19 +4518,19 @@ "MiB großes Wörterbuch." #. type: SS -#: ../src/xz/xz.1:2278 +#: ../src/xz/xz.1:2494 #, no-wrap msgid "Streamed vs. non-streamed .lzma files" msgstr "Vor- und Nachteile von .lzma-Dateien als Datenströme" #. type: Plain text -#: ../src/xz/xz.1:2288 +#: ../src/xz/xz.1:2504 msgid "" "The uncompressed size of the file can be stored in the B<.lzma> header. " "LZMA Utils does that when compressing regular files. The alternative is to " "mark that uncompressed size is unknown and use end-of-payload marker to " "indicate where the decompressor should stop. LZMA Utils uses this method " -"when uncompressed size isn't known, which is the case for example in pipes." +"when uncompressed size isn't known, which is the case, for example, in pipes." msgstr "" "Die unkomprimierte Größe der Datei kann in den B<.lzma>-Headern gespeichert " "werden. Die LZMA-Utils tun das beim Komprimieren gewöhnlicher Dateien. Als " @@ -4294,7 +4541,7 @@ "(Befehlsverkettungen) der Fall ist." #. type: Plain text -#: ../src/xz/xz.1:2309 +#: ../src/xz/xz.1:2525 msgid "" "B supports decompressing B<.lzma> files with or without end-of-payload " "marker, but all B<.lzma> files created by B will use end-of-payload " @@ -4315,13 +4562,13 @@ "lzma>-Dateien mit bekannter unkomprimierter Größe zu erzeugen." #. type: SS -#: ../src/xz/xz.1:2310 +#: ../src/xz/xz.1:2526 #, no-wrap msgid "Unsupported .lzma files" msgstr "Nicht unterstützte .lzma-Dateien" #. type: Plain text -#: ../src/xz/xz.1:2333 +#: ../src/xz/xz.1:2549 msgid "" "The B<.lzma> format allows I values up to 8, and I values up to 4. " "LZMA Utils can decompress files with any I and I, but always creates " @@ -4335,7 +4582,7 @@ "möglich." #. type: Plain text -#: ../src/xz/xz.1:2344 +#: ../src/xz/xz.1:2560 msgid "" "The implementation of the LZMA1 filter in liblzma requires that the sum of " "I and I must not exceed 4. Thus, B<.lzma> files, which exceed this " @@ -4346,7 +4593,7 @@ "welche diese Begrenzung überschreiten, mit B nicht dekomprimiert werden." #. type: Plain text -#: ../src/xz/xz.1:2359 +#: ../src/xz/xz.1:2575 msgid "" "LZMA Utils creates only B<.lzma> files which have a dictionary size of " "2^I (a power of 2) but accepts files with any dictionary size. liblzma " @@ -4361,7 +4608,7 @@ "Verringern von Fehlalarmen beim Erkennen von B<.lzma>-Dateien." #. type: Plain text -#: ../src/xz/xz.1:2364 +#: ../src/xz/xz.1:2580 msgid "" "These limitations shouldn't be a problem in practice, since practically all " "B<.lzma> files have been compressed with settings that liblzma will accept." @@ -4371,13 +4618,13 @@ "akzeptieren wird." #. type: SS -#: ../src/xz/xz.1:2365 +#: ../src/xz/xz.1:2581 #, no-wrap msgid "Trailing garbage" msgstr "Angehängter Datenmüll" #. type: Plain text -#: ../src/xz/xz.1:2375 +#: ../src/xz/xz.1:2591 msgid "" "When decompressing, LZMA Utils silently ignore everything after the first B<." "lzma> stream. In most situations, this is a bug. This also means that LZMA " @@ -4389,7 +4636,7 @@ "B<.lzma>-Dateien nicht unterstützen." #. type: Plain text -#: ../src/xz/xz.1:2385 +#: ../src/xz/xz.1:2601 msgid "" "If there is data left after the first B<.lzma> stream, B considers the " "file to be corrupt unless B<--single-stream> was used. This may break " @@ -4401,19 +4648,19 @@ "ausgehen, dass angehängter Datenmüll ignoriert wird." #. type: SH -#: ../src/xz/xz.1:2386 ../src/xzdec/xzdec.1:117 +#: ../src/xz/xz.1:2602 ../src/xzdec/xzdec.1:117 #, no-wrap msgid "NOTES" msgstr "ANMERKUNGEN" #. type: SS -#: ../src/xz/xz.1:2388 +#: ../src/xz/xz.1:2604 #, no-wrap msgid "Compressed output may vary" msgstr "Die komprimierte Ausgabe kann variieren" #. type: Plain text -#: ../src/xz/xz.1:2399 +#: ../src/xz/xz.1:2615 msgid "" "The exact compressed output produced from the same uncompressed input file " "may vary between XZ Utils versions even if compression options are " @@ -4432,7 +4679,7 @@ "Binärprogramms unterschiedliche Optionen verwendet wurden." #. type: Plain text -#: ../src/xz/xz.1:2409 +#: ../src/xz/xz.1:2625 msgid "" "The above means that once B<--rsyncable> has been implemented, the resulting " "files won't necessarily be rsyncable unless both old and new files have been " @@ -4448,13 +4695,13 @@ "B-Versionsgrenzen hinweg stabil zu halten." #. type: SS -#: ../src/xz/xz.1:2410 +#: ../src/xz/xz.1:2626 #, no-wrap msgid "Embedded .xz decompressors" msgstr "Eingebettete .xz-Dekompressoren" #. type: Plain text -#: ../src/xz/xz.1:2427 +#: ../src/xz/xz.1:2643 msgid "" "Embedded B<.xz> decompressor implementations like XZ Embedded don't " "necessarily support files created with integrity I types other than " @@ -4468,7 +4715,7 @@ "check=crc32> verwenden, wenn Sie Dateien für eingebettete Systeme erstellen." #. type: Plain text -#: ../src/xz/xz.1:2437 +#: ../src/xz/xz.1:2653 msgid "" "Outside embedded systems, all B<.xz> format decompressors support all the " "I types, or at least are able to decompress the file without " @@ -4480,7 +4727,7 @@ "I nicht verfügbar ist." #. type: Plain text -#: ../src/xz/xz.1:2440 +#: ../src/xz/xz.1:2656 msgid "" "XZ Embedded supports BCJ filters, but only with the default start offset." msgstr "" @@ -4488,19 +4735,19 @@ "Startversatz." #. type: SH -#: ../src/xz/xz.1:2441 +#: ../src/xz/xz.1:2657 #, no-wrap msgid "EXAMPLES" msgstr "BEISPIELE" #. type: SS -#: ../src/xz/xz.1:2443 +#: ../src/xz/xz.1:2659 #, no-wrap msgid "Basics" msgstr "Grundlagen" #. type: Plain text -#: ../src/xz/xz.1:2453 +#: ../src/xz/xz.1:2669 msgid "" "Compress the file I into I using the default compression level " "(B<-6>), and remove I if compression is successful:" @@ -4509,13 +4756,13 @@ "I und entfernt I nach erfolgreicher Kompression:" #. type: Plain text -#: ../src/xz/xz.1:2458 +#: ../src/xz/xz.1:2674 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2469 +#: ../src/xz/xz.1:2685 msgid "" "Decompress I into I and don't remove I even if " "decompression is successful:" @@ -4524,31 +4771,30 @@ "wenn die Dekompression erfolgreich war:" #. type: Plain text -#: ../src/xz/xz.1:2474 +#: ../src/xz/xz.1:2690 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2487 +#: ../src/xz/xz.1:2703 msgid "" "Create I with the preset B<-4e> (B<-4 --extreme>), which is " -"slower than e.g. the default B<-6>, but needs less memory for compression " -"and decompression (48\\ MiB and 5\\ MiB, respectively):" +"slower than the default B<-6>, but needs less memory for compression and " +"decompression (48\\ MiB and 5\\ MiB, respectively):" msgstr "" "I mit der Voreinstellung B<-4e> (B<-4 --extreme>) erzeugen, was " -"langsamer ist als beispielsweise die Vorgabe B<-6>, aber weniger Speicher " -"für Kompression und Dekompression benötigt (48\\ MiB beziehungsweise 5\\ " -"MiB):" +"langsamer ist als die Vorgabe B<-6>, aber weniger Speicher für Kompression " +"und Dekompression benötigt (48\\ MiB beziehungsweise 5\\ MiB):" #. type: Plain text -#: ../src/xz/xz.1:2492 +#: ../src/xz/xz.1:2708 #, no-wrap msgid "CW baz.tar.xz>\n" msgstr "CW baz.tar.xz>\n" #. type: Plain text -#: ../src/xz/xz.1:2498 +#: ../src/xz/xz.1:2714 msgid "" "A mix of compressed and uncompressed files can be decompressed to standard " "output with a single command:" @@ -4557,19 +4803,19 @@ "einzelnen Befehl dekomprimiert in die Standardausgabe geschrieben werden:" #. type: Plain text -#: ../src/xz/xz.1:2503 +#: ../src/xz/xz.1:2719 #, no-wrap msgid "CW abcd.txt>\n" msgstr "CW abcd.txt>\n" #. type: SS -#: ../src/xz/xz.1:2507 +#: ../src/xz/xz.1:2723 #, no-wrap msgid "Parallel compression of many files" msgstr "Parallele Kompression von vielen Dateien" #. type: Plain text -#: ../src/xz/xz.1:2513 +#: ../src/xz/xz.1:2729 msgid "" "On GNU and *BSD, B(1) and B(1) can be used to parallelize " "compression of many files:" @@ -4578,7 +4824,7 @@ "Parallelisieren der Kompression vieler Dateien verwendet werden:" #. type: Plain text -#: ../src/xz/xz.1:2519 +#: ../src/xz/xz.1:2735 #, no-wrap msgid "" "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2541 +#: ../src/xz/xz.1:2757 msgid "" "The B<-P> option to B(1) sets the number of parallel B " "processes. The best value for the B<-n> option depends on how many files " @@ -4605,7 +4851,7 @@ "Prozesse zu beschränken, die B(1) schließlich erzeugen wird." #. type: Plain text -#: ../src/xz/xz.1:2549 +#: ../src/xz/xz.1:2765 msgid "" "The option B<-T1> for B is there to force it to single-threaded mode, " "because B(1) is used to control the amount of parallelization." @@ -4614,13 +4860,13 @@ "da B(1) zur Steuerung des Umfangs der Parallelisierung verwendet wird." #. type: SS -#: ../src/xz/xz.1:2550 +#: ../src/xz/xz.1:2766 #, no-wrap msgid "Robot mode" msgstr "Roboter-Modus" #. type: Plain text -#: ../src/xz/xz.1:2553 +#: ../src/xz/xz.1:2769 msgid "" "Calculate how many bytes have been saved in total after compressing multiple " "files:" @@ -4629,13 +4875,13 @@ "eingespart wurden:" #. type: Plain text -#: ../src/xz/xz.1:2558 +#: ../src/xz/xz.1:2774 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2573 +#: ../src/xz/xz.1:2789 msgid "" "A script may want to know that it is using new enough B. The following " "B(1) script checks that the version number of the B tool is at " @@ -4648,7 +4894,7 @@ "Versionen kompatibel, welche die Option B<--robot> nicht unterstützen:" #. type: Plain text -#: ../src/xz/xz.1:2582 +#: ../src/xz/xz.1:2798 #, no-wrap msgid "" "CW /dev/null)\" ||\n" @@ -4664,7 +4910,7 @@ "unset XZ_VERSION LIBLZMA_VERSION>\n" #. type: Plain text -#: ../src/xz/xz.1:2589 +#: ../src/xz/xz.1:2805 msgid "" "Set a memory usage limit for decompression using B, but if a limit " "has already been set, don't increase it:" @@ -4673,17 +4919,17 @@ "aber eine bereits gesetzte Begrenzung nicht erhöhen:" #. type: Plain text -#: ../src/xz/xz.1:2599 +#: ../src/xz/xz.1:2815 #, no-wrap msgid "" -"CWE 20)) # 123 MiB\n" +"CWE 20))\\ \\ # 123 MiB\n" "OLDLIM=$(xz --robot --info-memory | cut -f3)\n" "if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then\n" " XZ_OPT=\"$XZ_OPT --memlimit-decompress=$NEWLIM\"\n" " export XZ_OPT\n" "fi>\n" msgstr "" -"CWE 20)) # 123 MiB\n" +"CWE 20))\\ \\ # 123 MiB\n" "OLDLIM=$(xz --robot --info-memory | cut -f3)\n" "if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then\n" " XZ_OPT=\"$XZ_OPT --memlimit-decompress=$NEWLIM\"\n" @@ -4691,7 +4937,7 @@ "fi>\n" #. type: Plain text -#: ../src/xz/xz.1:2609 +#: ../src/xz/xz.1:2825 msgid "" "The simplest use for custom filter chains is customizing a LZMA2 preset. " "This can be useful, because the presets cover only a subset of the " @@ -4703,7 +4949,7 @@ "Kompressionseinstellungen abdecken." #. type: Plain text -#: ../src/xz/xz.1:2617 +#: ../src/xz/xz.1:2833 msgid "" "The CompCPU columns of the tables from the descriptions of the options " "B<-0> ... B<-9> and B<--extreme> are useful when customizing LZMA2 presets. " @@ -4714,12 +4960,12 @@ "nützlich. Diese sind die relevanten Teile aus diesen zwei Tabellen:" #. type: Plain text -#: ../src/xz/xz.1:2642 +#: ../src/xz/xz.1:2858 msgid "" -"If you know that a file requires somewhat big dictionary (e.g. 32 MiB) to " -"compress well, but you want to compress it quicker than B would do, a " -"preset with a low CompCPU value (e.g. 1) can be modified to use a bigger " -"dictionary:" +"If you know that a file requires somewhat big dictionary (for example, 32\\ " +"MiB) to compress well, but you want to compress it quicker than B " +"would do, a preset with a low CompCPU value (for example, 1) can be " +"modified to use a bigger dictionary:" msgstr "" "Wenn Sie wissen, dass eine Datei für eine gute Kompression ein etwas " "größeres Wörterbuch benötigt (zum Beispiel 32 MiB), aber Sie sie schneller " @@ -4728,13 +4974,13 @@ "angepasst werden, ein größeres Wörterbuch zu verwenden:" #. type: Plain text -#: ../src/xz/xz.1:2647 +#: ../src/xz/xz.1:2863 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2663 +#: ../src/xz/xz.1:2879 msgid "" "With certain files, the above command may be faster than B while " "compressing significantly better. However, it must be emphasized that only " @@ -4756,7 +5002,7 @@ "folgenden Dateien zieht." #. type: Plain text -#: ../src/xz/xz.1:2670 +#: ../src/xz/xz.1:2886 msgid "" "If very high compressor and decompressor memory usage is fine, and the file " "being compressed is at least several hundred megabytes, it may be useful to " @@ -4768,13 +5014,13 @@ "MiB, die mit B verwendet werden würden:" #. type: Plain text -#: ../src/xz/xz.1:2675 +#: ../src/xz/xz.1:2891 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2688 +#: ../src/xz/xz.1:2904 msgid "" "Using B<-vv> (B<--verbose --verbose>) like in the above example can be " "useful to see the memory requirements of the compressor and decompressor. " @@ -4788,14 +5034,14 @@ "Befehl für kleine Dateien nicht sinnvoll." #. type: Plain text -#: ../src/xz/xz.1:2701 +#: ../src/xz/xz.1:2916 msgid "" "Sometimes the compression time doesn't matter, but the decompressor memory " -"usage has to be kept low e.g. to make it possible to decompress the file on " -"an embedded system. The following command uses B<-6e> (B<-6 --extreme>) as " -"a base and sets the dictionary to only 64\\ KiB. The resulting file can be " -"decompressed with XZ Embedded (that's why there is B<--check=crc32>) using " -"about 100\\ KiB of memory." +"usage has to be kept low, for example, to make it possible to decompress the " +"file on an embedded system. The following command uses B<-6e> (B<-6 --" +"extreme>) as a base and sets the dictionary to only 64\\ KiB. The " +"resulting file can be decompressed with XZ Embedded (that's why there is B<--" +"check=crc32>) using about 100\\ KiB of memory." msgstr "" "Manchmal spielt die Kompressionszeit keine Rolle, aber der Speicherbedarf " "bei der Dekompression muss gering gehalten werden, zum Beispiel um die Datei " @@ -4806,21 +5052,21 @@ "dekomprimiert werden." #. type: Plain text -#: ../src/xz/xz.1:2706 +#: ../src/xz/xz.1:2921 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2729 +#: ../src/xz/xz.1:2944 msgid "" "If you want to squeeze out as many bytes as possible, adjusting the number " "of literal context bits (I) and number of position bits (I) can " "sometimes help. Adjusting the number of literal position bits (I) " -"might help too, but usually I and I are more important. E.g. a " -"source code archive contains mostly US-ASCII text, so something like the " -"following might give slightly (like 0.1\\ %) smaller file than B " -"(try also without B):" +"might help too, but usually I and I are more important. For " +"example, a source code archive contains mostly US-ASCII text, so something " +"like the following might give slightly (like 0.1\\ %) smaller file than B (try also without B):" msgstr "" "Wenn Sie so viele Byte wie möglich herausquetschen wollen, kann die " "Anpassung der Anzahl der literalen Kontextbits (I) und der Anzahl der " @@ -4832,17 +5078,17 @@ "es auch B):" #. type: Plain text -#: ../src/xz/xz.1:2734 +#: ../src/xz/xz.1:2949 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2742 +#: ../src/xz/xz.1:2957 msgid "" "Using another filter together with LZMA2 can improve compression with " -"certain file types. E.g. to compress a x86-32 or x86-64 shared library " -"using the x86 BCJ filter:" +"certain file types. For example, to compress a x86-32 or x86-64 shared " +"library using the x86 BCJ filter:" msgstr "" "Die Verwendung eines anderen Filters mit LZMA2 kann die Kompression bei " "verschiedenen Dateitypen verbessern. So könnten Sie eine gemeinsam genutzte " @@ -4850,13 +5096,13 @@ "komprimieren:" #. type: Plain text -#: ../src/xz/xz.1:2747 +#: ../src/xz/xz.1:2962 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2761 +#: ../src/xz/xz.1:2976 msgid "" "Note that the order of the filter options is significant. If B<--x86> is " "specified after B<--lzma2>, B will give an error, because there cannot " @@ -4869,7 +5115,7 @@ "für x86 nicht als letzter Filter in der Filterkette gesetzt werden darf." #. type: Plain text -#: ../src/xz/xz.1:2767 +#: ../src/xz/xz.1:2982 msgid "" "The Delta filter together with LZMA2 can give good results with bitmap " "images. It should usually beat PNG, which has a few more advanced filters " @@ -4881,13 +5127,13 @@ "eigentliche Kompression »Deflate« verwendet." #. type: Plain text -#: ../src/xz/xz.1:2777 +#: ../src/xz/xz.1:2992 msgid "" -"The image has to be saved in uncompressed format, e.g. as uncompressed " -"TIFF. The distance parameter of the Delta filter is set to match the number " -"of bytes per pixel in the image. E.g. 24-bit RGB bitmap needs B, " -"and it is also good to pass B to LZMA2 to accommodate the three-byte " -"alignment:" +"The image has to be saved in uncompressed format, for example, as " +"uncompressed TIFF. The distance parameter of the Delta filter is set to " +"match the number of bytes per pixel in the image. For example, 24-bit RGB " +"bitmap needs B, and it is also good to pass B to LZMA2 to " +"accommodate the three-byte alignment:" msgstr "" "Das Bild muss in einem unkomprimierten Format gespeichert werden, zum " "Beispiel als unkomprimiertes TIFF. Der Abstandsparameter des Delta-Filters " @@ -4897,32 +5143,32 @@ "berücksichtigen:" #. type: Plain text -#: ../src/xz/xz.1:2782 +#: ../src/xz/xz.1:2997 #, no-wrap msgid "CW\n" msgstr "CW\n" #. type: Plain text -#: ../src/xz/xz.1:2790 +#: ../src/xz/xz.1:3005 msgid "" -"If multiple images have been put into a single archive (e.g.\\& B<.tar>), " -"the Delta filter will work on that too as long as all images have the same " -"number of bytes per pixel." +"If multiple images have been put into a single archive (for example, B<." +"tar>), the Delta filter will work on that too as long as all images have the " +"same number of bytes per pixel." msgstr "" "Wenn sich mehrere Bilder in einem einzelnen Archiv befinden (zum Beispiel\\& " "B<.tar>), funktioniert der Delta-Filter damit auch, sofern alle Bilder im " "Archiv die gleiche Anzahl Bytes pro Pixel haben." #. type: SH -#: ../src/xz/xz.1:2791 ../src/xzdec/xzdec.1:143 ../src/lzmainfo/lzmainfo.1:59 -#: ../src/scripts/xzdiff.1:64 ../src/scripts/xzgrep.1:92 +#: ../src/xz/xz.1:3006 ../src/xzdec/xzdec.1:143 ../src/lzmainfo/lzmainfo.1:59 +#: ../src/scripts/xzdiff.1:65 ../src/scripts/xzgrep.1:106 #: ../src/scripts/xzless.1:65 ../src/scripts/xzmore.1:51 #, no-wrap msgid "SEE ALSO" msgstr "SIEHE AUCH" #. type: Plain text -#: ../src/xz/xz.1:2800 +#: ../src/xz/xz.1:3015 msgid "" "B(1), B(1), B(1), B(1), B(1), " "B(1), B(1), B<7z>(1)" @@ -4931,18 +5177,20 @@ "B(1), B(1), B<7z>(1)" #. type: Plain text -#: ../src/xz/xz.1:2802 +#: ../src/xz/xz.1:3017 msgid "XZ Utils: Ehttps://tukaani.org/xz/E" msgstr "XZ Utils: Ehttps://tukaani.org/xz/E" #. type: Plain text -#: ../src/xz/xz.1:2804 ../src/xzdec/xzdec.1:146 +#: ../src/xz/xz.1:3019 ../src/xzdec/xzdec.1:146 msgid "XZ Embedded: Ehttps://tukaani.org/xz/embedded.htmlE" msgstr "XZ Embedded: Ehttps://tukaani.org/xz/embedded.htmlE" #. type: Plain text -#: ../src/xz/xz.1:2805 -msgid "LZMA SDK: Ehttp://7-zip.org/sdk.htmlE" +#: ../src/xz/xz.1:3020 +#, fuzzy +#| msgid "LZMA SDK: Ehttp://7-zip.org/sdk.htmlE" +msgid "LZMA SDK: Ehttps://7-zip.org/sdk.htmlE" msgstr "LZMA-SDK: Ehttp://7-zip.org/sdk.htmlE" #. type: TH @@ -5170,7 +5418,7 @@ "zu den LZMA-Dienstprogrammen enthalten." #. type: SH -#: ../src/lzmainfo/lzmainfo.1:51 ../src/scripts/xzdiff.1:72 +#: ../src/lzmainfo/lzmainfo.1:51 ../src/scripts/xzdiff.1:74 #, no-wrap msgid "BUGS" msgstr "FEHLER" @@ -5192,10 +5440,10 @@ msgstr "XZDIFF" #. type: TH -#: ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 +#: ../src/scripts/xzdiff.1:9 #, no-wrap -msgid "2011-03-19" -msgstr "19. März 2011" +msgid "2021-06-04" +msgstr "4. Juni 2021" #. type: Plain text #: ../src/scripts/xzdiff.1:12 @@ -5223,30 +5471,32 @@ msgstr "B [I] I [I]" #. type: Plain text -#: ../src/scripts/xzdiff.1:58 +#: ../src/scripts/xzdiff.1:59 msgid "" "B and B invoke B(1) or B(1) on files compressed " -"with B(1), B(1), B(1), B(1), or B(1). All " -"options specified are passed directly to B(1) or B(1). If only " -"one file is specified, then the files compared are I (which must have " -"a suffix of a supported compression format) and I from which the " -"compression format suffix has been stripped. If two files are specified, " -"then they are uncompressed if necessary and fed to B(1) or " -"B(1). The exit status from B(1) or B(1) is preserved." +"with B(1), B(1), B(1), B(1), B(1), or " +"B(1). All options specified are passed directly to B(1) or " +"B(1). If only one file is specified, then the files compared are " +"I (which must have a suffix of a supported compression format) and " +"I from which the compression format suffix has been stripped. If two " +"files are specified, then they are uncompressed if necessary and fed to " +"B(1) or B(1). The exit status from B(1) or B(1) is " +"preserved unless a decompression error occurs; then exit status is 2." msgstr "" "Die Dienstprogramme B und B führen die Programme B(1) " "beziehungsweise B(1) mit Dateien aus, die mittels B(1), " -"B(1), B(1), B(1) oder B(1) komprimiert wurden. Alle " -"angegebenen Optionen werden direkt an B(1) oder B(1) übergeben. " -"Wird nur eine Datei angegeben, wird diese I (die eine Endung " -"entsprechend eines der unterstützten Kompressionsformate haben muss) mit der " -"I verglichen, von der die Kompressionsformat-Endung entfernt wird. " -"Werden zwei Dateien angegeben, dann werden deren Inhalte (falls nötig, " +"B(1), B(1), B(1), B(1) oder B komprimiert " +"wurden. Alle angegebenen Optionen werden direkt an B(1) oder B(1) " +"übergeben. Wird nur eine Datei angegeben, wird diese I (die eine " +"Endung entsprechend eines der unterstützten Kompressionsformate haben muss) " +"mit der I verglichen, von der die Kompressionsformat-Endung entfernt " +"wird. Werden zwei Dateien angegeben, dann werden deren Inhalte (falls nötig, " "unkomprimiert) an B(1) oder B(1) weitergeleitet. Der Exit-Status " -"von B(1) oder B(1) wird dabei bewahrt." +"von B(1) oder B(1) wird dabei bewahrt (sofern kein " +"Dekompressionsfehler auftrat; in diesem Fall ist der Exit-Status 2)." #. type: Plain text -#: ../src/scripts/xzdiff.1:64 +#: ../src/scripts/xzdiff.1:65 msgid "" "The names B and B are provided for backward compatibility " "with LZMA Utils." @@ -5255,16 +5505,16 @@ "LZMA-Dienstprogrammen." #. type: Plain text -#: ../src/scripts/xzdiff.1:72 +#: ../src/scripts/xzdiff.1:74 msgid "" "B(1), B(1), B(1), B(1), B(1), B(1), " -"B(1)" +"B(1), B(1)" msgstr "" "B(1), B(1), B(1), B(1), B(1), B(1), " -"B(1)" +"B(1), B(1)" #. type: Plain text -#: ../src/scripts/xzdiff.1:77 +#: ../src/scripts/xzdiff.1:79 msgid "" "Messages from the B(1) or B(1) programs refer to temporary " "filenames instead of those specified." @@ -5278,6 +5528,12 @@ msgid "XZGREP" msgstr "XZGREP" +#. type: TH +#: ../src/scripts/xzgrep.1:9 +#, no-wrap +msgid "2022-07-19" +msgstr "19. Juli 2022" + #. type: Plain text #: ../src/scripts/xzgrep.1:12 msgid "xzgrep - search compressed files for a regular expression" @@ -5286,90 +5542,124 @@ #. type: Plain text #: ../src/scripts/xzgrep.1:18 -msgid "B [I] [B<-e>] I I..." -msgstr "B [I] [B<-e>] I I …" +msgid "B [I] [B<-e>] I [I]" +msgstr "B [I] [B<-e>] I [I]" #. type: Plain text #: ../src/scripts/xzgrep.1:21 -msgid "B ..." +msgid "B \\&..." msgstr "B …" #. type: Plain text #: ../src/scripts/xzgrep.1:24 -msgid "B ..." +msgid "B \\&..." msgstr "B …" #. type: Plain text #: ../src/scripts/xzgrep.1:27 -msgid "B ..." +msgid "B \\&..." msgstr "B …" #. type: Plain text #: ../src/scripts/xzgrep.1:30 -msgid "B ..." +msgid "B \\&..." msgstr "B …" #. type: Plain text #: ../src/scripts/xzgrep.1:33 -msgid "B ..." +msgid "B \\&..." msgstr "B …" #. type: Plain text -#: ../src/scripts/xzgrep.1:48 +#: ../src/scripts/xzgrep.1:49 msgid "" "B invokes B(1) on I which may be either uncompressed " -"or compressed with B(1), B(1), B(1), B(1), or " -"B(1). All options specified are passed directly to B(1)." +"or compressed with B(1), B(1), B(1), B(1), " +"B(1), or B(1). All options specified are passed directly to " +"B(1)." msgstr "" "B wendet B(1) auf I an, die entweder unkomprimiert " -"oder mit B(1), B(1), B(1), B(1) oder B(1) " -"komprimiert sein können. Alle angegebenen Optionen werden direkt an " +"oder mit B(1), B(1), B(1), B(1), B(1) oder " +"B komprimiert sein können. Alle angegebenen Optionen werden direkt an " "B(1) übergeben." #. type: Plain text -#: ../src/scripts/xzgrep.1:60 +#: ../src/scripts/xzgrep.1:62 msgid "" "If no I is specified, then standard input is decompressed if necessary " "and fed to B(1). When reading from standard input, B(1), " -"B(1), and B(1) compressed files are not supported." +"B(1), B(1), and B(1) compressed files are not supported." msgstr "" "Wenn keine I angegeben ist, wird die Standardeingabe dekomprimiert " "(falls nötig) und an B übergeben. Beim Lesen aus der Standardeingabe " -"keine Dateien unterstützt, die mit B(1), B(1) oder B(1) " -"komprimiert sind." +"keine Dateien unterstützt, die mit B(1), B(1), B(1) oder " +"B komprimiert sind." #. type: Plain text -#: ../src/scripts/xzgrep.1:79 +#: ../src/scripts/xzgrep.1:81 msgid "" -"If B is invoked as B or B then B(1) or " -"B(1) is used instead of B(1). The same applies to names " +"If B is invoked as B or B then B or " +"B is used instead of B(1). The same applies to names " "B, B, and B, which are provided for backward " "compatibility with LZMA Utils." msgstr "" "Wenn B als B oder B aufgerufen wird, dann wird " -"B(1) oder B(1) anstelle von B(1) verwendet. Genauso " +"B oder B anstelle von B(1) verwendet. Genauso " "verhalten sich die Befehle B, B und B, die die " "Abwärtskompatibilität zu den LZMA-Dienstprogrammen gewährleisten." +#. type: Plain text +#: ../src/scripts/xzgrep.1:86 +msgid "" +"At least one match was found from at least one of the input files. No " +"errors occurred." +msgstr "" +"In mindestens einer der Eingabedateien wurde mindestens ein Treffer " +"gefunden. Es sind keine Fehler aufgetreten." + +#. type: Plain text +#: ../src/scripts/xzgrep.1:90 +msgid "No matches were found from any of the input files. No errors occurred." +msgstr "" +"In keiner der Eingabedateien wurde ein Treffer gefunden. Es sind keine " +"Fehler aufgetreten." + #. type: TP -#: ../src/scripts/xzgrep.1:81 +#: ../src/scripts/xzgrep.1:90 #, no-wrap +msgid "E1" +msgstr "E1" + +#. type: Plain text +#: ../src/scripts/xzgrep.1:94 +msgid "One or more errors occurred. It is unknown if matches were found." +msgstr "" +"Ein oder mehrere Fehler sind aufgetreten. Es ist unbekannt, ob Treffer " +"gefunden wurden." + +#. type: TP +#: ../src/scripts/xzgrep.1:95 +#, no-wrap msgid "B" msgstr "B" #. type: Plain text -#: ../src/scripts/xzgrep.1:92 +#: ../src/scripts/xzgrep.1:106 msgid "" "If the B environment variable is set, B uses it instead of " -"B(1), B(1), or B(1)." +"B(1), B, or B." msgstr "" "Wenn die Umgebungsvariable B gesetzt ist, verwendet B deren " -"Inhalt anstelle von B(1), B(1) oder B(1)." +"Inhalt anstelle von B(1), B oder B." #. type: Plain text -#: ../src/scripts/xzgrep.1:98 -msgid "B(1), B(1), B(1), B(1), B(1), B(1)" -msgstr "B(1), B(1), B(1), B(1), B(1), B(1)" +#: ../src/scripts/xzgrep.1:113 +msgid "" +"B(1), B(1), B(1), B(1), B(1), B(1), " +"B(1)" +msgstr "" +"B(1), B(1), B(1), B(1), B(1), B(1), " +"B(1)" #. type: TH #: ../src/scripts/xzless.1:10 @@ -5557,3 +5847,81 @@ #: ../src/scripts/xzmore.1:55 msgid "B(1), B(1), B(1), B(1)" msgstr "B(1), B(1), B(1), B(1)" + +#~ msgid "2020-02-01" +#~ msgstr "1. Februar 2020" + +#~ msgid "" +#~ "Display an error and exit if the compression settings exceed the memory " +#~ "usage limit. The default is to adjust the settings downwards so that the " +#~ "memory usage limit is not exceeded. Automatic adjusting is always " +#~ "disabled when creating raw streams (B<--format=raw>)." +#~ msgstr "" +#~ "zeigt einen Fehler an und bricht die Ausführung ab, falls die " +#~ "Kompressionseinstellungen die Begrenzung der Speichernutzung " +#~ "überschreiten. Standardmäßig werden die Einstellungen nach unten " +#~ "korrigiert, so dass diese Grenze nicht überschritten wird. Bei der " +#~ "Erzeugung von Rohdatenströmen (B<--format=raw>) ist die automatische " +#~ "Korrektur stets deaktiviert." + +#~ msgid "" +#~ "It is fine to apply a BCJ filter on a whole executable; there's no need " +#~ "to apply it only on the executable section. Applying a BCJ filter on an " +#~ "archive that contains both executable and non-executable files may or may " +#~ "not give good results, so it generally isn't good to blindly apply a BCJ " +#~ "filter when compressing binary packages for distribution." +#~ msgstr "" +#~ "Es ist in Ordnung, einen BCJ-Filter auf eine gesamte Binärdatei " +#~ "anzuwenden; es ist nicht nötig, dies nur auf den binären Bereich zu " +#~ "beschränken. Die Anwendung eines BCJ-Filters auf ein Archiv, das sowohl " +#~ "binäre als auch nicht-binäre Dateien enthält, kann gute Ergebnisse " +#~ "liefern, muss es aber nicht. Daher ist es generell nicht gut, einen BCJ-" +#~ "Filter blindlings anzuwenden, wenn Sie Binärpakete zwecks Weitergabe " +#~ "komprimieren wollen." + +#~ msgid "" +#~ "These BCJ filters are very fast and use insignificant amount of memory. " +#~ "If a BCJ filter improves compression ratio of a file, it can improve " +#~ "decompression speed at the same time. This is because, on the same " +#~ "hardware, the decompression speed of LZMA2 is roughly a fixed number of " +#~ "bytes of compressed data per second." +#~ msgstr "" +#~ "Diese BCJ-Filter sind sehr schnell und erhöhen den Speicherbedarf nur " +#~ "unerheblich. Wenn ein BCJ-Filter das Kompressionsverhältnis einer Datei " +#~ "verbessert, kann er auch gleichzeitig die Dekompressionsgeschwindigkeit " +#~ "verbessern. Das kommt daher, dass auf der gleichen Hardware die " +#~ "Dekompressionsgeschwindigkeit von LZMA2 ungefähr eine feste Anzahl Byte " +#~ "an komprimierten Daten pro Sekunde ist." + +#~ msgid "" +#~ "Applying a BCJ filter on an archive containing multiple similar " +#~ "executables can make the compression ratio worse than not using a BCJ " +#~ "filter. This is because the BCJ filter doesn't detect the boundaries of " +#~ "the executable files, and doesn't reset the address conversion counter " +#~ "for each executable." +#~ msgstr "" +#~ "Bei der Anwendung eines BCJ-Filters auf ein Archiv, das mehrere ähnliche " +#~ "Binärdateien enthält, kann das Kompressionsverhältnis schlechter sein als " +#~ "ohne BCJ-Filter. Das kommt daher, weil der BCJ-Filter die Grenzen der " +#~ "Binärdateien nicht erkennt und den Zähler der Adressumwandlung für jede " +#~ "Binärdatei nicht zurücksetzt." + +#~ msgid "" +#~ "Both of the above problems will be fixed in the future in a new filter. " +#~ "The old BCJ filters will still be useful in embedded systems, because the " +#~ "decoder of the new filter will be bigger and use more memory." +#~ msgstr "" +#~ "Beide der oben genannten Probleme werden in der Zukunft in einem neuen " +#~ "Filter nicht mehr auftreten. Die alten BCJ-Filter werden noch in " +#~ "eingebetteten Systemen von Nutzen sein, weil der Dekoder des neuen " +#~ "Filters größer sein und mehr Speicher beanspruchen wird." + +# FIXME have have +#~ msgid "Different instruction sets have different alignment:" +#~ msgstr "Verschiedene Befehlssätze haben unterschiedliche Ausrichtungen:" + +#~ msgid "Little endian only" +#~ msgstr "Nur Little Endian" + +#~ msgid "Big or little endian" +#~ msgstr "Big oder Little Endian" Only in xz-5.4.3/po4a: fr.po Only in xz-5.4.3/po4a: ko.po diff -ur xz-5.2.5/po4a/man/de/xz.1 xz-5.4.3/po4a/man/de/xz.1 --- xz-5.2.5/po4a/man/de/xz.1 2020-03-17 17:31:37 +++ xz-5.4.3/po4a/man/de/xz.1 2023-05-04 17:33:07 @@ -10,7 +10,7 @@ .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH XZ 1 "1. Februar 2020" Tukaani XZ\-Dienstprogramme +.TH XZ 1 "1. Dezember 2022" Tukaani XZ\-Dienstprogramme . .SH BEZEICHNUNG xz, unxz, xzcat, lzma, unlzma, lzcat \- .xz\- und .lzma\-Dateien komprimieren @@ -39,7 +39,8 @@ Befehlszeilensyntax denen von \fBgzip\fP(1) und \fBbzip2\fP(1) ähnelt. Das native Dateiformat ist das \fB.xz\fP\-Format, aber das veraltete, von den LZMA\-Dienstprogrammen verwendete Format sowie komprimierte Rohdatenströme -ohne Containerformat\-Header werden ebenfalls unterstützt. +ohne Containerformat\-Header werden ebenfalls unterstützt. Außerdem wird die +Dekompression des von \fBlzip\fP verwendeten \fB.lz\fP\-Formats unterstützt. .PP \fBxz\fP komprimiert oder dekomprimierte jede \fIDatei\fP entsprechend des gewählten Vorgangsmodus. Falls entweder \fB\-\fP oder keine Datei angegeben ist, @@ -58,9 +59,9 @@ \&\fB.lzma\fP) an den Namen der Quelldatei angehängt und so der Name der Zieldatei gebildet. .IP \(bu 3 -Bei der Dekompression wird das Suffix \fB.xz\fP oder \fB.lzma\fP vom Dateinamen -entfernt und so der Name der Zieldatei gebildet. Außerdem erkennt \fBxz\fP die -Suffixe \fB.txz\fP und \fB.tlz\fP und ersetzt diese durch \fB.tar\fP. +Bei der Dekompression wird das Suffix \fB.xz\fP, \fB.lzma\fP oder \fB.lz\fP vom +Dateinamen entfernt und so der Name der Zieldatei gebildet. Außerdem erkennt +\fBxz\fP die Suffixe \fB.txz\fP und \fB.tlz\fP und ersetzt diese durch \fB.tar\fP. .PP Wenn die Zieldatei bereits existiert, wird eine Fehlermeldung angezeigt und die \fIDatei\fP übersprungen. @@ -83,7 +84,7 @@ .IP \(bu 3 Der Aktionsmodus wird auf Dekompression gesetzt und die \fIDatei\fP hat nicht das Suffix eines der unterstützten Zieldateiformate (\fB.xz\fP, \fB.txz\fP, -\&\fB.lzma\fP oder \fB.tlz\fP). +\&\fB.lzma\fP, \fB.tlz\fP oder \fB.lz\fP). .PP Nach erfolgreicher Kompression oder Dekompression der \fIDatei\fP kopiert \fBxz\fP Eigentümer, Gruppe, Zugriffsrechte, Zugriffszeit und Änderungszeit aus der @@ -97,7 +98,7 @@ Sobald die Zieldatei erfolgreich geschlossen wurde, wird die Ursprungs\-\fIDatei\fP entfernt. Dies wird durch die Option \fB\-\-keep\fP verhindert. Die Ursprungs\-\fIDatei\fP wird niemals entfernt, wenn die Ausgabe -in die Standardausgabe geschrieben wird. +in die Standardausgabe geschrieben wird oder falls ein Fehler auftritt. .PP Durch Senden der Signale \fBSIGINFO\fP oder \fBSIGUSR1\fP an den \fBxz\fP\-Prozess werden Fortschrittsinformationen in den Fehlerkanal der Standardausgabe @@ -107,7 +108,7 @@ . .SS Speicherbedarf In Abhängigkeit von den gewählten Kompressionseinstellungen bewegt sich der -Speicherverbrauch zwischen wenigen hundert Kilobyte und mehrere +Speicherverbrauch zwischen wenigen hundert Kilobyte und mehreren Gigabyte. Die Einstellungen bei der Kompression einer Datei bestimmen dabei den Speicherbedarf bei der Dekompression. Die Dekompression benötigt üblicherweise zwischen 5\ % und 20\ % des Speichers, der bei der Kompression @@ -227,6 +228,12 @@ .TP \fB\-k\fP, \fB\-\-keep\fP verhindert das Löschen der Eingabedateien. +.IP "" +Seit der \fBxz\fP\-Version 5.2.6 wird die Kompression oder Dekompression auch +dann ausgeführt, wenn die Eingabe ein symbolischer Link zu einer regulären +Datei ist, mehr als einen harten Link hat oder das »setuid«\-, »setgid«\- oder +»sticky«\-Bit gesetzt ist. Die genannten Bits werden nicht in die Zieldatei +kopiert. In früheren Versionen geschah dies nur mit \fB\-\-force\fP. .TP \fB\-f\fP, \fB\-\-force\fP Diese Option hat verschiedene Auswirkungen: @@ -285,7 +292,7 @@ angezeigt und die Datei übersprungen. .IP "" berücksichtigt bei der Dekompression zusätzlich zu Dateien mit den Suffixen -\&\fB.xz\fP, \fB.txz\fP, \fB.lzma\fP oder \fB.tlz\fP auch jene mit dem Suffix +\&\fB.xz\fP, \fB.txz\fP, \fB.lzma\fP, \fB.tlz\fP oder \fB.lz\fP auch jene mit dem Suffix \&\fI.suf\fP. Falls die Quelldatei das Suffix \fI.suf\fP hat, wird dieses entfernt und so der Name der Zieldatei abgeleitet. .IP "" @@ -328,6 +335,23 @@ akzeptiert nur \fB.lzma\fP\-Dateien bei der Dekompression. Der alternative Name \fBalone\fP dient der Abwärtskompatibilität zu den LZMA\-Dienstprogrammen. .TP +\fBlzip\fP +Akzeptiert nur \fB.lz\fP\-Dateien bei der Dekompression. Kompression wird nicht +unterstützt. +.IP "" +Das \fB.lz\fP\-Format wird in Version 0 und der unerweiterten Version 1 +unterstützt. Dateien der Version 0 wurden \fBlzip\fP 1.3 und älter +erstellt. Solche Dateien sind nicht sehr weit verbreitet, können aber in +Dateiarchiven gefunden werden, da einige Quellpakete in diesem Format +veröffentlicht wurden. Es ist auch möglich, dass Benutzer alte persönliche +Dateien in diesem Format haben. Die Dekompressionsunterstützung für das +Format der Version 0 wurde mit der Version 1.18 aus \fBlzip\fP entfernt. +.IP "" +\fBlzip\fP\-Versionen ab 1.4 erstellen Dateien im Format der Version 0. Die +Erweiterung »Sync Flush Marker« zur Formatversion 1 wurde in \fBlzip\fP 1.6 +hinzugefügt. Diese Erweiterung wird sehr selten verwendet und wird von \fBxz\fP +nicht unterstützt (die Eingabe wird als beschädigt erkannt). +.TP \fBraw\fP Komprimiert oder dekomprimiert einen Rohdatenstrom (ohne Header). Diese Option ist nur für fortgeschrittene Benutzer bestimmt. Zum Dekodieren von @@ -396,8 +420,7 @@ \fBgzip\fP(1) und \fBbzip2\fP(1). Die gewählten Kompressionseinstellungen bestimmen den Speicherbedarf bei der Dekompression, daher ist es auf älteren Systemen mit wenig Speicher bei einer zu hoch gewählten Voreinstellung -schwer, eine Datei zu dekomprimieren. Insbesondere \fBist es keine gute Idee, -blindlings \-9 für alles\fP zu verwenden, wie dies häufig mit \fBgzip\fP(1) und +schwer, eine Datei zu dekomprimieren. Insbesondere \fBist es keine gute Idee, blindlings \-9 für alles\fP zu verwenden, wie dies häufig mit \fBgzip\fP(1) und \fBbzip2\fP(1) gehandhabt wird. .RS .TP @@ -412,10 +435,10 @@ \fB\-4\fP … \fB\-6\fP Gute bis sehr gute Kompression, wobei der Speicherbedarf für die Dekompression selbst auf alten Systemen akzeptabel ist. \fB\-6\fP ist die -Voreinstellung, welche üblicherweise eine gute Wahl ist, zum Beispiel für -die Verteilung von Dateien, die selbst noch auf Systemen mit nur 16\ MiB -Arbeitsspeicher dekomprimiert werden müssen (\fB\-5e\fP oder \fB\-6e\fP sind -ebenfalls eine Überlegung wert. Siehe \fB\-\-extreme\fP). +Voreinstellung, welche üblicherweise eine gute Wahl für die Verteilung von +Dateien ist, die selbst noch auf Systemen mit nur 16\ MiB Arbeitsspeicher +dekomprimiert werden müssen (\fB\-5e\fP oder \fB\-6e\fP sind ebenfalls eine +Überlegung wert. Siehe \fB\-\-extreme\fP). .TP \fB\-7 … \-9\fP Ähnlich wie \fB\-6\fP, aber mit einem höheren Speicherbedarf für die Kompression @@ -437,7 +460,7 @@ tab(;); c c c c c n n n n n. -Voreinstellung;DictGröße;KompCPU;KompSpeicher;DekSpeicher +Voreinst.;Wörtb.Gr;KomprCPU;KompSpeich;DekompSpeich \-0;256 KiB;0;3 MiB;1 MiB \-1;1 MiB;1;9 MiB;2 MiB \-2;2 MiB;2;17 MiB;3 MiB @@ -455,26 +478,26 @@ Spaltenbeschreibungen: .RS .IP \(bu 3 -DictGröße ist die Größe des LZMA2\-Wörterbuchs. Es ist Speicherverschwendung, -ein Wörterbuch zu verwenden, das größer als die unkomprimierte Datei -ist. Daher ist es besser, die Voreinstellungen \fB\-7\fP … \fB\-9\fP zu vermeiden, -falls es keinen wirklichen Bedarf dafür gibt. Mit \fB\-6\fP und weniger wird -üblicherweise so wenig Speicher verschwendet, dass dies nicht ins Gewicht -fällt. +Wörtb.Größe ist die Größe des LZMA2\-Wörterbuchs. Es ist +Speicherverschwendung, ein Wörterbuch zu verwenden, das größer als die +unkomprimierte Datei ist. Daher ist es besser, die Voreinstellungen \fB\-7\fP … +\fB\-9\fP zu vermeiden, falls es keinen wirklichen Bedarf dafür gibt. Mit \fB\-6\fP +und weniger wird üblicherweise so wenig Speicher verschwendet, dass dies +nicht ins Gewicht fällt. .IP \(bu 3 -KompCPU ist eine vereinfachte Repräsentation der LZMA2\-Einstellungen, welche -die Kompressionsgeschwindigkeit beeinflussen. Die Wörterbuchgröße wirkt sich -ebenfalls auf die Geschwindigkeit aus. Während KompCPU für die Stufen \fB\-6\fP -bis \fB\-9\fP gleich ist, tendieren höhere Stufen dazu, etwas langsamer zu -sein. Um eine noch langsamere, aber möglicherweise bessere Kompression zu -erhalten, siehe \fB\-\-extreme\fP. +KomprCPU ist eine vereinfachte Repräsentation der LZMA2\-Einstellungen, +welche die Kompressionsgeschwindigkeit beeinflussen. Die Wörterbuchgröße +wirkt sich ebenfalls auf die Geschwindigkeit aus. Während KompCPU für die +Stufen \fB\-6\fP bis \fB\-9\fP gleich ist, tendieren höhere Stufen dazu, etwas +langsamer zu sein. Um eine noch langsamere, aber möglicherweise bessere +Kompression zu erhalten, siehe \fB\-\-extreme\fP. .IP \(bu 3 -KompSpeicher enthält den Speicherbedarf des Kompressors im +KompSpeich enthält den Speicherbedarf des Kompressors im Einzel\-Thread\-Modus. Dieser kann zwischen den \fBxz\fP\-Versionen leicht variieren. Der Speicherbedarf einiger der zukünftigen Multithread\-Modi kann dramatisch höher sein als im Einzel\-Thread\-Modus. .IP \(bu 3 -DekSpeicher enthält den Speicherbedarf für die Dekompression. Das bedeutet, +DekompSpeich enthält den Speicherbedarf für die Dekompression. Das bedeutet, dass die Kompressionseinstellungen den Speicherbedarf bei der Dekompression bestimmen. Der exakte Speicherbedarf bei der Dekompression ist geringfügig größer als die Größe des LZMA2\-Wörterbuchs, aber die Werte in der Tabelle @@ -487,7 +510,7 @@ besseres Kompressionsverhältnis zu erreichen, das aber in ungünstigen Fällen auch schlechter werden kann. Der Speicherverbrauch bei der Dekompression wird dabei nicht beeinflusst, aber der Speicherverbrauch der Kompression -steigt in der Voreinstellungsstufen \fB\-0\fP bis \fB\-3\fP geringfügig an. +steigt in den Voreinstellungsstufen \fB\-0\fP bis \fB\-3\fP geringfügig an. .IP "" Da es zwei Voreinstellungen mit den Wörterbuchgrößen 4\ MiB und 8\ MiB gibt, verwenden die Voreinstellungsstufen \fB\-3e\fP und \fB\-5e\fP etwas schnellere @@ -500,7 +523,7 @@ tab(;); c c c c c n n n n n. -Voreinstellung;DictGröße;KompCPU;KompSpeicher;DekSpeicher +Voreinst.;Wörtb.Gr;KomprCPU;KompSpeich;DekompSpeich \-0e;256 KiB;8;4 MiB;1 MiB \-1e;1 MiB;8;13 MiB;2 MiB \-2e;2 MiB;8;25 MiB;3 MiB @@ -608,14 +631,23 @@ legt eine Grenze für die Speichernutzung bei der Kompression fest. Wenn diese Option mehrmals angegeben wird, ist die zuletzt angegebene wirksam. .IP "" -Falls die Kompressionseinstellungen die \fIGrenze\fP überschreiten, passt \fBxz\fP -die Einstellungen nach unten an, so dass die Grenze nicht mehr überschritten -wird und zeigt einen Hinweis an, dass eine automatische Anpassung -vorgenommen wurde. Solche Anpassungen erfolgen nicht, wenn mit -\fB\-\-format=raw\fP komprimiert wird oder wenn \fB\-\-no\-adjust\fP angegeben -wurde. In diesen Fällen wird eine Fehlermeldung mit dem Exit\-Status 1 -ausgegeben und \fBxz\fP mit dem Exit\-Status 1 beendet. +Falls die Kompressionseinstellungen die \fIGrenze\fP überschreiten, versucht +\fBxz\fP, die Einstellungen nach unten anzupassen, so dass die Grenze nicht +mehr überschritten wird und zeigt einen Hinweis an, dass eine automatische +Anpassung vorgenommen wurde. Die Anpassungen werden in folgender Reihenfolge +angewendet: Reduzierung der Anzahl der Threads, Wechsel in den +Einzelthread\-Modus, falls sogar ein einziger Thread im Multithread\-Modus die +\fIGrenze\fP überschreitet, und schlussendlich die Reduzierung der Größe des +LZMA2\-Wörterbuchs. .IP "" +Beim Komprimieren mit \fB\-\-format=raw\fP oder falls \fB\-\-no\-adjust\fP angegeben +wurde, wird nur die Anzahl der Threads reduziert, da nur so die komprimierte +Ausgabe nicht beeinflusst wird. +.IP "" +Falls die \fIGrenze\fP nicht anhand der vorstehend beschriebenen Anpassungen +gesetzt werden kann, wird ein Fehler angezeigt und \fBxz\fP wird mit dem +Exit\-Status 1 beendet. +.IP "" Die \fIGrenze\fP kann auf verschiedene Arten angegeben werden: .RS .IP \(bu 3 @@ -631,17 +663,15 @@ .IP \(bu 3 Mit \fB0\fP kann die \fIGrenze\fP auf den Standardwert zurückgesetzt werden. Dies ist gegenwärtig gleichbedeutend mit dem Setzen der \fIGrenze\fP auf \fBmax\fP -(keine Speicherbegrenzung). Sobald die Unterstützung für Multi\-Threading -implementiert wurde, kann es im Multi\-Thread\-Fall einen Unterschied zwischen -\fB0\fP und \fBmax\fP geben, daher wird empfohlen, \fB0\fP anstelle von \fBmax\fP zu -verwenden, bis die Einzelheiten hierzu geklärt sind. +(keine Speicherbegrenzung). .RE .IP "" Für die 32\-Bit\-Version von \fBxz\fP gibt es einen Spezialfall: Falls die Grenze -über \fB4020\ MiB\fP liegt, wird die \fIGrenze\fP auf \fB4020\ MiB\fP gesetzt (die -Werte \fB0\fP und \fBmax\fP werden hiervon nicht beeinflusst; für die -Dekompression gibt es keine vergleichbare Funktion). Dies kann hilfreich -sein, wenn ein 32\-Bit\-Executable auf einen 4\ GiB großen Adressraum +über \fB4020\ MiB\fP liegt, wird die \fIGrenze\fP auf \fB4020\ MiB\fP gesetzt. Auf +MIPS32 wird stattdessen \fB2000\ MB\fP verwendet (die Werte \fB0\fP und \fBmax\fP +werden hiervon nicht beeinflusst; für die Dekompression gibt es keine +vergleichbare Funktion). Dies kann hilfreich sein, wenn ein +32\-Bit\-Executable auf einen 4\ GiB großen Adressraum (2 GiB auf MIPS32) zugreifen kann, wobei wir hoffen wollen, dass es in anderen Situationen keine negativen Effekte hat. .IP "" @@ -654,37 +684,99 @@ die Dekompression wird fehlschlagen. Siehe \fB\-\-memlimit\-compress=\fP\fIGrenze\fP zu möglichen Wegen, die \fIGrenze\fP anzugeben. .TP +\fB\-\-memlimit\-mt\-decompress=\fP\fIGrenze\fP +legt eine Begrenzung des Speicherverbrauchs für Multithread\-Dekompression +fest. Dies beeinflusst lediglich die Anzahl der Threads; \fBxz\fP wird dadurch +niemals die Dekompression einer Datei verweigern. Falls die \fIGrenze\fP für +jegliches Multithreading zu niedrig ist, wird sie ignoriert und \fBxz\fP setzt +im Einzelthread\-modus fort. Beachten Sie auch, dass bei der Verwendung von +\fB\-\-memlimit\-decompress\fP dies stets sowohl auf den Einzelthread\-als auch auf +den Multithread\-Modus angewendet wird und so die effektive \fIGrenze\fP für den +Multithread\-Modus niemals höher sein wird als die mit +\fB\-\-memlimit\-decompress\fP gesetzte Grenze. +.IP "" +Im Gegensatz zu anderen Optionen zur Begrenzung des Speicherverbrauchs hat +\fB\-\-memlimit\-mt\-decompress=\fP\fIGrenze\fP eine systemspezifisch vorgegebene +\fIGrenze\fP. Mit \fBxz \-\-info\-memory\fP können Sie deren aktuellen Wert anzeigen +lassen. +.IP "" +Diese Option und ihr Standardwert existieren, weil die unbegrenzte +threadbezogene Dekompression bei einigen Eingabedateien zu unglaublich +großem Speicherverbrauch führen würde. Falls die vorgegebene \fIGrenze\fP auf +Ihrem System zu niedrig ist, können Sie die \fIGrenze\fP durchaus erhöhen, aber +setzen Sie sie niemals auf einen Wert größer als die Menge des nutzbaren +Speichers, da \fBxz\fP bei entsprechenden Eingabedateien versuchen wird, diese +Menge an Speicher auch bei einer geringen Anzahl von Threads zu +verwnden. Speichermangel oder Auslagerung verbessern die +Dekomprimierungsleistung nicht. +.IP "" +Siehe \fB\-\-memlimit\-compress=\fP\fIGrenze\fP für mögliche Wege zur Angabe der +\fIGrenze\fP. Sezen der \fIGrenze\fP auf \fB0\fP setzt die \fIGrenze\fP auf den +vorgegebenen systemspezifischen Wert zurück. +.IP "" +.TP \fB\-M\fP \fIGrenze\fP, \fB\-\-memlimit=\fP\fIGrenze\fP, \fB\-\-memory=\fP\fIGrenze\fP -Dies ist gleichbedeutend mit \fB\-\-memlimit\-compress=\fP\fIGrenze -\fP\fB\-\-memlimit\-decompress=\fP\fIGrenze\fP. +Dies ist gleichbedeutend mit \fB\-\-memlimit\-compress=\fP\fIGrenze\fP +\fB\-\-memlimit\-decompress=\fP\fIGrenze\fP \fB\-\-memlimit\-mt\-decompress=\fP\fIGrenze\fP. .TP \fB\-\-no\-adjust\fP -zeigt einen Fehler an und bricht die Ausführung ab, falls die -Kompressionseinstellungen die Begrenzung der Speichernutzung -überschreiten. Standardmäßig werden die Einstellungen nach unten korrigiert, -so dass diese Grenze nicht überschritten wird. Bei der Erzeugung von -Rohdatenströmen (\fB\-\-format=raw\fP) ist die automatische Korrektur stets -deaktiviert. +zeigt einen Fehler an und beendet, falls die Grenze der Speichernutzung +nicht ohne Änderung der Einstellungen, welche die komprimierte Ausgabe +beeinflussen, berücksichtigt werden kann. Das bedeutet, dass \fBxz\fP daran +gehindert wird, den Encoder vom Multithread\-Modus in den Einzelthread\-Modus +zu versetzen und die Größe des LZMA2\-Wörterbuchs zu reduzieren. Allerdings +kann bei Verwendung dieser Option dennoch die Anzahl der Threads reduziert +werden, um die Grenze der Speichernutzung zu halten, sofern dies die +komprimierte Ausgabe nicht beeinflusst. +.IP "" +Die automatische Anpassung ist beim Erzeugen von Rohdatenströmen +(\fB\-\-format=raw\fP) immer deaktiviert. .TP \fB\-T\fP \fIThreads\fP, \fB\-\-threads=\fP\fIThreads\fP gibt die Anzahl der zu verwendenden Arbeits\-Threads an. Wenn Sie \fIThreads\fP -auf einen speziellen Wert \fB0\fP setzen, verwendet \fBxz\fP so viele Threads, wie -Prozessorkerne im System verfügbar sind. Die tatsächliche Anzahl kann -geringer sein als die angegebenen \fIThreads\fP, wenn die Eingabedatei nicht -groß genug für Threading mit den gegebenen Einstellungen ist oder wenn mehr -Threads die Speicherbegrenzung übersteigen würden. +auf einen speziellen Wert \fB0\fP setzen, verwendet \fBxz\fP maximal so viele +Threads, wie der/die Prozessor(en) im System untestützen. Die tatsächliche +Anzahl kann geringer sein als die angegebenen \fIThreads\fP, wenn die +Eingabedatei nicht groß genug für Threading mit den gegebenen Einstellungen +ist oder wenn mehr Threads die Speicherbegrenzung übersteigen würden. .IP "" +Die Multithread\- bzw. Einzelthread\-Kompressoren erzeugen unterschiedliche +Ausgaben. Der Einzelthread\-Kompressor erzeugt die geringste Dateigröße, aber +nur die Ausgabe des Multithread\-Kompressors kann mit mehreren Threads wieder +dekomprimiert werden. Das Setzen der Anzahl der \fIThreads\fP auf \fB1\fP wird den +Einzelthread\-Modus verwenden. Das Setzen der Anzahl der \fIThreads\fP auf +einen anderen Wert einschließlich \fB0\fP verwendet den Multithread\-Kompressor, +und zwar sogar dann, wenn das System nur einen einzigen Hardware\-Thread +unterstützt (\fBxz\fP 5.2.x verwendete in diesem Fall noch den +Einzelthread\-Modus). +.IP "" +Um den Multithread\-Modus mit nur einem einzigen Thread zu verwenden, setzen +Sie die Anzahl der \fIThreads\fP auf \fB+1\fP. Das Präfix \fB+\fP hat mit Werten +verschieden von \fB1\fP keinen Effekt. Eine Begrenzung des Speicherverbrauchs +kann \fBxz\fP dennoch veranlassen, den Einzelthread\-Modus zu verwenden, außer +wenn \fB\-\-no\-adjust\fP verwendet wird. Die Unterstützung für das Präfix \fB+\fP +wurde in \fBxz\fP 5.4.0 hinzugefügt. +.IP "" +Falls das automatische Setzen der Anzahl der Threads angefordert und keine +Speicherbegrenzung angegeben wurde, dann wird eine systemspezifisch +vorgegebene weiche Grenze verwendet, um eventuell die Anzahl der Threads zu +begrenzen. Es ist eine weiche Grenze im Sinne davon, dass sie ignoriert +wird, falls die Anzahl der Threads 1 ist; daher wird eine weiche Grenze +\fBxz\fP niemals an der Kompression oder Dekompression hindern. Diese +vorgegebene weiche Grenze veranlasst \fBxz\fP nicht, vom Multithread\-Modus in +den Einzelthread\-Modus zu wechseln. Die aktiven Grenzen können Sie mit dem +Befehl \fBxz \-\-info\-memory\fP anzeigen lassen. +.IP "" Die gegenwärtig einzige Threading\-Methode teilt die Eingabe in Blöcke und komprimiert diese unabhängig voneinander. Die vorgegebene Blockgröße ist von der Kompressionsstufe abhängig und kann mit der Option \fB\-\-block\-size=\fP\fIGröße\fP außer Kraft gesetzt werden. .IP "" -Eine thread\-basierte Dekompression wurde bislang noch nicht -implementiert. Sie wird nur bei Dateien funktionieren, die mehrere Blöcke -mit Größeninformationen in deren Headern enthalten. Alle im -Multi\-Thread\-Modus komprimierten Dateien erfüllen diese Bedingung, im -Einzel\-Thread\-Modus komprimierte Dateien dagegen nicht, selbst wenn -\fB\-\-block\-size=\fP\fIGröße\fP verwendet wird. +Eine thread\-basierte Dekompression wird nur bei Dateien funktionieren, die +mehrere Blöcke mit Größeninformationen in deren Headern enthalten. Alle im +Multi\-Thread\-Modus komprimierten Dateien, die groß genug sind, erfüllen +diese Bedingung, im Einzel\-Thread\-Modus komprimierte Dateien dagegen nicht, +selbst wenn \fB\-\-block\-size=\fP\fIGröße\fP verwendet wurde. . .SS "Benutzerdefinierte Filterketten für die Kompression" Eine benutzerdefinierte Filterkette ermöglicht die Angabe detaillierter @@ -723,8 +815,7 @@ ignoriert. Jede Option hat einen Standardwert, daher brauchen Sie nur jene anzugeben, die Sie ändern wollen. .PP -Um die gesamte Filterkette und die \fIOptionen\fP anzuzeigen, rufen Sie \fBxz -\-vv\fP auf (was gleichbedeutend mit der zweimaligen Angabe von \fB\-\-verbose\fP +Um die gesamte Filterkette und die \fIOptionen\fP anzuzeigen, rufen Sie \fBxz \-vv\fP auf (was gleichbedeutend mit der zweimaligen Angabe von \fB\-\-verbose\fP ist). Dies funktioniert auch zum Betrachten der von den Voreinstellungen verwendeten Filterkettenoptionen. .TP @@ -939,14 +1030,16 @@ \fB\-\-x86\fP[\fB=\fP\fIOptionen\fP] .PD 0 .TP -\fB\-\-powerpc\fP[\fB=\fP\fIOptionen\fP] -.TP -\fB\-\-ia64\fP[\fB=\fP\fIOptionen\fP] -.TP \fB\-\-arm\fP[\fB=\fP\fIOptionen\fP] .TP \fB\-\-armthumb\fP[\fB=\fP\fIOptionen\fP] .TP +\fB\-\-arm64\fP[\fB=\fP\fIOptionen\fP] +.TP +\fB\-\-powerpc\fP[\fB=\fP\fIOptionen\fP] +.TP +\fB\-\-ia64\fP[\fB=\fP\fIOptionen\fP] +.TP \fB\-\-sparc\fP[\fB=\fP\fIOptionen\fP] .PD fügt ein »Branch/Call/Jump«\-(BCJ\-)Filter zur Filterkette hinzu. Diese Filter @@ -958,22 +1051,9 @@ \&\fB.xz\fP\-Datei zu erstellen. Die BCJ\-Filter sind immer reversibel, daher verursacht die Anwendung eines BCJ\-Filters auf den falschen Datentyp keinen Datenverlust, wobei aber das Kompressionsverhältnis etwas schlechter werden -könnte. +könnte. Die BCJ\-Filter sind sehr schnell und verbrauchen nur wenig mehr +Speicher. .IP "" -Es ist in Ordnung, einen BCJ\-Filter auf eine gesamte Binärdatei anzuwenden; -es ist nicht nötig, dies nur auf den binären Bereich zu beschränken. Die -Anwendung eines BCJ\-Filters auf ein Archiv, das sowohl binäre als auch -nicht\-binäre Dateien enthält, kann gute Ergebnisse liefern, muss es aber -nicht. Daher ist es generell nicht gut, einen BCJ\-Filter blindlings -anzuwenden, wenn Sie Binärpakete zwecks Weitergabe komprimieren wollen. -.IP "" -Diese BCJ\-Filter sind sehr schnell und erhöhen den Speicherbedarf nur -unerheblich. Wenn ein BCJ\-Filter das Kompressionsverhältnis einer Datei -verbessert, kann er auch gleichzeitig die Dekompressionsgeschwindigkeit -verbessern. Das kommt daher, dass auf der gleichen Hardware die -Dekompressionsgeschwindigkeit von LZMA2 ungefähr eine feste Anzahl Byte an -komprimierten Daten pro Sekunde ist. -.IP "" Diese BCJ\-Filter haben bekannte Probleme mit dem Kompressionsverhältnis: .RS .IP \(bu 3 @@ -983,19 +1063,19 @@ dennoch die Adressumwandlung aus, wodurch die Kompression bei diesen Dateien schlechter wird. .IP \(bu 3 -Bei der Anwendung eines BCJ\-Filters auf ein Archiv, das mehrere ähnliche -Binärdateien enthält, kann das Kompressionsverhältnis schlechter sein als -ohne BCJ\-Filter. Das kommt daher, weil der BCJ\-Filter die Grenzen der -Binärdateien nicht erkennt und den Zähler der Adressumwandlung für jede -Binärdatei nicht zurücksetzt. +Falls ein BCJ\-Filter auf ein Archiv angewendet wird, ist es möglich, dass +das Kompressionsverhältnis schlechter als ohne Filter wird. Falls es +beispielsweise ähnliche oder sogar identische ausführbare Dateien gibt, dann +werden diese durch die Filterung wahrscheinlich »unähnlicher« und +verschlechtern dadurch das Kompressionsverhältnis. Der Inhalt +nicht\-ausführbarer Dateien im gleichen Archiv kann sich ebenfalls darauf +auswirken. In der Praxis werden Sie durch Versuche mit oder ohne BCJ\-Filter +selbst herausfinden müssen, was situationsbezogen besser ist. .RE .IP "" -Beide der oben genannten Probleme werden in der Zukunft in einem neuen -Filter nicht mehr auftreten. Die alten BCJ\-Filter werden noch in -eingebetteten Systemen von Nutzen sein, weil der Dekoder des neuen Filters -größer sein und mehr Speicher beanspruchen wird. -.IP "" -Verschiedene Befehlssätze haben unterschiedliche Ausrichtungen: +Verschiedene Befehlssätze haben unterschiedliche Ausrichtungen: Die +ausführbare Datei muss in den Eingabedateien einem Vielfachen dieses Wertes +entsprechen, damit dieser Filter funktioniert. .RS .RS .PP @@ -1005,11 +1085,12 @@ l n l. Filter;Ausrichtung;Hinweise x86;1;32\-Bit oder 64\-Bit x86 +ARM;4; +ARM\-Thumb;2; +ARM64;4;4096\-Byte\-Ausrichtung ist optimal PowerPC;4;Nur Big Endian -ARM;4;Nur Little Endian -ARM\-Thumb;2;Nur Little Endian -IA\-64;16;Big oder Little Endian -SPARC;4;Big oder Little Endian +IA\-64;16;Itanium +SPARC;4; .TE .RE .RE @@ -1018,9 +1099,10 @@ das Kompressionsverhältnis dadurch etwas verbessert werden, dass die LZMA2\-Optionen so gesetzt werden, dass sie der Ausrichtung des gewählten BCJ\-Filters entsprechen. Zum Beispiel ist es beim IA\-64\-Filter eine gute -Wahl, \fBpb=4\fP mit LZMA2 zu setzen (2^4=16). Der x86\-Filter bildet dabei eine -Ausnahme; Sie sollten bei der für LZMA2 voreingestellten 4\-Byte\-Ausrichtung -bleiben, wenn Sie x86\-Binärdateien komprimieren. +Wahl, \fBpb=4\fP oder sogar \fBpb=4,lp=4,lc=0\fP mit LZMA2 zu setzen (2^4=16). Der +x86\-Filter bildet dabei eine Ausnahme; Sie sollten bei der für LZMA2 +voreingestellten 4\-Byte\-Ausrichtung bleiben, wenn Sie x86\-Binärdateien +komprimieren. .IP "" Alle BCJ\-Filter unterstützen die gleichen \fIOptionen\fP: .RS @@ -1129,8 +1211,9 @@ .TP \fB\-\-info\-memory\fP zeigt in einem menschenlesbaren Format an, wieviel physischen Speicher (RAM) -das System nach Annahme von \fBxz\fP hat, sowie die Speicherbedarfsbegrenzung -für Kompression und Dekompression, und beendet das Programm erfolgreich. +und wie viele Prozessor\-Threads das System nach Annahme von \fBxz\fP hat, sowie +die Speicherbedarfsbegrenzung für Kompression und Dekompression, und beendet +das Programm erfolgreich. .TP \fB\-h\fP, \fB\-\-help\fP zeigt eine Hilfemeldung mit den am häufigsten genutzten Optionen an und @@ -1184,15 +1267,33 @@ \fBxz \-\-robot \-\-info\-memory\fP gibt eine einzelne Zeile mit drei durch Tabulatoren getrennten Spalten aus: .IP 1. 4 -Gesamter physischer Speicher (RAM) in Byte +Gesamter physischer Speicher (RAM) in Byte. .IP 2. 4 -Speicherbedarfsbegrenzung für die Kompression in Byte. Ein spezieller Wert -von Null bezeichnet die Standardeinstellung, die im Einzelthread\-Modus -bedeutet, dass keine Begrenzung vorhanden ist. +Speicherbedarfsbegrenzung für die Kompression in Byte +(\fB\-\-memlimit\-compress\fP). Ein spezieller Wert von \fB0\fP bezeichnet die +Standardeinstellung, die im Einzelthread\-Modus bedeutet, dass keine +Begrenzung vorhanden ist. .IP 3. 4 -Speicherbedarfsbegrenzung für die Dekompression in Byte. Ein spezieller Wert -von Null bezeichnet die Standardeinstellung, die im Einzelthread\-Modus -bedeutet, dass keine Begrenzung vorhanden ist. +Speicherbedarfsbegrenzung für die Dekompression in Byte +(\fB\-\-memlimit\-decompress\fP). Ein spezieller Wert von \fB0\fP bezeichnet die +Standardeinstellung, die im Einzelthread\-Modus bedeutet, dass keine +Begrenzung vorhanden ist. +.IP 4. 4 +Seit \fBxz\fP 5.3.4alpha: Die Speichernutzung für Multithread\-Dekompression in +Byte (\fB\-\-memlimit\-mt\-decompress\fP). Dies ist niemals \fB0\fP, da ein +systemspezifischer Vorgabewert (gezeigt in Spalte 5) verwendet wird, falls +keine Grenze ausdrücklich angegeben wurde. Dies ist außerdem niemals größer +als der Wert in in Spalte 3, selbst wenn mit \fB\-\-memlimit\-mt\-decompress\fP ein +größerer Wert angegeben wurde. +.IP 5. 4 +Seit \fBxz\fP 5.3.4alpha: Eine systemspezifisch vorgegebene Begrenzung des +Speicherverbrauchs, die zur Begrenzung der Anzahl der Threads beim +Komprimieren mit automatischer Anzahl der Threads (\fB\-\-threads=0\fP) und wenn +keine Speicherbedarfsbegrenzung angegeben wurde (\fB\-\-memlimit\-compress\fP) +verwendet wird. Dies wird auch als Standardwert für +\fB\-\-memlimit\-mt\-decompress\fP verwendet. +.IP 6. 4 +Seit \fBxz\fP 5.3.4alpha: Anzahl der verfügbaren Prozessorthreads. .PP In der Zukunft könnte die Ausgabe von \fBxz \-\-robot \-\-info\-memory\fP weitere Spalten enthalten, aber niemals mehr als eine einzelne Zeile. @@ -1429,9 +1530,9 @@ .TP \fBXZ_OPT\fP Dies dient der Übergabe von Optionen an \fBxz\fP, wenn es nicht möglich ist, -die Optionen direkt in der Befehlszeile von \fBxz\fP zu übergeben. Dies ist -beispielsweise der Fall, wenn \fBxz\fP von einem Skript oder Dienstprogramm -ausgeführt wird, zum Beispiel GNU \fBtar\fP(1): +die Optionen direkt in der Befehlszeile von \fBxz\fP zu übergeben. Dies ist der +Fall, wenn \fBxz\fP von einem Skript oder Dienstprogramm ausgeführt wird, zum +Beispiel GNU \fBtar\fP(1): .RS .RS .PP @@ -1449,8 +1550,7 @@ .RS .PP .nf -\f(CWXZ_OPT=${XZ_OPT\-"\-7e"} -export XZ_OPT\fP +\f(CWXZ_OPT=${XZ_OPT\-"\-7e"} export XZ_OPT\fP .fi .RE .RE @@ -1623,8 +1723,8 @@ .RE .PP \fIbaz.tar.xz\fP mit der Voreinstellung \fB\-4e\fP (\fB\-4 \-\-extreme\fP) erzeugen, was -langsamer ist als beispielsweise die Vorgabe \fB\-6\fP, aber weniger Speicher -für Kompression und Dekompression benötigt (48\ MiB beziehungsweise 5\ MiB): +langsamer ist als die Vorgabe \fB\-6\fP, aber weniger Speicher für Kompression +und Dekompression benötigt (48\ MiB beziehungsweise 5\ MiB): .RS .PP .nf @@ -1647,8 +1747,7 @@ .RS .PP .nf -\f(CWfind . \-type f \e! \-name '*.xz' \-print0 \e - | xargs \-0r \-P4 \-n16 xz \-T1\fP +\f(CWfind . \-type f \e! \-name '*.xz' \-print0 \e | xargs \-0r \-P4 \-n16 xz \-T1\fP .fi .RE .PP @@ -1680,11 +1779,7 @@ .RS .PP .nf -\f(CWif ! eval "$(xz \-\-robot \-\-version 2> /dev/null)" || - [ "$XZ_VERSION" \-lt 50000002 ]; then - echo "Ihre Version von Xz ist zu alt." -fi -unset XZ_VERSION LIBLZMA_VERSION\fP +\f(CWif ! eval "$(xz \-\-robot \-\-version 2> /dev/null)" || [ "$XZ_VERSION" \-lt 50000002 ]; then echo "Ihre Version von Xz ist zu alt." fi unset XZ_VERSION LIBLZMA_VERSION\fP .fi .RE .PP @@ -1693,12 +1788,7 @@ .RS .PP .nf -\f(CWNEWLIM=$((123 << 20)) # 123 MiB -OLDLIM=$(xz \-\-robot \-\-info\-memory | cut \-f3) -if [ $OLDLIM \-eq 0 \-o $OLDLIM \-gt $NEWLIM ]; then - XZ_OPT="$XZ_OPT \-\-memlimit\-decompress=$NEWLIM" - export XZ_OPT -fi\fP +\f(CWNEWLIM=$((123 << 20))\ \ # 123 MiB OLDLIM=$(xz \-\-robot \-\-info\-memory | cut \-f3) if [ $OLDLIM \-eq 0 \-o $OLDLIM \-gt $NEWLIM ]; then XZ_OPT="$XZ_OPT \-\-memlimit\-decompress=$NEWLIM" export XZ_OPT fi\fP .fi .RE . @@ -1717,7 +1807,7 @@ tab(;); c c n n. -Voreinstellung;KompCPU +Voreinst.;KomprCPU \-0;0 \-1;1 \-2;2 @@ -1845,4 +1935,4 @@ .br XZ Embedded: .br -LZMA\-SDK: +LZMA SDK: diff -ur xz-5.2.5/po4a/man/de/xzdec.1 xz-5.4.3/po4a/man/de/xzdec.1 --- xz-5.2.5/po4a/man/de/xzdec.1 2020-03-17 17:31:37 +++ xz-5.4.3/po4a/man/de/xzdec.1 2023-05-04 17:33:07 @@ -19,8 +19,7 @@ .SH BESCHREIBUNG \fBxzdec\fP ist ein auf Liblzma basierendes Nur\-Dekompressionswerkzeug für \&\fB.xz\fP\-Dateien (und \fBnur\fP für \fB.xz\fP\-Dateien). \fBxzdec\fP ist als direkter -Ersatz für \fBxz\fP(1) in jenen Situationen konzipiert, wo ein Skript \fBxz -\-\-decompress \-\-stdout\fP (und eventuelle einige andere höufig genutzte +Ersatz für \fBxz\fP(1) in jenen Situationen konzipiert, wo ein Skript \fBxz \-\-decompress \-\-stdout\fP (und eventuelle einige andere höufig genutzte Optionen) zum Dekomprimieren von \fB.xz\fP\-Dateien. \fBlzmadec\fP ist weitgehend identisch zu \fBxzdec\fP, mit der Ausnahme, dass \fBlzmadec\fP \fB.lzma\fP\-Dateien anstelle von \fB.xz\fP\-Dateien unterstützt. diff -ur xz-5.2.5/po4a/man/de/xzdiff.1 xz-5.4.3/po4a/man/de/xzdiff.1 --- xz-5.2.5/po4a/man/de/xzdiff.1 2020-03-17 17:31:37 +++ xz-5.4.3/po4a/man/de/xzdiff.1 2023-05-04 17:33:07 @@ -11,7 +11,7 @@ .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH XZDIFF 1 "19. März 2011" Tukaani XZ\-Dienstprogramme +.TH XZDIFF 1 "4. Juni 2021" Tukaani XZ\-Dienstprogramme .SH BEZEICHNUNG xzcmp, xzdiff, lzcmp, lzdiff \- komprimierte Dateien vergleichen .SH ÜBERSICHT @@ -25,20 +25,21 @@ .SH BESCHREIBUNG Die Dienstprogramme \fBxzcmp\fP und \fBxzdiff\fP führen die Programme \fBcmp\fP(1) beziehungsweise \fBdiff\fP(1) mit Dateien aus, die mittels \fBxz\fP(1), -\fBlzma\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1) oder \fBlzop\fP(1) komprimiert wurden. Alle -angegebenen Optionen werden direkt an \fBcmp\fP(1) oder \fBdiff\fP(1) +\fBlzma\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1) oder \fBzstd\fP komprimiert +wurden. Alle angegebenen Optionen werden direkt an \fBcmp\fP(1) oder \fBdiff\fP(1) übergeben. Wird nur eine Datei angegeben, wird diese \fIDatei1\fP (die eine Endung entsprechend eines der unterstützten Kompressionsformate haben muss) mit der \fIDatei1\fP verglichen, von der die Kompressionsformat\-Endung entfernt wird. Werden zwei Dateien angegeben, dann werden deren Inhalte (falls nötig, unkomprimiert) an \fBcmp\fP(1) oder \fBdiff\fP(1) weitergeleitet. Der Exit\-Status -von \fBcmp\fP(1) oder \fBdiff\fP(1) wird dabei bewahrt. +von \fBcmp\fP(1) oder \fBdiff\fP(1) wird dabei bewahrt (sofern kein +Dekompressionsfehler auftrat; in diesem Fall ist der Exit\-Status 2). .PP Die Namen \fBlzcmp\fP und \fBlzdiff\fP dienen der Abwärtskompatibilität zu den LZMA\-Dienstprogrammen. .SH "SIEHE AUCH" \fBcmp\fP(1), \fBdiff\fP(1), \fBxz\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1), -\fBzdiff\fP(1) +\fBzstd\fP(1), \fBzdiff\fP(1) .SH FEHLER Die Meldungen der Programme \fBcmp\fP(1) oder \fBdiff\fP(1) können auf temporäre Dateinamen verweisen anstatt auf die tatsächlich angegebenen Dateinamen. diff -ur xz-5.2.5/po4a/man/de/xzgrep.1 xz-5.4.3/po4a/man/de/xzgrep.1 --- xz-5.2.5/po4a/man/de/xzgrep.1 2020-03-17 17:31:37 +++ xz-5.4.3/po4a/man/de/xzgrep.1 2023-05-04 17:33:07 @@ -11,11 +11,11 @@ .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH XZGREP 1 "19. März 2011" Tukaani XZ\-Dienstprogramme +.TH XZGREP 1 "19. Juli 2022" Tukaani XZ\-Dienstprogramme .SH BEZEICHNUNG xzgrep \- komprimierte Dateien nach einem regulären Ausdruck durchsuchen .SH ÜBERSICHT -\fBxzgrep\fP [\fIgrep\-Optionen\fP] [\fB\-e\fP] \fIMuster\fP \fIDateiname\fP … +\fBxzgrep\fP [\fIgrep_Optionen\fP] [\fB\-e\fP] \fIMuster\fP [\fIDatei …\fP] .br \fBxzegrep\fP … .br @@ -28,24 +28,37 @@ \fBlzfgrep\fP … .SH BESCHREIBUNG \fBxzgrep\fP wendet \fBgrep\fP(1) auf \fIDateien\fP an, die entweder unkomprimiert -oder mit \fBxz\fP(1), \fBlzma\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1) oder \fBlzop\fP(1) -komprimiert sein können. Alle angegebenen Optionen werden direkt an +oder mit \fBxz\fP(1), \fBlzma\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1) oder +\fBzstd\fP komprimiert sein können. Alle angegebenen Optionen werden direkt an \fBgrep\fP(1) übergeben. .PP Wenn keine \fIDatei\fP angegeben ist, wird die Standardeingabe dekomprimiert (falls nötig) und an \fBgrep\fP übergeben. Beim Lesen aus der Standardeingabe -keine Dateien unterstützt, die mit \fBgzip\fP(1), \fBbzip2\fP(1) oder \fBlzop\fP(1) -komprimiert sind. +keine Dateien unterstützt, die mit \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1) oder +\fBzstd\fP komprimiert sind. .PP Wenn \fBxzgrep\fP als \fBxzegrep\fP oder \fBxzfgrep\fP aufgerufen wird, dann wird -\fBegrep\fP(1) oder \fBfgrep\fP(1) anstelle von \fBgrep\fP(1) verwendet. Genauso +\fBgrep \-E\fP oder \fBgrep \-F\fP anstelle von \fBgrep\fP(1) verwendet. Genauso verhalten sich die Befehle \fBlzgrep\fP, \fBlzegrep\fP und \fBlzfgrep\fP, die die Abwärtskompatibilität zu den LZMA\-Dienstprogrammen gewährleisten. -.PP +.SH EXIT\-STATUS +.TP +0 +In mindestens einer der Eingabedateien wurde mindestens ein Treffer +gefunden. Es sind keine Fehler aufgetreten. +.TP +1 +In keiner der Eingabedateien wurde ein Treffer gefunden. Es sind keine +Fehler aufgetreten. +.TP +>1 +Ein oder mehrere Fehler sind aufgetreten. Es ist unbekannt, ob Treffer +gefunden wurden. .SH UMGEBUNGSVARIABLEN .TP \fBGREP\fP Wenn die Umgebungsvariable \fBGREP\fP gesetzt ist, verwendet \fBxzgrep\fP deren -Inhalt anstelle von \fBgrep\fP(1), \fBegrep\fP(1) oder \fBfgrep\fP(1). +Inhalt anstelle von \fBgrep\fP(1), \fBgrep \-E\fP oder \fBgrep \-F\fP. .SH "SIEHE AUCH" -\fBgrep\fP(1), \fBxz\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1), \fBzgrep\fP(1) +\fBgrep\fP(1), \fBxz\fP(1), \fBgzip\fP(1), \fBbzip2\fP(1), \fBlzop\fP(1), \fBzstd\fP(1), +\fBzgrep\fP(1) Only in xz-5.4.3/po4a/man: fr Only in xz-5.4.3/po4a/man: ko Only in xz-5.4.3/po4a/man: pt_BR Only in xz-5.4.3/po4a/man: ro Only in xz-5.4.3/po4a/man: uk diff -ur xz-5.2.5/po4a/po4a.conf xz-5.4.3/po4a/po4a.conf --- xz-5.2.5/po4a/po4a.conf 2020-03-17 17:28:50 +++ xz-5.4.3/po4a/po4a.conf 2023-05-04 17:21:05 @@ -2,7 +2,7 @@ # to get a new .po file. After translating the .po file, run # "update-po" again to generate the translated man pages. -[po4a_langs] de +[po4a_langs] de fr ko pt_BR ro uk [po4a_paths] xz-man.pot $lang:$lang.po [type: man] ../src/xz/xz.1 $lang:man/$lang/xz.1 Only in xz-5.4.3/po4a: pt_BR.po Only in xz-5.4.3/po4a: ro.po Only in xz-5.4.3/po4a: uk.po diff -ur xz-5.2.5/po4a/update-po xz-5.4.3/po4a/update-po --- xz-5.2.5/po4a/update-po 2020-03-17 17:28:50 +++ xz-5.4.3/po4a/update-po 2023-05-04 17:21:05 @@ -26,7 +26,7 @@ if test ! -f po4a.conf; then cd `dirname "$0"` || exit 1 if test ! -f po4a.conf; then - echo "update-po: Error: Cannot find po4a.conf." >&2 + echo "po4a/update-po: Error: Cannot find po4a.conf." >&2 exit 1 fi fi @@ -41,5 +41,5 @@ po4a --force --verbose \ --package-name="XZ Utils" \ --package-version="$PACKAGE_VERSION" \ - --copyright-holder="This file is put in the public domain." \ + --copyright-holder="[See the headers in the input files.]" \ po4a.conf diff -ur xz-5.2.5/po4a/xz-man.pot xz-5.4.3/po4a/xz-man.pot --- xz-5.2.5/po4a/xz-man.pot 2020-03-17 17:31:37 +++ xz-5.4.3/po4a/xz-man.pot 2023-05-04 17:33:07 @@ -1,19 +1,19 @@ # SOME DESCRIPTIVE TITLE -# Copyright (C) YEAR This file is put in the public domain. +# Copyright (C) YEAR [See the headers in the input files.] # This file is distributed under the same license as the XZ Utils package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: XZ Utils 5.2.5\n" -"POT-Creation-Date: 2020-03-17 16:31+0200\n" +"Project-Id-Version: XZ Utils 5.4.3\n" +"POT-Creation-Date: 2023-05-04 22:33+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH @@ -25,23 +25,29 @@ #. type: TH #: ../src/xz/xz.1:8 #, no-wrap -msgid "2020-02-01" +msgid "2022-12-01" msgstr "" #. type: TH -#: ../src/xz/xz.1:8 ../src/xzdec/xzdec.1:7 ../src/lzmainfo/lzmainfo.1:7 ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 ../src/scripts/xzless.1:10 ../src/scripts/xzmore.1:7 +#: ../src/xz/xz.1:8 ../src/xzdec/xzdec.1:7 ../src/lzmainfo/lzmainfo.1:7 +#: ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 +#: ../src/scripts/xzless.1:10 ../src/scripts/xzmore.1:7 #, no-wrap msgid "Tukaani" msgstr "" #. type: TH -#: ../src/xz/xz.1:8 ../src/xzdec/xzdec.1:7 ../src/lzmainfo/lzmainfo.1:7 ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 ../src/scripts/xzless.1:10 ../src/scripts/xzmore.1:7 +#: ../src/xz/xz.1:8 ../src/xzdec/xzdec.1:7 ../src/lzmainfo/lzmainfo.1:7 +#: ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 +#: ../src/scripts/xzless.1:10 ../src/scripts/xzmore.1:7 #, no-wrap msgid "XZ Utils" msgstr "" #. type: SH -#: ../src/xz/xz.1:10 ../src/xzdec/xzdec.1:8 ../src/lzmainfo/lzmainfo.1:8 ../src/scripts/xzdiff.1:10 ../src/scripts/xzgrep.1:10 ../src/scripts/xzless.1:11 ../src/scripts/xzmore.1:8 +#: ../src/xz/xz.1:10 ../src/xzdec/xzdec.1:8 ../src/lzmainfo/lzmainfo.1:8 +#: ../src/scripts/xzdiff.1:10 ../src/scripts/xzgrep.1:10 +#: ../src/scripts/xzless.1:11 ../src/scripts/xzmore.1:8 #, no-wrap msgid "NAME" msgstr "" @@ -54,7 +60,9 @@ msgstr "" #. type: SH -#: ../src/xz/xz.1:13 ../src/xzdec/xzdec.1:10 ../src/lzmainfo/lzmainfo.1:10 ../src/scripts/xzdiff.1:12 ../src/scripts/xzgrep.1:12 ../src/scripts/xzless.1:13 ../src/scripts/xzmore.1:10 +#: ../src/xz/xz.1:13 ../src/xzdec/xzdec.1:10 ../src/lzmainfo/lzmainfo.1:10 +#: ../src/scripts/xzdiff.1:12 ../src/scripts/xzgrep.1:12 +#: ../src/scripts/xzless.1:13 ../src/scripts/xzmore.1:10 #, no-wrap msgid "SYNOPSIS" msgstr "" @@ -104,22 +112,25 @@ msgstr "" #. type: SH -#: ../src/xz/xz.1:51 ../src/xzdec/xzdec.1:18 ../src/lzmainfo/lzmainfo.1:15 ../src/scripts/xzdiff.1:24 ../src/scripts/xzgrep.1:33 ../src/scripts/xzless.1:19 ../src/scripts/xzmore.1:16 +#: ../src/xz/xz.1:51 ../src/xzdec/xzdec.1:18 ../src/lzmainfo/lzmainfo.1:15 +#: ../src/scripts/xzdiff.1:24 ../src/scripts/xzgrep.1:33 +#: ../src/scripts/xzless.1:19 ../src/scripts/xzmore.1:16 #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:65 +#: ../src/xz/xz.1:70 msgid "" "B is a general-purpose data compression tool with command line syntax " "similar to B(1) and B(1). The native file format is the " "B<.xz> format, but the legacy B<.lzma> format used by LZMA Utils and raw " -"compressed streams with no container format headers are also supported." +"compressed streams with no container format headers are also supported. In " +"addition, decompression of the B<.lz> format used by B is supported." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:87 +#: ../src/xz/xz.1:92 msgid "" "B compresses or decompresses each I according to the selected " "operation mode. If no I are given or I is B<->, B reads " @@ -130,66 +141,73 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:97 +#: ../src/xz/xz.1:102 msgid "" "Unless B<--stdout> is specified, I other than B<-> are written to a " "new file whose name is derived from the source I name:" msgstr "" #. type: IP -#: ../src/xz/xz.1:97 ../src/xz/xz.1:103 ../src/xz/xz.1:127 ../src/xz/xz.1:132 ../src/xz/xz.1:135 ../src/xz/xz.1:138 ../src/xz/xz.1:154 ../src/xz/xz.1:395 ../src/xz/xz.1:398 ../src/xz/xz.1:405 ../src/xz/xz.1:621 ../src/xz/xz.1:623 ../src/xz/xz.1:722 ../src/xz/xz.1:733 ../src/xz/xz.1:742 ../src/xz/xz.1:750 ../src/xz/xz.1:965 ../src/xz/xz.1:974 ../src/xz/xz.1:986 ../src/xz/xz.1:1552 ../src/xz/xz.1:1558 ../src/xz/xz.1:1674 ../src/xz/xz.1:1678 ../src/xz/xz.1:1681 ../src/xz/xz.1:1684 ../src/xz/xz.1:1688 ../src/xz/xz.1:1695 ../src/xz/xz.1:1697 +#: ../src/xz/xz.1:102 ../src/xz/xz.1:108 ../src/xz/xz.1:133 ../src/xz/xz.1:138 +#: ../src/xz/xz.1:141 ../src/xz/xz.1:144 ../src/xz/xz.1:160 ../src/xz/xz.1:421 +#: ../src/xz/xz.1:424 ../src/xz/xz.1:431 ../src/xz/xz.1:676 ../src/xz/xz.1:678 +#: ../src/xz/xz.1:777 ../src/xz/xz.1:788 ../src/xz/xz.1:797 ../src/xz/xz.1:805 +#: ../src/xz/xz.1:1033 ../src/xz/xz.1:1042 ../src/xz/xz.1:1054 +#: ../src/xz/xz.1:1729 ../src/xz/xz.1:1735 ../src/xz/xz.1:1853 +#: ../src/xz/xz.1:1857 ../src/xz/xz.1:1860 ../src/xz/xz.1:1863 +#: ../src/xz/xz.1:1867 ../src/xz/xz.1:1874 ../src/xz/xz.1:1876 #, no-wrap msgid "\\(bu" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:103 +#: ../src/xz/xz.1:108 msgid "" "When compressing, the suffix of the target file format (B<.xz> or B<.lzma>) " "is appended to the source filename to get the target filename." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:117 +#: ../src/xz/xz.1:123 msgid "" -"When decompressing, the B<.xz> or B<.lzma> suffix is removed from the " -"filename to get the target filename. B also recognizes the suffixes " +"When decompressing, the B<.xz>, B<.lzma>, or B<.lz> suffix is removed from " +"the filename to get the target filename. B also recognizes the suffixes " "B<.txz> and B<.tlz>, and replaces them with the B<.tar> suffix." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:121 +#: ../src/xz/xz.1:127 msgid "" "If the target file already exists, an error is displayed and the I is " "skipped." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:127 +#: ../src/xz/xz.1:133 msgid "" "Unless writing to standard output, B will display a warning and skip the " "I if any of the following applies:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:132 +#: ../src/xz/xz.1:138 msgid "" "I is not a regular file. Symbolic links are not followed, and thus " "they are not considered to be regular files." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:135 +#: ../src/xz/xz.1:141 msgid "I has more than one hard link." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:138 +#: ../src/xz/xz.1:144 msgid "I has setuid, setgid, or sticky bit set." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:154 +#: ../src/xz/xz.1:160 msgid "" "The operation mode is set to compress and the I already has a suffix " "of the target file format (B<.xz> or B<.txz> when compressing to the B<.xz> " @@ -197,15 +215,15 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:163 +#: ../src/xz/xz.1:170 msgid "" "The operation mode is set to decompress and the I doesn't have a " -"suffix of any of the supported file formats (B<.xz>, B<.txz>, B<.lzma>, or " -"B<.tlz>)." +"suffix of any of the supported file formats (B<.xz>, B<.txz>, B<.lzma>, " +"B<.tlz>, or B<.lz>)." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:178 +#: ../src/xz/xz.1:185 msgid "" "After successfully compressing or decompressing the I, B copies " "the owner, group, permissions, access time, and modification time from the " @@ -217,15 +235,15 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:187 +#: ../src/xz/xz.1:195 msgid "" "Once the target file has been successfully closed, the source I is " "removed unless B<--keep> was specified. The source I is never removed " -"if the output is written to standard output." +"if the output is written to standard output or if an error occurs." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:199 +#: ../src/xz/xz.1:207 msgid "" "Sending B or B to the B process makes it print " "progress information to standard error. This has only limited use since " @@ -234,13 +252,13 @@ msgstr "" #. type: SS -#: ../src/xz/xz.1:200 +#: ../src/xz/xz.1:208 #, no-wrap msgid "Memory usage" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:216 +#: ../src/xz/xz.1:224 msgid "" "The memory usage of B varies from a few hundred kilobytes to several " "gigabytes depending on the compression settings. The settings used when " @@ -253,22 +271,22 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:228 +#: ../src/xz/xz.1:236 msgid "" "Especially users of older systems may find the possibility of very large " "memory usage annoying. To prevent uncomfortable surprises, B has a " "built-in memory usage limiter, which is disabled by default. While some " "operating systems provide ways to limit the memory usage of processes, " -"relying on it wasn't deemed to be flexible enough (e.g. using B(1) " -"to limit virtual memory tends to cripple B(2))." +"relying on it wasn't deemed to be flexible enough (for example, using " +"B(1) to limit virtual memory tends to cripple B(2))." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:248 +#: ../src/xz/xz.1:258 msgid "" "The memory usage limiter can be enabled with the command line option " "B<--memlimit=>I. Often it is more convenient to enable the limiter " -"by default by setting the environment variable B, e.g.\\& " +"by default by setting the environment variable B, for example, " "B. It is possible to set the limits " "separately for compression and decompression by using " "B<--memlimit-compress=>I and B<--memlimit-decompress=>I. " @@ -279,7 +297,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:265 +#: ../src/xz/xz.1:277 msgid "" "If the specified memory usage limit is exceeded when decompressing, B " "will display an error and decompressing the file will fail. If the limit is " @@ -287,55 +305,55 @@ "the limit is no longer exceeded (except when using B<--format=raw> or " "B<--no-adjust>). This way the operation won't fail unless the limit is very " "small. The scaling of the settings is done in steps that don't match the " -"compression level presets, e.g. if the limit is only slightly less than the " -"amount required for B, the settings will be scaled down only a " -"little, not all the way down to B." +"compression level presets, for example, if the limit is only slightly less " +"than the amount required for B, the settings will be scaled down only " +"a little, not all the way down to B." msgstr "" #. type: SS -#: ../src/xz/xz.1:266 +#: ../src/xz/xz.1:278 #, no-wrap msgid "Concatenation and padding with .xz files" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:274 +#: ../src/xz/xz.1:286 msgid "" "It is possible to concatenate B<.xz> files as is. B will decompress " "such files as if they were a single B<.xz> file." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:283 +#: ../src/xz/xz.1:295 msgid "" "It is possible to insert padding between the concatenated parts or after the " "last part. The padding must consist of null bytes and the size of the " -"padding must be a multiple of four bytes. This can be useful e.g. if the " -"B<.xz> file is stored on a medium that measures file sizes in 512-byte " -"blocks." +"padding must be a multiple of four bytes. This can be useful, for example, " +"if the B<.xz> file is stored on a medium that measures file sizes in " +"512-byte blocks." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:287 +#: ../src/xz/xz.1:299 msgid "" "Concatenation and padding are not allowed with B<.lzma> files or raw " "streams." msgstr "" #. type: SH -#: ../src/xz/xz.1:288 ../src/xzdec/xzdec.1:61 +#: ../src/xz/xz.1:300 ../src/xzdec/xzdec.1:61 #, no-wrap msgid "OPTIONS" msgstr "" #. type: SS -#: ../src/xz/xz.1:290 +#: ../src/xz/xz.1:302 #, no-wrap msgid "Integer suffixes and special values" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:294 +#: ../src/xz/xz.1:306 msgid "" "In most places where an integer argument is expected, an optional suffix is " "supported to easily indicate large integers. There must be no space between " @@ -343,70 +361,70 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:294 +#: ../src/xz/xz.1:306 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:305 +#: ../src/xz/xz.1:317 msgid "" "Multiply the integer by 1,024 (2^10). B, B, B, B, and B " "are accepted as synonyms for B." msgstr "" #. type: TP -#: ../src/xz/xz.1:305 +#: ../src/xz/xz.1:317 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:315 +#: ../src/xz/xz.1:327 msgid "" "Multiply the integer by 1,048,576 (2^20). B, B, B, and B are " "accepted as synonyms for B." msgstr "" #. type: TP -#: ../src/xz/xz.1:315 +#: ../src/xz/xz.1:327 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:325 +#: ../src/xz/xz.1:337 msgid "" "Multiply the integer by 1,073,741,824 (2^30). B, B, B, and B " "are accepted as synonyms for B." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:330 +#: ../src/xz/xz.1:342 msgid "" "The special value B can be used to indicate the maximum integer value " "supported by the option." msgstr "" #. type: SS -#: ../src/xz/xz.1:331 +#: ../src/xz/xz.1:343 #, no-wrap msgid "Operation mode" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:334 +#: ../src/xz/xz.1:346 msgid "If multiple operation mode options are given, the last one takes effect." msgstr "" #. type: TP -#: ../src/xz/xz.1:334 +#: ../src/xz/xz.1:346 #, no-wrap msgid "B<-z>, B<--compress>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:343 +#: ../src/xz/xz.1:355 msgid "" "Compress. This is the default operation mode when no operation mode option " "is specified and no other operation mode is implied from the command name " @@ -414,24 +432,24 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:343 ../src/xzdec/xzdec.1:62 +#: ../src/xz/xz.1:355 ../src/xzdec/xzdec.1:62 #, no-wrap msgid "B<-d>, B<--decompress>, B<--uncompress>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:346 +#: ../src/xz/xz.1:358 msgid "Decompress." msgstr "" #. type: TP -#: ../src/xz/xz.1:346 +#: ../src/xz/xz.1:358 #, no-wrap msgid "B<-t>, B<--test>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:355 +#: ../src/xz/xz.1:367 msgid "" "Test the integrity of compressed I. This option is equivalent to " "B<--decompress --stdout> except that the decompressed data is discarded " @@ -440,13 +458,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:355 +#: ../src/xz/xz.1:367 #, no-wrap msgid "B<-l>, B<--list>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:364 +#: ../src/xz/xz.1:376 msgid "" "Print information about compressed I. No uncompressed output is " "produced, and no files are created or removed. In list mode, the program " @@ -455,60 +473,70 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:379 +#: ../src/xz/xz.1:391 msgid "" "The default listing shows basic information about I, one file per " "line. To get more detailed information, use also the B<--verbose> option. " "For even more information, use B<--verbose> twice, but note that this may be " "slow, because getting all the extra information requires many seeks. The " -"width of verbose output exceeds 80 characters, so piping the output to " -"e.g.\\& B may be convenient if the terminal isn't wide enough." +"width of verbose output exceeds 80 characters, so piping the output to, for " +"example, B may be convenient if the terminal isn't wide enough." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:386 +#: ../src/xz/xz.1:398 msgid "" "The exact output may vary between B versions and different locales. For " "machine-readable output, B<--robot --list> should be used." msgstr "" #. type: SS -#: ../src/xz/xz.1:387 +#: ../src/xz/xz.1:399 #, no-wrap msgid "Operation modifiers" msgstr "" #. type: TP -#: ../src/xz/xz.1:388 ../src/xzdec/xzdec.1:69 +#: ../src/xz/xz.1:400 ../src/xzdec/xzdec.1:69 #, no-wrap msgid "B<-k>, B<--keep>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:391 +#: ../src/xz/xz.1:403 msgid "Don't delete the input files." msgstr "" +#. type: Plain text +#: ../src/xz/xz.1:417 +msgid "" +"Since B 5.2.6, this option also makes B compress or decompress even " +"if the input is a symbolic link to a regular file, has more than one hard " +"link, or has the setuid, setgid, or sticky bit set. The setuid, setgid, and " +"sticky bits are not copied to the target file. In earlier versions this was " +"only done with B<--force>." +msgstr "" + #. type: TP -#: ../src/xz/xz.1:391 +#: ../src/xz/xz.1:417 #, no-wrap msgid "B<-f>, B<--force>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:394 +#: ../src/xz/xz.1:420 msgid "This option has several effects:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:398 +#: ../src/xz/xz.1:424 msgid "" "If the target file already exists, delete it before compressing or " "decompressing." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:405 +#: ../src/xz/xz.1:431 msgid "" "Compress or decompress even if the input is a symbolic link to a regular " "file, has more than one hard link, or has the setuid, setgid, or sticky bit " @@ -516,7 +544,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:430 +#: ../src/xz/xz.1:456 msgid "" "When used with B<--decompress> B<--stdout> and B cannot recognize the " "type of the source file, copy the source file as is to standard output. " @@ -529,26 +557,26 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:431 ../src/xzdec/xzdec.1:76 +#: ../src/xz/xz.1:457 ../src/xzdec/xzdec.1:76 #, no-wrap msgid "B<-c>, B<--stdout>, B<--to-stdout>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:437 +#: ../src/xz/xz.1:463 msgid "" "Write the compressed or decompressed data to standard output instead of a " "file. This implies B<--keep>." msgstr "" #. type: TP -#: ../src/xz/xz.1:437 +#: ../src/xz/xz.1:463 #, no-wrap msgid "B<--single-stream>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:446 +#: ../src/xz/xz.1:472 msgid "" "Decompress only the first B<.xz> stream, and silently ignore possible " "remaining input data following the stream. Normally such trailing garbage " @@ -556,7 +584,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:455 +#: ../src/xz/xz.1:481 msgid "" "B never decompresses more than one stream from B<.lzma> files or raw " "streams, but this option still makes B ignore the possible trailing data " @@ -564,20 +592,20 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:460 +#: ../src/xz/xz.1:486 msgid "" "This option has no effect if the operation mode is not B<--decompress> or " "B<--test>." msgstr "" #. type: TP -#: ../src/xz/xz.1:460 +#: ../src/xz/xz.1:486 #, no-wrap msgid "B<--no-sparse>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:472 +#: ../src/xz/xz.1:498 msgid "" "Disable creation of sparse files. By default, if decompressing into a " "regular file, B tries to make the file sparse if the decompressed data " @@ -589,13 +617,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:472 +#: ../src/xz/xz.1:498 #, no-wrap msgid "B<-S> I<.suf>, B<--suffix=>I<.suf>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:484 +#: ../src/xz/xz.1:510 msgid "" "When compressing, use I<.suf> as the suffix for the target file instead of " "B<.xz> or B<.lzma>. If not writing to standard output and the source file " @@ -604,16 +632,16 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:497 +#: ../src/xz/xz.1:524 msgid "" "When decompressing, recognize files with the suffix I<.suf> in addition to " -"files with the B<.xz>, B<.txz>, B<.lzma>, or B<.tlz> suffix. If the source " -"file has the suffix I<.suf>, the suffix is removed to get the target " +"files with the B<.xz>, B<.txz>, B<.lzma>, B<.tlz>, or B<.lz> suffix. If the " +"source file has the suffix I<.suf>, the suffix is removed to get the target " "filename." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:503 +#: ../src/xz/xz.1:530 msgid "" "When compressing or decompressing raw streams (B<--format=raw>), the suffix " "must always be specified unless writing to standard output, because there is " @@ -621,13 +649,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:503 +#: ../src/xz/xz.1:530 #, no-wrap msgid "B<--files>[B<=>I]" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:517 +#: ../src/xz/xz.1:544 msgid "" "Read the filenames to process from I; if I is omitted, filenames " "are read from standard input. Filenames must be terminated with the newline " @@ -637,43 +665,43 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:517 +#: ../src/xz/xz.1:544 #, no-wrap msgid "B<--files0>[B<=>I]" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:521 +#: ../src/xz/xz.1:548 msgid "" "This is identical to B<--files>[B<=>I] except that each filename must " "be terminated with the null character." msgstr "" #. type: SS -#: ../src/xz/xz.1:522 +#: ../src/xz/xz.1:549 #, no-wrap msgid "Basic file format and compression options" msgstr "" #. type: TP -#: ../src/xz/xz.1:523 +#: ../src/xz/xz.1:550 #, no-wrap msgid "B<-F> I, B<--format=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:528 +#: ../src/xz/xz.1:555 msgid "Specify the file I to compress or decompress:" msgstr "" #. type: TP -#: ../src/xz/xz.1:529 +#: ../src/xz/xz.1:556 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:541 +#: ../src/xz/xz.1:568 msgid "" "This is the default. When compressing, B is equivalent to B. " "When decompressing, the format of the input file is automatically detected. " @@ -682,26 +710,26 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:541 +#: ../src/xz/xz.1:568 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:548 +#: ../src/xz/xz.1:575 msgid "" "Compress to the B<.xz> file format, or accept only B<.xz> files when " "decompressing." msgstr "" #. type: TP -#: ../src/xz/xz.1:548 +#: ../src/xz/xz.1:575 #, no-wrap msgid "B, B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:558 +#: ../src/xz/xz.1:585 msgid "" "Compress to the legacy B<.lzma> file format, or accept only B<.lzma> files " "when decompressing. The alternative name B is provided for backwards " @@ -709,13 +737,44 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:558 +#: ../src/xz/xz.1:585 #, no-wrap +msgid "B" +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:591 +msgid "Accept only B<.lz> files when decompressing. Compression is not supported." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:604 +msgid "" +"The B<.lz> format version 0 and the unextended version 1 are supported. " +"Version 0 files were produced by B 1.3 and older. Such files aren't " +"common but may be found from file archives as a few source packages were " +"released in this format. People might have old personal files in this " +"format too. Decompression support for the format version 0 was removed in " +"B 1.18." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:613 +msgid "" +"B 1.4 and later create files in the format version 1. The sync flush " +"marker extension to the format version 1 was added in B 1.6. This " +"extension is rarely used and isn't supported by B (diagnosed as corrupt " +"input)." +msgstr "" + +#. type: TP +#: ../src/xz/xz.1:613 +#, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:566 +#: ../src/xz/xz.1:621 msgid "" "Compress or uncompress a raw stream (no headers). This is meant for " "advanced users only. To decode raw streams, you need use B<--format=raw> " @@ -724,13 +783,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:567 +#: ../src/xz/xz.1:622 #, no-wrap msgid "B<-C> I, B<--check=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:582 +#: ../src/xz/xz.1:637 msgid "" "Specify the type of the integrity check. The check is calculated from the " "uncompressed data and stored in the B<.xz> file. This option has an effect " @@ -740,18 +799,18 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:586 +#: ../src/xz/xz.1:641 msgid "Supported I types:" msgstr "" #. type: TP -#: ../src/xz/xz.1:587 +#: ../src/xz/xz.1:642 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:593 +#: ../src/xz/xz.1:648 msgid "" "Don't calculate an integrity check at all. This is usually a bad idea. " "This can be useful when integrity of the data is verified by other means " @@ -759,24 +818,24 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:593 +#: ../src/xz/xz.1:648 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:596 +#: ../src/xz/xz.1:651 msgid "Calculate CRC32 using the polynomial from IEEE-802.3 (Ethernet)." msgstr "" #. type: TP -#: ../src/xz/xz.1:596 +#: ../src/xz/xz.1:651 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:601 +#: ../src/xz/xz.1:656 msgid "" "Calculate CRC64 using the polynomial from ECMA-182. This is the default, " "since it is slightly better than CRC32 at detecting damaged files and the " @@ -784,50 +843,50 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:601 +#: ../src/xz/xz.1:656 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:605 +#: ../src/xz/xz.1:660 msgid "Calculate SHA-256. This is somewhat slower than CRC32 and CRC64." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:611 +#: ../src/xz/xz.1:666 msgid "" "Integrity of the B<.xz> headers is always verified with CRC32. It is not " "possible to change or disable it." msgstr "" #. type: TP -#: ../src/xz/xz.1:611 +#: ../src/xz/xz.1:666 #, no-wrap msgid "B<--ignore-check>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:617 +#: ../src/xz/xz.1:672 msgid "" "Don't verify the integrity check of the compressed data when decompressing. " "The CRC32 values in the B<.xz> headers will still be verified normally." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:620 +#: ../src/xz/xz.1:675 msgid "" "B Possible " "reasons to use this option:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:623 +#: ../src/xz/xz.1:678 msgid "Trying to recover data from a corrupt .xz file." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:629 +#: ../src/xz/xz.1:684 msgid "" "Speeding up decompression. This matters mostly with SHA-256 or with files " "that have compressed extremely well. It's recommended to not use this " @@ -836,13 +895,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:630 +#: ../src/xz/xz.1:685 #, no-wrap msgid "B<-0> ... B<-9>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:639 +#: ../src/xz/xz.1:694 msgid "" "Select a compression preset level. The default is B<-6>. If multiple " "preset levels are specified, the last one takes effect. If a custom filter " @@ -851,7 +910,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:654 +#: ../src/xz/xz.1:709 msgid "" "The differences between the presets are more significant than with " "B(1) and B(1). The selected compression settings determine " @@ -862,13 +921,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:655 +#: ../src/xz/xz.1:710 #, no-wrap msgid "B<-0> ... B<-3>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:667 +#: ../src/xz/xz.1:722 msgid "" "These are somewhat fast presets. B<-0> is sometimes faster than B " "while compressing much better. The higher ones often have speed comparable " @@ -877,29 +936,29 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:667 +#: ../src/xz/xz.1:722 #, no-wrap msgid "B<-4> ... B<-6>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:681 +#: ../src/xz/xz.1:736 msgid "" "Good to very good compression while keeping decompressor memory usage " "reasonable even for old systems. B<-6> is the default, which is usually a " -"good choice e.g. for distributing files that need to be decompressible even " -"on systems with only 16\\ MiB RAM. (B<-5e> or B<-6e> may be worth " -"considering too. See B<--extreme>.)" +"good choice for distributing files that need to be decompressible even on " +"systems with only 16\\ MiB RAM. (B<-5e> or B<-6e> may be worth considering " +"too. See B<--extreme>.)" msgstr "" #. type: TP -#: ../src/xz/xz.1:681 +#: ../src/xz/xz.1:736 #, no-wrap msgid "B<-7 ... -9>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:688 +#: ../src/xz/xz.1:743 msgid "" "These are like B<-6> but with higher compressor and decompressor memory " "requirements. These are useful only when compressing files bigger than 8\\ " @@ -907,7 +966,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:696 +#: ../src/xz/xz.1:751 msgid "" "On the same hardware, the decompression speed is approximately a constant " "number of bytes of compressed data per second. In other words, the better " @@ -917,263 +976,282 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:698 +#: ../src/xz/xz.1:753 msgid "The following table summarises the features of the presets:" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 ../src/xz/xz.1:2623 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 ../src/xz/xz.1:2839 #, no-wrap msgid "Preset" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "DictSize" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 ../src/xz/xz.1:2623 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 ../src/xz/xz.1:2839 #, no-wrap msgid "CompCPU" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "CompMem" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:705 ../src/xz/xz.1:786 +#: ../src/xz/xz.1:760 ../src/xz/xz.1:841 #, no-wrap msgid "DecMem" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:2234 ../src/xz/xz.1:2259 ../src/xz/xz.1:2624 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:2450 ../src/xz/xz.1:2475 +#: ../src/xz/xz.1:2840 #, no-wrap msgid "-0" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:787 ../src/xz/xz.1:2234 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:842 ../src/xz/xz.1:2450 #, no-wrap msgid "256 KiB" msgstr "" -#. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:2624 +#. type: TP +#: ../src/xz/xz.1:761 ../src/xz/xz.1:2840 ../src/scripts/xzgrep.1:82 #, no-wrap msgid "0" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:708 ../src/xz/xz.1:789 ../src/xz/xz.1:2259 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:763 ../src/xz/xz.1:844 ../src/xz/xz.1:2475 #, no-wrap msgid "3 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:706 ../src/xz/xz.1:707 ../src/xz/xz.1:787 ../src/xz/xz.1:788 ../src/xz/xz.1:2235 ../src/xz/xz.1:2236 ../src/xz/xz.1:2238 +#: ../src/xz/xz.1:761 ../src/xz/xz.1:762 ../src/xz/xz.1:842 ../src/xz/xz.1:843 +#: ../src/xz/xz.1:2451 ../src/xz/xz.1:2452 ../src/xz/xz.1:2454 #, no-wrap msgid "1 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:2235 ../src/xz/xz.1:2260 ../src/xz/xz.1:2625 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:2451 ../src/xz/xz.1:2476 +#: ../src/xz/xz.1:2841 #, no-wrap msgid "-1" msgstr "" -#. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:1582 ../src/xz/xz.1:2625 +#. type: TP +#: ../src/xz/xz.1:762 ../src/xz/xz.1:1758 ../src/xz/xz.1:2841 +#: ../src/scripts/xzgrep.1:86 #, no-wrap msgid "1" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 ../src/xz/xz.1:793 ../src/xz/xz.1:2260 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:2476 #, no-wrap msgid "9 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:707 ../src/xz/xz.1:708 ../src/xz/xz.1:788 ../src/xz/xz.1:789 ../src/xz/xz.1:2236 ../src/xz/xz.1:2239 ../src/xz/xz.1:2260 +#: ../src/xz/xz.1:762 ../src/xz/xz.1:763 ../src/xz/xz.1:843 ../src/xz/xz.1:844 +#: ../src/xz/xz.1:2452 ../src/xz/xz.1:2455 ../src/xz/xz.1:2476 #, no-wrap msgid "2 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:2236 ../src/xz/xz.1:2261 ../src/xz/xz.1:2626 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:2452 ../src/xz/xz.1:2477 +#: ../src/xz/xz.1:2842 #, no-wrap msgid "-2" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:1585 ../src/xz/xz.1:2626 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:1760 ../src/xz/xz.1:2842 #, no-wrap msgid "2" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:708 ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2261 +#: ../src/xz/xz.1:763 ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2477 #, no-wrap msgid "17 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:2237 ../src/xz/xz.1:2262 ../src/xz/xz.1:2627 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:2453 ../src/xz/xz.1:2478 +#: ../src/xz/xz.1:2843 #, no-wrap msgid "-3" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:710 ../src/xz/xz.1:787 ../src/xz/xz.1:790 ../src/xz/xz.1:791 ../src/xz/xz.1:2237 ../src/xz/xz.1:2238 ../src/xz/xz.1:2240 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:765 ../src/xz/xz.1:842 ../src/xz/xz.1:845 +#: ../src/xz/xz.1:846 ../src/xz/xz.1:2453 ../src/xz/xz.1:2454 +#: ../src/xz/xz.1:2456 #, no-wrap msgid "4 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:2627 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:2843 #, no-wrap msgid "3" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:714 ../src/xz/xz.1:795 ../src/xz/xz.1:2242 ../src/xz/xz.1:2243 ../src/xz/xz.1:2262 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:769 ../src/xz/xz.1:850 ../src/xz/xz.1:2458 +#: ../src/xz/xz.1:2459 ../src/xz/xz.1:2478 #, no-wrap msgid "32 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:709 ../src/xz/xz.1:710 ../src/xz/xz.1:790 ../src/xz/xz.1:791 +#: ../src/xz/xz.1:764 ../src/xz/xz.1:765 ../src/xz/xz.1:845 ../src/xz/xz.1:846 #, no-wrap msgid "5 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:2238 ../src/xz/xz.1:2263 ../src/xz/xz.1:2628 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:2454 ../src/xz/xz.1:2479 +#: ../src/xz/xz.1:2844 #, no-wrap msgid "-4" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:1583 ../src/xz/xz.1:1584 ../src/xz/xz.1:1587 ../src/xz/xz.1:2628 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:1759 ../src/xz/xz.1:1761 +#: ../src/xz/xz.1:1762 ../src/xz/xz.1:1764 ../src/xz/xz.1:2844 #, no-wrap msgid "4" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:710 ../src/xz/xz.1:790 ../src/xz/xz.1:791 ../src/xz/xz.1:2263 +#: ../src/xz/xz.1:765 ../src/xz/xz.1:845 ../src/xz/xz.1:846 ../src/xz/xz.1:2479 #, no-wrap msgid "48 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:2239 ../src/xz/xz.1:2264 ../src/xz/xz.1:2629 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:2455 ../src/xz/xz.1:2480 +#: ../src/xz/xz.1:2845 #, no-wrap msgid "-5" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 ../src/xz/xz.1:793 ../src/xz/xz.1:2239 ../src/xz/xz.1:2240 ../src/xz/xz.1:2241 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 ../src/xz/xz.1:848 +#: ../src/xz/xz.1:2455 ../src/xz/xz.1:2456 ../src/xz/xz.1:2457 #, no-wrap msgid "8 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:2629 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:2845 #, no-wrap msgid "5" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:711 ../src/xz/xz.1:712 ../src/xz/xz.1:792 ../src/xz/xz.1:793 ../src/xz/xz.1:2264 ../src/xz/xz.1:2265 +#: ../src/xz/xz.1:766 ../src/xz/xz.1:767 ../src/xz/xz.1:847 ../src/xz/xz.1:848 +#: ../src/xz/xz.1:2480 ../src/xz/xz.1:2481 #, no-wrap msgid "94 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:712 ../src/xz/xz.1:2240 ../src/xz/xz.1:2265 ../src/xz/xz.1:2630 +#: ../src/xz/xz.1:767 ../src/xz/xz.1:2456 ../src/xz/xz.1:2481 +#: ../src/xz/xz.1:2846 #, no-wrap msgid "-6" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:712 ../src/xz/xz.1:713 ../src/xz/xz.1:714 ../src/xz/xz.1:715 ../src/xz/xz.1:2630 +#: ../src/xz/xz.1:767 ../src/xz/xz.1:768 ../src/xz/xz.1:769 ../src/xz/xz.1:770 +#: ../src/xz/xz.1:2846 #, no-wrap msgid "6" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:2241 ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:2457 ../src/xz/xz.1:2482 #, no-wrap msgid "-7" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2241 ../src/xz/xz.1:2242 ../src/xz/xz.1:2263 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2457 +#: ../src/xz/xz.1:2458 ../src/xz/xz.1:2479 #, no-wrap msgid "16 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:713 ../src/xz/xz.1:794 ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:768 ../src/xz/xz.1:849 ../src/xz/xz.1:2482 #, no-wrap msgid "186 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:2242 ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:2458 ../src/xz/xz.1:2483 #, no-wrap msgid "-8" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:795 ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:850 ../src/xz/xz.1:2483 #, no-wrap msgid "370 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:714 ../src/xz/xz.1:795 +#: ../src/xz/xz.1:769 ../src/xz/xz.1:850 #, no-wrap msgid "33 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:2243 ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:2459 ../src/xz/xz.1:2484 #, no-wrap msgid "-9" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 ../src/xz/xz.1:2243 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 ../src/xz/xz.1:2459 #, no-wrap msgid "64 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 ../src/xz/xz.1:2484 #, no-wrap msgid "674 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:715 ../src/xz/xz.1:796 +#: ../src/xz/xz.1:770 ../src/xz/xz.1:851 #, no-wrap msgid "65 MiB" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:721 +#: ../src/xz/xz.1:776 msgid "Column descriptions:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:733 +#: ../src/xz/xz.1:788 msgid "" "DictSize is the LZMA2 dictionary size. It is waste of memory to use a " "dictionary bigger than the size of the uncompressed file. This is why it is " @@ -1183,7 +1261,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:742 +#: ../src/xz/xz.1:797 msgid "" "CompCPU is a simplified representation of the LZMA2 settings that affect " "compression speed. The dictionary size affects speed too, so while CompCPU " @@ -1193,7 +1271,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:750 +#: ../src/xz/xz.1:805 msgid "" "CompMem contains the compressor memory requirements in the single-threaded " "mode. It may vary slightly between B versions. Memory requirements of " @@ -1202,7 +1280,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:757 +#: ../src/xz/xz.1:812 msgid "" "DecMem contains the decompressor memory requirements. That is, the " "compression settings determine the memory requirements of the decompressor. " @@ -1212,13 +1290,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:758 +#: ../src/xz/xz.1:813 #, no-wrap msgid "B<-e>, B<--extreme>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:767 +#: ../src/xz/xz.1:822 msgid "" "Use a slower variant of the selected compression preset level (B<-0> " "... B<-9>) to hopefully get a little bit better compression ratio, but with " @@ -1228,7 +1306,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:779 +#: ../src/xz/xz.1:834 msgid "" "Since there are two presets with dictionary sizes 4\\ MiB and 8\\ MiB, the " "presets B<-3e> and B<-5e> use slightly faster settings (lower CompCPU) than " @@ -1236,91 +1314,93 @@ msgstr "" #. type: tbl table -#: ../src/xz/xz.1:787 +#: ../src/xz/xz.1:842 #, no-wrap msgid "-0e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:787 ../src/xz/xz.1:788 ../src/xz/xz.1:789 ../src/xz/xz.1:791 ../src/xz/xz.1:793 ../src/xz/xz.1:794 ../src/xz/xz.1:795 ../src/xz/xz.1:796 ../src/xz/xz.1:2632 +#: ../src/xz/xz.1:842 ../src/xz/xz.1:843 ../src/xz/xz.1:844 ../src/xz/xz.1:846 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:849 ../src/xz/xz.1:850 ../src/xz/xz.1:851 +#: ../src/xz/xz.1:2848 #, no-wrap msgid "8" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:788 +#: ../src/xz/xz.1:843 #, no-wrap msgid "-1e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:788 +#: ../src/xz/xz.1:843 #, no-wrap msgid "13 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:789 +#: ../src/xz/xz.1:844 #, no-wrap msgid "-2e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:789 +#: ../src/xz/xz.1:844 #, no-wrap msgid "25 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:790 +#: ../src/xz/xz.1:845 #, no-wrap msgid "-3e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:790 ../src/xz/xz.1:792 ../src/xz/xz.1:2631 +#: ../src/xz/xz.1:845 ../src/xz/xz.1:847 ../src/xz/xz.1:2847 #, no-wrap msgid "7" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:791 +#: ../src/xz/xz.1:846 #, no-wrap msgid "-4e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:792 ../src/xz/xz.1:2631 +#: ../src/xz/xz.1:847 ../src/xz/xz.1:2847 #, no-wrap msgid "-5e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:793 ../src/xz/xz.1:2632 +#: ../src/xz/xz.1:848 ../src/xz/xz.1:2848 #, no-wrap msgid "-6e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:794 +#: ../src/xz/xz.1:849 #, no-wrap msgid "-7e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:795 +#: ../src/xz/xz.1:850 #, no-wrap msgid "-8e" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:796 +#: ../src/xz/xz.1:851 #, no-wrap msgid "-9e" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:808 +#: ../src/xz/xz.1:863 msgid "" "For example, there are a total of four presets that use 8\\ MiB dictionary, " "whose order from the fastest to the slowest is B<-5>, B<-6>, B<-5e>, and " @@ -1328,19 +1408,19 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:808 +#: ../src/xz/xz.1:863 #, no-wrap msgid "B<--fast>" msgstr "" #. type: TP -#: ../src/xz/xz.1:811 +#: ../src/xz/xz.1:866 #, no-wrap msgid "B<--best>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:822 +#: ../src/xz/xz.1:877 msgid "" "These are somewhat misleading aliases for B<-0> and B<-9>, respectively. " "These are provided only for backwards compatibility with LZMA Utils. Avoid " @@ -1348,13 +1428,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:822 +#: ../src/xz/xz.1:877 #, no-wrap msgid "B<--block-size=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:835 +#: ../src/xz/xz.1:890 msgid "" "When compressing to the B<.xz> format, split the input data into blocks of " "I bytes. The blocks are compressed independently from each other, " @@ -1365,20 +1445,20 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:853 +#: ../src/xz/xz.1:908 msgid "" "In multi-threaded mode about three times I bytes will be allocated in " "each thread for buffering input and output. The default I is three " "times the LZMA2 dictionary size or 1 MiB, whichever is more. Typically a " -"good value is 2-4 times the size of the LZMA2 dictionary or at least 1 MiB. " -"Using I less than the LZMA2 dictionary size is waste of RAM because " -"then the LZMA2 dictionary buffer will never get fully used. The sizes of " -"the blocks are stored in the block headers, which a future version of B " -"will use for multi-threaded decompression." +"good value is 2\\(en4 times the size of the LZMA2 dictionary or at least 1 " +"MiB. Using I less than the LZMA2 dictionary size is waste of RAM " +"because then the LZMA2 dictionary buffer will never get fully used. The " +"sizes of the blocks are stored in the block headers, which a future version " +"of B will use for multi-threaded decompression." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:862 +#: ../src/xz/xz.1:917 msgid "" "In single-threaded mode no block splitting is done by default. Setting this " "option doesn't affect memory usage. No size information is stored in block " @@ -1389,20 +1469,20 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:862 +#: ../src/xz/xz.1:917 #, no-wrap msgid "B<--block-list=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:868 +#: ../src/xz/xz.1:923 msgid "" "When compressing to the B<.xz> format, start a new block after the given " "intervals of uncompressed data." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:874 +#: ../src/xz/xz.1:929 msgid "" "The uncompressed I of the blocks are specified as a comma-separated " "list. Omitting a size (two or more consecutive commas) is a shorthand to " @@ -1410,7 +1490,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:884 +#: ../src/xz/xz.1:939 msgid "" "If the input file is bigger than the sum of I, the last value in " "I is repeated until the end of the file. A special value of B<0> may " @@ -1419,7 +1499,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:899 +#: ../src/xz/xz.1:954 msgid "" "If one specifies I that exceed the encoder's block size (either the " "default value in threaded mode or the value specified with " @@ -1431,7 +1511,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:905 +#: ../src/xz/xz.1:960 msgid "" "In multi-threaded mode the sizes of the blocks are stored in the block " "headers. This isn't done in single-threaded mode, so the encoded output " @@ -1439,13 +1519,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:905 +#: ../src/xz/xz.1:960 #, no-wrap msgid "B<--flush-timeout=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:922 +#: ../src/xz/xz.1:977 msgid "" "When compressing, if more than I milliseconds (a positive integer) " "has passed since the previous flush and reading more input would block, all " @@ -1457,7 +1537,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:930 +#: ../src/xz/xz.1:985 msgid "" "This feature is disabled by default. If this option is specified more than " "once, the last one takes effect. The special I value of B<0> can " @@ -1465,56 +1545,71 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:932 +#: ../src/xz/xz.1:987 msgid "This feature is not available on non-POSIX systems." msgstr "" #. FIXME #. type: Plain text -#: ../src/xz/xz.1:940 +#: ../src/xz/xz.1:995 msgid "" "B Currently B is unsuitable for " "decompressing the stream in real time due to how B does buffering." msgstr "" #. type: TP -#: ../src/xz/xz.1:940 +#: ../src/xz/xz.1:995 #, no-wrap msgid "B<--memlimit-compress=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:945 +#: ../src/xz/xz.1:1000 msgid "" "Set a memory usage limit for compression. If this option is specified " "multiple times, the last one takes effect." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:960 +#: ../src/xz/xz.1:1013 msgid "" -"If the compression settings exceed the I, B will adjust the " -"settings downwards so that the limit is no longer exceeded and display a " -"notice that automatic adjustment was done. Such adjustments are not made " -"when compressing with B<--format=raw> or if B<--no-adjust> has been " -"specified. In those cases, an error is displayed and B will exit with " -"exit status 1." +"If the compression settings exceed the I, B will attempt to " +"adjust the settings downwards so that the limit is no longer exceeded and " +"display a notice that automatic adjustment was done. The adjustments are " +"done in this order: reducing the number of threads, switching to " +"single-threaded mode if even one thread in multi-threaded mode exceeds the " +"I, and finally reducing the LZMA2 dictionary size." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:964 +#: ../src/xz/xz.1:1021 +msgid "" +"When compressing with B<--format=raw> or if B<--no-adjust> has been " +"specified, only the number of threads may be reduced since it can be done " +"without affecting the compressed output." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1028 +msgid "" +"If the I cannot be met even with the adjustments described above, an " +"error is displayed and B will exit with exit status 1." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1032 msgid "The I can be specified in multiple ways:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:974 +#: ../src/xz/xz.1:1042 msgid "" "The I can be an absolute value in bytes. Using an integer suffix " "like B can be useful. Example: B<--memlimit-compress=80MiB>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:986 +#: ../src/xz/xz.1:1054 msgid "" "The I can be specified as a percentage of total physical memory " "(RAM). This can be useful especially when setting the B " @@ -1524,39 +1619,37 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1006 +#: ../src/xz/xz.1:1064 msgid "" "The I can be reset back to its default value by setting it to B<0>. " "This is currently equivalent to setting the I to B (no memory " -"usage limit). Once multithreading support has been implemented, there may " -"be a difference between B<0> and B for the multithreaded case, so it is " -"recommended to use B<0> instead of B until the details have been " -"decided." +"usage limit)." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1026 +#: ../src/xz/xz.1:1088 msgid "" "For 32-bit B there is a special case: if the I would be over " -"B<4020\\ MiB>, the I is set to B<4020\\ MiB>. (The values B<0> and " -"B aren't affected by this. A similar feature doesn't exist for " -"decompression.) This can be helpful when a 32-bit executable has access to " -"4\\ GiB address space while hopefully doing no harm in other situations." +"B<4020\\ MiB>, the I is set to B<4020\\ MiB>. On MIPS32 B<2000\\ " +"MiB> is used instead. (The values B<0> and B aren't affected by this. " +"A similar feature doesn't exist for decompression.) This can be helpful " +"when a 32-bit executable has access to 4\\ GiB address space (2 GiB on " +"MIPS32) while hopefully doing no harm in other situations." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1029 +#: ../src/xz/xz.1:1091 msgid "See also the section B." msgstr "" #. type: TP -#: ../src/xz/xz.1:1029 +#: ../src/xz/xz.1:1091 #, no-wrap msgid "B<--memlimit-decompress=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1043 +#: ../src/xz/xz.1:1105 msgid "" "Set a memory usage limit for decompression. This also affects the B<--list> " "mode. If the operation is not possible without exceeding the I, " @@ -1565,52 +1658,142 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1043 +#: ../src/xz/xz.1:1105 #, no-wrap +msgid "B<--memlimit-mt-decompress=>I" +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1127 +msgid "" +"Set a memory usage limit for multi-threaded decompression. This can only " +"affect the number of threads; this will never make B refuse to " +"decompress a file. If I is too low to allow any multi-threading, the " +"I is ignored and B will continue in single-threaded mode. Note " +"that if also B<--memlimit-decompress> is used, it will always apply to both " +"single-threaded and multi-threaded modes, and so the effective I for " +"multi-threading will never be higher than the limit set with " +"B<--memlimit-decompress>." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1134 +msgid "" +"In contrast to the other memory usage limit options, " +"B<--memlimit-mt-decompress=>I has a system-specific default " +"I. B can be used to see the current value." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1150 +msgid "" +"This option and its default value exist because without any limit the " +"threaded decompressor could end up allocating an insane amount of memory " +"with some input files. If the default I is too low on your system, " +"feel free to increase the I but never set it to a value larger than " +"the amount of usable RAM as with appropriate input files B will attempt " +"to use that amount of memory even with a low number of threads. Running out " +"of memory or swapping will not improve decompression performance." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1162 +msgid "" +"See B<--memlimit-compress=>I for possible ways to specify the " +"I. Setting I to B<0> resets the I to the default " +"system-specific value." +msgstr "" + +#. type: TP +#: ../src/xz/xz.1:1163 +#, no-wrap msgid "B<-M> I, B<--memlimit=>I, B<--memory=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1047 +#: ../src/xz/xz.1:1169 msgid "" -"This is equivalent to specifying B<--memlimit-compress=>IB<--memlimit-decompress=>I." +"This is equivalent to specifying B<--memlimit-compress=>I " +"B<--memlimit-decompress=>I B<--memlimit-mt-decompress=>I." msgstr "" #. type: TP -#: ../src/xz/xz.1:1047 +#: ../src/xz/xz.1:1169 #, no-wrap msgid "B<--no-adjust>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1055 +#: ../src/xz/xz.1:1179 msgid "" -"Display an error and exit if the compression settings exceed the memory " -"usage limit. The default is to adjust the settings downwards so that the " -"memory usage limit is not exceeded. Automatic adjusting is always disabled " -"when creating raw streams (B<--format=raw>)." +"Display an error and exit if the memory usage limit cannot be met without " +"adjusting settings that affect the compressed output. That is, this " +"prevents B from switching the encoder from multi-threaded mode to " +"single-threaded mode and from reducing the LZMA2 dictionary size. Even when " +"this option is used the number of threads may be reduced to meet the memory " +"usage limit as that won't affect the compressed output." msgstr "" +#. type: Plain text +#: ../src/xz/xz.1:1182 +msgid "" +"Automatic adjusting is always disabled when creating raw streams " +"(B<--format=raw>)." +msgstr "" + #. type: TP -#: ../src/xz/xz.1:1055 +#: ../src/xz/xz.1:1182 #, no-wrap msgid "B<-T> I, B<--threads=>I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1070 +#: ../src/xz/xz.1:1197 msgid "" "Specify the number of worker threads to use. Setting I to a " -"special value B<0> makes B use as many threads as there are CPU cores on " -"the system. The actual number of threads can be less than I if the " -"input file is not big enough for threading with the given settings or if " -"using more threads would exceed the memory usage limit." +"special value B<0> makes B use up to as many threads as the processor(s) " +"on the system support. The actual number of threads can be fewer than " +"I if the input file is not big enough for threading with the given " +"settings or if using more threads would exceed the memory usage limit." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1077 +#: ../src/xz/xz.1:1216 msgid "" +"The single-threaded and multi-threaded compressors produce different " +"output. Single-threaded compressor will give the smallest file size but " +"only the output from the multi-threaded compressor can be decompressed using " +"multiple threads. Setting I to B<1> will use the single-threaded " +"mode. Setting I to any other value, including B<0>, will use the " +"multi-threaded compressor even if the system supports only one hardware " +"thread. (B 5.2.x used single-threaded mode in this situation.)" +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1235 +msgid "" +"To use multi-threaded mode with only one thread, set I to B<+1>. " +"The B<+> prefix has no effect with values other than B<1>. A memory usage " +"limit can still make B switch to single-threaded mode unless " +"B<--no-adjust> is used. Support for the B<+> prefix was added in B " +"5.4.0." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1250 +msgid "" +"If an automatic number of threads has been requested and no memory usage " +"limit has been specified, then a system-specific default soft limit will be " +"used to possibly limit the number of threads. It is a soft limit in sense " +"that it is ignored if the number of threads becomes one, thus a soft limit " +"will never stop B from compressing or decompressing. This default soft " +"limit will not make B switch from multi-threaded mode to single-threaded " +"mode. The active limits can be seen with B." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:1257 +msgid "" "Currently the only threading method is to split the input into blocks and " "compress them independently from each other. The default block size depends " "on the compression level and can be overridden with the " @@ -1618,34 +1801,34 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1085 +#: ../src/xz/xz.1:1265 msgid "" -"Threaded decompression hasn't been implemented yet. It will only work on " -"files that contain multiple blocks with size information in block headers. " -"All files compressed in multi-threaded mode meet this condition, but files " -"compressed in single-threaded mode don't even if B<--block-size=>I is " -"used." +"Threaded decompression only works on files that contain multiple blocks with " +"size information in block headers. All large enough files compressed in " +"multi-threaded mode meet this condition, but files compressed in " +"single-threaded mode don't even if B<--block-size=>I has been used." msgstr "" #. type: SS -#: ../src/xz/xz.1:1086 ../src/xz/xz.1:2603 +#: ../src/xz/xz.1:1266 ../src/xz/xz.1:2819 #, no-wrap msgid "Custom compressor filter chains" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1097 +#: ../src/xz/xz.1:1282 msgid "" "A custom filter chain allows specifying the compression settings in detail " "instead of relying on the settings associated to the presets. When a custom " -"filter chain is specified, preset options (B<-0> ... B<-9> and B<--extreme>) " -"earlier on the command line are forgotten. If a preset option is specified " -"after one or more custom filter chain options, the new preset takes effect " -"and the custom filter chain options specified earlier are forgotten." +"filter chain is specified, preset options (B<-0> \\&...\\& B<-9> and " +"B<--extreme>) earlier on the command line are forgotten. If a preset " +"option is specified after one or more custom filter chain options, the new " +"preset takes effect and the custom filter chain options specified earlier " +"are forgotten." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1104 +#: ../src/xz/xz.1:1289 msgid "" "A filter chain is comparable to piping on the command line. When " "compressing, the uncompressed input goes to the first filter, whose output " @@ -1655,7 +1838,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1112 +#: ../src/xz/xz.1:1297 msgid "" "Many filters have limitations on where they can be in the filter chain: some " "filters can work only as the last filter in the chain, some only as a " @@ -1665,7 +1848,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1120 +#: ../src/xz/xz.1:1305 msgid "" "A custom filter chain is specified by using one or more filter options in " "the order they are wanted in the filter chain. That is, the order of filter " @@ -1675,7 +1858,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1129 +#: ../src/xz/xz.1:1314 msgid "" "Filters take filter-specific I as a comma-separated list. Extra " "commas in I are ignored. Every option has a default value, so you " @@ -1683,7 +1866,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1138 +#: ../src/xz/xz.1:1323 msgid "" "To see the whole filter chain and I, use B (that is, use " "B<--verbose> twice). This works also for viewing the filter chain options " @@ -1691,26 +1874,26 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1138 +#: ../src/xz/xz.1:1323 #, no-wrap msgid "B<--lzma1>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1141 +#: ../src/xz/xz.1:1326 #, no-wrap msgid "B<--lzma2>[B<=>I]" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1146 +#: ../src/xz/xz.1:1331 msgid "" "Add LZMA1 or LZMA2 filter to the filter chain. These filters can be used " "only as the last filter in the chain." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1158 +#: ../src/xz/xz.1:1343 msgid "" "LZMA1 is a legacy filter, which is supported almost solely due to the legacy " "B<.lzma> file format, which supports only LZMA1. LZMA2 is an updated " @@ -1720,35 +1903,35 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1161 +#: ../src/xz/xz.1:1346 msgid "LZMA1 and LZMA2 share the same set of I:" msgstr "" #. type: TP -#: ../src/xz/xz.1:1162 +#: ../src/xz/xz.1:1347 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1186 +#: ../src/xz/xz.1:1374 msgid "" "Reset all LZMA1 or LZMA2 I to I. I consist of an " "integer, which may be followed by single-letter preset modifiers. The " "integer can be from B<0> to B<9>, matching the command line options B<-0> " -"... B<-9>. The only supported modifier is currently B, which matches " -"B<--extreme>. If no B is specified, the default values of LZMA1 or " -"LZMA2 I are taken from the preset B<6>." +"\\&...\\& B<-9>. The only supported modifier is currently B, which " +"matches B<--extreme>. If no B is specified, the default values of " +"LZMA1 or LZMA2 I are taken from the preset B<6>." msgstr "" #. type: TP -#: ../src/xz/xz.1:1186 +#: ../src/xz/xz.1:1374 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1201 +#: ../src/xz/xz.1:1389 msgid "" "Dictionary (history buffer) I indicates how many bytes of the " "recently processed uncompressed data is kept in memory. The algorithm tries " @@ -1760,7 +1943,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1210 +#: ../src/xz/xz.1:1398 msgid "" "Typical dictionary I is from 64\\ KiB to 64\\ MiB. The minimum is 4\\ " "KiB. The maximum for compression is currently 1.5\\ GiB (1536\\ MiB). The " @@ -1769,7 +1952,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1237 +#: ../src/xz/xz.1:1425 msgid "" "Dictionary I and match finder (I) together determine the memory " "usage of the LZMA1 or LZMA2 encoder. The same (or bigger) dictionary " @@ -1782,13 +1965,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1237 +#: ../src/xz/xz.1:1425 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1246 +#: ../src/xz/xz.1:1434 msgid "" "Specify the number of literal context bits. The minimum is 0 and the " "maximum is 4; the default is 3. In addition, the sum of I and I " @@ -1796,47 +1979,48 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1251 +#: ../src/xz/xz.1:1439 msgid "" "All bytes that cannot be encoded as matches are encoded as literals. That " "is, literals are simply 8-bit bytes that are encoded one at a time." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1265 +#: ../src/xz/xz.1:1453 msgid "" "The literal coding makes an assumption that the highest I bits of the " -"previous uncompressed byte correlate with the next byte. E.g. in typical " -"English text, an upper-case letter is often followed by a lower-case letter, " -"and a lower-case letter is usually followed by another lower-case letter. " -"In the US-ASCII character set, the highest three bits are 010 for upper-case " -"letters and 011 for lower-case letters. When I is at least 3, the " -"literal coding can take advantage of this property in the uncompressed data." +"previous uncompressed byte correlate with the next byte. For example, in " +"typical English text, an upper-case letter is often followed by a lower-case " +"letter, and a lower-case letter is usually followed by another lower-case " +"letter. In the US-ASCII character set, the highest three bits are 010 for " +"upper-case letters and 011 for lower-case letters. When I is at least " +"3, the literal coding can take advantage of this property in the " +"uncompressed data." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1274 +#: ../src/xz/xz.1:1462 msgid "" "The default value (3) is usually good. If you want maximum compression, " "test B. Sometimes it helps a little, and sometimes it makes " -"compression worse. If it makes it worse, test e.g.\\& B too." +"compression worse. If it makes it worse, test B too." msgstr "" #. type: TP -#: ../src/xz/xz.1:1274 +#: ../src/xz/xz.1:1462 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1278 +#: ../src/xz/xz.1:1466 msgid "" "Specify the number of literal position bits. The minimum is 0 and the " "maximum is 4; the default is 0." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1285 +#: ../src/xz/xz.1:1473 msgid "" "I affects what kind of alignment in the uncompressed data is assumed " "when encoding literals. See I below for more information about " @@ -1844,20 +2028,20 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1285 +#: ../src/xz/xz.1:1473 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1289 +#: ../src/xz/xz.1:1477 msgid "" "Specify the number of position bits. The minimum is 0 and the maximum is 4; " "the default is 2." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1296 +#: ../src/xz/xz.1:1484 msgid "" "I affects what kind of alignment in the uncompressed data is assumed in " "general. The default means four-byte alignment (2^I=2^2=4), which is " @@ -1865,17 +2049,17 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1310 +#: ../src/xz/xz.1:1498 msgid "" -"When the aligment is known, setting I accordingly may reduce the file " -"size a little. E.g. with text files having one-byte alignment (US-ASCII, " -"ISO-8859-*, UTF-8), setting B can improve compression slightly. For " -"UTF-16 text, B is a good choice. If the alignment is an odd number " -"like 3 bytes, B might be the best choice." +"When the alignment is known, setting I accordingly may reduce the file " +"size a little. For example, with text files having one-byte alignment " +"(US-ASCII, ISO-8859-*, UTF-8), setting B can improve compression " +"slightly. For UTF-16 text, B is a good choice. If the alignment is " +"an odd number like 3 bytes, B might be the best choice." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1318 +#: ../src/xz/xz.1:1506 msgid "" "Even though the assumed alignment can be adjusted with I and I, " "LZMA1 and LZMA2 still slightly favor 16-byte alignment. It might be worth " @@ -1884,22 +2068,22 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1318 +#: ../src/xz/xz.1:1506 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1333 +#: ../src/xz/xz.1:1521 msgid "" "Match finder has a major effect on encoder speed, memory usage, and " "compression ratio. Usually Hash Chain match finders are faster than Binary " "Tree match finders. The default depends on the I: 0 uses B, " -"1-3 use B, and the rest use B." +"1\\(en3 use B, and the rest use B." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1339 +#: ../src/xz/xz.1:1527 msgid "" "The following match finders are supported. The memory usage formulas below " "are rough approximations, which are closest to the reality when I is a " @@ -1907,154 +2091,155 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1340 +#: ../src/xz/xz.1:1528 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1343 +#: ../src/xz/xz.1:1531 msgid "Hash Chain with 2- and 3-byte hashing" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1347 ../src/xz/xz.1:1396 +#: ../src/xz/xz.1:1535 ../src/xz/xz.1:1584 msgid "Minimum value for I: 3" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1349 ../src/xz/xz.1:1368 ../src/xz/xz.1:1398 ../src/xz/xz.1:1417 +#: ../src/xz/xz.1:1537 ../src/xz/xz.1:1556 ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1605 msgid "Memory usage:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1354 +#: ../src/xz/xz.1:1542 msgid "I * 7.5 (if I E= 16 MiB);" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1359 +#: ../src/xz/xz.1:1547 msgid "I * 5.5 + 64 MiB (if I E 16 MiB)" msgstr "" #. type: TP -#: ../src/xz/xz.1:1359 +#: ../src/xz/xz.1:1547 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1362 +#: ../src/xz/xz.1:1550 msgid "Hash Chain with 2-, 3-, and 4-byte hashing" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1366 ../src/xz/xz.1:1415 +#: ../src/xz/xz.1:1554 ../src/xz/xz.1:1603 msgid "Minimum value for I: 4" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1373 +#: ../src/xz/xz.1:1561 msgid "I * 7.5 (if I E= 32 MiB);" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1378 +#: ../src/xz/xz.1:1566 msgid "I * 6.5 (if I E 32 MiB)" msgstr "" #. type: TP -#: ../src/xz/xz.1:1378 +#: ../src/xz/xz.1:1566 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1381 +#: ../src/xz/xz.1:1569 msgid "Binary Tree with 2-byte hashing" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1385 +#: ../src/xz/xz.1:1573 msgid "Minimum value for I: 2" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1389 +#: ../src/xz/xz.1:1577 msgid "Memory usage: I * 9.5" msgstr "" #. type: TP -#: ../src/xz/xz.1:1389 +#: ../src/xz/xz.1:1577 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1392 +#: ../src/xz/xz.1:1580 msgid "Binary Tree with 2- and 3-byte hashing" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1403 +#: ../src/xz/xz.1:1591 msgid "I * 11.5 (if I E= 16 MiB);" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1408 +#: ../src/xz/xz.1:1596 msgid "I * 9.5 + 64 MiB (if I E 16 MiB)" msgstr "" #. type: TP -#: ../src/xz/xz.1:1408 +#: ../src/xz/xz.1:1596 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1411 +#: ../src/xz/xz.1:1599 msgid "Binary Tree with 2-, 3-, and 4-byte hashing" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1422 +#: ../src/xz/xz.1:1610 msgid "I * 11.5 (if I E= 32 MiB);" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1427 +#: ../src/xz/xz.1:1615 msgid "I * 10.5 (if I E 32 MiB)" msgstr "" #. type: TP -#: ../src/xz/xz.1:1428 +#: ../src/xz/xz.1:1616 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1449 +#: ../src/xz/xz.1:1637 msgid "" "Compression I specifies the method to analyze the data produced by the " "match finder. Supported I are B and B. The default is " -"B for I 0-3 and B for I 4-9." +"B for I 0\\(en3 and B for I 4\\(en9." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1458 +#: ../src/xz/xz.1:1646 msgid "" "Usually B is used with Hash Chain match finders and B with " "Binary Tree match finders. This is also what the I do." msgstr "" #. type: TP -#: ../src/xz/xz.1:1458 +#: ../src/xz/xz.1:1646 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1465 +#: ../src/xz/xz.1:1653 msgid "" "Specify what is considered to be a nice length for a match. Once a match of " "at least I bytes is found, the algorithm stops looking for possibly " @@ -2062,20 +2247,21 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1472 +#: ../src/xz/xz.1:1660 msgid "" -"I can be 2-273 bytes. Higher values tend to give better compression " -"ratio at the expense of speed. The default depends on the I." +"I can be 2\\(en273 bytes. Higher values tend to give better " +"compression ratio at the expense of speed. The default depends on the " +"I." msgstr "" #. type: TP -#: ../src/xz/xz.1:1472 +#: ../src/xz/xz.1:1660 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1482 +#: ../src/xz/xz.1:1670 msgid "" "Specify the maximum search depth in the match finder. The default is the " "special value of 0, which makes the compressor determine a reasonable " @@ -2083,239 +2269,230 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1493 +#: ../src/xz/xz.1:1681 msgid "" -"Reasonable I for Hash Chains is 4-100 and 16-1000 for Binary Trees. " -"Using very high values for I can make the encoder extremely slow with " -"some files. Avoid setting the I over 1000 unless you are prepared to " -"interrupt the compression in case it is taking far too long." +"Reasonable I for Hash Chains is 4\\(en100 and 16\\(en1000 for Binary " +"Trees. Using very high values for I can make the encoder extremely " +"slow with some files. Avoid setting the I over 1000 unless you are " +"prepared to interrupt the compression in case it is taking far too long." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1504 +#: ../src/xz/xz.1:1692 msgid "" "When decoding raw streams (B<--format=raw>), LZMA2 needs only the dictionary " "I. LZMA1 needs also I, I, and I." msgstr "" #. type: TP -#: ../src/xz/xz.1:1504 +#: ../src/xz/xz.1:1692 #, no-wrap msgid "B<--x86>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1507 +#: ../src/xz/xz.1:1695 #, no-wrap -msgid "B<--powerpc>[B<=>I]" +msgid "B<--arm>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1509 +#: ../src/xz/xz.1:1697 #, no-wrap -msgid "B<--ia64>[B<=>I]" +msgid "B<--armthumb>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1511 +#: ../src/xz/xz.1:1699 #, no-wrap -msgid "B<--arm>[B<=>I]" +msgid "B<--arm64>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1513 +#: ../src/xz/xz.1:1701 #, no-wrap -msgid "B<--armthumb>[B<=>I]" +msgid "B<--powerpc>[B<=>I]" msgstr "" #. type: TP -#: ../src/xz/xz.1:1515 +#: ../src/xz/xz.1:1703 #, no-wrap +msgid "B<--ia64>[B<=>I]" +msgstr "" + +#. type: TP +#: ../src/xz/xz.1:1705 +#, no-wrap msgid "B<--sparc>[B<=>I]" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1521 +#: ../src/xz/xz.1:1711 msgid "" "Add a branch/call/jump (BCJ) filter to the filter chain. These filters can " "be used only as a non-last filter in the filter chain." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1533 +#: ../src/xz/xz.1:1725 msgid "" "A BCJ filter converts relative addresses in the machine code to their " -"absolute counterparts. This doesn't change the size of the data, but it " -"increases redundancy, which can help LZMA2 to produce 0-15\\ % smaller " +"absolute counterparts. This doesn't change the size of the data but it " +"increases redundancy, which can help LZMA2 to produce 0\\(en15\\ % smaller " "B<.xz> file. The BCJ filters are always reversible, so using a BCJ filter " "for wrong type of data doesn't cause any data loss, although it may make the " -"compression ratio slightly worse." +"compression ratio slightly worse. The BCJ filters are very fast and use an " +"insignificant amount of memory." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1540 -msgid "" -"It is fine to apply a BCJ filter on a whole executable; there's no need to " -"apply it only on the executable section. Applying a BCJ filter on an " -"archive that contains both executable and non-executable files may or may " -"not give good results, so it generally isn't good to blindly apply a BCJ " -"filter when compressing binary packages for distribution." -msgstr "" - -#. type: Plain text -#: ../src/xz/xz.1:1548 -msgid "" -"These BCJ filters are very fast and use insignificant amount of memory. If " -"a BCJ filter improves compression ratio of a file, it can improve " -"decompression speed at the same time. This is because, on the same " -"hardware, the decompression speed of LZMA2 is roughly a fixed number of " -"bytes of compressed data per second." -msgstr "" - -#. type: Plain text -#: ../src/xz/xz.1:1551 +#: ../src/xz/xz.1:1728 msgid "These BCJ filters have known problems related to the compression ratio:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1558 +#: ../src/xz/xz.1:1735 msgid "" -"Some types of files containing executable code (e.g. object files, static " -"libraries, and Linux kernel modules) have the addresses in the instructions " -"filled with filler values. These BCJ filters will still do the address " -"conversion, which will make the compression worse with these files." +"Some types of files containing executable code (for example, object files, " +"static libraries, and Linux kernel modules) have the addresses in the " +"instructions filled with filler values. These BCJ filters will still do the " +"address conversion, which will make the compression worse with these files." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1565 +#: ../src/xz/xz.1:1745 msgid "" -"Applying a BCJ filter on an archive containing multiple similar executables " -"can make the compression ratio worse than not using a BCJ filter. This is " -"because the BCJ filter doesn't detect the boundaries of the executable " -"files, and doesn't reset the address conversion counter for each executable." +"If a BCJ filter is applied on an archive, it is possible that it makes the " +"compression ratio worse than not using a BCJ filter. For example, if there " +"are similar or even identical executables then filtering will likely make " +"the files less similar and thus compression is worse. The contents of " +"non-executable files in the same archive can matter too. In practice one " +"has to try with and without a BCJ filter to see which is better in each " +"situation." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1572 +#: ../src/xz/xz.1:1750 msgid "" -"Both of the above problems will be fixed in the future in a new filter. The " -"old BCJ filters will still be useful in embedded systems, because the " -"decoder of the new filter will be bigger and use more memory." +"Different instruction sets have different alignment: the executable file " +"must be aligned to a multiple of this value in the input data to make the " +"filter work." msgstr "" -#. type: Plain text -#: ../src/xz/xz.1:1574 -msgid "Different instruction sets have different alignment:" -msgstr "" - #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Filter" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Alignment" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1581 +#: ../src/xz/xz.1:1757 #, no-wrap msgid "Notes" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1582 +#: ../src/xz/xz.1:1758 #, no-wrap msgid "x86" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1582 +#: ../src/xz/xz.1:1758 #, no-wrap msgid "32-bit or 64-bit x86" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1583 +#: ../src/xz/xz.1:1759 #, no-wrap -msgid "PowerPC" +msgid "ARM" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1583 +#: ../src/xz/xz.1:1760 #, no-wrap -msgid "Big endian only" +msgid "ARM-Thumb" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1584 +#: ../src/xz/xz.1:1761 #, no-wrap -msgid "ARM" +msgid "ARM64" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1584 ../src/xz/xz.1:1585 +#: ../src/xz/xz.1:1761 #, no-wrap -msgid "Little endian only" +msgid "4096-byte alignment is best" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1585 +#: ../src/xz/xz.1:1762 #, no-wrap -msgid "ARM-Thumb" +msgid "PowerPC" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1762 #, no-wrap +msgid "Big endian only" +msgstr "" + +#. type: tbl table +#: ../src/xz/xz.1:1763 +#, no-wrap msgid "IA-64" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1586 +#: ../src/xz/xz.1:1763 #, no-wrap msgid "16" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1586 ../src/xz/xz.1:1587 +#: ../src/xz/xz.1:1763 #, no-wrap -msgid "Big or little endian" +msgid "Itanium" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:1587 +#: ../src/xz/xz.1:1764 #, no-wrap msgid "SPARC" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1602 +#: ../src/xz/xz.1:1781 msgid "" "Since the BCJ-filtered data is usually compressed with LZMA2, the " "compression ratio may be improved slightly if the LZMA2 options are set to " "match the alignment of the selected BCJ filter. For example, with the IA-64 " -"filter, it's good to set B with LZMA2 (2^4=16). The x86 filter is an " -"exception; it's usually good to stick to LZMA2's default four-byte alignment " -"when compressing x86 executables." +"filter, it's good to set B or even B with LZMA2 " +"(2^4=16). The x86 filter is an exception; it's usually good to stick to " +"LZMA2's default four-byte alignment when compressing x86 executables." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1605 +#: ../src/xz/xz.1:1784 msgid "All BCJ filters support the same I:" msgstr "" #. type: TP -#: ../src/xz/xz.1:1606 +#: ../src/xz/xz.1:1785 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1620 +#: ../src/xz/xz.1:1799 msgid "" "Specify the start I that is used when converting between relative " "and absolute addresses. The I must be a multiple of the alignment " @@ -2324,67 +2501,68 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1621 +#: ../src/xz/xz.1:1800 #, no-wrap msgid "B<--delta>[B<=>I]" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1626 +#: ../src/xz/xz.1:1805 msgid "" "Add the Delta filter to the filter chain. The Delta filter can be only used " "as a non-last filter in the filter chain." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1635 +#: ../src/xz/xz.1:1814 msgid "" "Currently only simple byte-wise delta calculation is supported. It can be " -"useful when compressing e.g. uncompressed bitmap images or uncompressed PCM " -"audio. However, special purpose algorithms may give significantly better " -"results than Delta + LZMA2. This is true especially with audio, which " -"compresses faster and better e.g. with B(1)." +"useful when compressing, for example, uncompressed bitmap images or " +"uncompressed PCM audio. However, special purpose algorithms may give " +"significantly better results than Delta + LZMA2. This is true especially " +"with audio, which compresses faster and better, for example, with " +"B(1)." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1638 +#: ../src/xz/xz.1:1817 msgid "Supported I:" msgstr "" #. type: TP -#: ../src/xz/xz.1:1639 +#: ../src/xz/xz.1:1818 #, no-wrap msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1647 +#: ../src/xz/xz.1:1826 msgid "" "Specify the I of the delta calculation in bytes. I must " -"be 1-256. The default is 1." +"be 1\\(en256. The default is 1." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1652 +#: ../src/xz/xz.1:1831 msgid "" "For example, with B and eight-byte input A1 B1 A2 B3 A3 B5 A4 B7, " "the output will be A1 B1 01 02 01 02 01 02." msgstr "" #. type: SS -#: ../src/xz/xz.1:1654 +#: ../src/xz/xz.1:1833 #, no-wrap msgid "Other options" msgstr "" #. type: TP -#: ../src/xz/xz.1:1655 ../src/xzdec/xzdec.1:83 +#: ../src/xz/xz.1:1834 ../src/xzdec/xzdec.1:83 #, no-wrap msgid "B<-q>, B<--quiet>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1662 +#: ../src/xz/xz.1:1841 msgid "" "Suppress warnings and notices. Specify this twice to suppress errors too. " "This option has no effect on the exit status. That is, even if a warning " @@ -2392,13 +2570,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1662 +#: ../src/xz/xz.1:1841 #, no-wrap msgid "B<-v>, B<--verbose>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1671 +#: ../src/xz/xz.1:1850 msgid "" "Be verbose. If standard error is connected to a terminal, B will " "display a progress indicator. Specifying B<--verbose> twice will give even " @@ -2406,40 +2584,40 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1673 +#: ../src/xz/xz.1:1852 msgid "The progress indicator shows the following information:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1678 +#: ../src/xz/xz.1:1857 msgid "" "Completion percentage is shown if the size of the input file is known. That " "is, the percentage cannot be shown in pipes." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1681 +#: ../src/xz/xz.1:1860 msgid "" "Amount of compressed data produced (compressing) or consumed " "(decompressing)." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1684 +#: ../src/xz/xz.1:1863 msgid "" "Amount of uncompressed data consumed (compressing) or produced " "(decompressing)." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1688 +#: ../src/xz/xz.1:1867 msgid "" "Compression ratio, which is calculated by dividing the amount of compressed " "data processed so far by the amount of uncompressed data processed so far." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1695 +#: ../src/xz/xz.1:1874 msgid "" "Compression or decompression speed. This is measured as the amount of " "uncompressed data consumed (compression) or produced (decompression) per " @@ -2448,39 +2626,39 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1697 +#: ../src/xz/xz.1:1876 msgid "Elapsed time in the format M:SS or H:MM:SS." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1705 +#: ../src/xz/xz.1:1884 msgid "" "Estimated remaining time is shown only when the size of the input file is " "known and a couple of seconds have already passed since B started " "processing the file. The time is shown in a less precise format which never " -"has any colons, e.g. 2 min 30 s." +"has any colons, for example, 2 min 30 s." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1720 +#: ../src/xz/xz.1:1899 msgid "" "When standard error is not a terminal, B<--verbose> will make B print " "the filename, compressed size, uncompressed size, compression ratio, and " "possibly also the speed and elapsed time on a single line to standard error " "after compressing or decompressing the file. The speed and elapsed time are " "included only when the operation took at least a few seconds. If the " -"operation didn't finish, e.g. due to user interruption, also the completion " -"percentage is printed if the size of the input file is known." +"operation didn't finish, for example, due to user interruption, also the " +"completion percentage is printed if the size of the input file is known." msgstr "" #. type: TP -#: ../src/xz/xz.1:1720 ../src/xzdec/xzdec.1:89 +#: ../src/xz/xz.1:1899 ../src/xzdec/xzdec.1:89 #, no-wrap msgid "B<-Q>, B<--no-warn>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1730 +#: ../src/xz/xz.1:1909 msgid "" "Don't set the exit status to 2 even if a condition worth a warning was " "detected. This option doesn't affect the verbosity level, thus both " @@ -2489,13 +2667,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1730 +#: ../src/xz/xz.1:1909 #, no-wrap msgid "B<--robot>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1742 +#: ../src/xz/xz.1:1921 msgid "" "Print messages in a machine-parsable format. This is intended to ease " "writing frontends that want to use B instead of liblzma, which may be " @@ -2505,66 +2683,66 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1742 +#: ../src/xz/xz.1:1921 #, no-wrap msgid "B<--info-memory>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1748 +#: ../src/xz/xz.1:1928 msgid "" -"Display, in human-readable format, how much physical memory (RAM) B " -"thinks the system has and the memory usage limits for compression and " -"decompression, and exit successfully." +"Display, in human-readable format, how much physical memory (RAM) and how " +"many processor threads B thinks the system has and the memory usage " +"limits for compression and decompression, and exit successfully." msgstr "" #. type: TP -#: ../src/xz/xz.1:1748 ../src/xzdec/xzdec.1:96 +#: ../src/xz/xz.1:1928 ../src/xzdec/xzdec.1:96 #, no-wrap msgid "B<-h>, B<--help>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1752 +#: ../src/xz/xz.1:1932 msgid "" "Display a help message describing the most commonly used options, and exit " "successfully." msgstr "" #. type: TP -#: ../src/xz/xz.1:1752 +#: ../src/xz/xz.1:1932 #, no-wrap msgid "B<-H>, B<--long-help>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1757 +#: ../src/xz/xz.1:1937 msgid "" "Display a help message describing all features of B, and exit " "successfully" msgstr "" #. type: TP -#: ../src/xz/xz.1:1757 ../src/xzdec/xzdec.1:99 +#: ../src/xz/xz.1:1937 ../src/xzdec/xzdec.1:99 #, no-wrap msgid "B<-V>, B<--version>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1766 +#: ../src/xz/xz.1:1946 msgid "" "Display the version number of B and liblzma in human readable format. " "To get machine-parsable output, specify B<--robot> before B<--version>." msgstr "" #. type: SH -#: ../src/xz/xz.1:1767 +#: ../src/xz/xz.1:1947 #, no-wrap msgid "ROBOT MODE" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1783 +#: ../src/xz/xz.1:1963 msgid "" "The robot mode is activated with the B<--robot> option. It makes the output " "of B easier to parse by other programs. Currently B<--robot> is " @@ -2573,155 +2751,204 @@ msgstr "" #. type: SS -#: ../src/xz/xz.1:1784 +#: ../src/xz/xz.1:1964 #, no-wrap msgid "Version" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1789 +#: ../src/xz/xz.1:1969 msgid "" "B will print the version number of B and liblzma " "in the following format:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1791 +#: ../src/xz/xz.1:1971 msgid "BI" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1793 +#: ../src/xz/xz.1:1973 msgid "BI" msgstr "" #. type: TP -#: ../src/xz/xz.1:1793 +#: ../src/xz/xz.1:1973 #, no-wrap msgid "I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1796 +#: ../src/xz/xz.1:1976 msgid "Major version." msgstr "" #. type: TP -#: ../src/xz/xz.1:1796 +#: ../src/xz/xz.1:1976 #, no-wrap msgid "I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1801 +#: ../src/xz/xz.1:1981 msgid "" "Minor version. Even numbers are stable. Odd numbers are alpha or beta " "versions." msgstr "" #. type: TP -#: ../src/xz/xz.1:1801 +#: ../src/xz/xz.1:1981 #, no-wrap msgid "I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1805 +#: ../src/xz/xz.1:1985 msgid "Patch level for stable releases or just a counter for development releases." msgstr "" #. type: TP -#: ../src/xz/xz.1:1805 +#: ../src/xz/xz.1:1985 #, no-wrap msgid "I" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1813 +#: ../src/xz/xz.1:1993 msgid "" "Stability. 0 is alpha, 1 is beta, and 2 is stable. I should be always 2 " "when I is even." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1818 +#: ../src/xz/xz.1:1998 msgid "" "I are the same on both lines if B and liblzma are from the " "same XZ Utils release." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1824 +#: ../src/xz/xz.1:2004 msgid "Examples: 4.999.9beta is B<49990091> and 5.0.0 is B<50000002>." msgstr "" #. type: SS -#: ../src/xz/xz.1:1825 +#: ../src/xz/xz.1:2005 #, no-wrap msgid "Memory limit information" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1828 +#: ../src/xz/xz.1:2008 msgid "" "B prints a single line with three tab-separated " "columns:" msgstr "" #. type: IP -#: ../src/xz/xz.1:1828 +#: ../src/xz/xz.1:2008 #, no-wrap msgid "1." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1830 -msgid "Total amount of physical memory (RAM) in bytes" +#: ../src/xz/xz.1:2010 +msgid "Total amount of physical memory (RAM) in bytes." msgstr "" #. type: IP -#: ../src/xz/xz.1:1830 ../src/xz/xz.1:1910 ../src/xz/xz.1:1947 ../src/xz/xz.1:1973 ../src/xz/xz.1:2043 ../src/xz/xz.1:2070 +#: ../src/xz/xz.1:2010 ../src/xz/xz.1:2125 ../src/xz/xz.1:2162 +#: ../src/xz/xz.1:2188 ../src/xz/xz.1:2258 ../src/xz/xz.1:2285 #, no-wrap msgid "2." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1834 +#: ../src/xz/xz.1:2017 msgid "" -"Memory usage limit for compression in bytes. A special value of zero " -"indicates the default setting, which for single-threaded mode is the same as " -"no limit." +"Memory usage limit for compression in bytes (B<--memlimit-compress>). A " +"special value of B<0> indicates the default setting which for " +"single-threaded mode is the same as no limit." msgstr "" #. type: IP -#: ../src/xz/xz.1:1834 ../src/xz/xz.1:1912 ../src/xz/xz.1:1949 ../src/xz/xz.1:1975 ../src/xz/xz.1:2048 ../src/xz/xz.1:2072 +#: ../src/xz/xz.1:2017 ../src/xz/xz.1:2127 ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2190 ../src/xz/xz.1:2263 ../src/xz/xz.1:2287 #, no-wrap msgid "3." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1838 +#: ../src/xz/xz.1:2024 msgid "" -"Memory usage limit for decompression in bytes. A special value of zero " -"indicates the default setting, which for single-threaded mode is the same as " -"no limit." +"Memory usage limit for decompression in bytes (B<--memlimit-decompress>). A " +"special value of B<0> indicates the default setting which for " +"single-threaded mode is the same as no limit." msgstr "" +#. type: IP +#: ../src/xz/xz.1:2024 ../src/xz/xz.1:2129 ../src/xz/xz.1:2166 +#: ../src/xz/xz.1:2193 ../src/xz/xz.1:2273 ../src/xz/xz.1:2289 +#, no-wrap +msgid "4." +msgstr "" + #. type: Plain text -#: ../src/xz/xz.1:1842 +#: ../src/xz/xz.1:2036 msgid "" +"Since B 5.3.4alpha: Memory usage for multi-threaded decompression in " +"bytes (B<--memlimit-mt-decompress>). This is never zero because a " +"system-specific default value shown in the column 5 is used if no limit has " +"been specified explicitly. This is also never greater than the value in the " +"column 3 even if a larger value has been specified with " +"B<--memlimit-mt-decompress>." +msgstr "" + +#. type: IP +#: ../src/xz/xz.1:2036 ../src/xz/xz.1:2131 ../src/xz/xz.1:2168 +#: ../src/xz/xz.1:2195 ../src/xz/xz.1:2291 +#, no-wrap +msgid "5." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:2048 +msgid "" +"Since B 5.3.4alpha: A system-specific default memory usage limit that is " +"used to limit the number of threads when compressing with an automatic " +"number of threads (B<--threads=0>) and no memory usage limit has been " +"specified (B<--memlimit-compress>). This is also used as the default value " +"for B<--memlimit-mt-decompress>." +msgstr "" + +#. type: IP +#: ../src/xz/xz.1:2048 ../src/xz/xz.1:2133 ../src/xz/xz.1:2170 +#: ../src/xz/xz.1:2197 ../src/xz/xz.1:2293 +#, no-wrap +msgid "6." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:2053 +msgid "Since B 5.3.4alpha: Number of available processor threads." +msgstr "" + +#. type: Plain text +#: ../src/xz/xz.1:2057 +msgid "" "In the future, the output of B may have more " "columns, but never more than a single line." msgstr "" #. type: SS -#: ../src/xz/xz.1:1843 +#: ../src/xz/xz.1:2058 #, no-wrap msgid "List mode" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1848 +#: ../src/xz/xz.1:2063 msgid "" "B uses tab-separated output. The first column of every " "line has a string that indicates the type of the information found on that " @@ -2729,52 +2956,52 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1848 +#: ../src/xz/xz.1:2063 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1852 +#: ../src/xz/xz.1:2067 msgid "" "This is always the first line when starting to list a file. The second " "column on the line is the filename." msgstr "" #. type: TP -#: ../src/xz/xz.1:1852 +#: ../src/xz/xz.1:2067 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1860 +#: ../src/xz/xz.1:2075 msgid "" "This line contains overall information about the B<.xz> file. This line is " "always printed after the B line." msgstr "" #. type: TP -#: ../src/xz/xz.1:1860 +#: ../src/xz/xz.1:2075 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1870 +#: ../src/xz/xz.1:2085 msgid "" "This line type is used only when B<--verbose> was specified. There are as " "many B lines as there are streams in the B<.xz> file." msgstr "" #. type: TP -#: ../src/xz/xz.1:1870 +#: ../src/xz/xz.1:2085 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1885 +#: ../src/xz/xz.1:2100 msgid "" "This line type is used only when B<--verbose> was specified. There are as " "many B lines as there are blocks in the B<.xz> file. The B " @@ -2783,13 +3010,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1885 +#: ../src/xz/xz.1:2100 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1900 +#: ../src/xz/xz.1:2115 msgid "" "This line type is used only when B<--verbose> was specified twice. This " "line is printed after all B lines. Like the B line, the " @@ -2797,76 +3024,59 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:1900 +#: ../src/xz/xz.1:2115 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1904 +#: ../src/xz/xz.1:2119 msgid "" "This line is always the very last line of the list output. It shows the " "total counts and sizes." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1908 +#: ../src/xz/xz.1:2123 msgid "The columns of the B lines:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1912 +#: ../src/xz/xz.1:2127 msgid "Number of streams in the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1914 +#: ../src/xz/xz.1:2129 msgid "Total number of blocks in the stream(s)" msgstr "" -#. type: IP -#: ../src/xz/xz.1:1914 ../src/xz/xz.1:1951 ../src/xz/xz.1:1978 ../src/xz/xz.1:2058 ../src/xz/xz.1:2074 -#, no-wrap -msgid "4." -msgstr "" - #. type: Plain text -#: ../src/xz/xz.1:1916 +#: ../src/xz/xz.1:2131 msgid "Compressed size of the file" msgstr "" -#. type: IP -#: ../src/xz/xz.1:1916 ../src/xz/xz.1:1953 ../src/xz/xz.1:1980 ../src/xz/xz.1:2076 -#, no-wrap -msgid "5." -msgstr "" - #. type: Plain text -#: ../src/xz/xz.1:1918 +#: ../src/xz/xz.1:2133 msgid "Uncompressed size of the file" msgstr "" -#. type: IP -#: ../src/xz/xz.1:1918 ../src/xz/xz.1:1955 ../src/xz/xz.1:1982 ../src/xz/xz.1:2078 -#, no-wrap -msgid "6." -msgstr "" - #. type: Plain text -#: ../src/xz/xz.1:1924 +#: ../src/xz/xz.1:2139 msgid "" -"Compression ratio, for example B<0.123.> If ratio is over 9.999, three " +"Compression ratio, for example, B<0.123>. If ratio is over 9.999, three " "dashes (B<--->) are displayed instead of the ratio." msgstr "" #. type: IP -#: ../src/xz/xz.1:1924 ../src/xz/xz.1:1957 ../src/xz/xz.1:1984 ../src/xz/xz.1:2080 +#: ../src/xz/xz.1:2139 ../src/xz/xz.1:2172 ../src/xz/xz.1:2199 +#: ../src/xz/xz.1:2295 #, no-wrap msgid "7." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1937 +#: ../src/xz/xz.1:2152 msgid "" "Comma-separated list of integrity check names. The following strings are " "used for the known check types: B, B, B, and " @@ -2875,115 +3085,116 @@ msgstr "" #. type: IP -#: ../src/xz/xz.1:1937 ../src/xz/xz.1:1959 ../src/xz/xz.1:1986 ../src/xz/xz.1:2083 +#: ../src/xz/xz.1:2152 ../src/xz/xz.1:2174 ../src/xz/xz.1:2201 +#: ../src/xz/xz.1:2298 #, no-wrap msgid "8." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1939 +#: ../src/xz/xz.1:2154 msgid "Total size of stream padding in the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1945 +#: ../src/xz/xz.1:2160 msgid "The columns of the B lines:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1949 +#: ../src/xz/xz.1:2164 msgid "Stream number (the first stream is 1)" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1951 +#: ../src/xz/xz.1:2166 msgid "Number of blocks in the stream" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1953 +#: ../src/xz/xz.1:2168 msgid "Compressed start offset" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1955 +#: ../src/xz/xz.1:2170 msgid "Uncompressed start offset" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1957 +#: ../src/xz/xz.1:2172 msgid "Compressed size (does not include stream padding)" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1959 ../src/xz/xz.1:1988 ../src/xz/xz.1:2078 +#: ../src/xz/xz.1:2174 ../src/xz/xz.1:2203 ../src/xz/xz.1:2293 msgid "Uncompressed size" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1961 ../src/xz/xz.1:1990 +#: ../src/xz/xz.1:2176 ../src/xz/xz.1:2205 msgid "Compression ratio" msgstr "" #. type: IP -#: ../src/xz/xz.1:1961 ../src/xz/xz.1:1988 ../src/xz/xz.1:2085 +#: ../src/xz/xz.1:2176 ../src/xz/xz.1:2203 ../src/xz/xz.1:2300 #, no-wrap msgid "9." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1963 ../src/xz/xz.1:1992 +#: ../src/xz/xz.1:2178 ../src/xz/xz.1:2207 msgid "Name of the integrity check" msgstr "" #. type: IP -#: ../src/xz/xz.1:1963 ../src/xz/xz.1:1990 ../src/xz/xz.1:2101 +#: ../src/xz/xz.1:2178 ../src/xz/xz.1:2205 ../src/xz/xz.1:2316 #, no-wrap msgid "10." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1965 +#: ../src/xz/xz.1:2180 msgid "Size of stream padding" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1971 +#: ../src/xz/xz.1:2186 msgid "The columns of the B lines:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1975 +#: ../src/xz/xz.1:2190 msgid "Number of the stream containing this block" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1978 +#: ../src/xz/xz.1:2193 msgid "Block number relative to the beginning of the stream (the first block is 1)" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1980 +#: ../src/xz/xz.1:2195 msgid "Block number relative to the beginning of the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1982 +#: ../src/xz/xz.1:2197 msgid "Compressed start offset relative to the beginning of the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1984 +#: ../src/xz/xz.1:2199 msgid "Uncompressed start offset relative to the beginning of the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:1986 +#: ../src/xz/xz.1:2201 msgid "Total compressed size of the block (includes headers)" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2004 +#: ../src/xz/xz.1:2219 msgid "" "If B<--verbose> was specified twice, additional columns are included on the " "B lines. These are not displayed with a single B<--verbose>, because " @@ -2991,35 +3202,35 @@ msgstr "" #. type: IP -#: ../src/xz/xz.1:2006 ../src/xz/xz.1:2106 +#: ../src/xz/xz.1:2221 ../src/xz/xz.1:2321 #, no-wrap msgid "11." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2008 +#: ../src/xz/xz.1:2223 msgid "Value of the integrity check in hexadecimal" msgstr "" #. type: IP -#: ../src/xz/xz.1:2008 ../src/xz/xz.1:2116 +#: ../src/xz/xz.1:2223 ../src/xz/xz.1:2331 #, no-wrap msgid "12." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2010 +#: ../src/xz/xz.1:2225 msgid "Block header size" msgstr "" #. type: IP -#: ../src/xz/xz.1:2010 +#: ../src/xz/xz.1:2225 #, no-wrap msgid "13." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2020 +#: ../src/xz/xz.1:2235 msgid "" "Block flags: B indicates that compressed size is present, and B " "indicates that uncompressed size is present. If the flag is not set, a dash " @@ -3028,39 +3239,39 @@ msgstr "" #. type: IP -#: ../src/xz/xz.1:2020 +#: ../src/xz/xz.1:2235 #, no-wrap msgid "14." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2023 +#: ../src/xz/xz.1:2238 msgid "" "Size of the actual compressed data in the block (this excludes the block " "header, block padding, and check fields)" msgstr "" #. type: IP -#: ../src/xz/xz.1:2023 +#: ../src/xz/xz.1:2238 #, no-wrap msgid "15." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2028 +#: ../src/xz/xz.1:2243 msgid "" "Amount of memory (in bytes) required to decompress this block with this " "B version" msgstr "" #. type: IP -#: ../src/xz/xz.1:2028 +#: ../src/xz/xz.1:2243 #, no-wrap msgid "16." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2035 +#: ../src/xz/xz.1:2250 msgid "" "Filter chain. Note that most of the options used at compression time cannot " "be known, because only the options that are needed for decompression are " @@ -3068,151 +3279,152 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2041 +#: ../src/xz/xz.1:2256 msgid "The columns of the B lines:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2048 +#: ../src/xz/xz.1:2263 msgid "" "Amount of memory (in bytes) required to decompress this file with this B " "version" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2054 ../src/xz/xz.1:2112 +#: ../src/xz/xz.1:2269 ../src/xz/xz.1:2327 msgid "" "B or B indicating if all block headers have both compressed size " "and uncompressed size stored in them" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2058 ../src/xz/xz.1:2116 +#: ../src/xz/xz.1:2273 ../src/xz/xz.1:2331 msgid "I B I<5.1.2alpha:>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2062 ../src/xz/xz.1:2120 +#: ../src/xz/xz.1:2277 ../src/xz/xz.1:2335 msgid "Minimum B version required to decompress the file" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2068 +#: ../src/xz/xz.1:2283 msgid "The columns of the B line:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2072 +#: ../src/xz/xz.1:2287 msgid "Number of streams" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2074 +#: ../src/xz/xz.1:2289 msgid "Number of blocks" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2076 +#: ../src/xz/xz.1:2291 msgid "Compressed size" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2080 +#: ../src/xz/xz.1:2295 msgid "Average compression ratio" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2083 +#: ../src/xz/xz.1:2298 msgid "Comma-separated list of integrity check names that were present in the files" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2085 +#: ../src/xz/xz.1:2300 msgid "Stream padding size" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2091 +#: ../src/xz/xz.1:2306 msgid "" "Number of files. This is here to keep the order of the earlier columns the " "same as on B lines." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2099 +#: ../src/xz/xz.1:2314 msgid "" "If B<--verbose> was specified twice, additional columns are included on the " "B line:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2106 +#: ../src/xz/xz.1:2321 msgid "" "Maximum amount of memory (in bytes) required to decompress the files with " "this B version" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2126 +#: ../src/xz/xz.1:2341 msgid "" "Future versions may add new line types and new columns can be added to the " "existing line types, but the existing columns won't be changed." msgstr "" #. type: SH -#: ../src/xz/xz.1:2127 ../src/xzdec/xzdec.1:104 ../src/lzmainfo/lzmainfo.1:44 +#: ../src/xz/xz.1:2342 ../src/xzdec/xzdec.1:104 ../src/lzmainfo/lzmainfo.1:44 +#: ../src/scripts/xzgrep.1:81 #, no-wrap msgid "EXIT STATUS" msgstr "" #. type: TP -#: ../src/xz/xz.1:2128 ../src/xzdec/xzdec.1:105 ../src/lzmainfo/lzmainfo.1:45 +#: ../src/xz/xz.1:2343 ../src/xzdec/xzdec.1:105 ../src/lzmainfo/lzmainfo.1:45 #, no-wrap msgid "B<0>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2131 ../src/lzmainfo/lzmainfo.1:48 +#: ../src/xz/xz.1:2346 ../src/lzmainfo/lzmainfo.1:48 msgid "All is good." msgstr "" #. type: TP -#: ../src/xz/xz.1:2131 ../src/xzdec/xzdec.1:108 ../src/lzmainfo/lzmainfo.1:48 +#: ../src/xz/xz.1:2346 ../src/xzdec/xzdec.1:108 ../src/lzmainfo/lzmainfo.1:48 #, no-wrap msgid "B<1>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2134 ../src/xzdec/xzdec.1:111 ../src/lzmainfo/lzmainfo.1:51 +#: ../src/xz/xz.1:2349 ../src/xzdec/xzdec.1:111 ../src/lzmainfo/lzmainfo.1:51 msgid "An error occurred." msgstr "" #. type: TP -#: ../src/xz/xz.1:2134 +#: ../src/xz/xz.1:2349 #, no-wrap msgid "B<2>" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2138 +#: ../src/xz/xz.1:2353 msgid "Something worth a warning occurred, but no actual errors occurred." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2141 +#: ../src/xz/xz.1:2356 msgid "" "Notices (not warnings or errors) printed on standard error don't affect the " "exit status." msgstr "" #. type: SH -#: ../src/xz/xz.1:2142 ../src/scripts/xzgrep.1:80 ../src/scripts/xzless.1:52 +#: ../src/xz/xz.1:2357 ../src/scripts/xzgrep.1:94 ../src/scripts/xzless.1:52 #, no-wrap msgid "ENVIRONMENT" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2155 +#: ../src/xz/xz.1:2370 msgid "" "B parses space-separated lists of options from the environment variables " "B and B, in this order, before parsing the options from " @@ -3222,13 +3434,13 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:2155 +#: ../src/xz/xz.1:2370 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2379 msgid "" "User-specific or system-wide default options. Typically this is set in a " "shell initialization script to enable B's memory usage limiter by " @@ -3237,36 +3449,36 @@ msgstr "" #. type: TP -#: ../src/xz/xz.1:2164 +#: ../src/xz/xz.1:2379 #, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2175 +#: ../src/xz/xz.1:2390 msgid "" "This is for passing options to B when it is not possible to set the " -"options directly on the B command line. This is the case e.g. when " -"B is run by a script or tool, e.g. GNU B(1):" +"options directly on the B command line. This is the case when B is " +"run by a script or tool, for example, GNU B(1):" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2181 +#: ../src/xz/xz.1:2396 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2194 +#: ../src/xz/xz.1:2410 msgid "" -"Scripts may use B e.g. to set script-specific default compression " -"options. It is still recommended to allow users to override B if " -"that is reasonable, e.g. in B(1) scripts one may use something like " -"this:" +"Scripts may use B, for example, to set script-specific default " +"compression options. It is still recommended to allow users to override " +"B if that is reasonable. For example, in B(1) scripts one may " +"use something like this:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2201 +#: ../src/xz/xz.1:2417 #, no-wrap msgid "" "CW is practically a superset of B, " "B, and B as found from LZMA Utils 4.32.x. In most cases, it " @@ -3290,13 +3502,13 @@ msgstr "" #. type: SS -#: ../src/xz/xz.1:2220 +#: ../src/xz/xz.1:2436 #, no-wrap msgid "Compression preset levels" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2227 +#: ../src/xz/xz.1:2443 msgid "" "The numbering of the compression level presets is not identical in B and " "LZMA Utils. The most important difference is how dictionary sizes are " @@ -3305,43 +3517,43 @@ msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2233 ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2449 ../src/xz/xz.1:2474 #, no-wrap msgid "Level" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2233 ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2449 ../src/xz/xz.1:2474 #, no-wrap msgid "xz" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2233 +#: ../src/xz/xz.1:2449 #, no-wrap msgid "LZMA Utils" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2234 ../src/xz/xz.1:2259 +#: ../src/xz/xz.1:2450 ../src/xz/xz.1:2475 #, no-wrap msgid "N/A" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2235 +#: ../src/xz/xz.1:2451 #, no-wrap msgid "64 KiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2237 +#: ../src/xz/xz.1:2453 #, no-wrap msgid "512 KiB" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2252 +#: ../src/xz/xz.1:2468 msgid "" "The dictionary size differences affect the compressor memory usage too, but " "there are some other differences between LZMA Utils and XZ Utils, which make " @@ -3349,72 +3561,73 @@ msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2258 +#: ../src/xz/xz.1:2474 #, no-wrap msgid "LZMA Utils 4.32.x" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2261 ../src/xz/xz.1:2262 +#: ../src/xz/xz.1:2477 ../src/xz/xz.1:2478 #, no-wrap msgid "12 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2264 +#: ../src/xz/xz.1:2480 #, no-wrap msgid "26 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2265 +#: ../src/xz/xz.1:2481 #, no-wrap msgid "45 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2266 +#: ../src/xz/xz.1:2482 #, no-wrap msgid "83 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2267 +#: ../src/xz/xz.1:2483 #, no-wrap msgid "159 MiB" msgstr "" #. type: tbl table -#: ../src/xz/xz.1:2268 +#: ../src/xz/xz.1:2484 #, no-wrap msgid "311 MiB" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2277 +#: ../src/xz/xz.1:2493 msgid "" "The default preset level in LZMA Utils is B<-7> while in XZ Utils it is " "B<-6>, so both use an 8 MiB dictionary by default." msgstr "" #. type: SS -#: ../src/xz/xz.1:2278 +#: ../src/xz/xz.1:2494 #, no-wrap msgid "Streamed vs. non-streamed .lzma files" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2288 +#: ../src/xz/xz.1:2504 msgid "" "The uncompressed size of the file can be stored in the B<.lzma> header. " "LZMA Utils does that when compressing regular files. The alternative is to " "mark that uncompressed size is unknown and use end-of-payload marker to " "indicate where the decompressor should stop. LZMA Utils uses this method " -"when uncompressed size isn't known, which is the case for example in pipes." +"when uncompressed size isn't known, which is the case, for example, in " +"pipes." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2309 +#: ../src/xz/xz.1:2525 msgid "" "B supports decompressing B<.lzma> files with or without end-of-payload " "marker, but all B<.lzma> files created by B will use end-of-payload " @@ -3426,13 +3639,13 @@ msgstr "" #. type: SS -#: ../src/xz/xz.1:2310 +#: ../src/xz/xz.1:2526 #, no-wrap msgid "Unsupported .lzma files" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2333 +#: ../src/xz/xz.1:2549 msgid "" "The B<.lzma> format allows I values up to 8, and I values up to 4. " "LZMA Utils can decompress files with any I and I, but always creates " @@ -3441,7 +3654,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2344 +#: ../src/xz/xz.1:2560 msgid "" "The implementation of the LZMA1 filter in liblzma requires that the sum of " "I and I must not exceed 4. Thus, B<.lzma> files, which exceed this " @@ -3449,7 +3662,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2359 +#: ../src/xz/xz.1:2575 msgid "" "LZMA Utils creates only B<.lzma> files which have a dictionary size of " "2^I (a power of 2) but accepts files with any dictionary size. liblzma " @@ -3459,20 +3672,20 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2364 +#: ../src/xz/xz.1:2580 msgid "" "These limitations shouldn't be a problem in practice, since practically all " "B<.lzma> files have been compressed with settings that liblzma will accept." msgstr "" #. type: SS -#: ../src/xz/xz.1:2365 +#: ../src/xz/xz.1:2581 #, no-wrap msgid "Trailing garbage" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2375 +#: ../src/xz/xz.1:2591 msgid "" "When decompressing, LZMA Utils silently ignore everything after the first " "B<.lzma> stream. In most situations, this is a bug. This also means that " @@ -3480,7 +3693,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2385 +#: ../src/xz/xz.1:2601 msgid "" "If there is data left after the first B<.lzma> stream, B considers the " "file to be corrupt unless B<--single-stream> was used. This may break " @@ -3488,19 +3701,19 @@ msgstr "" #. type: SH -#: ../src/xz/xz.1:2386 ../src/xzdec/xzdec.1:117 +#: ../src/xz/xz.1:2602 ../src/xzdec/xzdec.1:117 #, no-wrap msgid "NOTES" msgstr "" #. type: SS -#: ../src/xz/xz.1:2388 +#: ../src/xz/xz.1:2604 #, no-wrap msgid "Compressed output may vary" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2399 +#: ../src/xz/xz.1:2615 msgid "" "The exact compressed output produced from the same uncompressed input file " "may vary between XZ Utils versions even if compression options are " @@ -3511,7 +3724,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2409 +#: ../src/xz/xz.1:2625 msgid "" "The above means that once B<--rsyncable> has been implemented, the resulting " "files won't necessarily be rsyncable unless both old and new files have been " @@ -3521,13 +3734,13 @@ msgstr "" #. type: SS -#: ../src/xz/xz.1:2410 +#: ../src/xz/xz.1:2626 #, no-wrap msgid "Embedded .xz decompressors" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2427 +#: ../src/xz/xz.1:2643 msgid "" "Embedded B<.xz> decompressor implementations like XZ Embedded don't " "necessarily support files created with integrity I types other than " @@ -3537,7 +3750,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2437 +#: ../src/xz/xz.1:2653 msgid "" "Outside embedded systems, all B<.xz> format decompressors support all the " "I types, or at least are able to decompress the file without " @@ -3545,90 +3758,90 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2440 +#: ../src/xz/xz.1:2656 msgid "XZ Embedded supports BCJ filters, but only with the default start offset." msgstr "" #. type: SH -#: ../src/xz/xz.1:2441 +#: ../src/xz/xz.1:2657 #, no-wrap msgid "EXAMPLES" msgstr "" #. type: SS -#: ../src/xz/xz.1:2443 +#: ../src/xz/xz.1:2659 #, no-wrap msgid "Basics" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2453 +#: ../src/xz/xz.1:2669 msgid "" "Compress the file I into I using the default compression level " "(B<-6>), and remove I if compression is successful:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2458 +#: ../src/xz/xz.1:2674 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2469 +#: ../src/xz/xz.1:2685 msgid "" "Decompress I into I and don't remove I even if " "decompression is successful:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2474 +#: ../src/xz/xz.1:2690 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2487 +#: ../src/xz/xz.1:2703 msgid "" "Create I with the preset B<-4e> (B<-4 --extreme>), which is " -"slower than e.g. the default B<-6>, but needs less memory for compression " -"and decompression (48\\ MiB and 5\\ MiB, respectively):" +"slower than the default B<-6>, but needs less memory for compression and " +"decompression (48\\ MiB and 5\\ MiB, respectively):" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2492 +#: ../src/xz/xz.1:2708 #, no-wrap msgid "CW baz.tar.xz>\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2498 +#: ../src/xz/xz.1:2714 msgid "" "A mix of compressed and uncompressed files can be decompressed to standard " "output with a single command:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2503 +#: ../src/xz/xz.1:2719 #, no-wrap msgid "CW abcd.txt>\n" msgstr "" #. type: SS -#: ../src/xz/xz.1:2507 +#: ../src/xz/xz.1:2723 #, no-wrap msgid "Parallel compression of many files" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2513 +#: ../src/xz/xz.1:2729 msgid "" "On GNU and *BSD, B(1) and B(1) can be used to parallelize " "compression of many files:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2519 +#: ../src/xz/xz.1:2735 #, no-wrap msgid "" "CW option to B(1) sets the number of parallel B " "processes. The best value for the B<-n> option depends on how many files " @@ -3647,33 +3860,33 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2549 +#: ../src/xz/xz.1:2765 msgid "" "The option B<-T1> for B is there to force it to single-threaded mode, " "because B(1) is used to control the amount of parallelization." msgstr "" #. type: SS -#: ../src/xz/xz.1:2550 +#: ../src/xz/xz.1:2766 #, no-wrap msgid "Robot mode" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2553 +#: ../src/xz/xz.1:2769 msgid "" "Calculate how many bytes have been saved in total after compressing multiple " "files:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2558 +#: ../src/xz/xz.1:2774 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2573 +#: ../src/xz/xz.1:2789 msgid "" "A script may want to know that it is using new enough B. The following " "B(1) script checks that the version number of the B tool is at " @@ -3682,7 +3895,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2582 +#: ../src/xz/xz.1:2798 #, no-wrap msgid "" "CW /dev/null)\" ||\n" @@ -3693,17 +3906,17 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2589 +#: ../src/xz/xz.1:2805 msgid "" "Set a memory usage limit for decompression using B, but if a limit " "has already been set, don't increase it:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2599 +#: ../src/xz/xz.1:2815 #, no-wrap msgid "" -"CWE 20)) # 123 MiB\n" +"CWE 20))\\ \\ # 123 MiB\n" "OLDLIM=$(xz --robot --info-memory | cut -f3)\n" "if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then\n" " XZ_OPT=\"$XZ_OPT --memlimit-decompress=$NEWLIM\"\n" @@ -3712,7 +3925,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2609 +#: ../src/xz/xz.1:2825 msgid "" "The simplest use for custom filter chains is customizing a LZMA2 preset. " "This can be useful, because the presets cover only a subset of the " @@ -3720,7 +3933,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2617 +#: ../src/xz/xz.1:2833 msgid "" "The CompCPU columns of the tables from the descriptions of the options B<-0> " "... B<-9> and B<--extreme> are useful when customizing LZMA2 presets. Here " @@ -3728,22 +3941,22 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2642 +#: ../src/xz/xz.1:2858 msgid "" -"If you know that a file requires somewhat big dictionary (e.g. 32 MiB) to " -"compress well, but you want to compress it quicker than B would do, a " -"preset with a low CompCPU value (e.g. 1) can be modified to use a bigger " -"dictionary:" +"If you know that a file requires somewhat big dictionary (for example, 32\\ " +"MiB) to compress well, but you want to compress it quicker than B " +"would do, a preset with a low CompCPU value (for example, 1) can be " +"modified to use a bigger dictionary:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2647 +#: ../src/xz/xz.1:2863 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2663 +#: ../src/xz/xz.1:2879 msgid "" "With certain files, the above command may be faster than B while " "compressing significantly better. However, it must be emphasized that only " @@ -3756,7 +3969,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2670 +#: ../src/xz/xz.1:2886 msgid "" "If very high compressor and decompressor memory usage is fine, and the file " "being compressed is at least several hundred megabytes, it may be useful to " @@ -3764,13 +3977,13 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2675 +#: ../src/xz/xz.1:2891 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2688 +#: ../src/xz/xz.1:2904 msgid "" "Using B<-vv> (B<--verbose --verbose>) like in the above example can be " "useful to see the memory requirements of the compressor and decompressor. " @@ -3779,56 +3992,56 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2701 +#: ../src/xz/xz.1:2916 msgid "" "Sometimes the compression time doesn't matter, but the decompressor memory " -"usage has to be kept low e.g. to make it possible to decompress the file on " -"an embedded system. The following command uses B<-6e> (B<-6 --extreme>) as " -"a base and sets the dictionary to only 64\\ KiB. The resulting file can be " -"decompressed with XZ Embedded (that's why there is B<--check=crc32>) using " -"about 100\\ KiB of memory." +"usage has to be kept low, for example, to make it possible to decompress the " +"file on an embedded system. The following command uses B<-6e> (B<-6 " +"--extreme>) as a base and sets the dictionary to only 64\\ KiB. The " +"resulting file can be decompressed with XZ Embedded (that's why there is " +"B<--check=crc32>) using about 100\\ KiB of memory." msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2706 +#: ../src/xz/xz.1:2921 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2729 +#: ../src/xz/xz.1:2944 msgid "" "If you want to squeeze out as many bytes as possible, adjusting the number " "of literal context bits (I) and number of position bits (I) can " "sometimes help. Adjusting the number of literal position bits (I) " -"might help too, but usually I and I are more important. E.g. a " -"source code archive contains mostly US-ASCII text, so something like the " -"following might give slightly (like 0.1\\ %) smaller file than B " -"(try also without B):" +"might help too, but usually I and I are more important. For " +"example, a source code archive contains mostly US-ASCII text, so something " +"like the following might give slightly (like 0.1\\ %) smaller file than B (try also without B):" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2734 +#: ../src/xz/xz.1:2949 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2742 +#: ../src/xz/xz.1:2957 msgid "" "Using another filter together with LZMA2 can improve compression with " -"certain file types. E.g. to compress a x86-32 or x86-64 shared library " -"using the x86 BCJ filter:" +"certain file types. For example, to compress a x86-32 or x86-64 shared " +"library using the x86 BCJ filter:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2747 +#: ../src/xz/xz.1:2962 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2761 +#: ../src/xz/xz.1:2976 msgid "" "Note that the order of the filter options is significant. If B<--x86> is " "specified after B<--lzma2>, B will give an error, because there cannot " @@ -3837,7 +4050,7 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2767 +#: ../src/xz/xz.1:2982 msgid "" "The Delta filter together with LZMA2 can give good results with bitmap " "images. It should usually beat PNG, which has a few more advanced filters " @@ -3845,55 +4058,57 @@ msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2777 +#: ../src/xz/xz.1:2992 msgid "" -"The image has to be saved in uncompressed format, e.g. as uncompressed " -"TIFF. The distance parameter of the Delta filter is set to match the number " -"of bytes per pixel in the image. E.g. 24-bit RGB bitmap needs B, " -"and it is also good to pass B to LZMA2 to accommodate the three-byte " -"alignment:" +"The image has to be saved in uncompressed format, for example, as " +"uncompressed TIFF. The distance parameter of the Delta filter is set to " +"match the number of bytes per pixel in the image. For example, 24-bit RGB " +"bitmap needs B, and it is also good to pass B to LZMA2 to " +"accommodate the three-byte alignment:" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2782 +#: ../src/xz/xz.1:2997 #, no-wrap msgid "CW\n" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2790 +#: ../src/xz/xz.1:3005 msgid "" -"If multiple images have been put into a single archive (e.g.\\& B<.tar>), " -"the Delta filter will work on that too as long as all images have the same " -"number of bytes per pixel." +"If multiple images have been put into a single archive (for example, " +"B<.tar>), the Delta filter will work on that too as long as all images have " +"the same number of bytes per pixel." msgstr "" #. type: SH -#: ../src/xz/xz.1:2791 ../src/xzdec/xzdec.1:143 ../src/lzmainfo/lzmainfo.1:59 ../src/scripts/xzdiff.1:64 ../src/scripts/xzgrep.1:92 ../src/scripts/xzless.1:65 ../src/scripts/xzmore.1:51 +#: ../src/xz/xz.1:3006 ../src/xzdec/xzdec.1:143 ../src/lzmainfo/lzmainfo.1:59 +#: ../src/scripts/xzdiff.1:65 ../src/scripts/xzgrep.1:106 +#: ../src/scripts/xzless.1:65 ../src/scripts/xzmore.1:51 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2800 +#: ../src/xz/xz.1:3015 msgid "" "B(1), B(1), B(1), B(1), B(1), " "B(1), B(1), B<7z>(1)" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2802 +#: ../src/xz/xz.1:3017 msgid "XZ Utils: Ehttps://tukaani.org/xz/E" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2804 ../src/xzdec/xzdec.1:146 +#: ../src/xz/xz.1:3019 ../src/xzdec/xzdec.1:146 msgid "XZ Embedded: Ehttps://tukaani.org/xz/embedded.htmlE" msgstr "" #. type: Plain text -#: ../src/xz/xz.1:2805 -msgid "LZMA SDK: Ehttp://7-zip.org/sdk.htmlE" +#: ../src/xz/xz.1:3020 +msgid "LZMA SDK: Ehttps://7-zip.org/sdk.htmlE" msgstr "" #. type: TH @@ -4069,7 +4284,7 @@ msgstr "" #. type: SH -#: ../src/lzmainfo/lzmainfo.1:51 ../src/scripts/xzdiff.1:72 +#: ../src/lzmainfo/lzmainfo.1:51 ../src/scripts/xzdiff.1:74 #, no-wrap msgid "BUGS" msgstr "" @@ -4088,9 +4303,9 @@ msgstr "" #. type: TH -#: ../src/scripts/xzdiff.1:9 ../src/scripts/xzgrep.1:9 +#: ../src/scripts/xzdiff.1:9 #, no-wrap -msgid "2011-03-19" +msgid "2021-06-04" msgstr "" #. type: Plain text @@ -4119,34 +4334,35 @@ msgstr "" #. type: Plain text -#: ../src/scripts/xzdiff.1:58 +#: ../src/scripts/xzdiff.1:59 msgid "" "B and B invoke B(1) or B(1) on files compressed " -"with B(1), B(1), B(1), B(1), or B(1). All " -"options specified are passed directly to B(1) or B(1). If only " -"one file is specified, then the files compared are I (which must have " -"a suffix of a supported compression format) and I from which the " -"compression format suffix has been stripped. If two files are specified, " -"then they are uncompressed if necessary and fed to B(1) or " -"B(1). The exit status from B(1) or B(1) is preserved." +"with B(1), B(1), B(1), B(1), B(1), or " +"B(1). All options specified are passed directly to B(1) or " +"B(1). If only one file is specified, then the files compared are " +"I (which must have a suffix of a supported compression format) and " +"I from which the compression format suffix has been stripped. If two " +"files are specified, then they are uncompressed if necessary and fed to " +"B(1) or B(1). The exit status from B(1) or B(1) is " +"preserved unless a decompression error occurs; then exit status is 2." msgstr "" #. type: Plain text -#: ../src/scripts/xzdiff.1:64 +#: ../src/scripts/xzdiff.1:65 msgid "" "The names B and B are provided for backward compatibility " "with LZMA Utils." msgstr "" #. type: Plain text -#: ../src/scripts/xzdiff.1:72 +#: ../src/scripts/xzdiff.1:74 msgid "" "B(1), B(1), B(1), B(1), B(1), B(1), " -"B(1)" +"B(1), B(1)" msgstr "" #. type: Plain text -#: ../src/scripts/xzdiff.1:77 +#: ../src/scripts/xzdiff.1:79 msgid "" "Messages from the B(1) or B(1) programs refer to temporary " "filenames instead of those specified." @@ -4158,6 +4374,12 @@ msgid "XZGREP" msgstr "" +#. type: TH +#: ../src/scripts/xzgrep.1:9 +#, no-wrap +msgid "2022-07-19" +msgstr "" + #. type: Plain text #: ../src/scripts/xzgrep.1:12 msgid "xzgrep - search compressed files for a regular expression" @@ -4165,75 +4387,101 @@ #. type: Plain text #: ../src/scripts/xzgrep.1:18 -msgid "B [I] [B<-e>] I I..." +msgid "B [I] [B<-e>] I [I]" msgstr "" #. type: Plain text #: ../src/scripts/xzgrep.1:21 -msgid "B ..." +msgid "B \\&..." msgstr "" #. type: Plain text #: ../src/scripts/xzgrep.1:24 -msgid "B ..." +msgid "B \\&..." msgstr "" #. type: Plain text #: ../src/scripts/xzgrep.1:27 -msgid "B ..." +msgid "B \\&..." msgstr "" #. type: Plain text #: ../src/scripts/xzgrep.1:30 -msgid "B ..." +msgid "B \\&..." msgstr "" #. type: Plain text #: ../src/scripts/xzgrep.1:33 -msgid "B ..." +msgid "B \\&..." msgstr "" #. type: Plain text -#: ../src/scripts/xzgrep.1:48 +#: ../src/scripts/xzgrep.1:49 msgid "" "B invokes B(1) on I which may be either uncompressed " -"or compressed with B(1), B(1), B(1), B(1), or " -"B(1). All options specified are passed directly to B(1)." +"or compressed with B(1), B(1), B(1), B(1), " +"B(1), or B(1). All options specified are passed directly to " +"B(1)." msgstr "" #. type: Plain text -#: ../src/scripts/xzgrep.1:60 +#: ../src/scripts/xzgrep.1:62 msgid "" "If no I is specified, then standard input is decompressed if necessary " "and fed to B(1). When reading from standard input, B(1), " -"B(1), and B(1) compressed files are not supported." +"B(1), B(1), and B(1) compressed files are not supported." msgstr "" #. type: Plain text -#: ../src/scripts/xzgrep.1:79 +#: ../src/scripts/xzgrep.1:81 msgid "" -"If B is invoked as B or B then B(1) or " -"B(1) is used instead of B(1). The same applies to names " +"If B is invoked as B or B then B or " +"B is used instead of B(1). The same applies to names " "B, B, and B, which are provided for backward " "compatibility with LZMA Utils." msgstr "" +#. type: Plain text +#: ../src/scripts/xzgrep.1:86 +msgid "" +"At least one match was found from at least one of the input files. No " +"errors occurred." +msgstr "" + +#. type: Plain text +#: ../src/scripts/xzgrep.1:90 +msgid "No matches were found from any of the input files. No errors occurred." +msgstr "" + #. type: TP -#: ../src/scripts/xzgrep.1:81 +#: ../src/scripts/xzgrep.1:90 #, no-wrap +msgid "E1" +msgstr "" + +#. type: Plain text +#: ../src/scripts/xzgrep.1:94 +msgid "One or more errors occurred. It is unknown if matches were found." +msgstr "" + +#. type: TP +#: ../src/scripts/xzgrep.1:95 +#, no-wrap msgid "B" msgstr "" #. type: Plain text -#: ../src/scripts/xzgrep.1:92 +#: ../src/scripts/xzgrep.1:106 msgid "" "If the B environment variable is set, B uses it instead of " -"B(1), B(1), or B(1)." +"B(1), B, or B." msgstr "" #. type: Plain text -#: ../src/scripts/xzgrep.1:98 -msgid "B(1), B(1), B(1), B(1), B(1), B(1)" +#: ../src/scripts/xzgrep.1:113 +msgid "" +"B(1), B(1), B(1), B(1), B(1), B(1), " +"B(1)" msgstr "" #. type: TH diff -ur xz-5.2.5/src/Makefile.in xz-5.4.3/src/Makefile.in --- xz-5.2.5/src/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/src/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -168,8 +168,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = liblzma xzdec xz lzmainfo scripts am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -218,6 +216,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -228,8 +228,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -282,6 +284,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -340,6 +343,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -510,7 +514,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/src/common/common_w32res.rc xz-5.4.3/src/common/common_w32res.rc --- xz-5.2.5/src/common/common_w32res.rc 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/common_w32res.rc 2023-05-04 17:21:05 @@ -6,7 +6,9 @@ */ #include -#include "config.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #define LZMA_H_INTERNAL #define LZMA_H_INTERNAL_RC #include "lzma/version.h" diff -ur xz-5.2.5/src/common/mythread.h xz-5.4.3/src/common/mythread.h --- xz-5.2.5/src/common/mythread.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/mythread.h 2023-05-04 17:21:05 @@ -100,12 +100,18 @@ // Using pthreads // //////////////////// -#include #include #include #include #include +// If clock_gettime() isn't available, use gettimeofday() from +// as a fallback. gettimeofday() is in SUSv2 and thus is supported on all +// relevant POSIX systems. +#ifndef HAVE_CLOCK_GETTIME +# include +#endif + #define MYTHREAD_RET_TYPE void * #define MYTHREAD_RET_VALUE NULL @@ -219,8 +225,8 @@ mythread_cond_init(mythread_cond *mycond) { #ifdef HAVE_CLOCK_GETTIME - // NOTE: HAVE_DECL_CLOCK_MONOTONIC is always defined to 0 or 1. -# if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && HAVE_DECL_CLOCK_MONOTONIC +# if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && \ + defined(HAVE_CLOCK_MONOTONIC) struct timespec ts; pthread_condattr_t condattr; @@ -294,8 +300,8 @@ mythread_condtime_set(mythread_condtime *condtime, const mythread_cond *cond, uint32_t timeout_ms) { - condtime->tv_sec = timeout_ms / 1000; - condtime->tv_nsec = (timeout_ms % 1000) * 1000000; + condtime->tv_sec = (time_t)(timeout_ms / 1000); + condtime->tv_nsec = (long)((timeout_ms % 1000) * 1000000); #ifdef HAVE_CLOCK_GETTIME struct timespec now; @@ -370,10 +376,11 @@ BOOL pending_; \ if (!InitOnceBeginInitialize(&once_, 0, &pending_, NULL)) \ abort(); \ - if (pending_) \ + if (pending_) { \ func(); \ - if (!InitOnceComplete(&once, 0, NULL)) \ - abort(); \ + if (!InitOnceComplete(&once, 0, NULL)) \ + abort(); \ + } \ } while (0) #endif diff -ur xz-5.2.5/src/common/sysdefs.h xz-5.4.3/src/common/sysdefs.h --- xz-5.2.5/src/common/sysdefs.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/sysdefs.h 2023-05-04 17:21:05 @@ -127,7 +127,7 @@ #include #include -// Pre-C99 systems lack stdbool.h. All the code in LZMA Utils must be written +// Pre-C99 systems lack stdbool.h. All the code in XZ Utils must be written // so that it works with fake bool type, for example: // // bool foo = (flags & 0x100) != 0; @@ -149,17 +149,7 @@ # define __bool_true_false_are_defined 1 #endif -// string.h should be enough but let's include strings.h and memory.h too if -// they exists, since that shouldn't do any harm, but may improve portability. #include - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_MEMORY_H -# include -#endif // As of MSVC 2013, inline and restrict are supported with // non-standard keywords. diff -ur xz-5.2.5/src/common/tuklib_common.h xz-5.4.3/src/common/tuklib_common.h --- xz-5.2.5/src/common/tuklib_common.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/common/tuklib_common.h 2023-05-04 17:21:05 @@ -14,7 +14,7 @@ #define TUKLIB_COMMON_H // The config file may be replaced by a package-specific file. -// It should include at least stddef.h, inttypes.h, and limits.h. +// It should include at least stddef.h, stdbool.h, inttypes.h, and limits.h. #include "tuklib_config.h" // TUKLIB_SYMBOL_PREFIX is prefixed to all symbols exported by diff -ur xz-5.2.5/src/common/tuklib_config.h xz-5.4.3/src/common/tuklib_config.h --- xz-5.2.5/src/common/tuklib_config.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/common/tuklib_config.h 2023-05-04 17:21:05 @@ -1,7 +1,10 @@ +// If config.h isn't available, assume that the headers required by +// tuklib_common.h are available. This is required by crc32_tablegen.c. #ifdef HAVE_CONFIG_H # include "sysdefs.h" #else # include +# include # include # include #endif diff -ur xz-5.2.5/src/common/tuklib_cpucores.c xz-5.4.3/src/common/tuklib_cpucores.c --- xz-5.2.5/src/common/tuklib_cpucores.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_cpucores.c 2023-05-04 17:21:05 @@ -72,7 +72,16 @@ } #elif defined(TUKLIB_CPUCORES_SYSCTL) + // On OpenBSD HW_NCPUONLINE tells the number of processor cores that + // are online so it is preferred over HW_NCPU which also counts cores + // that aren't currently available. The number of cores online is + // often less than HW_NCPU because OpenBSD disables simultaneous + // multi-threading (SMT) by default. +# ifdef HW_NCPUONLINE + int name[2] = { CTL_HW, HW_NCPUONLINE }; +# else int name[2] = { CTL_HW, HW_NCPU }; +# endif int cpus; size_t cpus_size = sizeof(cpus); if (sysctl(name, 2, &cpus, &cpus_size, NULL, 0) != -1 diff -ur xz-5.2.5/src/common/tuklib_integer.h xz-5.4.3/src/common/tuklib_integer.h --- xz-5.2.5/src/common/tuklib_integer.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_integer.h 2023-05-04 17:21:05 @@ -17,8 +17,8 @@ /// - Byte swapping: bswapXX(num) /// - Byte order conversions to/from native (byteswaps if Y isn't /// the native endianness): convXXYe(num) -/// - Unaligned reads (16/32-bit only): readXXYe(ptr) -/// - Unaligned writes (16/32-bit only): writeXXYe(ptr, num) +/// - Unaligned reads: readXXYe(ptr) +/// - Unaligned writes: writeXXYe(ptr, num) /// - Aligned reads: aligned_readXXYe(ptr) /// - Aligned writes: aligned_writeXXYe(ptr, num) /// @@ -52,6 +52,12 @@ // and such functions. #if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) # include +// Only include when it is needed. GCC and Clang can both +// use __builtin's, so we only need Windows instrincs when using MSVC. +// GCC and Clang can set _MSC_VER on Windows, so we need to exclude these +// cases explicitly. +#elif defined(_MSC_VER) && !TUKLIB_GNUC_REQ(3, 4) && !defined(__clang__) +# include #endif @@ -343,6 +349,46 @@ } +static inline uint64_t +read64be(const uint8_t *buf) +{ +#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) + uint64_t num = read64ne(buf); + return conv64be(num); +#else + uint64_t num = (uint64_t)buf[0] << 56; + num |= (uint64_t)buf[1] << 48; + num |= (uint64_t)buf[2] << 40; + num |= (uint64_t)buf[3] << 32; + num |= (uint64_t)buf[4] << 24; + num |= (uint64_t)buf[5] << 16; + num |= (uint64_t)buf[6] << 8; + num |= (uint64_t)buf[7]; + return num; +#endif +} + + +static inline uint64_t +read64le(const uint8_t *buf) +{ +#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) + uint64_t num = read64ne(buf); + return conv64le(num); +#else + uint64_t num = (uint64_t)buf[0]; + num |= (uint64_t)buf[1] << 8; + num |= (uint64_t)buf[2] << 16; + num |= (uint64_t)buf[3] << 24; + num |= (uint64_t)buf[4] << 32; + num |= (uint64_t)buf[5] << 40; + num |= (uint64_t)buf[6] << 48; + num |= (uint64_t)buf[7] << 56; + return num; +#endif +} + + // NOTE: Possible byte swapping must be done in a macro to allow the compiler // to optimize byte swapping of constants when using glibc's or *BSD's // byte swapping macros. The actual write is done in an inline function @@ -350,11 +396,13 @@ #if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) # define write16be(buf, num) write16ne(buf, conv16be(num)) # define write32be(buf, num) write32ne(buf, conv32be(num)) +# define write64be(buf, num) write64ne(buf, conv64be(num)) #endif #if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) # define write16le(buf, num) write16ne(buf, conv16le(num)) # define write32le(buf, num) write32ne(buf, conv32le(num)) +# define write64le(buf, num) write64ne(buf, conv64le(num)) #endif @@ -588,7 +636,7 @@ #if defined(__INTEL_COMPILER) return _bit_scan_reverse(n); -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX +#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX == UINT32_MAX // GCC >= 3.4 has __builtin_clz(), which gives good results on // multiple architectures. On x86, __builtin_clz() ^ 31U becomes // either plain BSR (so the XOR gets optimized away) or LZCNT and @@ -642,7 +690,7 @@ #if defined(__INTEL_COMPILER) return _bit_scan_reverse(n) ^ 31U; -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX +#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX == UINT32_MAX return (uint32_t)__builtin_clz(n); #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) @@ -694,7 +742,7 @@ #if defined(__INTEL_COMPILER) return _bit_scan_forward(n); -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX >= UINT32_MAX +#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX >= UINT32_MAX return (uint32_t)__builtin_ctz(n); #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) diff -ur xz-5.2.5/src/common/tuklib_mbstr_fw.c xz-5.4.3/src/common/tuklib_mbstr_fw.c --- xz-5.2.5/src/common/tuklib_mbstr_fw.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_mbstr_fw.c 2023-05-04 17:21:05 @@ -27,5 +27,5 @@ if (width < (size_t)columns_min) len += (size_t)columns_min - width; - return len; + return (int)len; } diff -ur xz-5.2.5/src/common/tuklib_physmem.c xz-5.4.3/src/common/tuklib_physmem.c --- xz-5.2.5/src/common/tuklib_physmem.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_physmem.c 2023-05-04 17:21:05 @@ -73,6 +73,17 @@ #endif +// With GCC >= 8.1 with -Wextra and Clang >= 13 with -Wcast-function-type +// will warn about the Windows-specific code. +#if defined(__has_warning) +# if __has_warning("-Wcast-function-type") +# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1 +# endif +#elif TUKLIB_GNUC_REQ(8,1) +# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1 +#endif + + extern uint64_t tuklib_physmem(void) { @@ -84,11 +95,18 @@ // supports reporting values greater than 4 GiB. To keep the // code working also on older Windows versions, use // GlobalMemoryStatusEx() conditionally. - HMODULE kernel32 = GetModuleHandle("kernel32.dll"); + HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll")); if (kernel32 != NULL) { typedef BOOL (WINAPI *gmse_type)(LPMEMORYSTATUSEX); +#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wcast-function-type" +#endif gmse_type gmse = (gmse_type)GetProcAddress( kernel32, "GlobalMemoryStatusEx"); +#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE +# pragma GCC diagnostic pop +#endif if (gmse != NULL) { MEMORYSTATUSEX meminfo; meminfo.dwLength = sizeof(meminfo); diff -ur xz-5.2.5/src/common/tuklib_progname.c xz-5.4.3/src/common/tuklib_progname.c --- xz-5.2.5/src/common/tuklib_progname.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_progname.c 2023-05-04 17:21:05 @@ -14,7 +14,7 @@ #include -#if !HAVE_DECL_PROGRAM_INVOCATION_NAME +#ifndef HAVE_PROGRAM_INVOCATION_NAME char *progname = NULL; #endif diff -ur xz-5.2.5/src/common/tuklib_progname.h xz-5.4.3/src/common/tuklib_progname.h --- xz-5.2.5/src/common/tuklib_progname.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/common/tuklib_progname.h 2023-05-04 17:21:05 @@ -18,7 +18,7 @@ TUKLIB_DECLS_BEGIN -#if HAVE_DECL_PROGRAM_INVOCATION_NAME +#ifdef HAVE_PROGRAM_INVOCATION_NAME # define progname program_invocation_name #else # define progname TUKLIB_SYMBOL(tuklib_progname) diff -ur xz-5.2.5/src/liblzma/Makefile.am xz-5.4.3/src/liblzma/Makefile.am --- xz-5.2.5/src/liblzma/Makefile.am 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/Makefile.am 2023-05-04 17:22:00 @@ -24,12 +24,16 @@ -I$(top_srcdir)/src/liblzma/simple \ -I$(top_srcdir)/src/common \ -DTUKLIB_SYMBOL_PREFIX=lzma_ -liblzma_la_LDFLAGS = -no-undefined -version-info 7:5:2 +liblzma_la_LDFLAGS = -no-undefined -version-info 9:3:4 -EXTRA_DIST += liblzma.map validate_map.sh -if COND_SYMVERS +EXTRA_DIST += liblzma_generic.map liblzma_linux.map validate_map.sh +if COND_SYMVERS_GENERIC liblzma_la_LDFLAGS += \ - -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma.map + -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma_generic.map +endif +if COND_SYMVERS_LINUX +liblzma_la_LDFLAGS += \ + -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma_linux.map endif liblzma_la_SOURCES += ../common/tuklib_physmem.c diff -ur xz-5.2.5/src/liblzma/Makefile.in xz-5.4.3/src/liblzma/Makefile.in --- xz-5.2.5/src/liblzma/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/src/liblzma/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -89,12 +89,19 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@COND_SYMVERS_TRUE@am__append_1 = \ -@COND_SYMVERS_TRUE@ -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma.map +@COND_SYMVERS_GENERIC_TRUE@am__append_1 = \ +@COND_SYMVERS_GENERIC_TRUE@ -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma_generic.map -@COND_THREADS_TRUE@am__append_2 = ../common/tuklib_cpucores.c -@COND_THREADS_TRUE@am__append_3 = common/hardware_cputhreads.c -@COND_MAIN_ENCODER_TRUE@am__append_4 = \ +@COND_SYMVERS_LINUX_TRUE@am__append_2 = \ +@COND_SYMVERS_LINUX_TRUE@ -Wl,--version-script=$(top_srcdir)/src/liblzma/liblzma_linux.map + +@COND_THREADS_TRUE@am__append_3 = ../common/tuklib_cpucores.c +@COND_THREADS_TRUE@am__append_4 = \ +@COND_THREADS_TRUE@ common/hardware_cputhreads.c \ +@COND_THREADS_TRUE@ common/outqueue.c \ +@COND_THREADS_TRUE@ common/outqueue.h + +@COND_MAIN_ENCODER_TRUE@am__append_5 = \ @COND_MAIN_ENCODER_TRUE@ common/alone_encoder.c \ @COND_MAIN_ENCODER_TRUE@ common/block_buffer_encoder.c \ @COND_MAIN_ENCODER_TRUE@ common/block_buffer_encoder.h \ @@ -115,12 +122,13 @@ @COND_MAIN_ENCODER_TRUE@ common/stream_flags_encoder.c \ @COND_MAIN_ENCODER_TRUE@ common/vli_encoder.c -@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@am__append_5 = \ -@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@ common/outqueue.c \ -@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@ common/outqueue.h \ +@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@am__append_6 = \ @COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@ common/stream_encoder_mt.c -@COND_MAIN_DECODER_TRUE@am__append_6 = \ +@COND_MAIN_ENCODER_TRUE@@COND_MICROLZMA_TRUE@am__append_7 = \ +@COND_MAIN_ENCODER_TRUE@@COND_MICROLZMA_TRUE@ common/microlzma_encoder.c + +@COND_MAIN_DECODER_TRUE@am__append_8 = \ @COND_MAIN_DECODER_TRUE@ common/alone_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/alone_decoder.h \ @COND_MAIN_DECODER_TRUE@ common/auto_decoder.c \ @@ -129,11 +137,13 @@ @COND_MAIN_DECODER_TRUE@ common/block_decoder.h \ @COND_MAIN_DECODER_TRUE@ common/block_header_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/easy_decoder_memusage.c \ +@COND_MAIN_DECODER_TRUE@ common/file_info.c \ @COND_MAIN_DECODER_TRUE@ common/filter_buffer_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/filter_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/filter_decoder.h \ @COND_MAIN_DECODER_TRUE@ common/filter_flags_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/index_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/index_decoder.h \ @COND_MAIN_DECODER_TRUE@ common/index_hash.c \ @COND_MAIN_DECODER_TRUE@ common/stream_buffer_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/stream_decoder.c \ @@ -141,39 +151,51 @@ @COND_MAIN_DECODER_TRUE@ common/stream_flags_decoder.c \ @COND_MAIN_DECODER_TRUE@ common/vli_decoder.c -@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__append_7 = check/crc32_small.c -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_8 = \ +@COND_MAIN_DECODER_TRUE@@COND_THREADS_TRUE@am__append_9 = \ +@COND_MAIN_DECODER_TRUE@@COND_THREADS_TRUE@ common/stream_decoder_mt.c + +@COND_MAIN_DECODER_TRUE@@COND_MICROLZMA_TRUE@am__append_10 = \ +@COND_MAIN_DECODER_TRUE@@COND_MICROLZMA_TRUE@ common/microlzma_decoder.c + +@COND_LZIP_DECODER_TRUE@@COND_MAIN_DECODER_TRUE@am__append_11 = \ +@COND_LZIP_DECODER_TRUE@@COND_MAIN_DECODER_TRUE@ common/lzip_decoder.c \ +@COND_LZIP_DECODER_TRUE@@COND_MAIN_DECODER_TRUE@ common/lzip_decoder.h + +@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__append_12 = check/crc32_small.c +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_13 = \ @COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table.c \ @COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_le.h \ @COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_be.h -@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_9 = check/crc32_x86.S -@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_10 = check/crc32_fast.c -@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__append_11 = check/crc64_small.c -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_12 = \ +@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_14 = check/crc32_x86.S +@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_15 = check/crc32_fast.c +@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__append_16 = check/crc64_small.c +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_17 = \ @COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table.c \ @COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_le.h \ @COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_be.h -@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_13 = check/crc64_x86.S -@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_14 = check/crc64_fast.c -@COND_CHECK_SHA256_TRUE@@COND_INTERNAL_SHA256_TRUE@am__append_15 = check/sha256.c -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_16 = \ +@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_18 = check/crc64_x86.S +@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_19 = check/crc64_fast.c +@COND_CHECK_SHA256_TRUE@@COND_INTERNAL_SHA256_TRUE@am__append_20 = check/sha256.c +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_21 = \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.c \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.h \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_hash.h \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_hash_table.h \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_mf.c -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_17 = \ +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_22 = \ @COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.c \ @COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.h -@COND_FILTER_LZMA1_TRUE@am__append_18 = lzma/fastpos_tablegen.c \ +@COND_FILTER_LZMA1_TRUE@am__append_23 = lzma/fastpos_tablegen.c \ @COND_FILTER_LZMA1_TRUE@ rangecoder/price_tablegen.c -@COND_FILTER_LZMA1_TRUE@am__append_19 = lzma/lzma_common.h \ +@COND_FILTER_LZMA1_TRUE@am__append_24 = \ +@COND_FILTER_LZMA1_TRUE@ lzma/lzma_common.h \ @COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_presets.c -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_20 = \ + +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_25 = \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/fastpos.h \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.h \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.c \ @@ -181,62 +203,63 @@ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_fast.c \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_normal.c -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__append_21 = lzma/fastpos_table.c -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_22 = \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__append_26 = lzma/fastpos_table.c +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_27 = \ @COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.c \ @COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.h -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_23 = \ +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_28 = \ @COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.c \ @COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.h -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_24 = \ +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_29 = \ @COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.c \ @COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.h -@COND_FILTER_LZMA1_TRUE@am__append_25 = rangecoder/range_common.h -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_26 = \ +@COND_FILTER_LZMA1_TRUE@am__append_30 = rangecoder/range_common.h +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_31 = \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/range_encoder.h \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price.h \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price_table.c -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_27 = rangecoder/range_decoder.h -@COND_FILTER_DELTA_TRUE@am__append_28 = \ +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_32 = rangecoder/range_decoder.h +@COND_FILTER_DELTA_TRUE@am__append_33 = \ @COND_FILTER_DELTA_TRUE@ delta/delta_common.c \ @COND_FILTER_DELTA_TRUE@ delta/delta_common.h \ @COND_FILTER_DELTA_TRUE@ delta/delta_private.h -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_29 = \ +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_34 = \ @COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.c \ @COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.h -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_30 = \ +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_35 = \ @COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.c \ @COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.h -@COND_FILTER_SIMPLE_TRUE@am__append_31 = \ +@COND_FILTER_SIMPLE_TRUE@am__append_36 = \ @COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.c \ @COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.h \ @COND_FILTER_SIMPLE_TRUE@ simple/simple_private.h -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_32 = \ +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_37 = \ @COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.c \ @COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.h -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_33 = \ +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_38 = \ @COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.c \ @COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.h -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__append_34 = simple/x86.c -@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_35 = simple/powerpc.c -@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_36 = simple/ia64.c -@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_37 = simple/arm.c -@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_38 = simple/armthumb.c -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__append_39 = simple/sparc.c -@COND_W32_TRUE@am__append_40 = liblzma.def liblzma.def.in empty.c -@COND_W32_TRUE@am__append_41 = liblzma_w32res.rc -@COND_W32_TRUE@am__append_42 = -Xlinker --output-def -Xlinker liblzma.def.in -@COND_SHARED_TRUE@@COND_W32_TRUE@am__append_43 = liblzma.def +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__append_39 = simple/x86.c +@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_40 = simple/powerpc.c +@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_41 = simple/ia64.c +@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_42 = simple/arm.c +@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_43 = simple/armthumb.c +@COND_FILTER_ARM64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_44 = simple/arm64.c +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__append_45 = simple/sparc.c +@COND_W32_TRUE@am__append_46 = liblzma.def liblzma.def.in empty.c +@COND_W32_TRUE@am__append_47 = liblzma_w32res.rc +@COND_W32_TRUE@am__append_48 = -Xlinker --output-def -Xlinker liblzma.def.in +@COND_SHARED_TRUE@@COND_W32_TRUE@am__append_49 = liblzma.def subdir = src/liblzma ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_capsicum.m4 \ @@ -300,8 +323,9 @@ common/easy_preset.h common/filter_common.c \ common/filter_common.h common/hardware_physmem.c \ common/index.c common/index.h common/stream_flags_common.c \ - common/stream_flags_common.h common/vli_size.c \ - common/hardware_cputhreads.c common/alone_encoder.c \ + common/stream_flags_common.h common/string_conversion.c \ + common/vli_size.c common/hardware_cputhreads.c \ + common/outqueue.c common/outqueue.h common/alone_encoder.c \ common/block_buffer_encoder.c common/block_buffer_encoder.h \ common/block_encoder.c common/block_encoder.h \ common/block_header_encoder.c common/easy_buffer_encoder.c \ @@ -311,17 +335,20 @@ common/index_encoder.c common/index_encoder.h \ common/stream_buffer_encoder.c common/stream_encoder.c \ common/stream_flags_encoder.c common/vli_encoder.c \ - common/outqueue.c common/outqueue.h common/stream_encoder_mt.c \ + common/stream_encoder_mt.c common/microlzma_encoder.c \ common/alone_decoder.c common/alone_decoder.h \ common/auto_decoder.c common/block_buffer_decoder.c \ common/block_decoder.c common/block_decoder.h \ common/block_header_decoder.c common/easy_decoder_memusage.c \ - common/filter_buffer_decoder.c common/filter_decoder.c \ - common/filter_decoder.h common/filter_flags_decoder.c \ - common/index_decoder.c common/index_hash.c \ + common/file_info.c common/filter_buffer_decoder.c \ + common/filter_decoder.c common/filter_decoder.h \ + common/filter_flags_decoder.c common/index_decoder.c \ + common/index_decoder.h common/index_hash.c \ common/stream_buffer_decoder.c common/stream_decoder.c \ common/stream_decoder.h common/stream_flags_decoder.c \ - common/vli_decoder.c check/check.c check/check.h \ + common/vli_decoder.c common/stream_decoder_mt.c \ + common/microlzma_decoder.c common/lzip_decoder.c \ + common/lzip_decoder.h check/check.c check/check.h \ check/crc_macros.h check/crc32_small.c check/crc32_table.c \ check/crc32_table_le.h check/crc32_table_be.h \ check/crc32_x86.S check/crc32_fast.c check/crc64_small.c \ @@ -346,10 +373,11 @@ simple/simple_private.h simple/simple_encoder.c \ simple/simple_encoder.h simple/simple_decoder.c \ simple/simple_decoder.h simple/x86.c simple/powerpc.c \ - simple/ia64.c simple/arm.c simple/armthumb.c simple/sparc.c \ - liblzma_w32res.rc + simple/ia64.c simple/arm.c simple/armthumb.c simple/arm64.c \ + simple/sparc.c liblzma_w32res.rc @COND_THREADS_TRUE@am__objects_1 = liblzma_la-tuklib_cpucores.lo -@COND_THREADS_TRUE@am__objects_2 = liblzma_la-hardware_cputhreads.lo +@COND_THREADS_TRUE@am__objects_2 = liblzma_la-hardware_cputhreads.lo \ +@COND_THREADS_TRUE@ liblzma_la-outqueue.lo @COND_MAIN_ENCODER_TRUE@am__objects_3 = liblzma_la-alone_encoder.lo \ @COND_MAIN_ENCODER_TRUE@ liblzma_la-block_buffer_encoder.lo \ @COND_MAIN_ENCODER_TRUE@ liblzma_la-block_encoder.lo \ @@ -365,14 +393,15 @@ @COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_encoder.lo \ @COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_flags_encoder.lo \ @COND_MAIN_ENCODER_TRUE@ liblzma_la-vli_encoder.lo -@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@am__objects_4 = liblzma_la-outqueue.lo \ -@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@ liblzma_la-stream_encoder_mt.lo -@COND_MAIN_DECODER_TRUE@am__objects_5 = liblzma_la-alone_decoder.lo \ +@COND_MAIN_ENCODER_TRUE@@COND_THREADS_TRUE@am__objects_4 = liblzma_la-stream_encoder_mt.lo +@COND_MAIN_ENCODER_TRUE@@COND_MICROLZMA_TRUE@am__objects_5 = liblzma_la-microlzma_encoder.lo +@COND_MAIN_DECODER_TRUE@am__objects_6 = liblzma_la-alone_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-auto_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-block_buffer_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-block_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-block_header_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-easy_decoder_memusage.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-file_info.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-filter_buffer_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-filter_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-filter_flags_decoder.lo \ @@ -382,60 +411,67 @@ @COND_MAIN_DECODER_TRUE@ liblzma_la-stream_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-stream_flags_decoder.lo \ @COND_MAIN_DECODER_TRUE@ liblzma_la-vli_decoder.lo -@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__objects_6 = liblzma_la-crc32_small.lo -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_7 = liblzma_la-crc32_table.lo -@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_8 = liblzma_la-crc32_x86.lo -@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_9 = liblzma_la-crc32_fast.lo -@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__objects_10 = liblzma_la-crc64_small.lo -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_11 = liblzma_la-crc64_table.lo -@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_12 = liblzma_la-crc64_x86.lo -@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_13 = liblzma_la-crc64_fast.lo -@COND_CHECK_SHA256_TRUE@@COND_INTERNAL_SHA256_TRUE@am__objects_14 = liblzma_la-sha256.lo -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_15 = liblzma_la-lz_encoder.lo \ +@COND_MAIN_DECODER_TRUE@@COND_THREADS_TRUE@am__objects_7 = liblzma_la-stream_decoder_mt.lo +@COND_MAIN_DECODER_TRUE@@COND_MICROLZMA_TRUE@am__objects_8 = liblzma_la-microlzma_decoder.lo +@COND_LZIP_DECODER_TRUE@@COND_MAIN_DECODER_TRUE@am__objects_9 = liblzma_la-lzip_decoder.lo +@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__objects_10 = liblzma_la-crc32_small.lo +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_11 = liblzma_la-crc32_table.lo +@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_12 = liblzma_la-crc32_x86.lo +@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_13 = liblzma_la-crc32_fast.lo +@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__objects_14 = liblzma_la-crc64_small.lo +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_15 = liblzma_la-crc64_table.lo +@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_16 = liblzma_la-crc64_x86.lo +@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_17 = liblzma_la-crc64_fast.lo +@COND_CHECK_SHA256_TRUE@@COND_INTERNAL_SHA256_TRUE@am__objects_18 = liblzma_la-sha256.lo +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_19 = liblzma_la-lz_encoder.lo \ @COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ liblzma_la-lz_encoder_mf.lo -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_16 = liblzma_la-lz_decoder.lo -@COND_FILTER_LZMA1_TRUE@am__objects_17 = \ +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_20 = liblzma_la-lz_decoder.lo +@COND_FILTER_LZMA1_TRUE@am__objects_21 = \ @COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_presets.lo -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_18 = liblzma_la-lzma_encoder.lo \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_22 = liblzma_la-lzma_encoder.lo \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_fast.lo \ @COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_normal.lo -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__objects_19 = liblzma_la-fastpos_table.lo -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_20 = liblzma_la-lzma_decoder.lo -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_21 = liblzma_la-lzma2_encoder.lo -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_22 = liblzma_la-lzma2_decoder.lo -am__objects_23 = -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_24 = liblzma_la-price_table.lo -@COND_FILTER_DELTA_TRUE@am__objects_25 = liblzma_la-delta_common.lo -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_26 = liblzma_la-delta_encoder.lo -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_27 = liblzma_la-delta_decoder.lo -@COND_FILTER_SIMPLE_TRUE@am__objects_28 = liblzma_la-simple_coder.lo -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_29 = liblzma_la-simple_encoder.lo -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_30 = liblzma_la-simple_decoder.lo -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__objects_31 = liblzma_la-x86.lo -@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_32 = liblzma_la-powerpc.lo -@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_33 = liblzma_la-ia64.lo -@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_34 = liblzma_la-arm.lo -@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_35 = liblzma_la-armthumb.lo -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__objects_36 = liblzma_la-sparc.lo -@COND_W32_TRUE@am__objects_37 = liblzma_w32res.lo +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__objects_23 = liblzma_la-fastpos_table.lo +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_24 = liblzma_la-lzma_decoder.lo +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_25 = liblzma_la-lzma2_encoder.lo +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_26 = liblzma_la-lzma2_decoder.lo +am__objects_27 = +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_28 = liblzma_la-price_table.lo +@COND_FILTER_DELTA_TRUE@am__objects_29 = liblzma_la-delta_common.lo +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_30 = liblzma_la-delta_encoder.lo +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_31 = liblzma_la-delta_decoder.lo +@COND_FILTER_SIMPLE_TRUE@am__objects_32 = liblzma_la-simple_coder.lo +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_33 = liblzma_la-simple_encoder.lo +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_34 = liblzma_la-simple_decoder.lo +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__objects_35 = liblzma_la-x86.lo +@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_36 = liblzma_la-powerpc.lo +@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_37 = liblzma_la-ia64.lo +@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_38 = liblzma_la-arm.lo +@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_39 = liblzma_la-armthumb.lo +@COND_FILTER_ARM64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_40 = liblzma_la-arm64.lo +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__objects_41 = liblzma_la-sparc.lo +@COND_W32_TRUE@am__objects_42 = liblzma_w32res.lo am_liblzma_la_OBJECTS = liblzma_la-tuklib_physmem.lo $(am__objects_1) \ liblzma_la-common.lo liblzma_la-block_util.lo \ liblzma_la-easy_preset.lo liblzma_la-filter_common.lo \ liblzma_la-hardware_physmem.lo liblzma_la-index.lo \ - liblzma_la-stream_flags_common.lo liblzma_la-vli_size.lo \ + liblzma_la-stream_flags_common.lo \ + liblzma_la-string_conversion.lo liblzma_la-vli_size.lo \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ - $(am__objects_5) liblzma_la-check.lo $(am__objects_6) \ - $(am__objects_7) $(am__objects_8) $(am__objects_9) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) liblzma_la-check.lo \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(am__objects_13) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) $(am__objects_21) \ $(am__objects_22) $(am__objects_23) $(am__objects_24) \ - $(am__objects_23) $(am__objects_25) $(am__objects_26) \ - $(am__objects_27) $(am__objects_28) $(am__objects_29) \ + $(am__objects_25) $(am__objects_26) $(am__objects_27) \ + $(am__objects_28) $(am__objects_27) $(am__objects_29) \ $(am__objects_30) $(am__objects_31) $(am__objects_32) \ $(am__objects_33) $(am__objects_34) $(am__objects_35) \ - $(am__objects_36) $(am__objects_37) + $(am__objects_36) $(am__objects_37) $(am__objects_38) \ + $(am__objects_39) $(am__objects_40) $(am__objects_41) \ + $(am__objects_42) liblzma_la_OBJECTS = $(am_liblzma_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -462,6 +498,7 @@ am__depfiles_remade = ./$(DEPDIR)/liblzma_la-alone_decoder.Plo \ ./$(DEPDIR)/liblzma_la-alone_encoder.Plo \ ./$(DEPDIR)/liblzma_la-arm.Plo \ + ./$(DEPDIR)/liblzma_la-arm64.Plo \ ./$(DEPDIR)/liblzma_la-armthumb.Plo \ ./$(DEPDIR)/liblzma_la-auto_decoder.Plo \ ./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo \ @@ -490,6 +527,7 @@ ./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo \ ./$(DEPDIR)/liblzma_la-easy_preset.Plo \ ./$(DEPDIR)/liblzma_la-fastpos_table.Plo \ + ./$(DEPDIR)/liblzma_la-file_info.Plo \ ./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo \ ./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo \ ./$(DEPDIR)/liblzma_la-filter_common.Plo \ @@ -507,6 +545,7 @@ ./$(DEPDIR)/liblzma_la-lz_decoder.Plo \ ./$(DEPDIR)/liblzma_la-lz_encoder.Plo \ ./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo \ + ./$(DEPDIR)/liblzma_la-lzip_decoder.Plo \ ./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo \ ./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo \ ./$(DEPDIR)/liblzma_la-lzma_decoder.Plo \ @@ -514,6 +553,8 @@ ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo \ ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo \ ./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo \ + ./$(DEPDIR)/liblzma_la-microlzma_decoder.Plo \ + ./$(DEPDIR)/liblzma_la-microlzma_encoder.Plo \ ./$(DEPDIR)/liblzma_la-outqueue.Plo \ ./$(DEPDIR)/liblzma_la-powerpc.Plo \ ./$(DEPDIR)/liblzma_la-price_table.Plo \ @@ -525,11 +566,13 @@ ./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo \ ./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo \ ./$(DEPDIR)/liblzma_la-stream_decoder.Plo \ + ./$(DEPDIR)/liblzma_la-stream_decoder_mt.Plo \ ./$(DEPDIR)/liblzma_la-stream_encoder.Plo \ ./$(DEPDIR)/liblzma_la-stream_encoder_mt.Plo \ ./$(DEPDIR)/liblzma_la-stream_flags_common.Plo \ ./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo \ ./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo \ + ./$(DEPDIR)/liblzma_la-string_conversion.Plo \ ./$(DEPDIR)/liblzma_la-tuklib_cpucores.Plo \ ./$(DEPDIR)/liblzma_la-tuklib_physmem.Plo \ ./$(DEPDIR)/liblzma_la-vli_decoder.Plo \ @@ -606,8 +649,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/check/Makefile.inc \ $(srcdir)/common/Makefile.inc $(srcdir)/delta/Makefile.inc \ @@ -660,6 +701,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -670,8 +713,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -724,6 +769,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -782,6 +828,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -792,31 +839,34 @@ top_srcdir = @top_srcdir@ xz = @xz@ SUBDIRS = api -EXTRA_DIST = liblzma.map validate_map.sh check/crc32_tablegen.c \ - check/crc64_tablegen.c $(am__append_18) liblzma.pc.in -CLEANFILES = $(am__append_40) -doc_DATA = $(am__append_43) +EXTRA_DIST = liblzma_generic.map liblzma_linux.map validate_map.sh \ + check/crc32_tablegen.c check/crc64_tablegen.c $(am__append_23) \ + liblzma.pc.in +CLEANFILES = $(am__append_46) +doc_DATA = $(am__append_49) lib_LTLIBRARIES = liblzma.la -liblzma_la_SOURCES = ../common/tuklib_physmem.c $(am__append_2) \ +liblzma_la_SOURCES = ../common/tuklib_physmem.c $(am__append_3) \ common/common.c common/common.h common/memcmplen.h \ common/block_util.c common/easy_preset.c common/easy_preset.h \ common/filter_common.c common/filter_common.h \ common/hardware_physmem.c common/index.c common/index.h \ common/stream_flags_common.c common/stream_flags_common.h \ - common/vli_size.c $(am__append_3) $(am__append_4) \ - $(am__append_5) $(am__append_6) check/check.c check/check.h \ - check/crc_macros.h $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) $(am__append_13) $(am__append_14) \ - $(am__append_15) $(am__append_16) $(am__append_17) \ - $(am__append_19) $(am__append_20) $(am__append_21) \ - $(am__append_22) $(am__append_23) $(am__append_24) \ - $(am__append_25) $(am__append_26) $(am__append_27) \ - $(am__append_28) $(am__append_29) $(am__append_30) \ - $(am__append_31) $(am__append_32) $(am__append_33) \ - $(am__append_34) $(am__append_35) $(am__append_36) \ - $(am__append_37) $(am__append_38) $(am__append_39) \ - $(am__append_41) + common/string_conversion.c common/vli_size.c $(am__append_4) \ + $(am__append_5) $(am__append_6) $(am__append_7) \ + $(am__append_8) $(am__append_9) $(am__append_10) \ + $(am__append_11) check/check.c check/check.h \ + check/crc_macros.h $(am__append_12) $(am__append_13) \ + $(am__append_14) $(am__append_15) $(am__append_16) \ + $(am__append_17) $(am__append_18) $(am__append_19) \ + $(am__append_20) $(am__append_21) $(am__append_22) \ + $(am__append_24) $(am__append_25) $(am__append_26) \ + $(am__append_27) $(am__append_28) $(am__append_29) \ + $(am__append_30) $(am__append_31) $(am__append_32) \ + $(am__append_33) $(am__append_34) $(am__append_35) \ + $(am__append_36) $(am__append_37) $(am__append_38) \ + $(am__append_39) $(am__append_40) $(am__append_41) \ + $(am__append_42) $(am__append_43) $(am__append_44) \ + $(am__append_45) $(am__append_47) liblzma_la_CPPFLAGS = \ -I$(top_srcdir)/src/liblzma/api \ -I$(top_srcdir)/src/liblzma/common \ @@ -829,8 +879,8 @@ -I$(top_srcdir)/src/common \ -DTUKLIB_SYMBOL_PREFIX=lzma_ -liblzma_la_LDFLAGS = -no-undefined -version-info 7:5:2 $(am__append_1) \ - $(am__append_42) +liblzma_la_LDFLAGS = -no-undefined -version-info 9:3:4 $(am__append_1) \ + $(am__append_2) $(am__append_48) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = liblzma.pc pc_verbose = $(pc_verbose_@AM_V@) @@ -918,6 +968,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-arm.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-arm64.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-armthumb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-auto_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo@am__quote@ # am--include-marker @@ -946,6 +997,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_preset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-fastpos_table.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-file_info.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_common.Plo@am__quote@ # am--include-marker @@ -963,6 +1015,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzip_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_decoder.Plo@am__quote@ # am--include-marker @@ -970,6 +1023,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-microlzma_decoder.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-microlzma_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-outqueue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-powerpc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-price_table.Plo@am__quote@ # am--include-marker @@ -981,11 +1036,13 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_decoder.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_decoder_mt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_encoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_encoder_mt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_common.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-string_conversion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-tuklib_cpucores.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-tuklib_physmem.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_decoder.Plo@am__quote@ # am--include-marker @@ -1118,6 +1175,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_common.lo `test -f 'common/stream_flags_common.c' || echo '$(srcdir)/'`common/stream_flags_common.c +liblzma_la-string_conversion.lo: common/string_conversion.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-string_conversion.lo -MD -MP -MF $(DEPDIR)/liblzma_la-string_conversion.Tpo -c -o liblzma_la-string_conversion.lo `test -f 'common/string_conversion.c' || echo '$(srcdir)/'`common/string_conversion.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-string_conversion.Tpo $(DEPDIR)/liblzma_la-string_conversion.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/string_conversion.c' object='liblzma_la-string_conversion.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-string_conversion.lo `test -f 'common/string_conversion.c' || echo '$(srcdir)/'`common/string_conversion.c + liblzma_la-vli_size.lo: common/vli_size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_size.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_size.Tpo -c -o liblzma_la-vli_size.lo `test -f 'common/vli_size.c' || echo '$(srcdir)/'`common/vli_size.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-vli_size.Tpo $(DEPDIR)/liblzma_la-vli_size.Plo @@ -1132,6 +1196,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-hardware_cputhreads.lo `test -f 'common/hardware_cputhreads.c' || echo '$(srcdir)/'`common/hardware_cputhreads.c +liblzma_la-outqueue.lo: common/outqueue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-outqueue.lo -MD -MP -MF $(DEPDIR)/liblzma_la-outqueue.Tpo -c -o liblzma_la-outqueue.lo `test -f 'common/outqueue.c' || echo '$(srcdir)/'`common/outqueue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-outqueue.Tpo $(DEPDIR)/liblzma_la-outqueue.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/outqueue.c' object='liblzma_la-outqueue.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-outqueue.lo `test -f 'common/outqueue.c' || echo '$(srcdir)/'`common/outqueue.c + liblzma_la-alone_encoder.lo: common/alone_encoder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_encoder.Tpo -c -o liblzma_la-alone_encoder.lo `test -f 'common/alone_encoder.c' || echo '$(srcdir)/'`common/alone_encoder.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-alone_encoder.Tpo $(DEPDIR)/liblzma_la-alone_encoder.Plo @@ -1237,13 +1308,6 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_encoder.lo `test -f 'common/vli_encoder.c' || echo '$(srcdir)/'`common/vli_encoder.c -liblzma_la-outqueue.lo: common/outqueue.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-outqueue.lo -MD -MP -MF $(DEPDIR)/liblzma_la-outqueue.Tpo -c -o liblzma_la-outqueue.lo `test -f 'common/outqueue.c' || echo '$(srcdir)/'`common/outqueue.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-outqueue.Tpo $(DEPDIR)/liblzma_la-outqueue.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/outqueue.c' object='liblzma_la-outqueue.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-outqueue.lo `test -f 'common/outqueue.c' || echo '$(srcdir)/'`common/outqueue.c - liblzma_la-stream_encoder_mt.lo: common/stream_encoder_mt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_encoder_mt.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_encoder_mt.Tpo -c -o liblzma_la-stream_encoder_mt.lo `test -f 'common/stream_encoder_mt.c' || echo '$(srcdir)/'`common/stream_encoder_mt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-stream_encoder_mt.Tpo $(DEPDIR)/liblzma_la-stream_encoder_mt.Plo @@ -1251,6 +1315,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_encoder_mt.lo `test -f 'common/stream_encoder_mt.c' || echo '$(srcdir)/'`common/stream_encoder_mt.c +liblzma_la-microlzma_encoder.lo: common/microlzma_encoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-microlzma_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-microlzma_encoder.Tpo -c -o liblzma_la-microlzma_encoder.lo `test -f 'common/microlzma_encoder.c' || echo '$(srcdir)/'`common/microlzma_encoder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-microlzma_encoder.Tpo $(DEPDIR)/liblzma_la-microlzma_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/microlzma_encoder.c' object='liblzma_la-microlzma_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-microlzma_encoder.lo `test -f 'common/microlzma_encoder.c' || echo '$(srcdir)/'`common/microlzma_encoder.c + liblzma_la-alone_decoder.lo: common/alone_decoder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_decoder.Tpo -c -o liblzma_la-alone_decoder.lo `test -f 'common/alone_decoder.c' || echo '$(srcdir)/'`common/alone_decoder.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-alone_decoder.Tpo $(DEPDIR)/liblzma_la-alone_decoder.Plo @@ -1293,6 +1364,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_decoder_memusage.lo `test -f 'common/easy_decoder_memusage.c' || echo '$(srcdir)/'`common/easy_decoder_memusage.c +liblzma_la-file_info.lo: common/file_info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-file_info.lo -MD -MP -MF $(DEPDIR)/liblzma_la-file_info.Tpo -c -o liblzma_la-file_info.lo `test -f 'common/file_info.c' || echo '$(srcdir)/'`common/file_info.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-file_info.Tpo $(DEPDIR)/liblzma_la-file_info.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/file_info.c' object='liblzma_la-file_info.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-file_info.lo `test -f 'common/file_info.c' || echo '$(srcdir)/'`common/file_info.c + liblzma_la-filter_buffer_decoder.lo: common/filter_buffer_decoder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo -c -o liblzma_la-filter_buffer_decoder.lo `test -f 'common/filter_buffer_decoder.c' || echo '$(srcdir)/'`common/filter_buffer_decoder.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo @@ -1356,6 +1434,27 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_decoder.lo `test -f 'common/vli_decoder.c' || echo '$(srcdir)/'`common/vli_decoder.c +liblzma_la-stream_decoder_mt.lo: common/stream_decoder_mt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_decoder_mt.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_decoder_mt.Tpo -c -o liblzma_la-stream_decoder_mt.lo `test -f 'common/stream_decoder_mt.c' || echo '$(srcdir)/'`common/stream_decoder_mt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-stream_decoder_mt.Tpo $(DEPDIR)/liblzma_la-stream_decoder_mt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/stream_decoder_mt.c' object='liblzma_la-stream_decoder_mt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_decoder_mt.lo `test -f 'common/stream_decoder_mt.c' || echo '$(srcdir)/'`common/stream_decoder_mt.c + +liblzma_la-microlzma_decoder.lo: common/microlzma_decoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-microlzma_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-microlzma_decoder.Tpo -c -o liblzma_la-microlzma_decoder.lo `test -f 'common/microlzma_decoder.c' || echo '$(srcdir)/'`common/microlzma_decoder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-microlzma_decoder.Tpo $(DEPDIR)/liblzma_la-microlzma_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/microlzma_decoder.c' object='liblzma_la-microlzma_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-microlzma_decoder.lo `test -f 'common/microlzma_decoder.c' || echo '$(srcdir)/'`common/microlzma_decoder.c + +liblzma_la-lzip_decoder.lo: common/lzip_decoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzip_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzip_decoder.Tpo -c -o liblzma_la-lzip_decoder.lo `test -f 'common/lzip_decoder.c' || echo '$(srcdir)/'`common/lzip_decoder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-lzip_decoder.Tpo $(DEPDIR)/liblzma_la-lzip_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/lzip_decoder.c' object='liblzma_la-lzip_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzip_decoder.lo `test -f 'common/lzip_decoder.c' || echo '$(srcdir)/'`common/lzip_decoder.c + liblzma_la-check.lo: check/check.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-check.lo -MD -MP -MF $(DEPDIR)/liblzma_la-check.Tpo -c -o liblzma_la-check.lo `test -f 'check/check.c' || echo '$(srcdir)/'`check/check.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-check.Tpo $(DEPDIR)/liblzma_la-check.Plo @@ -1573,6 +1672,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-armthumb.lo `test -f 'simple/armthumb.c' || echo '$(srcdir)/'`simple/armthumb.c +liblzma_la-arm64.lo: simple/arm64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-arm64.lo -MD -MP -MF $(DEPDIR)/liblzma_la-arm64.Tpo -c -o liblzma_la-arm64.lo `test -f 'simple/arm64.c' || echo '$(srcdir)/'`simple/arm64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-arm64.Tpo $(DEPDIR)/liblzma_la-arm64.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='simple/arm64.c' object='liblzma_la-arm64.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-arm64.lo `test -f 'simple/arm64.c' || echo '$(srcdir)/'`simple/arm64.c + liblzma_la-sparc.lo: simple/sparc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-sparc.lo -MD -MP -MF $(DEPDIR)/liblzma_la-sparc.Tpo -c -o liblzma_la-sparc.lo `test -f 'simple/sparc.c' || echo '$(srcdir)/'`simple/sparc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblzma_la-sparc.Tpo $(DEPDIR)/liblzma_la-sparc.Plo @@ -1726,7 +1832,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -1833,6 +1938,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-alone_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-alone_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-arm.Plo + -rm -f ./$(DEPDIR)/liblzma_la-arm64.Plo -rm -f ./$(DEPDIR)/liblzma_la-armthumb.Plo -rm -f ./$(DEPDIR)/liblzma_la-auto_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo @@ -1861,6 +1967,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo -rm -f ./$(DEPDIR)/liblzma_la-easy_preset.Plo -rm -f ./$(DEPDIR)/liblzma_la-fastpos_table.Plo + -rm -f ./$(DEPDIR)/liblzma_la-file_info.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_common.Plo @@ -1878,6 +1985,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-lz_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lz_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo + -rm -f ./$(DEPDIR)/liblzma_la-lzip_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_decoder.Plo @@ -1885,6 +1993,8 @@ -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo + -rm -f ./$(DEPDIR)/liblzma_la-microlzma_decoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-microlzma_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-outqueue.Plo -rm -f ./$(DEPDIR)/liblzma_la-powerpc.Plo -rm -f ./$(DEPDIR)/liblzma_la-price_table.Plo @@ -1896,11 +2006,13 @@ -rm -f ./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_decoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-stream_decoder_mt.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_encoder_mt.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_common.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-string_conversion.Plo -rm -f ./$(DEPDIR)/liblzma_la-tuklib_cpucores.Plo -rm -f ./$(DEPDIR)/liblzma_la-tuklib_physmem.Plo -rm -f ./$(DEPDIR)/liblzma_la-vli_decoder.Plo @@ -1955,6 +2067,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-alone_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-alone_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-arm.Plo + -rm -f ./$(DEPDIR)/liblzma_la-arm64.Plo -rm -f ./$(DEPDIR)/liblzma_la-armthumb.Plo -rm -f ./$(DEPDIR)/liblzma_la-auto_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo @@ -1983,6 +2096,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo -rm -f ./$(DEPDIR)/liblzma_la-easy_preset.Plo -rm -f ./$(DEPDIR)/liblzma_la-fastpos_table.Plo + -rm -f ./$(DEPDIR)/liblzma_la-file_info.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-filter_common.Plo @@ -2000,6 +2114,7 @@ -rm -f ./$(DEPDIR)/liblzma_la-lz_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lz_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo + -rm -f ./$(DEPDIR)/liblzma_la-lzip_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_decoder.Plo @@ -2007,6 +2122,8 @@ -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo -rm -f ./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo + -rm -f ./$(DEPDIR)/liblzma_la-microlzma_decoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-microlzma_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-outqueue.Plo -rm -f ./$(DEPDIR)/liblzma_la-powerpc.Plo -rm -f ./$(DEPDIR)/liblzma_la-price_table.Plo @@ -2018,11 +2135,13 @@ -rm -f ./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_decoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-stream_decoder_mt.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_encoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_encoder_mt.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_common.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo -rm -f ./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo + -rm -f ./$(DEPDIR)/liblzma_la-string_conversion.Plo -rm -f ./$(DEPDIR)/liblzma_la-tuklib_cpucores.Plo -rm -f ./$(DEPDIR)/liblzma_la-tuklib_physmem.Plo -rm -f ./$(DEPDIR)/liblzma_la-vli_decoder.Plo diff -ur xz-5.2.5/src/liblzma/api/Makefile.in xz-5.4.3/src/liblzma/api/Makefile.in --- xz-5.2.5/src/liblzma/api/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/src/liblzma/api/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -180,8 +180,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ @@ -204,6 +202,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -214,8 +214,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -268,6 +270,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -326,6 +329,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -466,7 +470,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/src/liblzma/api/lzma/base.h xz-5.4.3/src/liblzma/api/lzma/base.h --- xz-5.2.5/src/liblzma/api/lzma/base.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/api/lzma/base.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/base.h * \brief Data types and functions used in many places in liblzma API + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -138,13 +137,19 @@ */ LZMA_MEMLIMIT_ERROR = 6, - /** + /**< * \brief Memory usage limit was reached * * Decoder would need more memory than allowed by the * specified memory usage limit. To continue decoding, * the memory usage limit has to be increased with * lzma_memlimit_set(). + * + * liblzma 5.2.6 and earlier had a bug in single-threaded .xz + * decoder (lzma_stream_decoder()) which made it impossible + * to continue decoding after LZMA_MEMLIMIT_ERROR even if + * the limit was increased using lzma_memlimit_set(). + * Other decoders worked correctly. */ LZMA_FORMAT_ERROR = 7, @@ -234,6 +239,36 @@ * can be a sign of a bug in liblzma. See the documentation * how to report bugs. */ + + LZMA_SEEK_NEEDED = 12, + /**< + * \brief Request to change the input file position + * + * Some coders can do random access in the input file. The + * initialization functions of these coders take the file size + * as an argument. No other coders can return LZMA_SEEK_NEEDED. + * + * When this value is returned, the application must seek to + * the file position given in lzma_stream.seek_pos. This value + * is guaranteed to never exceed the file size that was + * specified at the coder initialization. + * + * After seeking the application should read new input and + * pass it normally via lzma_stream.next_in and .avail_in. + */ + + /* + * These eumerations may be used internally by liblzma + * but they will never be returned to applications. + */ + LZMA_RET_INTERNAL1 = 101, + LZMA_RET_INTERNAL2 = 102, + LZMA_RET_INTERNAL3 = 103, + LZMA_RET_INTERNAL4 = 104, + LZMA_RET_INTERNAL5 = 105, + LZMA_RET_INTERNAL6 = 106, + LZMA_RET_INTERNAL7 = 107, + LZMA_RET_INTERNAL8 = 108 } lzma_ret; @@ -241,7 +276,7 @@ * \brief The `action' argument for lzma_code() * * After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, LZMA_FULL_BARRIER, - * or LZMA_FINISH, the same `action' must is used until lzma_code() returns + * or LZMA_FINISH, the same `action' must be used until lzma_code() returns * LZMA_STREAM_END. Also, the amount of input (that is, strm->avail_in) must * not be modified by the application until lzma_code() returns * LZMA_STREAM_END. Changing the `action' or modifying the amount of input @@ -447,7 +482,7 @@ * * The lzma_stream structure is used for * - passing pointers to input and output buffers to liblzma; - * - defining custom memory hander functions; and + * - defining custom memory handler functions; and * - holding a pointer to coder-specific internal data structures. * * Typical usage: @@ -510,15 +545,44 @@ * you should not touch these, because the names of these variables * may change. */ + + /** \private Reserved member. */ void *reserved_ptr1; + + /** \private Reserved member. */ void *reserved_ptr2; + + /** \private Reserved member. */ void *reserved_ptr3; + + /** \private Reserved member. */ void *reserved_ptr4; - uint64_t reserved_int1; + + /** + * \brief New seek input position for LZMA_SEEK_NEEDED + * + * When lzma_code() returns LZMA_SEEK_NEEDED, the new input position + * needed by liblzma will be available seek_pos. The value is + * guaranteed to not exceed the file size that was specified when + * this lzma_stream was initialized. + * + * In all other situations the value of this variable is undefined. + */ + uint64_t seek_pos; + + /** \private Reserved member. */ uint64_t reserved_int2; + + /** \private Reserved member. */ size_t reserved_int3; + + /** \private Reserved member. */ size_t reserved_int4; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum1; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum2; } lzma_stream; @@ -559,6 +623,14 @@ * * See the description of the coder-specific initialization function to find * out what `action' values are supported by the coder. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param action Action for this function to take. Must be a valid + * lzma_action enum value. + * + * \return Any valid lzma_ret. See the lzma_ret enum description for more + * information. */ extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action) lzma_nothrow lzma_attr_warn_unused_result; @@ -567,15 +639,15 @@ /** * \brief Free memory allocated for the coder data structures * - * \param strm Pointer to lzma_stream that is at least initialized - * with LZMA_STREAM_INIT. - * * After lzma_end(strm), strm->internal is guaranteed to be NULL. No other * members of the lzma_stream structure are touched. * * \note zlib indicates an error if application end()s unfinished * stream structure. liblzma doesn't do this, and assumes that * application knows what it is doing. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. */ extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow; @@ -594,6 +666,11 @@ * mode by taking into account the progress made by each thread. In * single-threaded mode *progress_in and *progress_out are set to * strm->total_in and strm->total_out, respectively. + * + * \param strm Pointer to lzma_stream that is at least + * initialized with LZMA_STREAM_INIT. + * \param[out] progress_in Pointer to the number of input bytes processed. + * \param[out] progress_out Pointer to the number of output bytes processed. */ extern LZMA_API(void) lzma_get_progress(lzma_stream *strm, uint64_t *progress_in, uint64_t *progress_out) lzma_nothrow; @@ -612,6 +689,9 @@ * this may give misleading information if decoding .xz Streams that have * multiple Blocks, because each Block can have different memory requirements. * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * * \return How much memory is currently allocated for the filter * decoders. If no filter chain is currently allocated, * some non-zero value is still returned, which is less than @@ -631,6 +711,9 @@ * This function is supported only when *strm has been initialized with * a function that takes a memlimit argument. * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * * \return On success, the current memory usage limit is returned * (always non-zero). On error, zero is returned. */ @@ -649,7 +732,13 @@ * return LZMA_OK. Later versions treat 0 as if 1 had been specified (so * lzma_memlimit_get() will return 1 even if you specify 0 here). * - * \return - LZMA_OK: New memory usage limit successfully set. + * liblzma 5.2.6 and earlier had a bug in single-threaded .xz decoder + * (lzma_stream_decoder()) which made it impossible to continue decoding + * after LZMA_MEMLIMIT_ERROR even if the limit was increased using + * lzma_memlimit_set(). Other decoders worked correctly. + * + * \return Possible lzma_ret values: + * - LZMA_OK: New memory usage limit successfully set. * - LZMA_MEMLIMIT_ERROR: The new limit is too small. * The limit was not changed. * - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't diff -ur xz-5.2.5/src/liblzma/api/lzma/bcj.h xz-5.4.3/src/liblzma/api/lzma/bcj.h --- xz-5.2.5/src/liblzma/api/lzma/bcj.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/bcj.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/bcj.h * \brief Branch/Call/Jump conversion filters + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -19,35 +18,40 @@ /* Filter IDs for lzma_filter.id */ +/** + * \brief Filter for x86 binaries + */ #define LZMA_FILTER_X86 LZMA_VLI_C(0x04) - /**< - * Filter for x86 binaries - */ +/** + * \brief Filter for Big endian PowerPC binaries + */ #define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05) - /**< - * Filter for Big endian PowerPC binaries - */ +/** + * \brief Filter for IA-64 (Itanium) binaries + */ #define LZMA_FILTER_IA64 LZMA_VLI_C(0x06) - /**< - * Filter for IA-64 (Itanium) binaries. - */ +/** + * \brief Filter for ARM binaries + */ #define LZMA_FILTER_ARM LZMA_VLI_C(0x07) - /**< - * Filter for ARM binaries. - */ +/** + * \brief Filter for ARM-Thumb binaries + */ #define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08) - /**< - * Filter for ARM-Thumb binaries. - */ +/** + * \brief Filter for SPARC binaries + */ #define LZMA_FILTER_SPARC LZMA_VLI_C(0x09) - /**< - * Filter for SPARC binaries. - */ + +/** + * \brief Filter for ARM64 binaries + */ +#define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A) /** diff -ur xz-5.2.5/src/liblzma/api/lzma/block.h xz-5.4.3/src/liblzma/api/lzma/block.h --- xz-5.2.5/src/liblzma/api/lzma/block.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/block.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/block.h * \brief .xz Block handling + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -32,19 +31,28 @@ * \brief Block format version * * To prevent API and ABI breakages when new features are needed, - * a version number is used to indicate which fields in this + * a version number is used to indicate which members in this * structure are in use: * - liblzma >= 5.0.0: version = 0 is supported. * - liblzma >= 5.1.4beta: Support for version = 1 was added, - * which adds the ignore_check field. + * which adds the ignore_check member. * * If version is greater than one, most Block related functions * will return LZMA_OPTIONS_ERROR (lzma_block_header_decode() works * with any version value). * * Read by: - * - All functions that take pointer to lzma_block as argument, - * including lzma_block_header_decode(). + * - lzma_block_header_size() + * - lzma_block_header_encode() + * - lzma_block_header_decode() + * - lzma_block_compressed_size() + * - lzma_block_unpadded_size() + * - lzma_block_total_size() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_uncomp_encode() + * - lzma_block_buffer_decode() * * Written by: * - lzma_block_header_decode() @@ -52,7 +60,7 @@ uint32_t version; /** - * \brief Size of the Block Header field + * \brief Size of the Block Header field in bytes * * This is always a multiple of four. * @@ -68,6 +76,7 @@ * Written by: * - lzma_block_header_size() * - lzma_block_buffer_encode() + * - lzma_block_uncomp_encode() */ uint32_t header_size; # define LZMA_BLOCK_HEADER_SIZE_MIN 8 @@ -143,6 +152,7 @@ * - lzma_block_encoder() * - lzma_block_decoder() * - lzma_block_buffer_encode() + * - lzma_block_uncomp_encode() * - lzma_block_buffer_decode() */ lzma_vli compressed_size; @@ -167,6 +177,7 @@ * - lzma_block_encoder() * - lzma_block_decoder() * - lzma_block_buffer_encode() + * - lzma_block_uncomp_encode() * - lzma_block_buffer_decode() */ lzma_vli uncompressed_size; @@ -212,6 +223,7 @@ * - lzma_block_encoder() * - lzma_block_decoder() * - lzma_block_buffer_encode() + * - lzma_block_uncomp_encode() * - lzma_block_buffer_decode() */ uint8_t raw_check[LZMA_CHECK_SIZE_MAX]; @@ -223,26 +235,56 @@ * with the currently supported options, so it is safe to leave these * uninitialized. */ + + /** \private Reserved member. */ void *reserved_ptr1; + + /** \private Reserved member. */ void *reserved_ptr2; + + /** \private Reserved member. */ void *reserved_ptr3; + + /** \private Reserved member. */ uint32_t reserved_int1; + + /** \private Reserved member. */ uint32_t reserved_int2; + + /** \private Reserved member. */ lzma_vli reserved_int3; + + /** \private Reserved member. */ lzma_vli reserved_int4; + + /** \private Reserved member. */ lzma_vli reserved_int5; + + /** \private Reserved member. */ lzma_vli reserved_int6; + + /** \private Reserved member. */ lzma_vli reserved_int7; + + /** \private Reserved member. */ lzma_vli reserved_int8; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum1; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum2; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum3; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum4; /** * \brief A flag to Block decoder to not verify the Check field * - * This field is supported by liblzma >= 5.1.4beta if .version >= 1. + * This member is supported by liblzma >= 5.1.4beta if .version >= 1. * * If this is set to true, the integrity check won't be calculated * and verified. Unless you know what you are doing, you should @@ -260,12 +302,25 @@ */ lzma_bool ignore_check; + /** \private Reserved member. */ lzma_bool reserved_bool2; + + /** \private Reserved member. */ lzma_bool reserved_bool3; + + /** \private Reserved member. */ lzma_bool reserved_bool4; + + /** \private Reserved member. */ lzma_bool reserved_bool5; + + /** \private Reserved member. */ lzma_bool reserved_bool6; + + /** \private Reserved member. */ lzma_bool reserved_bool7; + + /** \private Reserved member. */ lzma_bool reserved_bool8; } lzma_block; @@ -280,7 +335,8 @@ * Note that if the first byte is 0x00, it indicates beginning of Index; use * this macro only when the byte is not 0x00. * - * There is no encoding macro, because Block Header encoder is enough for that. + * There is no encoding macro because lzma_block_header_size() and + * lzma_block_header_encode() should be used. */ #define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4) @@ -294,17 +350,20 @@ * four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size * just means that lzma_block_header_encode() will add Header Padding. * - * \return - LZMA_OK: Size calculated successfully and stored to - * block->header_size. - * - LZMA_OPTIONS_ERROR: Unsupported version, filters or - * filter options. - * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0. - * * \note This doesn't check that all the options are valid i.e. this * may return LZMA_OK even if lzma_block_header_encode() or * lzma_block_encoder() would fail. If you want to validate the * filter chain, consider using lzma_memlimit_encoder() which as * a side-effect validates the filter chain. + * + * \param block Block options + * + * \return Possible lzma_ret values: + * - LZMA_OK: Size calculated successfully and stored to + * block->header_size. + * - LZMA_OPTIONS_ERROR: Unsupported version, filters or + * filter options. + * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0. */ extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block) lzma_nothrow lzma_attr_warn_unused_result; @@ -318,11 +377,12 @@ * lzma_block_header_size() is used, the Block Header will be padded to the * specified size. * - * \param out Beginning of the output buffer. This must be - * at least block->header_size bytes. * \param block Block options to be encoded. + * \param[out] out Beginning of the output buffer. This must be + * at least block->header_size bytes. * - * \return - LZMA_OK: Encoding was successful. block->header_size + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. block->header_size * bytes were written to output buffer. * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. * - LZMA_PROG_ERROR: Invalid arguments, for example @@ -354,14 +414,15 @@ * block->filters must have been allocated, but they don't need to be * initialized (possible existing filter options are not freed). * - * \param block Destination for Block options. + * \param[out] block Destination for Block options * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() (and also free() * if an error occurs). * \param in Beginning of the input buffer. This must be * at least block->header_size bytes. * - * \return - LZMA_OK: Decoding was successful. block->header_size + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. block->header_size * bytes were read from the input buffer. * - LZMA_OPTIONS_ERROR: The Block Header specifies some * unsupported options such as unsupported filters. This can @@ -398,7 +459,12 @@ * field so that it can properly validate Compressed Size if it * was present in Block Header. * - * \return - LZMA_OK: block->compressed_size was set successfully. + * \param block Block options: block->header_size must + * already be set with lzma_block_header_size(). + * \param unpadded_size Unpadded Size from the Index field in bytes + * + * \return Possible lzma_ret values: + * - LZMA_OK: block->compressed_size was set successfully. * - LZMA_DATA_ERROR: unpadded_size is too small compared to * block->header_size and lzma_check_size(block->check). * - LZMA_PROG_ERROR: Some values are invalid. For example, @@ -419,6 +485,9 @@ * Compressed Size, and size of the Check field. This is where this function * is needed. * + * \param block Block options: block->header_size must already be + * set with lzma_block_header_size(). + * * \return Unpadded Size on success, or zero on error. */ extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block) @@ -431,6 +500,9 @@ * This is equivalent to lzma_block_unpadded_size() except that the returned * value includes the size of the Block Padding field. * + * \param block Block options: block->header_size must already be + * set with lzma_block_header_size(). + * * \return On success, total encoded size of the Block. On error, * zero is returned. */ @@ -444,7 +516,17 @@ * Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the * filter chain supports it), and LZMA_FINISH. * - * \return - LZMA_OK: All good, continue with lzma_code(). + * The Block encoder encodes the Block Data, Block Padding, and Check value. + * It does NOT encode the Block Header which can be encoded with + * lzma_block_header_encode(). + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param block Block options: block->version, block->check, + * and block->filters must have been initialized. + * + * \return Possible lzma_ret values: + * - LZMA_OK: All good, continue with lzma_code(). * - LZMA_MEM_ERROR * - LZMA_OPTIONS_ERROR * - LZMA_UNSUPPORTED_CHECK: block->check specifies a Check ID @@ -463,10 +545,16 @@ * Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using * LZMA_FINISH is not required. It is supported only for convenience. * - * \return - LZMA_OK: All good, continue with lzma_code(). - * - LZMA_UNSUPPORTED_CHECK: Initialization was successful, but - * the given Check ID is not supported, thus Check will be - * ignored. + * The Block decoder decodes the Block Data, Block Padding, and Check value. + * It does NOT decode the Block Header which can be decoded with + * lzma_block_header_decode(). + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param block Block options + * + * \return Possible lzma_ret values: + * - LZMA_OK: All good, continue with lzma_code(). * - LZMA_PROG_ERROR * - LZMA_MEM_ERROR */ @@ -480,6 +568,11 @@ * * This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks. * See the documentation of lzma_stream_buffer_bound(). + * + * \param uncompressed_size Size of the data to be encoded with the + * single-call Block encoder. + * + * \return Maximum output size in bytes for single-call Block encoding. */ extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size) lzma_nothrow; @@ -508,13 +601,14 @@ * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_BUF_ERROR: Not enough output buffer space. * - LZMA_UNSUPPORTED_CHECK * - LZMA_OPTIONS_ERROR @@ -540,6 +634,25 @@ * Since the data won't be compressed, this function ignores block->filters. * This function doesn't take lzma_allocator because this function doesn't * allocate any memory from the heap. + * + * \param block Block options: block->version, block->check, + * and block->filters must have been initialized. + * \param in Beginning of the input buffer + * \param in_size Size of the input buffer + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_UNSUPPORTED_CHECK + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR */ extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block, const uint8_t *in, size_t in_size, @@ -553,7 +666,7 @@ * This is single-call equivalent of lzma_block_decoder(), and requires that * the caller has already decoded Block Header and checked its memory usage. * - * \param block Block options just like with lzma_block_decoder(). + * \param block Block options * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer @@ -561,13 +674,14 @@ * *in_pos is updated only if decoding succeeds. * \param in_size Size of the input buffer; the first byte that * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Decoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. * - LZMA_OPTIONS_ERROR * - LZMA_DATA_ERROR * - LZMA_MEM_ERROR diff -ur xz-5.2.5/src/liblzma/api/lzma/check.h xz-5.4.3/src/liblzma/api/lzma/check.h --- xz-5.2.5/src/liblzma/api/lzma/check.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/check.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/check.h * \brief Integrity checks + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -71,12 +70,17 @@ /** * \brief Test if the given Check ID is supported * - * Return true if the given Check ID is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * is not in the range [0, 15]; in that case the return value is always false. + * LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always supported (even if + * liblzma is built with limited features). * - * You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always - * supported (even if liblzma is built with limited features). + * \note It is safe to call this with a value that is not in the + * range [0, 15]; in that case the return value is always false. + * + * \param check Check ID + * + * \return lzma_bool: + * - true if Check ID is supported by this liblzma build. + * - false otherwise. */ extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check) lzma_nothrow lzma_attr_const; @@ -90,7 +94,10 @@ * the Check field with the specified Check ID. The values are: * { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 } * - * If the argument is not in the range [0, 15], UINT32_MAX is returned. + * \param check Check ID + * + * \return Size of the Check field in bytes. If the argument is not in + * the range [0, 15], UINT32_MAX is returned. */ extern LZMA_API(uint32_t) lzma_check_size(lzma_check check) lzma_nothrow lzma_attr_const; @@ -126,25 +133,32 @@ * * Calculate CRC64 using the polynomial from the ECMA-182 standard. * - * This function is used similarly to lzma_crc32(). See its documentation. + * This function is used similarly to lzma_crc32(). + * + * \param buf Pointer to the input buffer + * \param size Size of the input buffer + * \param crc Previously returned CRC value. This is used to + * calculate the CRC of a big buffer in smaller chunks. + * Set to zero when starting a new calculation. + * + * \return Updated CRC value, which can be passed to this function + * again to continue CRC calculation. */ extern LZMA_API(uint64_t) lzma_crc64( const uint8_t *buf, size_t size, uint64_t crc) lzma_nothrow lzma_attr_pure; -/* - * SHA-256 functions are currently not exported to public API. - * Contact Lasse Collin if you think it should be. - */ - - /** * \brief Get the type of the integrity check * * This function can be called only immediately after lzma_code() has * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK. * Calling this function in any other situation has undefined behavior. + * + * \param strm Pointer to lzma_stream meeting the above conditions. + * + * \return Check ID in the lzma_stream, or undefined if called improperly. */ extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm) lzma_nothrow; diff -ur xz-5.2.5/src/liblzma/api/lzma/container.h xz-5.4.3/src/liblzma/api/lzma/container.h --- xz-5.2.5/src/liblzma/api/lzma/container.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/container.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/container.h * \brief File formats + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -51,7 +50,7 @@ * * This flag modifies the preset to make the encoding significantly slower * while improving the compression ratio only marginally. This is useful - * when you don't mind wasting time to get as small result as possible. + * when you don't mind spending time to get as small result as possible. * * This flag doesn't affect the memory usage requirements of the decoder (at * least not significantly). The memory usage of the encoder may be increased @@ -69,7 +68,15 @@ * * Set this to zero if no flags are wanted. * - * No flags are currently supported. + * Encoder: No flags are currently supported. + * + * Decoder: Bitwise-or of zero or more of the decoder flags: + * - LZMA_TELL_NO_CHECK + * - LZMA_TELL_UNSUPPORTED_CHECK + * - LZMA_TELL_ANY_CHECK + * - LZMA_IGNORE_CHECK + * - LZMA_CONCATENATED + * - LZMA_FAIL_FAST */ uint32_t flags; @@ -79,7 +86,7 @@ uint32_t threads; /** - * \brief Maximum uncompressed size of a Block + * \brief Encoder only: Maximum uncompressed size of a Block * * The encoder will start a new .xz Block every block_size bytes. * Using LZMA_FULL_FLUSH or LZMA_FULL_BARRIER with lzma_code() @@ -106,7 +113,7 @@ /** * \brief Timeout to allow lzma_code() to return early * - * Multithreading can make liblzma to consume input and produce + * Multithreading can make liblzma consume input and produce * output in a very bursty way: it may first read a lot of input * to fill internal buffers, then no input or output occurs for * a while. @@ -123,19 +130,18 @@ * LZMA_OK. Reasonable values are 100 ms or more. The xz command * line tool uses 300 ms. * - * If long blocking times are fine for you, set timeout to a special - * value of 0, which will disable the timeout mechanism and will make + * If long blocking times are acceptable, set timeout to a special + * value of 0. This will disable the timeout mechanism and will make * lzma_code() block until all the input is consumed or the output * buffer has been filled. * * \note Even with a timeout, lzma_code() might sometimes take - * somewhat long time to return. No timing guarantees - * are made. + * a long time to return. No timing guarantees are made. */ uint32_t timeout; /** - * \brief Compression preset (level and possible flags) + * \brief Encoder only: Compression preset * * The preset is set just like with lzma_easy_encoder(). * The preset is ignored if filters below is non-NULL. @@ -143,7 +149,7 @@ uint32_t preset; /** - * \brief Filter chain (alternative to a preset) + * \brief Encoder only: Filter chain (alternative to a preset) * * If this is NULL, the preset above is used. Otherwise the preset * is ignored and the filter chain specified here is used. @@ -151,7 +157,7 @@ const lzma_filter *filters; /** - * \brief Integrity check type + * \brief Encoder only: Integrity check type * * See check.h for available checks. The xz command line tool * defaults to LZMA_CHECK_CRC64, which is a good choice if you @@ -166,20 +172,86 @@ * with the currently supported options, so it is safe to leave these * uninitialized. */ + /** \private Reserved member. */ lzma_reserved_enum reserved_enum1; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum2; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum3; + + /** \private Reserved member. */ uint32_t reserved_int1; + + /** \private Reserved member. */ uint32_t reserved_int2; + + /** \private Reserved member. */ uint32_t reserved_int3; + + /** \private Reserved member. */ uint32_t reserved_int4; - uint64_t reserved_int5; - uint64_t reserved_int6; + + /** + * \brief Memory usage limit to reduce the number of threads + * + * Encoder: Ignored. + * + * Decoder: + * + * If the number of threads has been set so high that more than + * memlimit_threading bytes of memory would be needed, the number + * of threads will be reduced so that the memory usage will not exceed + * memlimit_threading bytes. However, if memlimit_threading cannot + * be met even in single-threaded mode, then decoding will continue + * in single-threaded mode and memlimit_threading may be exceeded + * even by a large amount. That is, memlimit_threading will never make + * lzma_code() return LZMA_MEMLIMIT_ERROR. To truly cap the memory + * usage, see memlimit_stop below. + * + * Setting memlimit_threading to UINT64_MAX or a similar huge value + * means that liblzma is allowed to keep the whole compressed file + * and the whole uncompressed file in memory in addition to the memory + * needed by the decompressor data structures used by each thread! + * In other words, a reasonable value limit must be set here or it + * will cause problems sooner or later. If you have no idea what + * a reasonable value could be, try lzma_physmem() / 4 as a starting + * point. Setting this limit will never prevent decompression of + * a file; this will only reduce the number of threads. + * + * If memlimit_threading is greater than memlimit_stop, then the value + * of memlimit_stop will be used for both. + */ + uint64_t memlimit_threading; + + /** + * \brief Memory usage limit that should never be exceeded + * + * Encoder: Ignored. + * + * Decoder: If decompressing will need more than this amount of + * memory even in the single-threaded mode, then lzma_code() will + * return LZMA_MEMLIMIT_ERROR. + */ + uint64_t memlimit_stop; + + /** \private Reserved member. */ uint64_t reserved_int7; + + /** \private Reserved member. */ uint64_t reserved_int8; + + /** \private Reserved member. */ void *reserved_ptr1; + + /** \private Reserved member. */ void *reserved_ptr2; + + /** \private Reserved member. */ void *reserved_ptr3; + + /** \private Reserved member. */ void *reserved_ptr4; } lzma_mt; @@ -193,8 +265,7 @@ * \param preset Compression preset (level and possible flags) * * \return Number of bytes of memory required for the given - * preset when encoding. If an error occurs, for example - * due to unsupported preset, UINT64_MAX is returned. + * preset when encoding or UINT64_MAX on error. */ extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset) lzma_nothrow lzma_attr_pure; @@ -208,9 +279,8 @@ * \param preset Compression preset (level and possible flags) * * \return Number of bytes of memory required to decompress a file - * that was compressed using the given preset. If an error - * occurs, for example due to unsupported preset, UINT64_MAX - * is returned. + * that was compressed using the given preset or UINT64_MAX + * on error. */ extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset) lzma_nothrow lzma_attr_pure; @@ -220,8 +290,17 @@ * \brief Initialize .xz Stream encoder using a preset number * * This function is intended for those who just want to use the basic features - * if liblzma (that is, most developers out there). + * of liblzma (that is, most developers out there). * + * If initialization fails (return value is not LZMA_OK), all the memory + * allocated for *strm by liblzma is always freed. Thus, there is no need + * to call lzma_end() after failed initialization. + * + * If initialization succeeds, use lzma_code() to do the actual encoding. + * Valid values for `action' (the second argument of lzma_code()) are + * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, + * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH. + * * \param strm Pointer to lzma_stream that is at least initialized * with LZMA_STREAM_INIT. * \param preset Compression preset to use. A preset consist of level @@ -236,7 +315,8 @@ * unsure. LZMA_CHECK_CRC32 is good too as long as the * uncompressed file is not many gigabytes. * - * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization succeeded. Use lzma_code() to * encode your data. * - LZMA_MEM_ERROR: Memory allocation failed. * - LZMA_OPTIONS_ERROR: The given compression preset is not @@ -245,15 +325,6 @@ * supported by this liblzma build. * - LZMA_PROG_ERROR: One or more of the parameters have values * that will never be valid. For example, strm == NULL. - * - * If initialization fails (return value is not LZMA_OK), all the memory - * allocated for *strm by liblzma is always freed. Thus, there is no need - * to call lzma_end() after failed initialization. - * - * If initialization succeeds, use lzma_code() to do the actual encoding. - * Valid values for `action' (the second argument of lzma_code()) are - * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, - * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH. */ extern LZMA_API(lzma_ret) lzma_easy_encoder( lzma_stream *strm, uint32_t preset, lzma_check check) @@ -274,13 +345,14 @@ * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_BUF_ERROR: Not enough output buffer space. * - LZMA_UNSUPPORTED_CHECK * - LZMA_OPTIONS_ERROR @@ -298,14 +370,16 @@ /** * \brief Initialize .xz Stream encoder using a custom filter chain * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for - * more information. + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. See filters.h for more + * information. * \param check Type of the integrity check to calculate from * uncompressed data. * - * \return - LZMA_OK: Initialization was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization was successful. * - LZMA_MEM_ERROR * - LZMA_UNSUPPORTED_CHECK * - LZMA_OPTIONS_ERROR @@ -345,10 +419,12 @@ * LZMA_FULL_BARRIER, and LZMA_FINISH. Support for LZMA_SYNC_FLUSH might be * added in the future. * - * \param strm Pointer to properly prepared lzma_stream + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. * \param options Pointer to multithreaded compression options * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_UNSUPPORTED_CHECK * - LZMA_OPTIONS_ERROR @@ -374,7 +450,12 @@ * No kind of flushing is supported, because the file format doesn't make * it possible. * - * \return - LZMA_OK + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param options Pointer to encoder options + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_OPTIONS_ERROR * - LZMA_PROG_ERROR @@ -405,6 +486,11 @@ * will) have larger maximum expansion when encoding * uncompressible data. Currently there is no function to * calculate the maximum expansion of multi-call encoding. + * + * \param uncompressed_size Size in bytes of the uncompressed + * input data + * + * \return Maximum number of bytes needed to store the compressed data. */ extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size) lzma_nothrow; @@ -413,22 +499,23 @@ /** * \brief Single-call .xz Stream encoder * - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h - * for more information. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. See filters.h for more + * information. * \param check Type of the integrity check to calculate from * uncompressed data. * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_BUF_ERROR: Not enough output buffer space. * - LZMA_UNSUPPORTED_CHECK * - LZMA_OPTIONS_ERROR @@ -444,6 +531,65 @@ lzma_nothrow lzma_attr_warn_unused_result; +/** + * \brief MicroLZMA encoder + * + * The MicroLZMA format is a raw LZMA stream whose first byte (always 0x00) + * has been replaced with bitwise-negation of the LZMA properties (lc/lp/pb). + * This encoding ensures that the first byte of MicroLZMA stream is never + * 0x00. There is no end of payload marker and thus the uncompressed size + * must be stored separately. For the best error detection the dictionary + * size should be stored separately as well but alternatively one may use + * the uncompressed size as the dictionary size when decoding. + * + * With the MicroLZMA encoder, lzma_code() behaves slightly unusually. + * The action argument must be LZMA_FINISH and the return value will never be + * LZMA_OK. Thus the encoding is always done with a single lzma_code() after + * the initialization. The benefit of the combination of initialization + * function and lzma_code() is that memory allocations can be re-used for + * better performance. + * + * lzma_code() will try to encode as much input as is possible to fit into + * the given output buffer. If not all input can be encoded, the stream will + * be finished without encoding all the input. The caller must check both + * input and output buffer usage after lzma_code() (total_in and total_out + * in lzma_stream can be convenient). Often lzma_code() can fill the output + * buffer completely if there is a lot of input, but sometimes a few bytes + * may remain unused because the next LZMA symbol would require more space. + * + * lzma_stream.avail_out must be at least 6. Otherwise LZMA_PROG_ERROR + * will be returned. + * + * The LZMA dictionary should be reasonably low to speed up the encoder + * re-initialization. A good value is bigger than the resulting + * uncompressed size of most of the output chunks. For example, if output + * size is 4 KiB, dictionary size of 32 KiB or 64 KiB is good. If the + * data compresses extremely well, even 128 KiB may be useful. + * + * The MicroLZMA format and this encoder variant were made with the EROFS + * file system in mind. This format may be convenient in other embedded + * uses too where many small streams are needed. XZ Embedded includes a + * decoder for this format. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param options Pointer to encoder options + * + * \return Possible lzma_ret values: + * - LZMA_STREAM_END: All good. Check the amounts of input used + * and output produced. Store the amount of input used + * (uncompressed size) as it needs to be known to decompress + * the data. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR: In addition to the generic reasons for this + * error code, this may also be returned if there isn't enough + * output space (6 bytes) to create a valid MicroLZMA stream. + */ +extern LZMA_API(lzma_ret) lzma_microlzma_encoder( + lzma_stream *strm, const lzma_options_lzma *options); + + /************ * Decoding * ************/ @@ -501,8 +647,8 @@ /** * This flag enables decoding of concatenated files with file formats that * allow concatenating compressed files as is. From the formats currently - * supported by liblzma, only the .xz format allows concatenated files. - * Concatenated files are not allowed with the legacy .lzma format. + * supported by liblzma, only the .xz and .lz formats allow concatenated + * files. Concatenated files are not allowed with the legacy .lzma format. * * This flag also affects the usage of the `action' argument for lzma_code(). * When LZMA_CONCATENATED is used, lzma_code() won't return LZMA_STREAM_END @@ -516,9 +662,39 @@ /** + * This flag makes the threaded decoder report errors (like LZMA_DATA_ERROR) + * as soon as they are detected. This saves time when the application has no + * interest in a partially decompressed truncated or corrupt file. Note that + * due to timing randomness, if the same truncated or corrupt input is + * decompressed multiple times with this flag, a different amount of output + * may be produced by different runs, and even the error code might vary. + * + * When using LZMA_FAIL_FAST, it is recommended to use LZMA_FINISH to tell + * the decoder when no more input will be coming because it can help fast + * detection and reporting of truncated files. Note that in this situation + * truncated files might be diagnosed with LZMA_DATA_ERROR instead of + * LZMA_OK or LZMA_BUF_ERROR! + * + * Without this flag the threaded decoder will provide as much output as + * possible at first and then report the pending error. This default behavior + * matches the single-threaded decoder and provides repeatable behavior + * with truncated or corrupt input. There are a few special cases where the + * behavior can still differ like memory allocation failures (LZMA_MEM_ERROR). + * + * Single-threaded decoders currently ignore this flag. + * + * Support for this flag was added in liblzma 5.3.3alpha. Note that in older + * versions this flag isn't supported (LZMA_OPTIONS_ERROR) even by functions + * that ignore this flag in newer liblzma versions. + */ +#define LZMA_FAIL_FAST UINT32_C(0x20) + + +/** * \brief Initialize .xz Stream decoder * - * \param strm Pointer to properly prepared lzma_stream + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. * \param memlimit Memory usage limit as bytes. Use UINT64_MAX * to effectively disable the limiter. liblzma * 5.2.3 and earlier don't allow 0 here and return @@ -526,9 +702,11 @@ * had been specified. * \param flags Bitwise-or of zero or more of the decoder flags: * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED + * LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK, + * LZMA_CONCATENATED, LZMA_FAIL_FAST * - * \return - LZMA_OK: Initialization was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization was successful. * - LZMA_MEM_ERROR: Cannot allocate memory. * - LZMA_OPTIONS_ERROR: Unsupported flags * - LZMA_PROG_ERROR @@ -539,21 +717,67 @@ /** - * \brief Decode .xz Streams and .lzma files with autodetection + * \brief Initialize multithreaded .xz Stream decoder * - * This decoder autodetects between the .xz and .lzma file formats, and - * calls lzma_stream_decoder() or lzma_alone_decoder() once the type - * of the input file has been detected. + * The decoder can decode multiple Blocks in parallel. This requires that each + * Block Header contains the Compressed Size and Uncompressed size fields + * which are added by the multi-threaded encoder, see lzma_stream_encoder_mt(). * - * \param strm Pointer to properly prepared lzma_stream + * A Stream with one Block will only utilize one thread. A Stream with multiple + * Blocks but without size information in Block Headers will be processed in + * single-threaded mode in the same way as done by lzma_stream_decoder(). + * Concatenated Streams are processed one Stream at a time; no inter-Stream + * parallelization is done. + * + * This function behaves like lzma_stream_decoder() when options->threads == 1 + * and options->memlimit_threading <= 1. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param options Pointer to multithreaded compression options + * + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization was successful. + * - LZMA_MEM_ERROR: Cannot allocate memory. + * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. + * - LZMA_OPTIONS_ERROR: Unsupported flags. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_stream_decoder_mt( + lzma_stream *strm, const lzma_mt *options) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode .xz, .lzma, and .lz (lzip) files with autodetection + * + * This decoder autodetects between the .xz, .lzma, and .lz file formats, + * and calls lzma_stream_decoder(), lzma_alone_decoder(), or + * lzma_lzip_decoder() once the type of the input file has been detected. + * + * Support for .lz was added in 5.4.0. + * + * If the flag LZMA_CONCATENATED is used and the input is a .lzma file: + * For historical reasons concatenated .lzma files aren't supported. + * If there is trailing data after one .lzma stream, lzma_code() will + * return LZMA_DATA_ERROR. (lzma_alone_decoder() doesn't have such a check + * as it doesn't support any decoder flags. It will return LZMA_STREAM_END + * after one .lzma stream.) + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. * \param memlimit Memory usage limit as bytes. Use UINT64_MAX * to effectively disable the limiter. liblzma * 5.2.3 and earlier don't allow 0 here and return * LZMA_PROG_ERROR; later versions treat 0 as if 1 * had been specified. - * \param flags Bitwise-or of flags, or zero for no flags. + * \param flags Bitwise-or of zero or more of the decoder flags: + * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, + * LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK, + * LZMA_CONCATENATED, LZMA_FAIL_FAST * - * \return - LZMA_OK: Initialization was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization was successful. * - LZMA_MEM_ERROR: Cannot allocate memory. * - LZMA_OPTIONS_ERROR: Unsupported flags * - LZMA_PROG_ERROR @@ -566,18 +790,20 @@ /** * \brief Initialize .lzma decoder (legacy file format) * - * \param strm Pointer to properly prepared lzma_stream + * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. + * There is no need to use LZMA_FINISH, but it's allowed because it may + * simplify certain types of applications. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. * \param memlimit Memory usage limit as bytes. Use UINT64_MAX * to effectively disable the limiter. liblzma * 5.2.3 and earlier don't allow 0 here and return * LZMA_PROG_ERROR; later versions treat 0 as if 1 * had been specified. * - * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. - * There is no need to use LZMA_FINISH, but it's allowed because it may - * simplify certain types of applications. - * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_PROG_ERROR */ @@ -587,6 +813,66 @@ /** + * \brief Initialize .lz (lzip) decoder (a foreign file format) + * + * This decoder supports the .lz format version 0 and the unextended .lz + * format version 1: + * + * - Files in the format version 0 were produced by lzip 1.3 and older. + * Such files aren't common but may be found from file archives + * as a few source packages were released in this format. People + * might have old personal files in this format too. Decompression + * support for the format version 0 was removed in lzip 1.18. + * + * - lzip 1.3 added decompression support for .lz format version 1 files. + * Compression support was added in lzip 1.4. In lzip 1.6 the .lz format + * version 1 was extended to support the Sync Flush marker. This extension + * is not supported by liblzma. lzma_code() will return LZMA_DATA_ERROR + * at the location of the Sync Flush marker. In practice files with + * the Sync Flush marker are very rare and thus liblzma can decompress + * almost all .lz files. + * + * Just like with lzma_stream_decoder() for .xz files, LZMA_CONCATENATED + * should be used when decompressing normal standalone .lz files. + * + * The .lz format allows putting non-.lz data at the end of a file after at + * least one valid .lz member. That is, one can append custom data at the end + * of a .lz file and the decoder is required to ignore it. In liblzma this + * is relevant only when LZMA_CONCATENATED is used. In that case lzma_code() + * will return LZMA_STREAM_END and leave lzma_stream.next_in pointing to + * the first byte of the non-.lz data. An exception to this is if the first + * 1-3 bytes of the non-.lz data are identical to the .lz magic bytes + * (0x4C, 0x5A, 0x49, 0x50; "LZIP" in US-ASCII). In such a case the 1-3 bytes + * will have been ignored by lzma_code(). If one wishes to locate the non-.lz + * data reliably, one must ensure that the first byte isn't 0x4C. Actually + * one should ensure that none of the first four bytes of trailing data are + * equal to the magic bytes because lzip >= 1.20 requires it by default. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param memlimit Memory usage limit as bytes. Use UINT64_MAX + * to effectively disable the limiter. + * \param flags Bitwise-or of flags, or zero for no flags. + * All decoder flags listed above are supported + * although only LZMA_CONCATENATED and (in very rare + * cases) LZMA_IGNORE_CHECK are actually useful. + * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, + * and LZMA_FAIL_FAST do nothing. LZMA_TELL_ANY_CHECK + * is supported for consistency only as CRC32 is + * always used in the .lz format. + * + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization was successful. + * - LZMA_MEM_ERROR: Cannot allocate memory. + * - LZMA_OPTIONS_ERROR: Unsupported flags + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_lzip_decoder( + lzma_stream *strm, uint64_t memlimit, uint32_t flags) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** * \brief Single-call .xz Stream decoder * * \param memlimit Pointer to how much memory the decoder is allowed @@ -595,7 +881,8 @@ * returned. * \param flags Bitwise-or of zero or more of the decoder flags: * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK + * LZMA_IGNORE_CHECK, LZMA_CONCATENATED, + * LZMA_FAIL_FAST. Note that LZMA_TELL_ANY_CHECK * is not allowed and will return LZMA_PROG_ERROR. * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). @@ -604,13 +891,14 @@ * *in_pos is updated only if decoding succeeds. * \param in_size Size of the input buffer; the first byte that * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if decoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Decoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. * - LZMA_FORMAT_ERROR * - LZMA_OPTIONS_ERROR * - LZMA_DATA_ERROR @@ -630,3 +918,50 @@ const uint8_t *in, size_t *in_pos, size_t in_size, uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief MicroLZMA decoder + * + * See lzma_microlzma_encoder() for more information. + * + * The lzma_code() usage with this decoder is completely normal. The + * special behavior of lzma_code() applies to lzma_microlzma_encoder() only. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param comp_size Compressed size of the MicroLZMA stream. + * The caller must somehow know this exactly. + * \param uncomp_size Uncompressed size of the MicroLZMA stream. + * If the exact uncompressed size isn't known, this + * can be set to a value that is at most as big as + * the exact uncompressed size would be, but then the + * next argument uncomp_size_is_exact must be false. + * \param uncomp_size_is_exact + * If true, uncomp_size must be exactly correct. + * This will improve error detection at the end of + * the stream. If the exact uncompressed size isn't + * known, this must be false. uncomp_size must still + * be at most as big as the exact uncompressed size + * is. Setting this to false when the exact size is + * known will work but error detection at the end of + * the stream will be weaker. + * \param dict_size LZMA dictionary size that was used when + * compressing the data. It is OK to use a bigger + * value too but liblzma will then allocate more + * memory than would actually be required and error + * detection will be slightly worse. (Note that with + * the implementation in XZ Embedded it doesn't + * affect the memory usage if one specifies bigger + * dictionary than actually required.) + * + * \return Possible lzma_ret values: + * - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_microlzma_decoder( + lzma_stream *strm, uint64_t comp_size, + uint64_t uncomp_size, lzma_bool uncomp_size_is_exact, + uint32_t dict_size); diff -ur xz-5.2.5/src/liblzma/api/lzma/delta.h xz-5.4.3/src/liblzma/api/lzma/delta.h --- xz-5.2.5/src/liblzma/api/lzma/delta.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/delta.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/delta.h * \brief Delta filter + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -57,7 +56,15 @@ * - 24-bit RGB image data: distance = 3 bytes */ uint32_t dist; + + /** + * \brief Minimum value for lzma_options_delta.dist. + */ # define LZMA_DELTA_DIST_MIN 1 + + /** + * \brief Maximum value for lzma_options_delta.dist. + */ # define LZMA_DELTA_DIST_MAX 256 /* @@ -67,11 +74,23 @@ * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these * uninitialized. */ + + /** \private Reserved member. */ uint32_t reserved_int1; + + /** \private Reserved member. */ uint32_t reserved_int2; + + /** \private Reserved member. */ uint32_t reserved_int3; + + /** \private Reserved member. */ uint32_t reserved_int4; + + /** \private Reserved member. */ void *reserved_ptr1; + + /** \private Reserved member. */ void *reserved_ptr2; } lzma_options_delta; diff -ur xz-5.2.5/src/liblzma/api/lzma/filter.h xz-5.4.3/src/liblzma/api/lzma/filter.h --- xz-5.2.5/src/liblzma/api/lzma/filter.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/filter.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/filter.h * \brief Common filter related types and functions + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -29,7 +28,7 @@ /** * \brief Filter options * - * This structure is used to pass Filter ID and a pointer filter's + * This structure is used to pass a Filter ID and a pointer to the filter's * options to liblzma. A few functions work with a single lzma_filter * structure, while most functions expect a filter chain. * @@ -37,8 +36,8 @@ * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to * be able to hold any arbitrary filter chain. This is important when - * using lzma_block_header_decode() from block.h, because too small - * array would make liblzma write past the end of the filters array. + * using lzma_block_header_decode() from block.h, because a filter array + * that is too small would make liblzma write past the end of the array. */ typedef struct { /** @@ -68,12 +67,12 @@ /** * \brief Test if the given Filter ID is supported for encoding * - * Return true if the give Filter ID is supported for encoding by this - * liblzma build. Otherwise false is returned. + * \param id Filter ID * - * There is no way to list which filters are available in this particular - * liblzma version and build. It would be useless, because the application - * couldn't know what kind of options the filter would need. + * \return lzma_bool: + * - true if the Filter ID is supported for encoding by this + * liblzma build. + * - false otherwise. */ extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) lzma_nothrow lzma_attr_const; @@ -82,8 +81,12 @@ /** * \brief Test if the given Filter ID is supported for decoding * - * Return true if the give Filter ID is supported for decoding by this - * liblzma build. Otherwise false is returned. + * \param id Filter ID + * + * \return lzma_bool: + * - true if the Filter ID is supported for decoding by this + * liblzma build. + * - false otherwise. */ extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id) lzma_nothrow lzma_attr_const; @@ -108,9 +111,18 @@ * need to be initialized by the caller in any way. * * If an error occurs, memory possibly already allocated by this function - * is always freed. + * is always freed. liblzma versions older than 5.2.7 may modify the dest + * array and leave its contents in an undefined state if an error occurs. + * liblzma 5.2.7 and newer only modify the dest array when returning LZMA_OK. * - * \return - LZMA_OK + * \param src Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * \param[out] dest Destination filter array + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options * is not NULL. @@ -118,10 +130,37 @@ */ extern LZMA_API(lzma_ret) lzma_filters_copy( const lzma_filter *src, lzma_filter *dest, - const lzma_allocator *allocator) lzma_nothrow; + const lzma_allocator *allocator) + lzma_nothrow lzma_attr_warn_unused_result; /** + * \brief Free the options in the array of lzma_filter structures + * + * This frees the filter chain options. The filters array itself is not freed. + * + * The filters array must have at most LZMA_FILTERS_MAX + 1 elements + * including the terminating element which must have .id = LZMA_VLI_UNKNOWN. + * For all elements before the terminating element: + * - options will be freed using the given lzma_allocator or, + * if allocator is NULL, using free(). + * - options will be set to NULL. + * - id will be set to LZMA_VLI_UNKNOWN. + * + * If filters is NULL, this does nothing. Again, this never frees the + * filters array itself. + * + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + */ +extern LZMA_API(void) lzma_filters_free( + lzma_filter *filters, const lzma_allocator *allocator) + lzma_nothrow; + + +/** * \brief Calculate approximate memory requirements for raw encoder * * This function can be used to calculate the memory requirements for @@ -132,9 +171,7 @@ * .id == LZMA_VLI_UNKNOWN. * * \return Number of bytes of memory required for the given - * filter chain when encoding. If an error occurs, - * for example due to unsupported filter chain, - * UINT64_MAX is returned. + * filter chain when encoding or UINT64_MAX on error. */ extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) lzma_nothrow lzma_attr_pure; @@ -151,9 +188,7 @@ * .id == LZMA_VLI_UNKNOWN. * * \return Number of bytes of memory required for the given - * filter chain when decoding. If an error occurs, - * for example due to unsupported filter chain, - * UINT64_MAX is returned. + * filter chain when decoding or UINT64_MAX on error. */ extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) lzma_nothrow lzma_attr_pure; @@ -164,14 +199,16 @@ * * This function may be useful when implementing custom file formats. * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the * filter chain supports it), or LZMA_FINISH. * - * \return - LZMA_OK + * \param strm Pointer to lzma_stream that is at least + * initialized with LZMA_STREAM_INIT. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_OPTIONS_ERROR * - LZMA_PROG_ERROR @@ -189,7 +226,13 @@ * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using * LZMA_FINISH is not required, it is supported just for convenience. * - * \return - LZMA_OK + * \param strm Pointer to lzma_stream that is at least + * initialized with LZMA_STREAM_INIT. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_OPTIONS_ERROR * - LZMA_PROG_ERROR @@ -202,24 +245,36 @@ /** * \brief Update the filter chain in the encoder * - * This function is for advanced users only. This function has two slightly - * different purposes: + * This function may be called after lzma_code() has returned LZMA_STREAM_END + * when LZMA_FULL_BARRIER, LZMA_FULL_FLUSH, or LZMA_SYNC_FLUSH was used: * - * - After LZMA_FULL_FLUSH when using Stream encoder: Set a new filter - * chain, which will be used starting from the next Block. + * - After LZMA_FULL_BARRIER or LZMA_FULL_FLUSH: Single-threaded .xz Stream + * encoder (lzma_stream_encoder()) and (since liblzma 5.4.0) multi-threaded + * Stream encoder (lzma_stream_encoder_mt()) allow setting a new filter + * chain to be used for the next Block(s). * - * - After LZMA_SYNC_FLUSH using Raw, Block, or Stream encoder: Change - * the filter-specific options in the middle of encoding. The actual - * filters in the chain (Filter IDs) cannot be changed. In the future, - * it might become possible to change the filter options without - * using LZMA_SYNC_FLUSH. + * - After LZMA_SYNC_FLUSH: Raw encoder (lzma_raw_encoder()), + * Block encocder (lzma_block_encoder()), and single-threaded .xz Stream + * encoder (lzma_stream_encoder()) allow changing certain filter-specific + * options in the middle of encoding. The actual filters in the chain + * (Filter IDs) must not be changed! Currently only the lc, lp, and pb + * options of LZMA2 (not LZMA1) can be changed this way. * - * While rarely useful, this function may be called also when no data has - * been compressed yet. In that case, this function will behave as if - * LZMA_FULL_FLUSH (Stream encoder) or LZMA_SYNC_FLUSH (Raw or Block + * - In the future some filters might allow changing some of their options + * without any barrier or flushing but currently such filters don't exist. + * + * This function may also be called when no data has been compressed yet + * although this is rarely useful. In that case, this function will behave + * as if LZMA_FULL_FLUSH (Stream encoders) or LZMA_SYNC_FLUSH (Raw or Block * encoder) had been used right before calling this function. * - * \return - LZMA_OK + * \param strm Pointer to lzma_stream that is at least + * initialized with LZMA_STREAM_INIT. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_MEMLIMIT_ERROR * - LZMA_OPTIONS_ERROR @@ -232,29 +287,30 @@ /** * \brief Single-call raw encoder * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. + * \note There is no function to calculate how big output buffer + * would surely be big enough. (lzma_stream_buffer_bound() + * works only for lzma_stream_buffer_encode(); raw encoder + * won't necessarily meet that bound.) + * + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_BUF_ERROR: Not enough output buffer space. * - LZMA_OPTIONS_ERROR * - LZMA_MEM_ERROR * - LZMA_DATA_ERROR * - LZMA_PROG_ERROR - * - * \note There is no function to calculate how big output buffer - * would surely be big enough. (lzma_stream_buffer_bound() - * works only for lzma_stream_buffer_encode(); raw encoder - * won't necessarily meet that bound.) */ extern LZMA_API(lzma_ret) lzma_raw_buffer_encode( const lzma_filter *filters, const lzma_allocator *allocator, @@ -265,8 +321,8 @@ /** * \brief Single-call raw decoder * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer @@ -274,11 +330,19 @@ * *in_pos is updated only if decoding succeeds. * \param in_size Size of the input buffer; the first byte that * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. + * + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR */ extern LZMA_API(lzma_ret) lzma_raw_buffer_decode( const lzma_filter *filters, const lzma_allocator *allocator, @@ -292,18 +356,19 @@ * This function may be useful when implementing custom file formats * using the raw encoder and decoder. * - * \param size Pointer to uint32_t to hold the size of the properties + * \note This function validates the Filter ID, but does not + * necessarily validate the options. Thus, it is possible + * that this returns LZMA_OK while the following call to + * lzma_properties_encode() returns LZMA_OPTIONS_ERROR. + * + * \param[out] size Pointer to uint32_t to hold the size of the properties * \param filter Filter ID and options (the size of the properties may * vary depending on the options) * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_OPTIONS_ERROR * - LZMA_PROG_ERROR - * - * \note This function validates the Filter ID, but does not - * necessarily validate the options. Thus, it is possible - * that this returns LZMA_OK while the following call to - * lzma_properties_encode() returns LZMA_OPTIONS_ERROR. */ extern LZMA_API(lzma_ret) lzma_properties_size( uint32_t *size, const lzma_filter *filter) lzma_nothrow; @@ -312,15 +377,6 @@ /** * \brief Encode the Filter Properties field * - * \param filter Filter ID and options - * \param props Buffer to hold the encoded options. The size of - * buffer must have been already determined with - * lzma_properties_size(). - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - * * \note Even this function won't validate more options than actually * necessary. Thus, it is possible that encoding the properties * succeeds but using the same options to initialize the encoder @@ -330,6 +386,15 @@ * of the Filter Properties field is zero, calling * lzma_properties_encode() is not required, but it * won't do any harm either. + * + * \param filter Filter ID and options + * \param[out] props Buffer to hold the encoded options. The size of + * the buffer must have been already determined with + * lzma_properties_size(). + * + * \return Possible lzma_ret values: + * - LZMA_OK + * - LZMA_PROG_ERROR */ extern LZMA_API(lzma_ret) lzma_properties_encode( const lzma_filter *filter, uint8_t *props) lzma_nothrow; @@ -345,15 +410,16 @@ * it's application's responsibility to free it when * appropriate. filter->options is set to NULL if * there are no properties or if an error occurs. - * \param allocator Custom memory allocator used to allocate the - * options. Set to NULL to use the default malloc(), + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). * and in case of an error, also free(). * \param props Input buffer containing the properties. * \param props_size Size of the properties. This must be the exact * size; giving too much or too little input will * return LZMA_OPTIONS_ERROR. * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_OPTIONS_ERROR * - LZMA_MEM_ERROR */ @@ -368,18 +434,19 @@ * Knowing the size of Filter Flags is useful to know when allocating * memory to hold the encoded Filter Flags. * - * \param size Pointer to integer to hold the calculated size + * \note If you need to calculate size of List of Filter Flags, + * you need to loop over every lzma_filter entry. + * + * \param[out] size Pointer to integer to hold the calculated size * \param filter Filter ID and associated options whose encoded * size is to be calculated * - * \return - LZMA_OK: *size set successfully. Note that this doesn't + * \return Possible lzma_ret values: + * - LZMA_OK: *size set successfully. Note that this doesn't * guarantee that filter->options is valid, thus * lzma_filter_flags_encode() may still fail. * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options. * - LZMA_PROG_ERROR: Invalid options - * - * \note If you need to calculate size of List of Filter Flags, - * you need to loop over every lzma_filter entry. */ extern LZMA_API(lzma_ret) lzma_filter_flags_size( uint32_t *size, const lzma_filter *filter) @@ -393,12 +460,13 @@ * This is due to how this function is used internally by liblzma. * * \param filter Filter ID and options to be encoded - * \param out Beginning of the output buffer - * \param out_pos out[*out_pos] is the next write position. This + * \param[out] out Beginning of the output buffer + * \param[out] out_pos out[*out_pos] is the next write position. This * is updated by the encoder. * \param out_size out[out_size] is the first byte to not write. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. * - LZMA_PROG_ERROR: Invalid options or not enough output * buffer space (you should have checked it with @@ -413,14 +481,290 @@ * \brief Decode Filter Flags from given buffer * * The decoded result is stored into *filter. The old value of - * filter->options is not free()d. + * filter->options is not free()d. If anything other than LZMA_OK + * is returned, filter->options is set to NULL. * - * \return - LZMA_OK + * \param[out] filter Destination filter. The decoded Filter ID will + * be stored in filter->id. If options are needed + * they will be allocated and the pointer will be + * stored in filter->options. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param[out] in_pos The next byte will be read from in[*in_pos]. + * *in_pos is updated only if decoding succeeds. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_OPTIONS_ERROR * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR * - LZMA_PROG_ERROR */ extern LZMA_API(lzma_ret) lzma_filter_flags_decode( lzma_filter *filter, const lzma_allocator *allocator, const uint8_t *in, size_t *in_pos, size_t in_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/*********** + * Strings * + ***********/ + +/** + * \brief Allow or show all filters + * + * By default only the filters supported in the .xz format are accept by + * lzma_str_to_filters() or shown by lzma_str_list_filters(). + */ +#define LZMA_STR_ALL_FILTERS UINT32_C(0x01) + + +/** + * \brief Do not validate the filter chain in lzma_str_to_filters() + * + * By default lzma_str_to_filters() can return an error if the filter chain + * as a whole isn't usable in the .xz format or in the raw encoder or decoder. + * With this flag, this validation is skipped. This flag doesn't affect the + * handling of the individual filter options. To allow non-.xz filters also + * LZMA_STR_ALL_FILTERS is needed. + */ +#define LZMA_STR_NO_VALIDATION UINT32_C(0x02) + + +/** + * \brief Stringify encoder options + * + * Show the filter-specific options that the encoder will use. + * This may be useful for verbose diagnostic messages. + * + * Note that if options were decoded from .xz headers then the encoder options + * may be undefined. This flag shouldn't be used in such a situation. + */ +#define LZMA_STR_ENCODER UINT32_C(0x10) + + +/** + * \brief Stringify decoder options + * + * Show the filter-specific options that the decoder will use. + * This may be useful for showing what filter options were decoded + * from file headers. + */ +#define LZMA_STR_DECODER UINT32_C(0x20) + + +/** + * \brief Produce xz-compatible getopt_long() syntax + * + * That is, "delta:dist=2 lzma2:dict=4MiB,pb=1,lp=1" becomes + * "--delta=dist=2 --lzma2=dict=4MiB,pb=1,lp=1". + * + * This syntax is compatible with xz 5.0.0 as long as the filters and + * their options are supported too. + */ +#define LZMA_STR_GETOPT_LONG UINT32_C(0x40) + + +/** + * \brief Use two dashes "--" instead of a space to separate filters + * + * That is, "delta:dist=2 lzma2:pb=1,lp=1" becomes + * "delta:dist=2--lzma2:pb=1,lp=1". This looks slightly odd but this + * kind of strings should be usable on the command line without quoting. + * However, it is possible that future versions with new filter options + * might produce strings that require shell quoting anyway as the exact + * set of possible characters isn't frozen for now. + * + * It is guaranteed that the single quote (') will never be used in + * filter chain strings (even if LZMA_STR_NO_SPACES isn't used). + */ +#define LZMA_STR_NO_SPACES UINT32_C(0x80) + + +/** + * \brief Convert a string to a filter chain + * + * This tries to make it easier to write applications that allow users + * to set custom compression options. This only handles the filter + * configuration (including presets) but not the number of threads, + * block size, check type, or memory limits. + * + * The input string can be either a preset or a filter chain. Presets + * begin with a digit 0-9 and may be followed by zero or more flags + * which are lower-case letters. Currently only "e" is supported, matching + * LZMA_PRESET_EXTREME. For partial xz command line syntax compatibility, + * a preset string may start with a single dash "-". + * + * A filter chain consists of one or more "filtername:opt1=value1,opt2=value2" + * strings separated by one or more spaces. Leading and trailing spaces are + * ignored. All names and values must be lower-case. Extra commas in the + * option list are ignored. The order of filters is significant: when + * encoding, the uncompressed input data goes to the leftmost filter first. + * Normally "lzma2" is the last filter in the chain. + * + * If one wishes to avoid spaces, for example, to avoid shell quoting, + * it is possible to use two dashes "--" instead of spaces to separate + * the filters. + * + * For xz command line compatibility, each filter may be prefixed with + * two dashes "--" and the colon ":" separating the filter name from + * the options may be replaced with an equals sign "=". + * + * By default, only filters that can be used in the .xz format are accepted. + * To allow all filters (LZMA1) use the flag LZMA_STR_ALL_FILTERS. + * + * By default, very basic validation is done for the filter chain as a whole, + * for example, that LZMA2 is only used as the last filter in the chain. + * The validation isn't perfect though and it's possible that this function + * succeeds but using the filter chain for encoding or decoding will still + * result in LZMA_OPTIONS_ERROR. To disable this validation, use the flag + * LZMA_STR_NO_VALIDATION. + * + * The available filter names and their options are available via + * lzma_str_list_filters(). See the xz man page for the description + * of filter names and options. + * + * For command line applications, below is an example how an error message + * can be displayed. Note the use of an empty string for the field width. + * If "^" was used there it would create an off-by-one error except at + * the very beginning of the line. + * + * \code{.c} + * const char *str = ...; // From user + * lzma_filter filters[LZMA_FILTERS_MAX + 1]; + * int pos; + * const char *msg = lzma_str_to_filters(str, &pos, filters, 0, NULL); + * if (msg != NULL) { + * printf("%s: Error in XZ compression options:\n", argv[0]); + * printf("%s: %s\n", argv[0], str); + * printf("%s: %*s^\n", argv[0], errpos, ""); + * printf("%s: %s\n", argv[0], msg); + * } + * \endcode + * + * \param str User-supplied string describing a preset or + * a filter chain. If a default value is needed and + * you don't know what would be good, use "6" since + * that is the default preset in xz too. + * \param[out] error_pos If this isn't NULL, this value will be set on + * both success and on all errors. This tells the + * location of the error in the string. This is + * an int to make it straightforward to use this + * as printf() field width. The value is guaranteed + * to be in the range [0, INT_MAX] even if strlen(str) + * somehow was greater than INT_MAX. + * \param[out] filters An array of lzma_filter structures. There must + * be LZMA_FILTERS_MAX + 1 (that is, five) elements + * in the array. The old contents are ignored so it + * doesn't need to be initialized. This array is + * modified only if this function returns NULL. + * Once the allocated filter options are no longer + * needed, lzma_filters_free() can be used to free the + * options (it doesn't free the filters array itself). + * \param flags Bitwise-or of zero or more of the flags + * LZMA_STR_ALL_FILTERS and LZMA_STR_NO_VALIDATION. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * + * \return On success, NULL is returned. On error, a statically-allocated + * error message is returned which together with the error_pos + * should give some idea what is wrong. + */ +extern LZMA_API(const char *) lzma_str_to_filters( + const char *str, int *error_pos, lzma_filter *filters, + uint32_t flags, const lzma_allocator *allocator) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Convert a filter chain to a string + * + * Use cases: + * + * - Verbose output showing the full encoder options to the user + * (use LZMA_STR_ENCODER in flags) + * + * - Showing the filters and options that are required to decode a file + * (use LZMA_STR_DECODER in flags) + * + * - Showing the filter names without any options in informational messages + * where the technical details aren't important (no flags). In this case + * the .options in the filters array are ignored and may be NULL even if + * a filter has a mandatory options structure. + * + * Note that even if the filter chain was specified using a preset, + * the resulting filter chain isn't reversed to a preset. So if you + * specify "6" to lzma_str_to_filters() then lzma_str_from_filters() + * will produce a string containing "lzma2". + * + * \param[out] str On success *str will be set to point to an + * allocated string describing the given filter + * chain. Old value is ignored. On error *str is + * always set to NULL. + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * \param flags Bitwise-or of zero or more of the flags + * LZMA_STR_ENCODER, LZMA_STR_DECODER, + * LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * + * \return Possible lzma_ret values: + * - LZMA_OK + * - LZMA_OPTIONS_ERROR: Empty filter chain + * (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain + * includes a Filter ID that is not supported by this function. + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_str_from_filters( + char **str, const lzma_filter *filters, uint32_t flags, + const lzma_allocator *allocator) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief List available filters and/or their options (for help message) + * + * If a filter_id is given then only one line is created which contains the + * filter name. If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then the + * options required for encoding or decoding are listed on the same line too. + * + * If filter_id is LZMA_VLI_UNKNOWN then all supported .xz-compatible filters + * are listed: + * + * - If neither LZMA_STR_ENCODER nor LZMA_STR_DECODER is used then + * the supported filter names are listed on a single line separated + * by spaces. + * + * - If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then filters and + * the supported options are listed one filter per line. There won't + * be a newline after the last filter. + * + * - If LZMA_STR_ALL_FILTERS is used then the list will include also + * those filters that cannot be used in the .xz format (LZMA1). + * + * \param str On success *str will be set to point to an + * allocated string listing the filters and options. + * Old value is ignored. On error *str is always set + * to NULL. + * \param filter_id Filter ID or LZMA_VLI_UNKNOWN. + * \param flags Bitwise-or of zero or more of the flags + * LZMA_STR_ALL_FILTERS, LZMA_STR_ENCODER, + * LZMA_STR_DECODER, and LZMA_STR_GETOPT_LONG. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * + * \return Possible lzma_ret values: + * - LZMA_OK + * - LZMA_OPTIONS_ERROR: Unsupported filter_id or flags + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_str_list_filters( + char **str, lzma_vli filter_id, uint32_t flags, + const lzma_allocator *allocator) lzma_nothrow lzma_attr_warn_unused_result; diff -ur xz-5.2.5/src/liblzma/api/lzma/hardware.h xz-5.4.3/src/liblzma/api/lzma/hardware.h --- xz-5.2.5/src/liblzma/api/lzma/hardware.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/hardware.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/hardware.h * \brief Hardware information + * \note Never include this file directly. Use instead. * * Since liblzma can consume a lot of system resources, it also provides * ways to limit the resource usage. Applications linking against liblzma @@ -25,8 +26,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -57,7 +56,7 @@ * If the hardware supports more than one thread per CPU core, the number * of hardware threads is returned if that information is available. * - * \brief On success, the number of available CPU threads or cores is + * \return On success, the number of available CPU threads or cores is * returned. If this information isn't available or an error * occurs, zero is returned. */ diff -ur xz-5.2.5/src/liblzma/api/lzma/index.h xz-5.4.3/src/liblzma/api/lzma/index.h --- xz-5.2.5/src/liblzma/api/lzma/index.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/api/lzma/index.h 2023-05-04 17:22:00 @@ -1,6 +1,7 @@ /** * \file lzma/index.h * \brief Handling of .xz Index and related information + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -50,8 +49,13 @@ */ const lzma_stream_flags *flags; + /** \private Reserved member. */ const void *reserved_ptr1; + + /** \private Reserved member. */ const void *reserved_ptr2; + + /** \private Reserved member. */ const void *reserved_ptr3; /** @@ -107,9 +111,17 @@ */ lzma_vli padding; + + /** \private Reserved member. */ lzma_vli reserved_vli1; + + /** \private Reserved member. */ lzma_vli reserved_vli2; + + /** \private Reserved member. */ lzma_vli reserved_vli3; + + /** \private Reserved member. */ lzma_vli reserved_vli4; } stream; @@ -196,25 +208,46 @@ */ lzma_vli total_size; + /** \private Reserved member. */ lzma_vli reserved_vli1; + + /** \private Reserved member. */ lzma_vli reserved_vli2; + + /** \private Reserved member. */ lzma_vli reserved_vli3; + + /** \private Reserved member. */ lzma_vli reserved_vli4; + /** \private Reserved member. */ const void *reserved_ptr1; + + /** \private Reserved member. */ const void *reserved_ptr2; + + /** \private Reserved member. */ const void *reserved_ptr3; + + /** \private Reserved member. */ const void *reserved_ptr4; } block; - /* + /** + * \private Internal struct. + * * Internal data which is used to store the state of the iterator. * The exact format may vary between liblzma versions, so don't * touch these in any way. */ union { + /** \private Internal member. */ const void *p; + + /** \private Internal member. */ size_t s; + + /** \private Internal member. */ lzma_vli v; } internal[6]; } lzma_index_iter; @@ -272,16 +305,21 @@ * \brief Calculate memory usage of lzma_index * * On disk, the size of the Index field depends on both the number of Records - * stored and how big values the Records store (due to variable-length integer + * stored and the size of the Records (due to variable-length integer * encoding). When the Index is kept in lzma_index structure, the memory usage * depends only on the number of Records/Blocks stored in the Index(es), and * in case of concatenated lzma_indexes, the number of Streams. The size in * RAM is almost always significantly bigger than in the encoded form on disk. * - * This function calculates an approximate amount of memory needed hold + * This function calculates an approximate amount of memory needed to hold * the given number of Streams and Blocks in lzma_index structure. This * value may vary between CPU architectures and also between liblzma versions * if the internal implementation is modified. + * + * \param streams Number of Streams + * \param blocks Number of Blocks + * + * \return Approximate memory in bytes needed in a lzma_index structure. */ extern LZMA_API(uint64_t) lzma_index_memusage( lzma_vli streams, lzma_vli blocks) lzma_nothrow; @@ -292,6 +330,10 @@ * * This is a shorthand for lzma_index_memusage(lzma_index_stream_count(i), * lzma_index_block_count(i)). + * + * \param i Pointer to lzma_index structure + * + * \return Approximate memory in bytes used by the lzma_index structure. */ extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i) lzma_nothrow; @@ -300,6 +342,9 @@ /** * \brief Allocate and initialize a new lzma_index structure * + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * * \return On success, a pointer to an empty initialized lzma_index is * returned. If allocation fails, NULL is returned. */ @@ -311,6 +356,10 @@ * \brief Deallocate lzma_index * * If i is NULL, this does nothing. + * + * \param i Pointer to lzma_index structure to deallocate + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). */ extern LZMA_API(void) lzma_index_end( lzma_index *i, const lzma_allocator *allocator) lzma_nothrow; @@ -320,8 +369,9 @@ * \brief Add a new Block to lzma_index * * \param i Pointer to a lzma_index structure - * \param allocator Pointer to lzma_allocator, or NULL to - * use malloc() + * \param allocator lzma_allocator for custom allocator + * functions. Set to NULL to use malloc() + * and free(). * \param unpadded_size Unpadded Size of a Block. This can be * calculated with lzma_block_unpadded_size() * after encoding or decoding the Block. @@ -334,7 +384,8 @@ * lzma_index_append() it is possible to read the next Block with * an existing iterator. * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_MEM_ERROR * - LZMA_DATA_ERROR: Compressed or uncompressed size of the * Stream or size of the Index field would grow too big. @@ -354,11 +405,15 @@ * lzma_index, because to decode Blocks, knowing the integrity check type * is needed. * - * The given Stream Flags are copied into internal preallocated structure - * in the lzma_index, thus the caller doesn't need to keep the *stream_flags - * available after calling this function. + * \param i Pointer to lzma_index structure + * \param stream_flags Pointer to lzma_stream_flags structure. This + * is copied into the internal preallocated + * structure, so the caller doesn't need to keep + * the flags' data available after calling this + * function. * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_OPTIONS_ERROR: Unsupported stream_flags->version. * - LZMA_PROG_ERROR */ @@ -376,6 +431,10 @@ * showing the Check types to the user. * * The bitmask is 1 << check_id, e.g. CRC32 is 1 << 1 and SHA-256 is 1 << 10. + * + * \param i Pointer to lzma_index structure + * + * \return Bitmask indicating which Check types are used in the lzma_index */ extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -390,7 +449,8 @@ * * By default, the amount of Stream Padding is assumed to be zero bytes. * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_DATA_ERROR: The file size would grow too big. * - LZMA_PROG_ERROR */ @@ -401,6 +461,10 @@ /** * \brief Get the number of Streams + * + * \param i Pointer to lzma_index structure + * + * \return Number of Streams in the lzma_index */ extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -411,6 +475,10 @@ * * This returns the total number of Blocks in lzma_index. To get number * of Blocks in individual Streams, use lzma_index_iter. + * + * \param i Pointer to lzma_index structure + * + * \return Number of blocks in the lzma_index */ extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -420,6 +488,10 @@ * \brief Get the size of the Index field as bytes * * This is needed to verify the Backward Size field in the Stream Footer. + * + * \param i Pointer to lzma_index structure + * + * \return Size in bytes of the Index */ extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -431,6 +503,11 @@ * If multiple lzma_indexes have been combined, this works as if the Blocks * were in a single Stream. This is useful if you are going to combine * Blocks from multiple Streams into a single new Stream. + * + * \param i Pointer to lzma_index structure + * + * \return Size in bytes of the Stream (if all Blocks are combined + * into one Stream). */ extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -441,6 +518,10 @@ * * This doesn't include the Stream Header, Stream Footer, Stream Padding, * or Index fields. + * + * \param i Pointer to lzma_index structure + * + * \return Size in bytes of all Blocks in the Stream(s) */ extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -453,6 +534,10 @@ * no Stream Padding, this function is identical to lzma_index_stream_size(). * If multiple lzma_indexes have been combined, this includes also the headers * of each separate Stream and the possible Stream Padding fields. + * + * \param i Pointer to lzma_index structure + * + * \return Total size of the .xz file in bytes */ extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -460,6 +545,10 @@ /** * \brief Get the uncompressed size of the file + * + * \param i Pointer to lzma_index structure + * + * \return Size in bytes of the uncompressed data in the file */ extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i) lzma_nothrow lzma_attr_pure; @@ -468,9 +557,6 @@ /** * \brief Initialize an iterator * - * \param iter Pointer to a lzma_index_iter structure - * \param i lzma_index to which the iterator will be associated - * * This function associates the iterator with the given lzma_index, and calls * lzma_index_iter_rewind() on the iterator. * @@ -483,6 +569,9 @@ * * It is safe to make copies of an initialized lzma_index_iter, for example, * to easily restart reading at some particular position. + * + * \param iter Pointer to a lzma_index_iter structure + * \param i lzma_index to which the iterator will be associated */ extern LZMA_API(void) lzma_index_iter_init( lzma_index_iter *iter, const lzma_index *i) lzma_nothrow; @@ -493,6 +582,8 @@ * * Rewind the iterator so that next call to lzma_index_iter_next() will * return the first Block or Stream. + * + * \param iter Pointer to a lzma_index_iter structure */ extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter) lzma_nothrow; @@ -505,11 +596,11 @@ * \param mode Specify what kind of information the caller wants * to get. See lzma_index_iter_mode for details. * - * \return If next Block or Stream matching the mode was found, *iter - * is updated and this function returns false. If no Block or - * Stream matching the mode is found, *iter is not modified - * and this function returns true. If mode is set to an unknown - * value, *iter is not modified and this function returns true. + * \return lzma_bool: + * - true if no Block or Stream matching the mode is found. + * *iter is not updated (failure). + * - false if the next Block or Stream matching the mode was + * found. *iter is updated (success). */ extern LZMA_API(lzma_bool) lzma_index_iter_next( lzma_index_iter *iter, lzma_index_iter_mode mode) @@ -523,21 +614,26 @@ * the Index field(s) and use lzma_index_iter_locate() to do random-access * reading with granularity of Block size. * - * \param iter Iterator that was earlier initialized with - * lzma_index_iter_init(). - * \param target Uncompressed target offset which the caller would - * like to locate from the Stream - * * If the target is smaller than the uncompressed size of the Stream (can be * checked with lzma_index_uncompressed_size()): * - Information about the Stream and Block containing the requested * uncompressed offset is stored into *iter. * - Internal state of the iterator is adjusted so that * lzma_index_iter_next() can be used to read subsequent Blocks or Streams. - * - This function returns false. * - * If target is greater than the uncompressed size of the Stream, *iter - * is not modified, and this function returns true. + * If the target is greater than the uncompressed size of the Stream, *iter + * is not modified. + * + * \param iter Iterator that was earlier initialized with + * lzma_index_iter_init(). + * \param target Uncompressed target offset which the caller would + * like to locate from the Stream + * + * \return lzma_bool: + * - true if the target is greater than or equal to the + * uncompressed size of the Stream (failure) + * - false if the target is smaller than the uncompressed size + * of the Stream (success) */ extern LZMA_API(lzma_bool) lzma_index_iter_locate( lzma_index_iter *iter, lzma_vli target) lzma_nothrow; @@ -550,15 +646,16 @@ * multi-Stream .xz file, or when combining multiple Streams into single * Stream. * - * \param dest lzma_index after which src is appended + * \param[out] dest lzma_index after which src is appended * \param src lzma_index to be appended after dest. If this * function succeeds, the memory allocated for src * is freed or moved to be part of dest, and all * iterators pointing to src will become invalid. - * \param allocator Custom memory allocator; can be NULL to use - * malloc() and free(). +* \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). * - * \return - LZMA_OK: lzma_indexes were concatenated successfully. + * \return Possible lzma_ret values: + * - LZMA_OK: lzma_indexes were concatenated successfully. * src is now a dangling pointer. * - LZMA_DATA_ERROR: *dest would grow too big. * - LZMA_MEM_ERROR @@ -572,6 +669,10 @@ /** * \brief Duplicate lzma_index * + * \param i Pointer to lzma_index structure to be duplicated + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * * \return A copy of the lzma_index, or NULL if memory allocation failed. */ extern LZMA_API(lzma_index *) lzma_index_dup( @@ -588,7 +689,8 @@ * The valid `action' values for lzma_code() are LZMA_RUN and LZMA_FINISH. * It is enough to use only one of them (you can choose freely). * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization succeeded, continue with lzma_code(). * - LZMA_MEM_ERROR * - LZMA_PROG_ERROR */ @@ -601,7 +703,7 @@ * \brief Initialize .xz Index decoder * * \param strm Pointer to properly prepared lzma_stream - * \param i The decoded Index will be made available via + * \param[out] i The decoded Index will be made available via * this pointer. Initially this function will * set *i to NULL (the old value is ignored). If * decoding succeeds (lzma_code() returns @@ -617,11 +719,12 @@ * There is no need to use LZMA_FINISH, but it's allowed because it may * simplify certain types of applications. * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). + * \return Possible lzma_ret values: + * - LZMA_OK: Initialization succeeded, continue with lzma_code(). * - LZMA_MEM_ERROR * - LZMA_PROG_ERROR * - * liblzma 5.2.3 and older list also LZMA_MEMLIMIT_ERROR here + * \note liblzma 5.2.3 and older list also LZMA_MEMLIMIT_ERROR here * but that error code has never been possible from this * initialization function. */ @@ -633,21 +736,23 @@ /** * \brief Single-call .xz Index encoder * + * \note This function doesn't take allocator argument since all + * the internal data is allocated on stack. + * * \param i lzma_index to be encoded - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * *out_pos is updated only if encoding succeeds. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_BUF_ERROR: Output buffer is too small. Use * lzma_index_size() to find out how much output * space is needed. * - LZMA_PROG_ERROR * - * \note This function doesn't take allocator argument since all - * the internal data is allocated on stack. */ extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i, uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; @@ -656,24 +761,26 @@ /** * \brief Single-call .xz Index decoder * - * \param i If decoding succeeds, *i will point to a new + * \param[out] i If decoding succeeds, *i will point to a new * lzma_index, which the application has to * later free with lzma_index_end(). If an error * occurs, *i will be NULL. The old value of *i * is always ignored and thus doesn't need to be * initialized by the caller. - * \param memlimit Pointer to how much memory the resulting + * \param[out] memlimit Pointer to how much memory the resulting * lzma_index is allowed to require. The value * pointed by this pointer is modified if and only * if LZMA_MEMLIMIT_ERROR is returned. - * \param allocator Pointer to lzma_allocator, or NULL to use malloc() + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). * \param in Beginning of the input buffer * \param in_pos The next byte will be read from in[*in_pos]. * *in_pos is updated only if decoding succeeds. * \param in_size Size of the input buffer; the first byte that * won't be read is in[in_size]. * - * \return - LZMA_OK: Decoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. * - LZMA_MEM_ERROR * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. * The minimum required memlimit value was stored to *memlimit. @@ -683,4 +790,71 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i, uint64_t *memlimit, const lzma_allocator *allocator, const uint8_t *in, size_t *in_pos, size_t in_size) + lzma_nothrow; + + +/** + * \brief Initialize a .xz file information decoder + * + * This decoder decodes the Stream Header, Stream Footer, Index, and + * Stream Padding field(s) from the input .xz file and stores the resulting + * combined index in *dest_index. This information can be used to get the + * uncompressed file size with lzma_index_uncompressed_size(*dest_index) or, + * for example, to implement random access reading by locating the Blocks + * in the Streams. + * + * To get the required information from the .xz file, lzma_code() may ask + * the application to seek in the input file by returning LZMA_SEEK_NEEDED + * and having the target file position specified in lzma_stream.seek_pos. + * The number of seeks required depends on the input file and how big buffers + * the application provides. When possible, the decoder will seek backward + * and forward in the given buffer to avoid useless seek requests. Thus, if + * the application provides the whole file at once, no external seeking will + * be required (that is, lzma_code() won't return LZMA_SEEK_NEEDED). + * + * The value in lzma_stream.total_in can be used to estimate how much data + * liblzma had to read to get the file information. However, due to seeking + * and the way total_in is updated, the value of total_in will be somewhat + * inaccurate (a little too big). Thus, total_in is a good estimate but don't + * expect to see the same exact value for the same file if you change the + * input buffer size or switch to a different liblzma version. + * + * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. + * You only need to use LZMA_RUN; LZMA_FINISH is only supported because it + * might be convenient for some applications. If you use LZMA_FINISH and if + * lzma_code() asks the application to seek, remember to reset `action' back + * to LZMA_RUN unless you hit the end of the file again. + * + * Possible return values from lzma_code(): + * - LZMA_OK: All OK so far, more input needed + * - LZMA_SEEK_NEEDED: Provide more input starting from the absolute + * file position strm->seek_pos + * - LZMA_STREAM_END: Decoding was successful, *dest_index has been set + * - LZMA_FORMAT_ERROR: The input file is not in the .xz format (the + * expected magic bytes were not found from the beginning of the file) + * - LZMA_OPTIONS_ERROR: File looks valid but contains headers that aren't + * supported by this version of liblzma + * - LZMA_DATA_ERROR: File is corrupt + * - LZMA_BUF_ERROR + * - LZMA_MEM_ERROR + * - LZMA_MEMLIMIT_ERROR + * - LZMA_PROG_ERROR + * + * \param strm Pointer to a properly prepared lzma_stream + * \param[out] dest_index Pointer to a pointer where the decoder will put + * the decoded lzma_index. The old value + * of *dest_index is ignored (not freed). + * \param memlimit How much memory the resulting lzma_index is + * allowed to require. Use UINT64_MAX to + * effectively disable the limiter. + * \param file_size Size of the input .xz file + * + * \return Possible lzma_ret values: + * - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_file_info_decoder( + lzma_stream *strm, lzma_index **dest_index, + uint64_t memlimit, uint64_t file_size) lzma_nothrow; diff -ur xz-5.2.5/src/liblzma/api/lzma/index_hash.h xz-5.4.3/src/liblzma/api/lzma/index_hash.h --- xz-5.2.5/src/liblzma/api/lzma/index_hash.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/index_hash.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/index_hash.h * \brief Validate Index by using a hash function + * \note Never include this file directly. Use instead. * * Hashing makes it possible to use constant amount of memory to validate * Index of arbitrary size. @@ -11,8 +12,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -28,13 +27,21 @@ /** * \brief Allocate and initialize a new lzma_index_hash structure * - * If index_hash is NULL, a new lzma_index_hash structure is allocated, - * initialized, and a pointer to it returned. If allocation fails, NULL - * is returned. + * If index_hash is NULL, this function allocates and initializes a new + * lzma_index_hash structure and returns a pointer to it. If allocation + * fails, NULL is returned. * - * If index_hash is non-NULL, it is reinitialized and the same pointer - * returned. In this case, return value cannot be NULL or a different - * pointer than the index_hash that was given as an argument. + * If index_hash is non-NULL, this function reinitializes the lzma_index_hash + * structure and returns the same pointer. In this case, return value cannot + * be NULL or a different pointer than the index_hash that was given as + * an argument. + * + * \param index_hash Pointer to a lzma_index_hash structure or NULL. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * + * \return Initialized lzma_index_hash structure on success or + * NULL on failure. */ extern LZMA_API(lzma_index_hash *) lzma_index_hash_init( lzma_index_hash *index_hash, const lzma_allocator *allocator) @@ -43,6 +50,10 @@ /** * \brief Deallocate lzma_index_hash structure + * + * \param index_hash Pointer to a lzma_index_hash structure to free. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). */ extern LZMA_API(void) lzma_index_hash_end( lzma_index_hash *index_hash, const lzma_allocator *allocator) @@ -52,11 +63,12 @@ /** * \brief Add a new Record to an Index hash * - * \param index Pointer to a lzma_index_hash structure + * \param index_hash Pointer to a lzma_index_hash structure * \param unpadded_size Unpadded Size of a Block * \param uncompressed_size Uncompressed Size of a Block * - * \return - LZMA_OK + * \return Possible lzma_ret values: + * - LZMA_OK * - LZMA_DATA_ERROR: Compressed or uncompressed size of the * Stream or size of the Index field would grow too big. * - LZMA_PROG_ERROR: Invalid arguments or this function is being @@ -81,10 +93,11 @@ * * \param index_hash Pointer to a lzma_index_hash structure * \param in Pointer to the beginning of the input buffer - * \param in_pos in[*in_pos] is the next byte to process + * \param[out] in_pos in[*in_pos] is the next byte to process * \param in_size in[in_size] is the first byte not to process * - * \return - LZMA_OK: So far good, but more input is needed. + * \return Possible lzma_ret values: + * - LZMA_OK: So far good, but more input is needed. * - LZMA_STREAM_END: Index decoded successfully and it matches * the Records given with lzma_index_hash_append(). * - LZMA_DATA_ERROR: Index is corrupt or doesn't match the @@ -101,6 +114,10 @@ * \brief Get the size of the Index field as bytes * * This is needed to verify the Backward Size field in the Stream Footer. + * + * \param index_hash Pointer to a lzma_index_hash structure + * + * \return Size of the Index field in bytes. */ extern LZMA_API(lzma_vli) lzma_index_hash_size( const lzma_index_hash *index_hash) diff -ur xz-5.2.5/src/liblzma/api/lzma/lzma12.h xz-5.4.3/src/liblzma/api/lzma/lzma12.h --- xz-5.2.5/src/liblzma/api/lzma/lzma12.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/lzma12.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/lzma12.h * \brief LZMA1 and LZMA2 filters + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -18,18 +17,41 @@ /** - * \brief LZMA1 Filter ID + * \brief LZMA1 Filter ID (for raw encoder/decoder only, not in .xz) * * LZMA1 is the very same thing as what was called just LZMA in LZMA Utils, * 7-Zip, and LZMA SDK. It's called LZMA1 here to prevent developers from * accidentally using LZMA when they actually want LZMA2. - * - * LZMA1 shouldn't be used for new applications unless you _really_ know - * what you are doing. LZMA2 is almost always a better choice. */ #define LZMA_FILTER_LZMA1 LZMA_VLI_C(0x4000000000000001) /** + * \brief LZMA1 Filter ID with extended options (for raw encoder/decoder) + * + * This is like LZMA_FILTER_LZMA1 but with this ID a few extra options + * are supported in the lzma_options_lzma structure: + * + * - A flag to tell the encoder if the end of payload marker (EOPM) alias + * end of stream (EOS) marker must be written at the end of the stream. + * In contrast, LZMA_FILTER_LZMA1 always writes the end marker. + * + * - Decoder needs to be told the uncompressed size of the stream + * or that it is unknown (using the special value UINT64_MAX). + * If the size is known, a flag can be set to allow the presence of + * the end marker anyway. In contrast, LZMA_FILTER_LZMA1 always + * behaves as if the uncompressed size was unknown. + * + * This allows handling file formats where LZMA1 streams are used but where + * the end marker isn't allowed or where it might not (always) be present. + * This extended LZMA1 functionality is provided as a Filter ID for raw + * encoder and decoder instead of adding new encoder and decoder initialization + * functions because this way it is possible to also use extra filters, + * for example, LZMA_FILTER_X86 in a filter chain with LZMA_FILTER_LZMA1EXT, + * which might be needed to handle some file formats. + */ +#define LZMA_FILTER_LZMA1EXT LZMA_VLI_C(0x4000000000000002) + +/** * \brief LZMA2 Filter ID * * Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds @@ -114,16 +136,20 @@ /** * \brief Test if given match finder is supported * - * Return true if the given match finder is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * isn't listed in lzma_match_finder enumeration; the return value will be - * false. + * It is safe to call this with a value that isn't listed in + * lzma_match_finder enumeration; the return value will be false. * * There is no way to list which match finders are available in this * particular liblzma version and build. It would be useless, because * a new match finder, which the application developer wasn't aware, * could require giving additional options to the encoder that the older * match finders don't need. + * + * \param match_finder Match finder ID + * + * \return lzma_bool: + * - true if the match finder is supported by this liblzma build. + * - false otherwise. */ extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder) lzma_nothrow lzma_attr_const; @@ -158,14 +184,20 @@ /** * \brief Test if given compression mode is supported * - * Return true if the given compression mode is supported by this liblzma - * build. Otherwise false is returned. It is safe to call this with a value - * that isn't listed in lzma_mode enumeration; the return value will be false. + * It is safe to call this with a value that isn't listed in lzma_mode + * enumeration; the return value will be false. * * There is no way to list which modes are available in this particular * liblzma version and build. It would be useless, because a new compression * mode, which the application developer wasn't aware, could require giving * additional options to the encoder that the older modes don't need. + * + * \param mode Mode ID. + * + * \return lzma_bool: + * - true if the compression mode is supported by this liblzma + * build. + * - false otherwise. */ extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode) lzma_nothrow lzma_attr_const; @@ -374,6 +406,82 @@ */ uint32_t depth; + /** + * \brief For LZMA_FILTER_LZMA1EXT: Extended flags + * + * This is used only with LZMA_FILTER_LZMA1EXT. + * + * Currently only one flag is supported, LZMA_LZMA1EXT_ALLOW_EOPM: + * + * - Encoder: If the flag is set, then end marker is written just + * like it is with LZMA_FILTER_LZMA1. Without this flag the + * end marker isn't written and the application has to store + * the uncompressed size somewhere outside the compressed stream. + * To decompress streams without the end marker, the appliation + * has to set the correct uncompressed size in ext_size_low and + * ext_size_high. + * + * - Decoder: If the uncompressed size in ext_size_low and + * ext_size_high is set to the special value UINT64_MAX + * (indicating unknown uncompressed size) then this flag is + * ignored and the end marker must always be present, that is, + * the behavior is identical to LZMA_FILTER_LZMA1. + * + * Otherwise, if this flag isn't set, then the input stream + * must not have the end marker; if the end marker is detected + * then it will result in LZMA_DATA_ERROR. This is useful when + * it is known that the stream must not have the end marker and + * strict validation is wanted. + * + * If this flag is set, then it is autodetected if the end marker + * is present after the specified number of uncompressed bytes + * has been decompressed (ext_size_low and ext_size_high). The + * end marker isn't allowed in any other position. This behavior + * is useful when uncompressed size is known but the end marker + * may or may not be present. This is the case, for example, + * in .7z files (valid .7z files that have the end marker in + * LZMA1 streams are rare but they do exist). + */ + uint32_t ext_flags; +# define LZMA_LZMA1EXT_ALLOW_EOPM UINT32_C(0x01) + + /** + * \brief For LZMA_FILTER_LZMA1EXT: Uncompressed size (low bits) + * + * The 64-bit uncompressed size is needed for decompression with + * LZMA_FILTER_LZMA1EXT. The size is ignored by the encoder. + * + * The special value UINT64_MAX indicates that the uncompressed size + * is unknown and that the end of payload marker (also known as + * end of stream marker) must be present to indicate the end of + * the LZMA1 stream. Any other value indicates the expected + * uncompressed size of the LZMA1 stream. (If LZMA1 was used together + * with filters that change the size of the data then the uncompressed + * size of the LZMA1 stream could be different than the final + * uncompressed size of the filtered stream.) + * + * ext_size_low holds the least significant 32 bits of the + * uncompressed size. The most significant 32 bits must be set + * in ext_size_high. The macro lzma_ext_size_set(opt_lzma, u64size) + * can be used to set these members. + * + * The 64-bit uncompressed size is split into two uint32_t variables + * because there were no reserved uint64_t members and using the + * same options structure for LZMA_FILTER_LZMA1, LZMA_FILTER_LZMA1EXT, + * and LZMA_FILTER_LZMA2 was otherwise more convenient than having + * a new options structure for LZMA_FILTER_LZMA1EXT. (Replacing two + * uint32_t members with one uint64_t changes the ABI on some systems + * as the alignment of this struct can increase from 4 bytes to 8.) + */ + uint32_t ext_size_low; + + /** + * \brief For LZMA_FILTER_LZMA1EXT: Uncompressed size (high bits) + * + * This holds the most significant 32 bits of the uncompressed size. + */ + uint32_t ext_size_high; + /* * Reserved space to allow possible future extensions without * breaking the ABI. You should not touch these, because the names @@ -381,25 +489,57 @@ * with the currently supported options, so it is safe to leave these * uninitialized. */ - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; + + /** \private Reserved member. */ uint32_t reserved_int4; + + /** \private Reserved member. */ uint32_t reserved_int5; + + /** \private Reserved member. */ uint32_t reserved_int6; + + /** \private Reserved member. */ uint32_t reserved_int7; + + /** \private Reserved member. */ uint32_t reserved_int8; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum1; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum2; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum3; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum4; + + /** \private Reserved member. */ void *reserved_ptr1; + + /** \private Reserved member. */ void *reserved_ptr2; } lzma_options_lzma; /** + * \brief Macro to set the 64-bit uncompressed size in ext_size_* + * + * This might be convenient when decoding using LZMA_FILTER_LZMA1EXT. + * This isn't used with LZMA_FILTER_LZMA1 or LZMA_FILTER_LZMA2. + */ +#define lzma_set_ext_size(opt_lzma2, u64size) \ +do { \ + (opt_lzma2).ext_size_low = (uint32_t)(u64size); \ + (opt_lzma2).ext_size_high = (uint32_t)((uint64_t)(u64size) >> 32); \ +} while (0) + + +/** * \brief Set a compression preset to lzma_options_lzma structure * * 0 is the fastest and 9 is the slowest. These match the switches -0 .. -9 @@ -408,13 +548,22 @@ * The flags are defined in container.h, because the flags are used also * with lzma_easy_encoder(). * - * The preset values are subject to changes between liblzma versions. + * The preset levels are subject to changes between liblzma versions. * * This function is available only if LZMA1 or LZMA2 encoder has been enabled * when building liblzma. * - * \return On success, false is returned. If the preset is not - * supported, true is returned. + * If features (like certain match finders) have been disabled at build time, + * then the function may return success (false) even though the resulting + * LZMA1/LZMA2 options may not be usable for encoder initialization + * (LZMA_OPTIONS_ERROR). + * + * \param[out] options Pointer to LZMA1 or LZMA2 options to be filled + * \param preset Preset level bitwse-ORed with preset flags + * + * \return lzma_bool: + * - true if the preset is not supported (failure). + * - false otherwise (success). */ extern LZMA_API(lzma_bool) lzma_lzma_preset( lzma_options_lzma *options, uint32_t preset) lzma_nothrow; diff -ur xz-5.2.5/src/liblzma/api/lzma/stream_flags.h xz-5.4.3/src/liblzma/api/lzma/stream_flags.h --- xz-5.2.5/src/liblzma/api/lzma/stream_flags.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/stream_flags.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/stream_flags.h * \brief .xz Stream Header and Stream Footer encoder and decoder + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -36,7 +35,7 @@ * * To prevent API and ABI breakages if new features are needed in * Stream Header or Stream Footer, a version number is used to - * indicate which fields in this structure are in use. For now, + * indicate which members in this structure are in use. For now, * version must always be zero. With non-zero version, the * lzma_stream_header_encode() and lzma_stream_footer_encode() * will return LZMA_OPTIONS_ERROR. @@ -67,7 +66,15 @@ * Footer have been decoded. */ lzma_vli backward_size; + + /** + * \brief Minimum value for lzma_stream_flags.backward_size + */ # define LZMA_BACKWARD_SIZE_MIN 4 + + /** + * \brief Maximum value for lzma_stream_flags.backward_size + */ # define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34) /** @@ -87,19 +94,47 @@ * is just two bytes plus Backward Size of four bytes. But it's * nice to have the proper types when they are needed.) */ + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum1; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum2; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum3; + + /** \private Reserved member. */ lzma_reserved_enum reserved_enum4; + + /** \private Reserved member. */ lzma_bool reserved_bool1; + + /** \private Reserved member. */ lzma_bool reserved_bool2; + + /** \private Reserved member. */ lzma_bool reserved_bool3; + + /** \private Reserved member. */ lzma_bool reserved_bool4; + + /** \private Reserved member. */ lzma_bool reserved_bool5; + + /** \private Reserved member. */ lzma_bool reserved_bool6; + + /** \private Reserved member. */ lzma_bool reserved_bool7; + + /** \private Reserved member. */ lzma_bool reserved_bool8; + + /** \private Reserved member. */ uint32_t reserved_int1; + + /** \private Reserved member. */ uint32_t reserved_int2; } lzma_stream_flags; @@ -111,10 +146,11 @@ * \param options Stream Header options to be encoded. * options->backward_size is ignored and doesn't * need to be initialized. - * \param out Beginning of the output buffer of + * \param[out] out Beginning of the output buffer of * LZMA_STREAM_HEADER_SIZE bytes. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_OPTIONS_ERROR: options->version is not supported by * this liblzma version. * - LZMA_PROG_ERROR: Invalid options. @@ -128,10 +164,11 @@ * \brief Encode Stream Footer * * \param options Stream Footer options to be encoded. - * \param out Beginning of the output buffer of + * \param[out] out Beginning of the output buffer of * LZMA_STREAM_HEADER_SIZE bytes. * - * \return - LZMA_OK: Encoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Encoding was successful. * - LZMA_OPTIONS_ERROR: options->version is not supported by * this liblzma version. * - LZMA_PROG_ERROR: Invalid options. @@ -144,32 +181,33 @@ /** * \brief Decode Stream Header * - * \param options Target for the decoded Stream Header options. - * \param in Beginning of the input buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to * help comparing Stream Flags from Stream Header and Stream Footer with * lzma_stream_flags_compare(). * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given - * buffer cannot be Stream Header. - * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header - * is corrupt. - * - LZMA_OPTIONS_ERROR: Unsupported options are present - * in the header. - * * \note When decoding .xz files that contain multiple Streams, it may * make sense to print "file format not recognized" only if - * decoding of the Stream Header of the _first_ Stream gives + * decoding of the Stream Header of the \a first Stream gives * LZMA_FORMAT_ERROR. If non-first Stream Header gives * LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is * probably more appropriate. + * For example, the Stream decoder in liblzma uses + * LZMA_DATA_ERROR if LZMA_FORMAT_ERROR is returned by + * lzma_stream_header_decode() when decoding non-first Stream. * - * For example, Stream decoder in liblzma uses LZMA_DATA_ERROR if - * LZMA_FORMAT_ERROR is returned by lzma_stream_header_decode() - * when decoding non-first Stream. + * \param[out] options Target for the decoded Stream Header options. + * \param in Beginning of the input buffer of + * LZMA_STREAM_HEADER_SIZE bytes. + * + * + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. + * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given + * buffer cannot be Stream Header. + * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header + * is corrupt. + * - LZMA_OPTIONS_ERROR: Unsupported options are present + * in the header. */ extern LZMA_API(lzma_ret) lzma_stream_header_decode( lzma_stream_flags *options, const uint8_t *in) @@ -179,24 +217,25 @@ /** * \brief Decode Stream Footer * - * \param options Target for the decoded Stream Header options. + * \note If Stream Header was already decoded successfully, but + * decoding Stream Footer returns LZMA_FORMAT_ERROR, the + * application should probably report some other error message + * than "file format not recognized". The file likely + * is corrupt (possibly truncated). The Stream decoder in liblzma + * uses LZMA_DATA_ERROR in this situation. + * + * \param[out] options Target for the decoded Stream Footer options. * \param in Beginning of the input buffer of * LZMA_STREAM_HEADER_SIZE bytes. * - * \return - LZMA_OK: Decoding was successful. + * \return Possible lzma_ret values: + * - LZMA_OK: Decoding was successful. * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given * buffer cannot be Stream Footer. * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer * is corrupt. * - LZMA_OPTIONS_ERROR: Unsupported options are present * in Stream Footer. - * - * \note If Stream Header was already decoded successfully, but - * decoding Stream Footer returns LZMA_FORMAT_ERROR, the - * application should probably report some other error message - * than "file format not recognized", since the file more likely - * is corrupt (possibly truncated). Stream decoder in liblzma - * uses LZMA_DATA_ERROR in this situation. */ extern LZMA_API(lzma_ret) lzma_stream_footer_decode( lzma_stream_flags *options, const uint8_t *in) @@ -209,7 +248,11 @@ * backward_size values are compared only if both are not * LZMA_VLI_UNKNOWN. * - * \return - LZMA_OK: Both are equal. If either had backward_size set + * \param a Pointer to lzma_stream_flags structure + * \param b Pointer to lzma_stream_flags structure + * + * \return Possible lzma_ret values: + * - LZMA_OK: Both are equal. If either had backward_size set * to LZMA_VLI_UNKNOWN, backward_size values were not * compared or validated. * - LZMA_DATA_ERROR: The structures differ. diff -ur xz-5.2.5/src/liblzma/api/lzma/version.h xz-5.4.3/src/liblzma/api/lzma/version.h --- xz-5.2.5/src/liblzma/api/lzma/version.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/api/lzma/version.h 2023-05-04 17:22:00 @@ -1,6 +1,7 @@ /** * \file lzma/version.h * \brief Version number + * \note Never include this file directly. Use instead. */ /* @@ -8,8 +9,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -17,14 +16,26 @@ #endif -/* - * Version number split into components - */ +/** \brief Major version number of the liblzma release. */ #define LZMA_VERSION_MAJOR 5 -#define LZMA_VERSION_MINOR 2 -#define LZMA_VERSION_PATCH 5 + +/** \brief Minor version number of the liblzma release. */ +#define LZMA_VERSION_MINOR 4 + +/** \brief Patch version number of the liblzma release. */ +#define LZMA_VERSION_PATCH 3 + +/** + * \brief Version stability marker + * + * This will always be one of three values: + * - LZMA_VERSION_STABILITY_ALPHA + * - LZMA_VERSION_STABILITY_BETA + * - LZMA_VERSION_STABILITY_STABLE + */ #define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE +/** \brief Commit version number of the liblzma release */ #ifndef LZMA_VERSION_COMMIT # define LZMA_VERSION_COMMIT "" #endif @@ -101,9 +112,10 @@ /** * \brief Run-time version number as an integer * - * Return the value of LZMA_VERSION macro at the compile time of liblzma. - * This allows the application to compare if it was built against the same, + * This allows an application to compare if it was built against the same, * older, or newer version of liblzma that is currently running. + * + * \return The value of LZMA_VERSION macro at the compile time of liblzma */ extern LZMA_API(uint32_t) lzma_version_number(void) lzma_nothrow lzma_attr_const; @@ -112,8 +124,10 @@ /** * \brief Run-time version as a string * - * This function may be useful if you want to display which version of - * liblzma your application is currently using. + * This function may be useful to display which version of liblzma an + * application is currently using. + * + * \return Run-time version of liblzma */ extern LZMA_API(const char *) lzma_version_string(void) lzma_nothrow lzma_attr_const; diff -ur xz-5.2.5/src/liblzma/api/lzma/vli.h xz-5.4.3/src/liblzma/api/lzma/vli.h --- xz-5.2.5/src/liblzma/api/lzma/vli.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma/vli.h 2023-05-04 17:21:05 @@ -1,6 +1,7 @@ /** * \file lzma/vli.h * \brief Variable-length integer handling + * \note Never include this file directly. Use instead. * * In the .xz format, most integers are encoded in a variable-length * representation, which is sometimes called little endian base-128 encoding. @@ -19,8 +20,6 @@ * * This file has been put into the public domain. * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. */ #ifndef LZMA_H_INTERNAL @@ -70,7 +69,8 @@ * for example in the uncompressed_size and compressed_size variables. * * \return True if the integer is representable as VLI or if it - * indicates unknown value. + * indicates unknown value. False if the integer cannot be + * represented as VLI. */ #define lzma_vli_is_valid(vli) \ ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) @@ -86,12 +86,12 @@ * integer has been encoded. * * \param vli Integer to be encoded - * \param vli_pos How many VLI-encoded bytes have already been written + * \param[out] vli_pos How many VLI-encoded bytes have already been written * out. When starting to encode a new integer in * multi-call mode, *vli_pos must be set to zero. * To use single-call encoding, set vli_pos to NULL. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. + * \param[out] out Beginning of the output buffer + * \param[out] out_pos The next byte will be written to out[*out_pos]. * \param out_size Size of the out buffer; the first byte into * which no data is written to is out[out_size]. * @@ -121,15 +121,15 @@ * * Like lzma_vli_encode(), this function has single-call and multi-call modes. * - * \param vli Pointer to decoded integer. The decoder will + * \param[out] vli Pointer to decoded integer. The decoder will * initialize it to zero when *vli_pos == 0, so * application isn't required to initialize *vli. - * \param vli_pos How many bytes have already been decoded. When + * \param[out] vli_pos How many bytes have already been decoded. When * starting to decode a new integer in multi-call * mode, *vli_pos must be initialized to zero. To * use single-call decoding, set vli_pos to NULL. * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. + * \param[out] in_pos The next byte will be read from in[*in_pos]. * \param in_size Size of the input buffer; the first byte that * won't be read is in[in_size]. * @@ -158,6 +158,8 @@ /** * \brief Get the number of bytes required to encode a VLI + * + * \param vli Integer whose encoded size is to be determined * * \return Number of bytes on success (1-9). If vli isn't valid, * zero is returned. diff -ur xz-5.2.5/src/liblzma/api/lzma.h xz-5.4.3/src/liblzma/api/lzma.h --- xz-5.2.5/src/liblzma/api/lzma.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/api/lzma.h 2023-05-04 17:21:05 @@ -1,22 +1,23 @@ /** * \file api/lzma.h * \brief The public API of liblzma data compression library + * \mainpage * * liblzma is a public domain general-purpose data compression library with * a zlib-like API. The native file format is .xz, but also the old .lzma * format and raw (no headers) streams are supported. Multiple compression * algorithms (filters) are supported. Currently LZMA2 is the primary filter. * - * liblzma is part of XZ Utils . XZ Utils includes + * liblzma is part of XZ Utils . XZ Utils includes * a gzip-like command line tool named xz and some other tools. XZ Utils - * is developed and maintained by Lasse Collin. + * is developed and maintained by Lasse Collin and Jia Tan. * * Major parts of liblzma are based on Igor Pavlov's public domain LZMA SDK - * . + * . * * The SHA-256 implementation is based on the public domain code found from - * 7-Zip , which has a modified version of the public - * domain SHA-256 code found from Crypto++ . + * 7-Zip , which has a modified version of the public + * domain SHA-256 code found from Crypto++ . * The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai. */ @@ -219,7 +220,8 @@ */ #ifndef lzma_nothrow # if defined(__cplusplus) -# if __cplusplus >= 201103L +# if __cplusplus >= 201103L || (defined(_MSVC_LANG) \ + && _MSVC_LANG >= 201103L) # define lzma_nothrow noexcept # else # define lzma_nothrow throw() diff -ur xz-5.2.5/src/liblzma/check/check.h xz-5.4.3/src/liblzma/check/check.h --- xz-5.2.5/src/liblzma/check/check.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/check.h 2023-05-04 17:21:05 @@ -108,10 +108,6 @@ /// \brief Initialize *check depending on type -/// -/// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not -/// supported by the current version or build of liblzma. -/// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX. extern void lzma_check_init(lzma_check_state *check, lzma_check type); /// Update the check state diff -ur xz-5.2.5/src/liblzma/check/crc32_small.c xz-5.4.3/src/liblzma/check/crc32_small.c --- xz-5.2.5/src/liblzma/check/crc32_small.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc32_small.c 2023-05-04 17:21:05 @@ -16,6 +16,9 @@ uint32_t lzma_crc32_table[1][256]; +#ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR +__attribute__((__constructor__)) +#endif static void crc32_init(void) { @@ -37,18 +40,22 @@ } +#ifndef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR extern void lzma_crc32_init(void) { mythread_once(crc32_init); return; } +#endif extern LZMA_API(uint32_t) lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) { +#ifndef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR lzma_crc32_init(); +#endif crc = ~crc; diff -ur xz-5.2.5/src/liblzma/check/crc32_x86.S xz-5.4.3/src/liblzma/check/crc32_x86.S --- xz-5.2.5/src/liblzma/check/crc32_x86.S 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc32_x86.S 2023-05-04 17:21:05 @@ -51,6 +51,14 @@ * extern uint32_t lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc); */ +/* When Intel CET is enabled, include in assembly code to mark + Intel CET support. */ +#ifdef __CET__ +# include +#else +# define _CET_ENDBR +#endif + /* * On some systems, the functions need to be prefixed. The prefix is * usually an underscore. @@ -83,6 +91,7 @@ ALIGN(4, 16) LZMA_CRC32: + _CET_ENDBR /* * Register usage: * %eax crc @@ -195,7 +204,7 @@ /* * Read the next four bytes, for which the CRC is calculated - * on the next interation of the loop. + * on the next iteration of the loop. */ movl 12(%esi), %ecx @@ -296,9 +305,9 @@ /* * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when + * use __FreeBSD__ and __linux__ here, but I don't know a way to detect when * we are using GNU assembler. */ -#if defined(__ELF__) && defined(__linux__) +#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__)) .section .note.GNU-stack,"",@progbits #endif diff -ur xz-5.2.5/src/liblzma/check/crc64_fast.c xz-5.4.3/src/liblzma/check/crc64_fast.c --- xz-5.2.5/src/liblzma/check/crc64_fast.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc64_fast.c 2023-05-04 17:21:05 @@ -3,11 +3,25 @@ /// \file crc64.c /// \brief CRC64 calculation /// -/// Calculate the CRC64 using the slice-by-four algorithm. This is the same -/// idea that is used in crc32_fast.c, but for CRC64 we use only four tables +/// There are two methods in this file. crc64_generic uses the +/// the slice-by-four algorithm. This is the same idea that is +/// used in crc32_fast.c, but for CRC64 we use only four tables /// instead of eight to avoid increasing CPU cache usage. +/// +/// crc64_clmul uses 32/64-bit x86 SSSE3, SSE4.1, and CLMUL instructions. +/// It was derived from +/// https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf +/// and the public domain code from https://github.com/rawrunprotected/crc +/// (URLs were checked on 2022-11-07). +/// +/// FIXME: Builds for 32-bit x86 use crc64_x86.S by default instead +/// of this file and thus CLMUL version isn't available on 32-bit x86 +/// unless configured with --disable-assembler. Even then the lookup table +/// isn't omitted in crc64_table.c since it doesn't know that assembly +/// code has been disabled. // -// Author: Lasse Collin +// Authors: Lasse Collin +// Ilya Kurdyukov // // This file has been put into the public domain. // You can do whatever you want with this file. @@ -15,6 +29,54 @@ /////////////////////////////////////////////////////////////////////////////// #include "check.h" + +#undef CRC_GENERIC +#undef CRC_CLMUL +#undef CRC_USE_GENERIC_FOR_SMALL_INPUTS + +// If CLMUL cannot be used then only the generic slice-by-four is built. +#if !defined(HAVE_USABLE_CLMUL) +# define CRC_GENERIC 1 + +// If CLMUL is allowed unconditionally in the compiler options then the +// generic version can be omitted. Note that this doesn't work with MSVC +// as I don't know how to detect the features here. +// +// NOTE: Keep this this in sync with crc64_table.c. +#elif (defined(__SSSE3__) && defined(__SSE4_1__) && defined(__PCLMUL__)) \ + || (defined(__e2k__) && __iset__ >= 6) +# define CRC_CLMUL 1 + +// Otherwise build both and detect at runtime which version to use. +#else +# define CRC_GENERIC 1 +# define CRC_CLMUL 1 + +/* + // The generic code is much faster with 1-8-byte inputs and has + // similar performance up to 16 bytes at least in microbenchmarks + // (it depends on input buffer alignment too). If both versions are + // built, this #define will use the generic version for inputs up to + // 16 bytes and CLMUL for bigger inputs. It saves a little in code + // size since the special cases for 0-16-byte inputs will be omitted + // from the CLMUL code. +# define CRC_USE_GENERIC_FOR_SMALL_INPUTS 1 +*/ + +# if defined(_MSC_VER) +# include +# elif defined(HAVE_CPUID_H) +# include +# endif +#endif + + +///////////////////////////////// +// Generic slice-by-four CRC64 // +///////////////////////////////// + +#ifdef CRC_GENERIC + #include "crc_macros.h" @@ -26,8 +88,8 @@ // See the comments in crc32_fast.c. They aren't duplicated here. -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) +static uint64_t +crc64_generic(const uint8_t *buf, size_t size, uint64_t crc) { crc = ~crc; @@ -46,10 +108,11 @@ while (buf < limit) { #ifdef WORDS_BIGENDIAN - const uint32_t tmp = (crc >> 32) + const uint32_t tmp = (uint32_t)(crc >> 32) ^ aligned_read32ne(buf); #else - const uint32_t tmp = crc ^ aligned_read32ne(buf); + const uint32_t tmp = (uint32_t)crc + ^ aligned_read32ne(buf); #endif buf += 4; @@ -69,4 +132,399 @@ #endif return ~crc; +} +#endif + + +///////////////////// +// x86 CLMUL CRC64 // +///////////////////// + +#ifdef CRC_CLMUL + +#include + + +/* +// These functions were used to generate the constants +// at the top of crc64_clmul(). +static uint64_t +calc_lo(uint64_t poly) +{ + uint64_t a = poly; + uint64_t b = 0; + + for (unsigned i = 0; i < 64; ++i) { + b = (b >> 1) | (a << 63); + a = (a >> 1) ^ (a & 1 ? poly : 0); + } + + return b; +} + +static uint64_t +calc_hi(uint64_t poly, uint64_t a) +{ + for (unsigned i = 0; i < 64; ++i) + a = (a >> 1) ^ (a & 1 ? poly : 0); + + return a; +} +*/ + + +#define MASK_L(in, mask, r) \ + r = _mm_shuffle_epi8(in, mask) + +#define MASK_H(in, mask, r) \ + r = _mm_shuffle_epi8(in, _mm_xor_si128(mask, vsign)) + +#define MASK_LH(in, mask, low, high) \ + MASK_L(in, mask, low); \ + MASK_H(in, mask, high) + + +// MSVC (VS2015 - VS2022) produces bad 32-bit x86 code from the CLMUL CRC +// code when optimizations are enabled (release build). According to the bug +// report, the ebx register is corrupted and the calculated result is wrong. +// Trying to workaround the problem with "__asm mov ebx, ebx" didn't help. +// The following pragma works and performance is still good. x86-64 builds +// aren't affected by this problem. +// +// NOTE: Another pragma after the function restores the optimizations. +// If the #if condition here is updated, the other one must be updated too. +#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__clang__) \ + && defined(_M_IX86) +# pragma optimize("g", off) +#endif + +// EDG-based compilers (Intel's classic compiler and compiler for E2K) can +// define __GNUC__ but the attribute must not be used with them. +// The new Clang-based ICX needs the attribute. +// +// NOTE: Build systems check for this too, keep them in sync with this. +#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__) +__attribute__((__target__("ssse3,sse4.1,pclmul"))) +#endif +static uint64_t +crc64_clmul(const uint8_t *buf, size_t size, uint64_t crc) +{ + // The prototypes of the intrinsics use signed types while most of + // the values are treated as unsigned here. These warnings in this + // function have been checked and found to be harmless so silence them. +#if TUKLIB_GNUC_REQ(4, 6) || defined(__clang__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wsign-conversion" +# pragma GCC diagnostic ignored "-Wconversion" +#endif + +#ifndef CRC_USE_GENERIC_FOR_SMALL_INPUTS + // The code assumes that there is at least one byte of input. + if (size == 0) + return crc; +#endif + + // const uint64_t poly = 0xc96c5795d7870f42; // CRC polynomial + const uint64_t p = 0x92d8af2baf0e1e85; // (poly << 1) | 1 + const uint64_t mu = 0x9c3e466c172963d5; // (calc_lo(poly) << 1) | 1 + const uint64_t k2 = 0xdabe95afc7875f40; // calc_hi(poly, 1) + const uint64_t k1 = 0xe05dd497ca393ae4; // calc_hi(poly, k2) + const __m128i vfold0 = _mm_set_epi64x(p, mu); + const __m128i vfold1 = _mm_set_epi64x(k2, k1); + + // Create a vector with 8-bit values 0 to 15. This is used to + // construct control masks for _mm_blendv_epi8 and _mm_shuffle_epi8. + const __m128i vramp = _mm_setr_epi32( + 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c); + + // This is used to inverse the control mask of _mm_shuffle_epi8 + // so that bytes that wouldn't be picked with the original mask + // will be picked and vice versa. + const __m128i vsign = _mm_set1_epi8(0x80); + + // Memory addresses A to D and the distances between them: + // + // A B C D + // [skip_start][size][skip_end] + // [ size2 ] + // + // A and D are 16-byte aligned. B and C are 1-byte aligned. + // skip_start and skip_end are 0-15 bytes. size is at least 1 byte. + // + // A = aligned_buf will initially point to this address. + // B = The address pointed by the caller-supplied buf. + // C = buf + size == aligned_buf + size2 + // D = buf + size + skip_end == aligned_buf + size2 + skip_end + const size_t skip_start = (size_t)((uintptr_t)buf & 15); + const size_t skip_end = (size_t)((0U - (uintptr_t)(buf + size)) & 15); + const __m128i *aligned_buf = (const __m128i *)( + (uintptr_t)buf & ~(uintptr_t)15); + + // If size2 <= 16 then the whole input fits into a single 16-byte + // vector. If size2 > 16 then at least two 16-byte vectors must + // be processed. If size2 > 16 && size <= 16 then there is only + // one 16-byte vector's worth of input but it is unaligned in memory. + // + // NOTE: There is no integer overflow here if the arguments are valid. + // If this overflowed, buf + size would too. + size_t size2 = skip_start + size; + + // Masks to be used with _mm_blendv_epi8 and _mm_shuffle_epi8: + // The first skip_start or skip_end bytes in the vectors will have + // the high bit (0x80) set. _mm_blendv_epi8 and _mm_shuffle_epi8 + // will produce zeros for these positions. (Bitwise-xor of these + // masks with vsign will produce the opposite behavior.) + const __m128i mask_start + = _mm_sub_epi8(vramp, _mm_set1_epi8(skip_start)); + const __m128i mask_end = _mm_sub_epi8(vramp, _mm_set1_epi8(skip_end)); + + // Get the first 1-16 bytes into data0. If loading less than 16 bytes, + // the bytes are loaded to the high bits of the vector and the least + // significant positions are filled with zeros. + const __m128i data0 = _mm_blendv_epi8(_mm_load_si128(aligned_buf), + _mm_setzero_si128(), mask_start); + ++aligned_buf; + +#if defined(__i386__) || defined(_M_IX86) + const __m128i initial_crc = _mm_set_epi64x(0, ~crc); +#else + // GCC and Clang would produce good code with _mm_set_epi64x + // but MSVC needs _mm_cvtsi64_si128 on x86-64. + const __m128i initial_crc = _mm_cvtsi64_si128(~crc); +#endif + + __m128i v0, v1, v2, v3; + +#ifndef CRC_USE_GENERIC_FOR_SMALL_INPUTS + if (size <= 16) { + // Right-shift initial_crc by 1-16 bytes based on "size" + // and store the result in v1 (high bytes) and v0 (low bytes). + // + // NOTE: The highest 8 bytes of initial_crc are zeros so + // v1 will be filled with zeros if size >= 8. The highest 8 + // bytes of v1 will always become zeros. + // + // [ v1 ][ v0 ] + // [ initial_crc ] size == 1 + // [ initial_crc ] size == 2 + // [ initial_crc ] size == 15 + // [ initial_crc ] size == 16 (all in v0) + const __m128i mask_low = _mm_add_epi8( + vramp, _mm_set1_epi8(size - 16)); + MASK_LH(initial_crc, mask_low, v0, v1); + + if (size2 <= 16) { + // There are 1-16 bytes of input and it is all + // in data0. Copy the input bytes to v3. If there + // are fewer than 16 bytes, the low bytes in v3 + // will be filled with zeros. That is, the input + // bytes are stored to the same position as + // (part of) initial_crc is in v0. + MASK_L(data0, mask_end, v3); + } else { + // There are 2-16 bytes of input but not all bytes + // are in data0. + const __m128i data1 = _mm_load_si128(aligned_buf); + + // Collect the 2-16 input bytes from data0 and data1 + // to v2 and v3, and bitwise-xor them with the + // low bits of initial_crc in v0. Note that the + // the second xor is below this else-block as it + // is shared with the other branch. + MASK_H(data0, mask_end, v2); + MASK_L(data1, mask_end, v3); + v0 = _mm_xor_si128(v0, v2); + } + + v0 = _mm_xor_si128(v0, v3); + v1 = _mm_alignr_epi8(v1, v0, 8); + } else +#endif + { + const __m128i data1 = _mm_load_si128(aligned_buf); + MASK_LH(initial_crc, mask_start, v0, v1); + v0 = _mm_xor_si128(v0, data0); + v1 = _mm_xor_si128(v1, data1); + +#define FOLD \ + v1 = _mm_xor_si128(v1, _mm_clmulepi64_si128(v0, vfold1, 0x00)); \ + v0 = _mm_xor_si128(v1, _mm_clmulepi64_si128(v0, vfold1, 0x11)); + + while (size2 > 32) { + ++aligned_buf; + size2 -= 16; + FOLD + v1 = _mm_load_si128(aligned_buf); + } + + if (size2 < 32) { + MASK_H(v0, mask_end, v2); + MASK_L(v0, mask_end, v0); + MASK_L(v1, mask_end, v3); + v1 = _mm_or_si128(v2, v3); + } + + FOLD + v1 = _mm_srli_si128(v0, 8); +#undef FOLD + } + + v1 = _mm_xor_si128(_mm_clmulepi64_si128(v0, vfold1, 0x10), v1); + v0 = _mm_clmulepi64_si128(v1, vfold0, 0x00); + v2 = _mm_clmulepi64_si128(v0, vfold0, 0x10); + v0 = _mm_xor_si128(_mm_xor_si128(v2, _mm_slli_si128(v0, 8)), v1); + +#if defined(__i386__) || defined(_M_IX86) + return ~(((uint64_t)(uint32_t)_mm_extract_epi32(v0, 3) << 32) | + (uint64_t)(uint32_t)_mm_extract_epi32(v0, 2)); +#else + return ~(uint64_t)_mm_extract_epi64(v0, 1); +#endif + +#if TUKLIB_GNUC_REQ(4, 6) || defined(__clang__) +# pragma GCC diagnostic pop +#endif +} +#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__clang__) \ + && defined(_M_IX86) +# pragma optimize("", on) +#endif +#endif + + +//////////////////////// +// Detect CPU support // +//////////////////////// + +#if defined(CRC_GENERIC) && defined(CRC_CLMUL) +static inline bool +is_clmul_supported(void) +{ + int success = 1; + uint32_t r[4]; // eax, ebx, ecx, edx + +#if defined(_MSC_VER) + // This needs with MSVC. ICC has it as a built-in + // on all platforms. + __cpuid(r, 1); +#elif defined(HAVE_CPUID_H) + // Compared to just using __asm__ to run CPUID, this also checks + // that CPUID is supported and saves and restores ebx as that is + // needed with GCC < 5 with position-independent code (PIC). + success = __get_cpuid(1, &r[0], &r[1], &r[2], &r[3]); +#else + // Just a fallback that shouldn't be needed. + __asm__("cpuid\n\t" + : "=a"(r[0]), "=b"(r[1]), "=c"(r[2]), "=d"(r[3]) + : "a"(1), "c"(0)); +#endif + + // Returns true if these are supported: + // CLMUL (bit 1 in ecx) + // SSSE3 (bit 9 in ecx) + // SSE4.1 (bit 19 in ecx) + const uint32_t ecx_mask = (1 << 1) | (1 << 9) | (1 << 19); + return success && (r[2] & ecx_mask) == ecx_mask; + + // Alternative methods that weren't used: + // - ICC's _may_i_use_cpu_feature: the other methods should work too. + // - GCC >= 6 / Clang / ICX __builtin_cpu_supports("pclmul") + // + // CPUID decding is needed with MSVC anyway and older GCC. This keeps + // the feature checks in the build system simpler too. The nice thing + // about __builtin_cpu_supports would be that it generates very short + // code as is it only reads a variable set at startup but a few bytes + // doesn't matter here. +} + + +#ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR +# define CRC64_FUNC_INIT +# define CRC64_SET_FUNC_ATTR __attribute__((__constructor__)) +#else +# define CRC64_FUNC_INIT = &crc64_dispatch +# define CRC64_SET_FUNC_ATTR +static uint64_t crc64_dispatch(const uint8_t *buf, size_t size, uint64_t crc); +#endif + + +// Pointer to the the selected CRC64 method. +static uint64_t (*crc64_func)(const uint8_t *buf, size_t size, uint64_t crc) + CRC64_FUNC_INIT; + + +CRC64_SET_FUNC_ATTR +static void +crc64_set_func(void) +{ + crc64_func = is_clmul_supported() ? &crc64_clmul : &crc64_generic; + return; +} + + +#ifndef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR +static uint64_t +crc64_dispatch(const uint8_t *buf, size_t size, uint64_t crc) +{ + // When __attribute__((__constructor__)) isn't supported, set the + // function pointer without any locking. If multiple threads run + // the detection code in parallel, they will all end up setting + // the pointer to the same value. This avoids the use of + // mythread_once() on every call to lzma_crc64() but this likely + // isn't strictly standards compliant. Let's change it if it breaks. + crc64_set_func(); + return crc64_func(buf, size, crc); +} +#endif +#endif + + +extern LZMA_API(uint64_t) +lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) +{ +#if defined(CRC_GENERIC) && defined(CRC_CLMUL) + // If CLMUL is available, it is the best for non-tiny inputs, + // being over twice as fast as the generic slice-by-four version. + // However, for size <= 16 it's different. In the extreme case + // of size == 1 the generic version can be five times faster. + // At size >= 8 the CLMUL starts to become reasonable. It + // varies depending on the alignment of buf too. + // + // The above doesn't include the overhead of mythread_once(). + // At least on x86-64 GNU/Linux, pthread_once() is very fast but + // it still makes lzma_crc64(buf, 1, crc) 50-100 % slower. When + // size reaches 12-16 bytes the overhead becomes negligible. + // + // So using the generic version for size <= 16 may give better + // performance with tiny inputs but if such inputs happen rarely + // it's not so obvious because then the lookup table of the + // generic version may not be in the processor cache. +#ifdef CRC_USE_GENERIC_FOR_SMALL_INPUTS + if (size <= 16) + return crc64_generic(buf, size, crc); +#endif + +/* +#ifndef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR + // See crc64_dispatch(). This would be the alternative which uses + // locking and doesn't use crc64_dispatch(). Note that on Windows + // this method needs Vista threads. + mythread_once(crc64_set_func); +#endif +*/ + + return crc64_func(buf, size, crc); + +#elif defined(CRC_CLMUL) + // If CLMUL is used unconditionally without runtime CPU detection + // then omitting the generic version and its 8 KiB lookup table + // makes the library smaller. + // + // FIXME: Lookup table isn't currently omitted on 32-bit x86, + // see crc64_table.c. + return crc64_clmul(buf, size, crc); + +#else + return crc64_generic(buf, size, crc); +#endif } diff -ur xz-5.2.5/src/liblzma/check/crc64_small.c xz-5.4.3/src/liblzma/check/crc64_small.c --- xz-5.2.5/src/liblzma/check/crc64_small.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc64_small.c 2023-05-04 17:21:05 @@ -16,6 +16,9 @@ static uint64_t crc64_table[256]; +#ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR +__attribute__((__constructor__)) +#endif static void crc64_init(void) { @@ -40,7 +43,9 @@ extern LZMA_API(uint64_t) lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) { +#ifndef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR mythread_once(crc64_init); +#endif crc = ~crc; diff -ur xz-5.2.5/src/liblzma/check/crc64_table.c xz-5.4.3/src/liblzma/check/crc64_table.c --- xz-5.2.5/src/liblzma/check/crc64_table.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc64_table.c 2023-05-04 17:21:05 @@ -12,11 +12,24 @@ #include "common.h" + +// FIXME: Compared to crc64_fast.c this has to check for __x86_64__ too +// so that in 32-bit builds crc64_x86.S won't break due to a missing table. +#if (defined(__x86_64__) && defined(__SSSE3__) \ + && defined(__SSE4_1__) && defined(__PCLMUL__)) \ + || (defined(__e2k__) && __iset__ >= 6) +// No table needed but something has to be exported to keep some toolchains +// happy. Also use a declaration to silence compiler warnings. +extern const char lzma_crc64_dummy; +const char lzma_crc64_dummy; + +#else // Having the declaration here silences clang -Wmissing-variable-declarations. extern const uint64_t lzma_crc64_table[4][256]; -#ifdef WORDS_BIGENDIAN -# include "crc64_table_be.h" -#else -# include "crc64_table_le.h" +# if defined(WORDS_BIGENDIAN) +# include "crc64_table_be.h" +# else +# include "crc64_table_le.h" +# endif #endif diff -ur xz-5.2.5/src/liblzma/check/crc64_x86.S xz-5.4.3/src/liblzma/check/crc64_x86.S --- xz-5.2.5/src/liblzma/check/crc64_x86.S 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/crc64_x86.S 2023-05-04 17:21:05 @@ -41,6 +41,14 @@ * extern uint64_t lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc); */ +/* When Intel CET is enabled, include in assembly code to mark + Intel CET support. */ +#ifdef __CET__ +# include +#else +# define _CET_ENDBR +#endif + /* * On some systems, the functions need to be prefixed. The prefix is * usually an underscore. @@ -73,6 +81,7 @@ ALIGN(4, 16) LZMA_CRC64: + _CET_ENDBR /* * Register usage: * %eax crc LSB @@ -279,9 +288,9 @@ /* * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when + * use __FreeBSD__ and __linux__ here, but I don't know a way to detect when * we are using GNU assembler. */ -#if defined(__ELF__) && defined(__linux__) +#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__)) .section .note.GNU-stack,"",@progbits #endif diff -ur xz-5.2.5/src/liblzma/check/sha256.c xz-5.4.3/src/liblzma/check/sha256.c --- xz-5.2.5/src/liblzma/check/sha256.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/check/sha256.c 2023-05-04 17:21:05 @@ -8,7 +8,7 @@ /// conditionally to keep the code working on older boxes. // // This code is based on the code found from 7-Zip, which has a modified -// version of the SHA-256 found from Crypto++ . +// version of the SHA-256 found from Crypto++ . // The code was modified a little to fit into liblzma. // // Authors: Kevin Springle diff -ur xz-5.2.5/src/liblzma/common/Makefile.inc xz-5.4.3/src/liblzma/common/Makefile.inc --- xz-5.2.5/src/liblzma/common/Makefile.inc 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/Makefile.inc 2023-05-04 17:21:05 @@ -19,10 +19,14 @@ common/index.h \ common/stream_flags_common.c \ common/stream_flags_common.h \ + common/string_conversion.c \ common/vli_size.c if COND_THREADS -liblzma_la_SOURCES += common/hardware_cputhreads.c +liblzma_la_SOURCES += \ + common/hardware_cputhreads.c \ + common/outqueue.c \ + common/outqueue.h endif if COND_MAIN_ENCODER @@ -49,11 +53,14 @@ if COND_THREADS liblzma_la_SOURCES += \ - common/outqueue.c \ - common/outqueue.h \ common/stream_encoder_mt.c endif + +if COND_MICROLZMA +liblzma_la_SOURCES += \ + common/microlzma_encoder.c endif +endif if COND_MAIN_DECODER liblzma_la_SOURCES += \ @@ -65,15 +72,33 @@ common/block_decoder.h \ common/block_header_decoder.c \ common/easy_decoder_memusage.c \ + common/file_info.c \ common/filter_buffer_decoder.c \ common/filter_decoder.c \ common/filter_decoder.h \ common/filter_flags_decoder.c \ common/index_decoder.c \ + common/index_decoder.h \ common/index_hash.c \ common/stream_buffer_decoder.c \ common/stream_decoder.c \ common/stream_decoder.h \ common/stream_flags_decoder.c \ common/vli_decoder.c + +if COND_THREADS +liblzma_la_SOURCES += \ + common/stream_decoder_mt.c +endif + +if COND_MICROLZMA +liblzma_la_SOURCES += \ + common/microlzma_decoder.c +endif + +if COND_LZIP_DECODER +liblzma_la_SOURCES += \ + common/lzip_decoder.c \ + common/lzip_decoder.h +endif endif diff -ur xz-5.2.5/src/liblzma/common/alone_decoder.c xz-5.4.3/src/liblzma/common/alone_decoder.c --- xz-5.2.5/src/liblzma/common/alone_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/alone_decoder.c 2023-05-04 17:21:05 @@ -110,12 +110,24 @@ // Another hack to ditch false positives: Assume that // if the uncompressed size is known, it must be less // than 256 GiB. + // + // FIXME? Without picky we allow > LZMA_VLI_MAX which doesn't + // really matter in this specific situation (> LZMA_VLI_MAX is + // safe in the LZMA decoder) but it's somewhat weird still. if (coder->picky && coder->uncompressed_size != LZMA_VLI_UNKNOWN && coder->uncompressed_size >= (LZMA_VLI_C(1) << 38)) return LZMA_FORMAT_ERROR; + // Use LZMA_FILTER_LZMA1EXT features to specify the + // uncompressed size and that the end marker is allowed + // even when the uncompressed size is known. Both .lzma + // header and LZMA1EXT use UINT64_MAX indicate that size + // is unknown. + coder->options.ext_flags = LZMA_LZMA1EXT_ALLOW_EOPM; + lzma_set_ext_size(coder->options, coder->uncompressed_size); + // Calculate the memory usage so that it is ready // for SEQ_CODER_INIT. coder->memusage = lzma_lzma_decoder_memusage(&coder->options) @@ -132,6 +144,7 @@ lzma_filter_info filters[2] = { { + .id = LZMA_FILTER_LZMA1EXT, .init = &lzma_lzma_decoder_init, .options = &coder->options, }, { @@ -139,14 +152,8 @@ } }; - const lzma_ret ret = lzma_next_filter_init(&coder->next, - allocator, filters); - if (ret != LZMA_OK) - return ret; - - // Use a hack to set the uncompressed size. - lzma_lz_decoder_uncompressed(coder->next.coder, - coder->uncompressed_size); + return_if_error(lzma_next_filter_init(&coder->next, + allocator, filters)); coder->sequence = SEQ_CODE; break; diff -ur xz-5.2.5/src/liblzma/common/alone_encoder.c xz-5.4.3/src/liblzma/common/alone_encoder.c --- xz-5.2.5/src/liblzma/common/alone_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/alone_encoder.c 2023-05-04 17:21:05 @@ -75,7 +75,6 @@ } -// At least for now, this is not used by any internal function. static lzma_ret alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_options_lzma *options) @@ -129,6 +128,7 @@ // Initialize the LZMA encoder. const lzma_filter_info filters[2] = { { + .id = LZMA_FILTER_LZMA1, .init = &lzma_lzma_encoder_init, .options = (void *)(options), }, { @@ -138,16 +138,6 @@ return lzma_next_filter_init(&coder->next, allocator, filters); } - - -/* -extern lzma_ret -lzma_alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, - const lzma_options_alone *options) -{ - lzma_next_coder_init(&alone_encoder_init, next, allocator, options); -} -*/ extern LZMA_API(lzma_ret) diff -ur xz-5.2.5/src/liblzma/common/auto_decoder.c xz-5.4.3/src/liblzma/common/auto_decoder.c --- xz-5.2.5/src/liblzma/common/auto_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/auto_decoder.c 2023-05-04 17:21:05 @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////// // /// \file auto_decoder.c -/// \brief Autodetect between .xz Stream and .lzma (LZMA_Alone) formats +/// \brief Autodetect between .xz, .lzma (LZMA_Alone), and .lz (lzip) // // Author: Lasse Collin // @@ -12,10 +12,13 @@ #include "stream_decoder.h" #include "alone_decoder.h" +#ifdef HAVE_LZIP_DECODER +# include "lzip_decoder.h" +#endif typedef struct { - /// Stream decoder or LZMA_Alone decoder + /// .xz Stream decoder, LZMA_Alone decoder, or lzip decoder lzma_next_coder next; uint64_t memlimit; @@ -46,14 +49,22 @@ // SEQ_CODE even if we return some LZMA_*_CHECK. coder->sequence = SEQ_CODE; - // Detect the file format. For now this is simple, since if - // it doesn't start with 0xFD (the first magic byte of the - // new format), it has to be LZMA_Alone, or something that - // we don't support at all. + // Detect the file format. .xz files start with 0xFD which + // cannot be the first byte of .lzma (LZMA_Alone) format. + // The .lz format starts with 0x4C which could be the + // first byte of a .lzma file but luckily it would mean + // lc/lp/pb being 4/3/1 which liblzma doesn't support because + // lc + lp > 4. So using just 0x4C to detect .lz is OK here. if (in[*in_pos] == 0xFD) { return_if_error(lzma_stream_decoder_init( &coder->next, allocator, coder->memlimit, coder->flags)); +#ifdef HAVE_LZIP_DECODER + } else if (in[*in_pos] == 0x4C) { + return_if_error(lzma_lzip_decoder_init( + &coder->next, allocator, + coder->memlimit, coder->flags)); +#endif } else { return_if_error(lzma_alone_decoder_init(&coder->next, allocator, coder->memlimit, true)); @@ -86,8 +97,8 @@ // Fall through case SEQ_FINISH: - // When LZMA_DECODE_CONCATENATED was used and we were decoding - // LZMA_Alone file, we need to check check that there is no + // When LZMA_CONCATENATED was used and we were decoding + // a LZMA_Alone file, we need to check that there is no // trailing garbage and wait for LZMA_FINISH. if (*in_pos < in_size) return LZMA_DATA_ERROR; diff -ur xz-5.2.5/src/liblzma/common/block_buffer_encoder.c xz-5.4.3/src/liblzma/common/block_buffer_encoder.c --- xz-5.2.5/src/liblzma/common/block_buffer_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/block_buffer_encoder.c 2023-05-04 17:21:05 @@ -325,6 +325,24 @@ } +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +// This is for compatibility with binaries linked against liblzma that +// has been patched with xz-5.2.2-compat-libs.patch from RHEL/CentOS 7. +LZMA_SYMVER_API("lzma_block_uncomp_encode@XZ_5.2.2", + lzma_ret, lzma_block_uncomp_encode_522)(lzma_block *block, + const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result + __attribute__((__alias__("lzma_block_uncomp_encode_52"))); + +LZMA_SYMVER_API("lzma_block_uncomp_encode@@XZ_5.2", + lzma_ret, lzma_block_uncomp_encode_52)(lzma_block *block, + const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result; + +#define lzma_block_uncomp_encode lzma_block_uncomp_encode_52 +#endif extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block, const uint8_t *in, size_t in_size, diff -ur xz-5.2.5/src/liblzma/common/block_decoder.c xz-5.4.3/src/liblzma/common/block_decoder.c --- xz-5.2.5/src/liblzma/common/block_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/block_decoder.c 2023-05-04 17:21:05 @@ -40,6 +40,9 @@ /// is unknown. lzma_vli compressed_limit; + /// Maximum allowed Uncompressed Size. + lzma_vli uncompressed_limit; + /// Position when reading the Check field size_t check_pos; @@ -52,21 +55,6 @@ static inline bool -update_size(lzma_vli *size, lzma_vli add, lzma_vli limit) -{ - if (limit > LZMA_VLI_MAX) - limit = LZMA_VLI_MAX; - - if (limit < *size || limit - *size < add) - return true; - - *size += add; - - return false; -} - - -static inline bool is_size_valid(lzma_vli size, lzma_vli reference) { return reference == LZMA_VLI_UNKNOWN || reference == size; @@ -86,23 +74,59 @@ const size_t in_start = *in_pos; const size_t out_start = *out_pos; + // Limit the amount of input and output space that we give + // to the raw decoder based on the information we have + // (or don't have) from Block Header. + const size_t in_stop = *in_pos + (size_t)my_min( + in_size - *in_pos, + coder->compressed_limit - coder->compressed_size); + const size_t out_stop = *out_pos + (size_t)my_min( + out_size - *out_pos, + coder->uncompressed_limit - coder->uncompressed_size); + const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); + allocator, in, in_pos, in_stop, + out, out_pos, out_stop, action); const size_t in_used = *in_pos - in_start; const size_t out_used = *out_pos - out_start; - // NOTE: We compare to compressed_limit here, which prevents - // the total size of the Block growing past LZMA_VLI_MAX. - if (update_size(&coder->compressed_size, in_used, - coder->compressed_limit) - || update_size(&coder->uncompressed_size, - out_used, - coder->block->uncompressed_size)) - return LZMA_DATA_ERROR; + // Because we have limited the input and output sizes, + // we know that these cannot grow too big or overflow. + coder->compressed_size += in_used; + coder->uncompressed_size += out_used; - if (!coder->ignore_check) + if (ret == LZMA_OK) { + const bool comp_done = coder->compressed_size + == coder->block->compressed_size; + const bool uncomp_done = coder->uncompressed_size + == coder->block->uncompressed_size; + + // If both input and output amounts match the sizes + // in Block Header but we still got LZMA_OK instead + // of LZMA_STREAM_END, the file is broken. + if (comp_done && uncomp_done) + return LZMA_DATA_ERROR; + + // If the decoder has consumed all the input that it + // needs but it still couldn't fill the output buffer + // or return LZMA_STREAM_END, the file is broken. + if (comp_done && *out_pos < out_size) + return LZMA_DATA_ERROR; + + // If the decoder has produced all the output but + // it still didn't return LZMA_STREAM_END or consume + // more input (for example, detecting an end of + // payload marker may need more input but produce + // no output) the file is broken. + if (uncomp_done && *in_pos < in_size) + return LZMA_DATA_ERROR; + } + + // Don't waste time updating the integrity check if it will be + // ignored. Also skip it if no new output was produced. This + // avoids null pointer + 0 (undefined behavior) when out == 0. + if (!coder->ignore_check && out_used > 0) lzma_check_update(&coder->check, coder->block->check, out + out_start, out_used); @@ -229,6 +253,14 @@ - block->header_size - lzma_check_size(block->check) : block->compressed_size; + + // With Uncompressed Size this is simpler. If Block Header lacks + // the size info, then LZMA_VLI_MAX is the maximum possible + // Uncompressed Size. + coder->uncompressed_limit + = block->uncompressed_size == LZMA_VLI_UNKNOWN + ? LZMA_VLI_MAX + : block->uncompressed_size; // Initialize the check. It's caller's problem if the Check ID is not // supported, and the Block decoder cannot verify the Check field. diff -ur xz-5.2.5/src/liblzma/common/block_encoder.c xz-5.4.3/src/liblzma/common/block_encoder.c --- xz-5.2.5/src/liblzma/common/block_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/block_encoder.c 2023-05-04 17:21:05 @@ -77,8 +77,11 @@ // checked it at the beginning of this function. coder->uncompressed_size += in_used; - lzma_check_update(&coder->check, coder->block->check, - in + in_start, in_used); + // Call lzma_check_update() only if input was consumed. This + // avoids null pointer + 0 (undefined behavior) when in == 0. + if (in_used > 0) + lzma_check_update(&coder->check, coder->block->check, + in + in_start, in_used); if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) return ret; @@ -217,6 +220,7 @@ lzma_next_strm_init(lzma_block_encoder_init, strm, block); strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; strm->internal->supported_actions[LZMA_FINISH] = true; return LZMA_OK; diff -ur xz-5.2.5/src/liblzma/common/block_header_decoder.c xz-5.4.3/src/liblzma/common/block_header_decoder.c --- xz-5.2.5/src/liblzma/common/block_header_decoder.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/block_header_decoder.c 2023-05-04 17:21:05 @@ -14,22 +14,6 @@ #include "check.h" -static void -free_properties(lzma_block *block, const lzma_allocator *allocator) -{ - // Free allocated filter options. The last array member is not - // touched after the initialization in the beginning of - // lzma_block_header_decode(), so we don't need to touch that here. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) { - lzma_free(block->filters[i].options, allocator); - block->filters[i].id = LZMA_VLI_UNKNOWN; - block->filters[i].options = NULL; - } - - return; -} - - extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block, const lzma_allocator *allocator, const uint8_t *in) @@ -39,6 +23,10 @@ // are invalid or over 63 bits, or if the header is too small // to contain the claimed information. + // Catch unexpected NULL pointers. + if (block == NULL || block->filters == NULL || in == NULL) + return LZMA_PROG_ERROR; + // Initialize the filter options array. This way the caller can // safely free() the options even if an error occurs in this function. for (size_t i = 0; i <= LZMA_FILTERS_MAX; ++i) { @@ -67,8 +55,11 @@ const size_t in_size = block->header_size - 4; // Verify CRC32 - if (lzma_crc32(in, in_size, 0) != read32le(in + in_size)) + if (lzma_crc32(in, in_size, 0) != read32le(in + in_size)) { +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION return LZMA_DATA_ERROR; +#endif + } // Check for unsupported flags. if (in[1] & 0x3C) @@ -104,7 +95,7 @@ &block->filters[i], allocator, in, &in_pos, in_size); if (ret != LZMA_OK) { - free_properties(block, allocator); + lzma_filters_free(block->filters, allocator); return ret; } } @@ -112,7 +103,7 @@ // Padding while (in_pos < in_size) { if (in[in_pos++] != 0x00) { - free_properties(block, allocator); + lzma_filters_free(block->filters, allocator); // Possibly some new field present so use // LZMA_OPTIONS_ERROR instead of LZMA_DATA_ERROR. diff -ur xz-5.2.5/src/liblzma/common/common.c xz-5.4.3/src/liblzma/common/common.c --- xz-5.2.5/src/liblzma/common/common.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/common.c 2023-05-04 17:21:05 @@ -211,7 +211,6 @@ || strm->reserved_ptr2 != NULL || strm->reserved_ptr3 != NULL || strm->reserved_ptr4 != NULL - || strm->reserved_int1 != 0 || strm->reserved_int2 != 0 || strm->reserved_int3 != 0 || strm->reserved_int4 != 0 @@ -289,19 +288,25 @@ strm->next_in, &in_pos, strm->avail_in, strm->next_out, &out_pos, strm->avail_out, action); - strm->next_in += in_pos; - strm->avail_in -= in_pos; - strm->total_in += in_pos; + // Updating next_in and next_out has to be skipped when they are NULL + // to avoid null pointer + 0 (undefined behavior). Do this by checking + // in_pos > 0 and out_pos > 0 because this way NULL + non-zero (a bug) + // will get caught one way or other. + if (in_pos > 0) { + strm->next_in += in_pos; + strm->avail_in -= in_pos; + strm->total_in += in_pos; + } - strm->next_out += out_pos; - strm->avail_out -= out_pos; - strm->total_out += out_pos; + if (out_pos > 0) { + strm->next_out += out_pos; + strm->avail_out -= out_pos; + strm->total_out += out_pos; + } strm->internal->avail_in = strm->avail_in; - // Cast is needed to silence a warning about LZMA_TIMED_OUT, which - // isn't part of lzma_ret enumeration. - switch ((unsigned int)(ret)) { + switch (ret) { case LZMA_OK: // Don't return LZMA_BUF_ERROR when it happens the first time. // This is to avoid returning LZMA_BUF_ERROR when avail_out @@ -322,6 +327,17 @@ ret = LZMA_OK; break; + case LZMA_SEEK_NEEDED: + strm->internal->allow_buf_error = false; + + // If LZMA_FINISH was used, reset it back to the + // LZMA_RUN-based state so that new input can be supplied + // by the application. + if (strm->internal->sequence == ISEQ_FINISH) + strm->internal->sequence = ISEQ_RUN; + + break; + case LZMA_STREAM_END: if (strm->internal->sequence == ISEQ_SYNC_FLUSH || strm->internal->sequence == ISEQ_FULL_FLUSH @@ -366,6 +382,20 @@ } +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +// This is for compatibility with binaries linked against liblzma that +// has been patched with xz-5.2.2-compat-libs.patch from RHEL/CentOS 7. +LZMA_SYMVER_API("lzma_get_progress@XZ_5.2.2", + void, lzma_get_progress_522)(lzma_stream *strm, + uint64_t *progress_in, uint64_t *progress_out) lzma_nothrow + __attribute__((__alias__("lzma_get_progress_52"))); + +LZMA_SYMVER_API("lzma_get_progress@@XZ_5.2", + void, lzma_get_progress_52)(lzma_stream *strm, + uint64_t *progress_in, uint64_t *progress_out) lzma_nothrow; + +#define lzma_get_progress lzma_get_progress_52 +#endif extern LZMA_API(void) lzma_get_progress(lzma_stream *strm, uint64_t *progress_in, uint64_t *progress_out) diff -ur xz-5.2.5/src/liblzma/common/common.h xz-5.4.3/src/liblzma/common/common.h --- xz-5.2.5/src/liblzma/common/common.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/common.h 2023-05-04 17:21:05 @@ -34,6 +34,59 @@ #include "lzma.h" +// This is for detecting modern GCC and Clang attributes +// like __symver__ in GCC >= 10. +#ifdef __has_attribute +# define lzma_has_attribute(attr) __has_attribute(attr) +#else +# define lzma_has_attribute(attr) 0 +#endif + +// The extra symbol versioning in the C files may only be used when +// building a shared library. If HAVE_SYMBOL_VERSIONS_LINUX is defined +// to 2 then symbol versioning is done only if also PIC is defined. +// By default Libtool defines PIC when building a shared library and +// doesn't define it when building a static library but it can be +// overriden with --with-pic and --without-pic. configure let's rely +// on PIC if neither --with-pic or --without-pic was used. +#if defined(HAVE_SYMBOL_VERSIONS_LINUX) \ + && (HAVE_SYMBOL_VERSIONS_LINUX == 2 && !defined(PIC)) +# undef HAVE_SYMBOL_VERSIONS_LINUX +#endif + +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +// To keep link-time optimization (LTO, -flto) working with GCC, +// the __symver__ attribute must be used instead of __asm__(".symver ..."). +// Otherwise the symbol versions may be lost, resulting in broken liblzma +// that has wrong default versions in the exported symbol list! +// The attribute was added in GCC 10; LTO with older GCC is not supported. +// +// To keep -Wmissing-prototypes happy, use LZMA_SYMVER_API only with function +// declarations (including those with __alias__ attribute) and LZMA_API with +// the function definitions. This means a little bit of silly copy-and-paste +// between declarations and definitions though. +// +// As of GCC 12.2, the __symver__ attribute supports only @ and @@ but the +// very convenient @@@ isn't supported (it's supported by GNU assembler +// since 2000). When using @@ instead of @@@, the internal name must not be +// the same as the external name to avoid problems in some situations. This +// is why "#define foo_52 foo" is needed for the default symbol versions. +// +// __has_attribute is supported before GCC 10 and it is supported in Clang 14 +// too (which doesn't support __symver__) so use it to detect if __symver__ +// is available. This should be far more reliable than looking at compiler +// version macros as nowadays especially __GNUC__ is defined by many compilers. +# if lzma_has_attribute(__symver__) +# define LZMA_SYMVER_API(extnamever, type, intname) \ + extern __attribute__((__symver__(extnamever))) \ + LZMA_API(type) intname +# else +# define LZMA_SYMVER_API(extnamever, type, intname) \ + __asm__(".symver " #intname "," extnamever); \ + extern LZMA_API(type) intname +# endif +#endif + // These allow helping the compiler in some often-executed branches, whose // result is almost always the same. #ifdef __GNUC__ @@ -67,14 +120,15 @@ #define LZMA_FILTER_RESERVED_START (LZMA_VLI_C(1) << 62) -/// Supported flags that can be passed to lzma_stream_decoder() -/// or lzma_auto_decoder(). +/// Supported flags that can be passed to lzma_stream_decoder(), +/// lzma_auto_decoder(), or lzma_stream_decoder_mt(). #define LZMA_SUPPORTED_FLAGS \ ( LZMA_TELL_NO_CHECK \ | LZMA_TELL_UNSUPPORTED_CHECK \ | LZMA_TELL_ANY_CHECK \ | LZMA_IGNORE_CHECK \ - | LZMA_CONCATENATED ) + | LZMA_CONCATENATED \ + | LZMA_FAIL_FAST ) /// Largest valid lzma_action value as unsigned integer. @@ -83,11 +137,14 @@ /// Special return value (lzma_ret) to indicate that a timeout was reached /// and lzma_code() must not return LZMA_BUF_ERROR. This is converted to -/// LZMA_OK in lzma_code(). This is not in the lzma_ret enumeration because -/// there's no need to have it in the public API. -#define LZMA_TIMED_OUT 32 +/// LZMA_OK in lzma_code(). +#define LZMA_TIMED_OUT LZMA_RET_INTERNAL1 +/// Special return value (lzma_ret) for use in stream_decoder_mt.c to +/// indicate Index was detected instead of a Block Header. +#define LZMA_INDEX_DETECTED LZMA_RET_INTERNAL2 + typedef struct lzma_next_coder_s lzma_next_coder; typedef struct lzma_filter_info_s lzma_filter_info; @@ -118,8 +175,11 @@ /// an array of lzma_filter_info structures. This array is used with /// lzma_next_filter_init to initialize the filter chain. struct lzma_filter_info_s { - /// Filter ID. This is used only by the encoder - /// with lzma_filters_update(). + /// Filter ID. This can be used to share the same initiazation + /// function *and* data structures with different Filter IDs + /// (LZMA_FILTER_LZMA1EXT does it), and also by the encoder + /// with lzma_filters_update() if filter chain is updated + /// in the middle of a raw stream or Block (LZMA_SYNC_FLUSH). lzma_vli id; /// Pointer to function used to initialize the filter. @@ -173,6 +233,16 @@ lzma_ret (*update)(void *coder, const lzma_allocator *allocator, const lzma_filter *filters, const lzma_filter *reversed_filters); + + /// Set how many bytes of output this coder may produce at maximum. + /// On success LZMA_OK must be returned. + /// If the filter chain as a whole cannot support this feature, + /// this must return LZMA_OPTIONS_ERROR. + /// If no input has been given to the coder and the requested limit + /// is too small, this must return LZMA_BUF_ERROR. If input has been + /// seen, LZMA_OK is allowed too. + lzma_ret (*set_out_limit)(void *coder, uint64_t *uncomp_size, + uint64_t out_limit); }; @@ -188,6 +258,7 @@ .get_check = NULL, \ .memconfig = NULL, \ .update = NULL, \ + .set_out_limit = NULL, \ } Only in xz-5.4.3/src/liblzma/common: file_info.c diff -ur xz-5.2.5/src/liblzma/common/filter_common.c xz-5.4.3/src/liblzma/common/filter_common.c --- xz-5.2.5/src/liblzma/common/filter_common.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/filter_common.c 2023-05-04 17:21:05 @@ -42,6 +42,13 @@ .last_ok = true, .changes_size = true, }, + { + .id = LZMA_FILTER_LZMA1EXT, + .options_size = sizeof(lzma_options_lzma), + .non_last_ok = false, + .last_ok = true, + .changes_size = true, + }, #endif #if defined(HAVE_ENCODER_LZMA2) || defined(HAVE_DECODER_LZMA2) { @@ -97,6 +104,15 @@ .changes_size = false, }, #endif +#if defined(HAVE_ENCODER_ARM64) || defined(HAVE_DECODER_ARM64) + { + .id = LZMA_FILTER_ARM64, + .options_size = sizeof(lzma_options_bcj), + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif #if defined(HAVE_ENCODER_SPARC) || defined(HAVE_DECODER_SPARC) { .id = LZMA_FILTER_SPARC, @@ -122,12 +138,16 @@ extern LZMA_API(lzma_ret) -lzma_filters_copy(const lzma_filter *src, lzma_filter *dest, +lzma_filters_copy(const lzma_filter *src, lzma_filter *real_dest, const lzma_allocator *allocator) { - if (src == NULL || dest == NULL) + if (src == NULL || real_dest == NULL) return LZMA_PROG_ERROR; + // Use a temporary destination so that the real destination + // will never be modied if an error occurs. + lzma_filter dest[LZMA_FILTERS_MAX + 1]; + lzma_ret ret; size_t i; for (i = 0; src[i].id != LZMA_VLI_UNKNOWN; ++i) { @@ -173,26 +193,54 @@ } // Terminate the filter array. - assert(i <= LZMA_FILTERS_MAX + 1); + assert(i < LZMA_FILTERS_MAX + 1); dest[i].id = LZMA_VLI_UNKNOWN; dest[i].options = NULL; + // Copy it to the caller-supplied array now that we know that + // no errors occurred. + memcpy(real_dest, dest, (i + 1) * sizeof(lzma_filter)); + return LZMA_OK; error: // Free the options which we have already allocated. - while (i-- > 0) { + while (i-- > 0) lzma_free(dest[i].options, allocator); - dest[i].options = NULL; - } return ret; } -static lzma_ret -validate_chain(const lzma_filter *filters, size_t *count) +extern LZMA_API(void) +lzma_filters_free(lzma_filter *filters, const lzma_allocator *allocator) { + if (filters == NULL) + return; + + for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { + if (i == LZMA_FILTERS_MAX) { + // The API says that LZMA_FILTERS_MAX + 1 is the + // maximum allowed size including the terminating + // element. Thus, we should never get here but in + // case there is a bug and we do anyway, don't go + // past the (probable) end of the array. + assert(0); + break; + } + + lzma_free(filters[i].options, allocator); + filters[i].options = NULL; + filters[i].id = LZMA_VLI_UNKNOWN; + } + + return; +} + + +extern lzma_ret +lzma_validate_chain(const lzma_filter *filters, size_t *count) +{ // There must be at least one filter. if (filters == NULL || filters[0].id == LZMA_VLI_UNKNOWN) return LZMA_PROG_ERROR; @@ -245,7 +293,7 @@ { // Do some basic validation and get the number of filters. size_t count; - return_if_error(validate_chain(options, &count)); + return_if_error(lzma_validate_chain(options, &count)); // Set the filter functions and copy the options pointer. lzma_filter_info filters[LZMA_FILTERS_MAX + 1]; @@ -298,7 +346,7 @@ // The chain has to have at least one filter. { size_t tmp; - if (validate_chain(filters, &tmp) != LZMA_OK) + if (lzma_validate_chain(filters, &tmp) != LZMA_OK) return UINT64_MAX; } diff -ur xz-5.2.5/src/liblzma/common/filter_common.h xz-5.4.3/src/liblzma/common/filter_common.h --- xz-5.2.5/src/liblzma/common/filter_common.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/filter_common.h 2023-05-04 17:21:05 @@ -35,6 +35,9 @@ typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id); +extern lzma_ret lzma_validate_chain(const lzma_filter *filters, size_t *count); + + extern lzma_ret lzma_raw_coder_init( lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter *filters, diff -ur xz-5.2.5/src/liblzma/common/filter_decoder.c xz-5.4.3/src/liblzma/common/filter_decoder.c --- xz-5.2.5/src/liblzma/common/filter_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/filter_decoder.c 2023-05-04 17:21:05 @@ -50,6 +50,12 @@ .memusage = &lzma_lzma_decoder_memusage, .props_decode = &lzma_lzma_props_decode, }, + { + .id = LZMA_FILTER_LZMA1EXT, + .init = &lzma_lzma_decoder_init, + .memusage = &lzma_lzma_decoder_memusage, + .props_decode = &lzma_lzma_props_decode, + }, #endif #ifdef HAVE_DECODER_LZMA2 { @@ -95,6 +101,14 @@ { .id = LZMA_FILTER_ARMTHUMB, .init = &lzma_simple_armthumb_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_ARM64 + { + .id = LZMA_FILTER_ARM64, + .init = &lzma_simple_arm64_decoder_init, .memusage = NULL, .props_decode = &lzma_simple_props_decode, }, diff -ur xz-5.2.5/src/liblzma/common/filter_encoder.c xz-5.4.3/src/liblzma/common/filter_encoder.c --- xz-5.2.5/src/liblzma/common/filter_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/filter_encoder.c 2023-05-04 17:21:05 @@ -37,9 +37,12 @@ uint64_t (*block_size)(const void *options); /// Tells the size of the Filter Properties field. If options are - /// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed - /// is used. + /// invalid, LZMA_OPTIONS_ERROR is returned and size is set to + /// UINT32_MAX. lzma_ret (*props_size_get)(uint32_t *size, const void *options); + + /// Some filters will always have the same size Filter Properties + /// field. If props_size_get is NULL, this value is used. uint32_t props_size_fixed; /// Encodes Filter Properties. @@ -59,18 +62,27 @@ .id = LZMA_FILTER_LZMA1, .init = &lzma_lzma_encoder_init, .memusage = &lzma_lzma_encoder_memusage, - .block_size = NULL, // FIXME + .block_size = NULL, // Not needed for LZMA1 .props_size_get = NULL, .props_size_fixed = 5, .props_encode = &lzma_lzma_props_encode, }, + { + .id = LZMA_FILTER_LZMA1EXT, + .init = &lzma_lzma_encoder_init, + .memusage = &lzma_lzma_encoder_memusage, + .block_size = NULL, // Not needed for LZMA1 + .props_size_get = NULL, + .props_size_fixed = 5, + .props_encode = &lzma_lzma_props_encode, + }, #endif #ifdef HAVE_ENCODER_LZMA2 { .id = LZMA_FILTER_LZMA2, .init = &lzma_lzma2_encoder_init, .memusage = &lzma_lzma2_encoder_memusage, - .block_size = &lzma_lzma2_block_size, // FIXME + .block_size = &lzma_lzma2_block_size, .props_size_get = NULL, .props_size_fixed = 1, .props_encode = &lzma_lzma2_props_encode, @@ -120,6 +132,16 @@ { .id = LZMA_FILTER_ARMTHUMB, .init = &lzma_simple_armthumb_encoder_init, + .memusage = NULL, + .block_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_ARM64 + { + .id = LZMA_FILTER_ARM64, + .init = &lzma_simple_arm64_encoder_init, .memusage = NULL, .block_size = NULL, .props_size_get = &lzma_simple_props_size, diff -ur xz-5.2.5/src/liblzma/common/hardware_cputhreads.c xz-5.4.3/src/liblzma/common/hardware_cputhreads.c --- xz-5.2.5/src/liblzma/common/hardware_cputhreads.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/hardware_cputhreads.c 2023-05-04 17:21:05 @@ -15,6 +15,18 @@ #include "tuklib_cpucores.h" +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +// This is for compatibility with binaries linked against liblzma that +// has been patched with xz-5.2.2-compat-libs.patch from RHEL/CentOS 7. +LZMA_SYMVER_API("lzma_cputhreads@XZ_5.2.2", + uint32_t, lzma_cputhreads_522)(void) lzma_nothrow + __attribute__((__alias__("lzma_cputhreads_52"))); + +LZMA_SYMVER_API("lzma_cputhreads@@XZ_5.2", + uint32_t, lzma_cputhreads_52)(void) lzma_nothrow; + +#define lzma_cputhreads lzma_cputhreads_52 +#endif extern LZMA_API(uint32_t) lzma_cputhreads(void) { diff -ur xz-5.2.5/src/liblzma/common/index.c xz-5.4.3/src/liblzma/common/index.c --- xz-5.2.5/src/liblzma/common/index.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/index.c 2023-05-04 17:21:05 @@ -10,6 +10,7 @@ // /////////////////////////////////////////////////////////////////////////////// +#include "common.h" #include "index.h" #include "stream_flags_common.h" @@ -656,6 +657,10 @@ const uint32_t index_list_size_add = lzma_vli_size(unpadded_size) + lzma_vli_size(uncompressed_size); + // Check that uncompressed size will not overflow. + if (uncompressed_base + uncompressed_size > LZMA_VLI_MAX) + return LZMA_DATA_ERROR; + // Check that the file size will stay within limits. if (index_file_size(s->node.compressed_base, compressed_base + unpadded_size, s->record_count + 1, @@ -767,6 +772,9 @@ lzma_index_cat(lzma_index *restrict dest, lzma_index *restrict src, const lzma_allocator *allocator) { + if (dest == NULL || src == NULL) + return LZMA_PROG_ERROR; + const lzma_vli dest_file_size = lzma_index_file_size(dest); // Check that we don't exceed the file size limits. @@ -835,6 +843,11 @@ } } + // dest->checks includes the check types of all except the last Stream + // in dest. Set the bit for the check type of the last Stream now so + // that it won't get lost when Stream(s) from src are appended to dest. + dest->checks = lzma_index_checks(dest); + // Add all the Streams from src to dest. Update the base offsets // of each Stream from src. const index_cat_info info = { @@ -851,7 +864,7 @@ dest->total_size += src->total_size; dest->record_count += src->record_count; dest->index_list_size += src->index_list_size; - dest->checks = lzma_index_checks(dest) | src->checks; + dest->checks |= src->checks; // There's nothing else left in src than the base structure. lzma_free(src, allocator); @@ -1226,7 +1239,7 @@ // Use binary search to locate the exact Record. It is the first // Record whose uncompressed_sum is greater than target. - // This is because we want the rightmost Record that fullfills the + // This is because we want the rightmost Record that fulfills the // search criterion. It is possible that there are empty Blocks; // we don't want to return them. size_t left = 0; diff -ur xz-5.2.5/src/liblzma/common/index.h xz-5.4.3/src/liblzma/common/index.h --- xz-5.2.5/src/liblzma/common/index.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/index.h 2023-05-04 17:21:05 @@ -2,6 +2,13 @@ // /// \file index.h /// \brief Handling of Index +/// \note This header file does not include common.h or lzma.h because +/// this file is needed by both liblzma internally and by the +/// tests. Including common.h will include and define many things +/// the tests do not need and prevents issues with header file +/// include order. This way, if lzma.h or common.h are not +/// included before this file it will break on every OS instead +/// of causing more subtle errors. // // Author: Lasse Collin // @@ -13,14 +20,15 @@ #ifndef LZMA_INDEX_H #define LZMA_INDEX_H -#include "common.h" - /// Minimum Unpadded Size #define UNPADDED_SIZE_MIN LZMA_VLI_C(5) /// Maximum Unpadded Size #define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) + +/// Index Indicator based on xz specification +#define INDEX_INDICATOR 0 /// Get the size of the Index Padding field. This is needed by Index encoder diff -ur xz-5.2.5/src/liblzma/common/index_decoder.c xz-5.4.3/src/liblzma/common/index_decoder.c --- xz-5.2.5/src/liblzma/common/index_decoder.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/index_decoder.c 2023-05-04 17:21:05 @@ -10,7 +10,7 @@ // /////////////////////////////////////////////////////////////////////////////// -#include "index.h" +#include "index_decoder.h" #include "check.h" @@ -80,7 +80,7 @@ // format". One could argue that the application should // verify the Index Indicator before trying to decode the // Index, but well, I suppose it is simpler this way. - if (in[(*in_pos)++] != 0x00) + if (in[(*in_pos)++] != INDEX_INDICATOR) return LZMA_DATA_ERROR; coder->sequence = SEQ_COUNT; @@ -180,8 +180,11 @@ return LZMA_OK; if (((coder->crc32 >> (coder->pos * 8)) & 0xFF) - != in[(*in_pos)++]) + != in[(*in_pos)++]) { +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION return LZMA_DATA_ERROR; +#endif + } } while (++coder->pos < 4); @@ -200,9 +203,16 @@ } out: - // Update the CRC32, - coder->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, coder->crc32); + // Update the CRC32. + // + // Avoid null pointer + 0 (undefined behavior) in "in + in_start". + // In such a case we had no input and thus in_used == 0. + { + const size_t in_used = *in_pos - in_start; + if (in_used > 0) + coder->crc32 = lzma_crc32(in + in_start, + in_used, coder->crc32); + } return ret; } @@ -265,11 +275,11 @@ } -static lzma_ret -index_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, +extern lzma_ret +lzma_index_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, lzma_index **i, uint64_t memlimit) { - lzma_next_coder_init(&index_decoder_init, next, allocator); + lzma_next_coder_init(&lzma_index_decoder_init, next, allocator); if (i == NULL) return LZMA_PROG_ERROR; @@ -296,7 +306,7 @@ extern LZMA_API(lzma_ret) lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) { - lzma_next_strm_init(index_decoder_init, strm, i, memlimit); + lzma_next_strm_init(lzma_index_decoder_init, strm, i, memlimit); strm->internal->supported_actions[LZMA_RUN] = true; strm->internal->supported_actions[LZMA_FINISH] = true; Only in xz-5.4.3/src/liblzma/common: index_decoder.h diff -ur xz-5.2.5/src/liblzma/common/index_encoder.c xz-5.4.3/src/liblzma/common/index_encoder.c --- xz-5.2.5/src/liblzma/common/index_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/index_encoder.c 2023-05-04 17:21:05 @@ -65,7 +65,7 @@ while (*out_pos < out_size) switch (coder->sequence) { case SEQ_INDICATOR: - out[*out_pos] = 0x00; + out[*out_pos] = INDEX_INDICATOR; ++*out_pos; coder->sequence = SEQ_COUNT; break; @@ -153,8 +153,15 @@ out: // Update the CRC32. - coder->crc32 = lzma_crc32(out + out_start, - *out_pos - out_start, coder->crc32); + // + // Avoid null pointer + 0 (undefined behavior) in "out + out_start". + // In such a case we had no input and thus out_used == 0. + { + const size_t out_used = *out_pos - out_start; + if (out_used > 0) + coder->crc32 = lzma_crc32(out + out_start, + out_used, coder->crc32); + } return ret; } diff -ur xz-5.2.5/src/liblzma/common/index_hash.c xz-5.4.3/src/liblzma/common/index_hash.c --- xz-5.2.5/src/liblzma/common/index_hash.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/index_hash.c 2023-05-04 17:21:05 @@ -122,7 +122,7 @@ /// Updates the sizes and the hash without any validation. -static lzma_ret +static void hash_append(lzma_index_hash_info *info, lzma_vli unpadded_size, lzma_vli uncompressed_size) { @@ -136,7 +136,7 @@ lzma_check_update(&info->check, LZMA_CHECK_BEST, (const uint8_t *)(sizes), sizeof(sizes)); - return LZMA_OK; + return; } @@ -145,15 +145,14 @@ lzma_vli uncompressed_size) { // Validate the arguments. - if (index_hash->sequence != SEQ_BLOCK + if (index_hash == NULL || index_hash->sequence != SEQ_BLOCK || unpadded_size < UNPADDED_SIZE_MIN || unpadded_size > UNPADDED_SIZE_MAX || uncompressed_size > LZMA_VLI_MAX) return LZMA_PROG_ERROR; // Update the hash. - return_if_error(hash_append(&index_hash->blocks, - unpadded_size, uncompressed_size)); + hash_append(&index_hash->blocks, unpadded_size, uncompressed_size); // Validate the properties of *info are still in allowed limits. if (index_hash->blocks.blocks_size > LZMA_VLI_MAX @@ -191,7 +190,7 @@ switch (index_hash->sequence) { case SEQ_BLOCK: // Check the Index Indicator is present. - if (in[(*in_pos)++] != 0x00) + if (in[(*in_pos)++] != INDEX_INDICATOR) return LZMA_DATA_ERROR; index_hash->sequence = SEQ_COUNT; @@ -239,9 +238,9 @@ index_hash->sequence = SEQ_UNCOMPRESSED; } else { // Update the hash. - return_if_error(hash_append(&index_hash->records, + hash_append(&index_hash->records, index_hash->unpadded_size, - index_hash->uncompressed_size)); + index_hash->uncompressed_size); // Verify that we don't go over the known sizes. Note // that this validation is simpler than the one used @@ -313,8 +312,11 @@ return LZMA_OK; if (((index_hash->crc32 >> (index_hash->pos * 8)) - & 0xFF) != in[(*in_pos)++]) + & 0xFF) != in[(*in_pos)++]) { +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION return LZMA_DATA_ERROR; +#endif + } } while (++index_hash->pos < 4); @@ -326,9 +328,16 @@ } out: - // Update the CRC32, - index_hash->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, index_hash->crc32); + // Update the CRC32. + // + // Avoid null pointer + 0 (undefined behavior) in "in + in_start". + // In such a case we had no input and thus in_used == 0. + { + const size_t in_used = *in_pos - in_start; + if (in_used > 0) + index_hash->crc32 = lzma_crc32(in + in_start, + in_used, index_hash->crc32); + } return ret; } Only in xz-5.4.3/src/liblzma/common: lzip_decoder.c Only in xz-5.4.3/src/liblzma/common: lzip_decoder.h diff -ur xz-5.2.5/src/liblzma/common/memcmplen.h xz-5.4.3/src/liblzma/common/memcmplen.h --- xz-5.2.5/src/liblzma/common/memcmplen.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/memcmplen.h 2023-05-04 17:21:05 @@ -19,7 +19,17 @@ # include #endif +// Only include if it is needed. The header is only needed +// on Windows when using an MSVC compatible compiler. The Intel compiler +// can use the intrinsics without the header file. +#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ + && (defined(_MSC_VER) \ + && defined(_M_X64) \ + && !defined(__INTEL_COMPILER)) +# include +#endif + /// Find out how many equal bytes the two buffers have. /// /// \param buf1 First buffer @@ -51,10 +61,6 @@ || (defined(__INTEL_COMPILER) && defined(__x86_64__)) \ || (defined(__INTEL_COMPILER) && defined(_M_X64)) \ || (defined(_MSC_VER) && defined(_M_X64))) - // NOTE: This will use 64-bit unaligned access which - // TUKLIB_FAST_UNALIGNED_ACCESS wasn't meant to permit, but - // it's convenient here at least as long as it's x86-64 only. - // // I keep this x86-64 only for now since that's where I know this // to be a good method. This may be fine on other 64-bit CPUs too. // On big endian one should use xor instead of subtraction and switch @@ -80,12 +86,12 @@ #elif defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ && defined(HAVE__MM_MOVEMASK_EPI8) \ - && ((defined(__GNUC__) && defined(__SSE2_MATH__)) \ - || (defined(__INTEL_COMPILER) && defined(__SSE2__)) \ + && (defined(__SSE2__) \ || (defined(_MSC_VER) && defined(_M_IX86_FP) \ && _M_IX86_FP >= 2)) - // NOTE: Like above, this will use 128-bit unaligned access which - // TUKLIB_FAST_UNALIGNED_ACCESS wasn't meant to permit. + // NOTE: This will use 128-bit unaligned access which + // TUKLIB_FAST_UNALIGNED_ACCESS wasn't meant to permit, + // but it's convenient here since this is x86-only. // // SSE2 version for 32-bit and 64-bit x86. On x86-64 the above // version is sometimes significantly faster and sometimes @@ -93,7 +99,8 @@ // version isn't used on x86-64. # define LZMA_MEMCMPLEN_EXTRA 16 while (len < limit) { - const uint32_t x = 0xFFFF ^ _mm_movemask_epi8(_mm_cmpeq_epi8( + const uint32_t x = 0xFFFF ^ (uint32_t)_mm_movemask_epi8( + _mm_cmpeq_epi8( _mm_loadu_si128((const __m128i *)(buf1 + len)), _mm_loadu_si128((const __m128i *)(buf2 + len)))); Only in xz-5.4.3/src/liblzma/common: microlzma_decoder.c Only in xz-5.4.3/src/liblzma/common: microlzma_encoder.c diff -ur xz-5.2.5/src/liblzma/common/outqueue.c xz-5.4.3/src/liblzma/common/outqueue.c --- xz-5.2.5/src/liblzma/common/outqueue.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/outqueue.c 2023-05-04 17:21:05 @@ -13,84 +13,121 @@ #include "outqueue.h" -/// This is to ease integer overflow checking: We may allocate up to -/// 2 * LZMA_THREADS_MAX buffers and we need some extra memory for other -/// data structures (that's the second /2). -#define BUF_SIZE_MAX (UINT64_MAX / LZMA_THREADS_MAX / 2 / 2) +/// Get the maximum number of buffers that may be allocated based +/// on the number of threads. For now this is twice the number of threads. +/// It's a compromise between RAM usage and keeping the worker threads busy +/// when buffers finish out of order. +#define GET_BUFS_LIMIT(threads) (2 * (threads)) -static lzma_ret -get_options(uint64_t *bufs_alloc_size, uint32_t *bufs_count, - uint64_t buf_size_max, uint32_t threads) +extern uint64_t +lzma_outq_memusage(uint64_t buf_size_max, uint32_t threads) { - if (threads > LZMA_THREADS_MAX || buf_size_max > BUF_SIZE_MAX) - return LZMA_OPTIONS_ERROR; - - // The number of buffers is twice the number of threads. - // This wastes RAM but keeps the threads busy when buffers - // finish out of order. + // This is to ease integer overflow checking: We may allocate up to + // GET_BUFS_LIMIT(LZMA_THREADS_MAX) buffers and we need some extra + // memory for other data structures too (that's the /2). // - // NOTE: If this is changed, update BUF_SIZE_MAX too. - *bufs_count = threads * 2; - *bufs_alloc_size = *bufs_count * buf_size_max; + // lzma_outq_prealloc_buf() will still accept bigger buffers than this. + const uint64_t limit + = UINT64_MAX / GET_BUFS_LIMIT(LZMA_THREADS_MAX) / 2; - return LZMA_OK; + if (threads > LZMA_THREADS_MAX || buf_size_max > limit) + return UINT64_MAX; + + return GET_BUFS_LIMIT(threads) + * lzma_outq_outbuf_memusage(buf_size_max); } -extern uint64_t -lzma_outq_memusage(uint64_t buf_size_max, uint32_t threads) +static void +move_head_to_cache(lzma_outq *outq, const lzma_allocator *allocator) { - uint64_t bufs_alloc_size; - uint32_t bufs_count; + assert(outq->head != NULL); + assert(outq->tail != NULL); + assert(outq->bufs_in_use > 0); - if (get_options(&bufs_alloc_size, &bufs_count, buf_size_max, threads) - != LZMA_OK) - return UINT64_MAX; + lzma_outbuf *buf = outq->head; + outq->head = buf->next; + if (outq->head == NULL) + outq->tail = NULL; - return sizeof(lzma_outq) + bufs_count * sizeof(lzma_outbuf) - + bufs_alloc_size; + if (outq->cache != NULL && outq->cache->allocated != buf->allocated) + lzma_outq_clear_cache(outq, allocator); + + buf->next = outq->cache; + outq->cache = buf; + + --outq->bufs_in_use; + outq->mem_in_use -= lzma_outq_outbuf_memusage(buf->allocated); + + return; } -extern lzma_ret -lzma_outq_init(lzma_outq *outq, const lzma_allocator *allocator, - uint64_t buf_size_max, uint32_t threads) +static void +free_one_cached_buffer(lzma_outq *outq, const lzma_allocator *allocator) { - uint64_t bufs_alloc_size; - uint32_t bufs_count; + assert(outq->cache != NULL); - // Set bufs_count and bufs_alloc_size. - return_if_error(get_options(&bufs_alloc_size, &bufs_count, - buf_size_max, threads)); + lzma_outbuf *buf = outq->cache; + outq->cache = buf->next; - // Allocate memory if needed. - if (outq->buf_size_max != buf_size_max - || outq->bufs_allocated != bufs_count) { - lzma_outq_end(outq, allocator); + --outq->bufs_allocated; + outq->mem_allocated -= lzma_outq_outbuf_memusage(buf->allocated); -#if SIZE_MAX < UINT64_MAX - if (bufs_alloc_size > SIZE_MAX) - return LZMA_MEM_ERROR; -#endif + lzma_free(buf, allocator); + return; +} - outq->bufs = lzma_alloc(bufs_count * sizeof(lzma_outbuf), - allocator); - outq->bufs_mem = lzma_alloc((size_t)(bufs_alloc_size), - allocator); - if (outq->bufs == NULL || outq->bufs_mem == NULL) { - lzma_outq_end(outq, allocator); - return LZMA_MEM_ERROR; - } - } +extern void +lzma_outq_clear_cache(lzma_outq *outq, const lzma_allocator *allocator) +{ + while (outq->cache != NULL) + free_one_cached_buffer(outq, allocator); - // Initialize the rest of the main structure. Initialization of - // outq->bufs[] is done when they are actually needed. - outq->buf_size_max = (size_t)(buf_size_max); - outq->bufs_allocated = bufs_count; - outq->bufs_pos = 0; - outq->bufs_used = 0; + return; +} + + +extern void +lzma_outq_clear_cache2(lzma_outq *outq, const lzma_allocator *allocator, + size_t keep_size) +{ + if (outq->cache == NULL) + return; + + // Free all but one. + while (outq->cache->next != NULL) + free_one_cached_buffer(outq, allocator); + + // Free the last one only if its size doesn't equal to keep_size. + if (outq->cache->allocated != keep_size) + free_one_cached_buffer(outq, allocator); + + return; +} + + +extern lzma_ret +lzma_outq_init(lzma_outq *outq, const lzma_allocator *allocator, + uint32_t threads) +{ + if (threads > LZMA_THREADS_MAX) + return LZMA_OPTIONS_ERROR; + + const uint32_t bufs_limit = GET_BUFS_LIMIT(threads); + + // Clear head/tail. + while (outq->head != NULL) + move_head_to_cache(outq, allocator); + + // If new buf_limit is lower than the old one, we may need to free + // a few cached buffers. + while (bufs_limit < outq->bufs_allocated) + free_one_cached_buffer(outq, allocator); + + outq->bufs_limit = bufs_limit; outq->read_pos = 0; return LZMA_OK; @@ -100,33 +137,81 @@ extern void lzma_outq_end(lzma_outq *outq, const lzma_allocator *allocator) { - lzma_free(outq->bufs, allocator); - outq->bufs = NULL; + while (outq->head != NULL) + move_head_to_cache(outq, allocator); - lzma_free(outq->bufs_mem, allocator); - outq->bufs_mem = NULL; - + lzma_outq_clear_cache(outq, allocator); return; } -extern lzma_outbuf * -lzma_outq_get_buf(lzma_outq *outq) +extern lzma_ret +lzma_outq_prealloc_buf(lzma_outq *outq, const lzma_allocator *allocator, + size_t size) { // Caller must have checked it with lzma_outq_has_buf(). - assert(outq->bufs_used < outq->bufs_allocated); + assert(outq->bufs_in_use < outq->bufs_limit); - // Initialize the new buffer. - lzma_outbuf *buf = &outq->bufs[outq->bufs_pos]; - buf->buf = outq->bufs_mem + outq->bufs_pos * outq->buf_size_max; - buf->size = 0; + // If there already is appropriately-sized buffer in the cache, + // we need to do nothing. + if (outq->cache != NULL && outq->cache->allocated == size) + return LZMA_OK; + + if (size > SIZE_MAX - sizeof(lzma_outbuf)) + return LZMA_MEM_ERROR; + + const size_t alloc_size = lzma_outq_outbuf_memusage(size); + + // The cache may have buffers but their size is wrong. + lzma_outq_clear_cache(outq, allocator); + + outq->cache = lzma_alloc(alloc_size, allocator); + if (outq->cache == NULL) + return LZMA_MEM_ERROR; + + outq->cache->next = NULL; + outq->cache->allocated = size; + + ++outq->bufs_allocated; + outq->mem_allocated += alloc_size; + + return LZMA_OK; +} + + +extern lzma_outbuf * +lzma_outq_get_buf(lzma_outq *outq, void *worker) +{ + // Caller must have used lzma_outq_prealloc_buf() to ensure these. + assert(outq->bufs_in_use < outq->bufs_limit); + assert(outq->bufs_in_use < outq->bufs_allocated); + assert(outq->cache != NULL); + + lzma_outbuf *buf = outq->cache; + outq->cache = buf->next; + buf->next = NULL; + + if (outq->tail != NULL) { + assert(outq->head != NULL); + outq->tail->next = buf; + } else { + assert(outq->head == NULL); + outq->head = buf; + } + + outq->tail = buf; + + buf->worker = worker; buf->finished = false; + buf->finish_ret = LZMA_STREAM_END; + buf->pos = 0; + buf->decoder_in_pos = 0; - // Update the queue state. - if (++outq->bufs_pos == outq->bufs_allocated) - outq->bufs_pos = 0; + buf->unpadded_size = 0; + buf->uncompressed_size = 0; - ++outq->bufs_used; + ++outq->bufs_in_use; + outq->mem_in_use += lzma_outq_outbuf_memusage(buf->allocated); return buf; } @@ -135,50 +220,68 @@ extern bool lzma_outq_is_readable(const lzma_outq *outq) { - uint32_t i = outq->bufs_pos - outq->bufs_used; - if (outq->bufs_pos < outq->bufs_used) - i += outq->bufs_allocated; + if (outq->head == NULL) + return false; - return outq->bufs[i].finished; + return outq->read_pos < outq->head->pos || outq->head->finished; } extern lzma_ret -lzma_outq_read(lzma_outq *restrict outq, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, +lzma_outq_read(lzma_outq *restrict outq, + const lzma_allocator *restrict allocator, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size, lzma_vli *restrict unpadded_size, lzma_vli *restrict uncompressed_size) { // There must be at least one buffer from which to read. - if (outq->bufs_used == 0) + if (outq->bufs_in_use == 0) return LZMA_OK; // Get the buffer. - uint32_t i = outq->bufs_pos - outq->bufs_used; - if (outq->bufs_pos < outq->bufs_used) - i += outq->bufs_allocated; + lzma_outbuf *buf = outq->head; - lzma_outbuf *buf = &outq->bufs[i]; - - // If it isn't finished yet, we cannot read from it. - if (!buf->finished) - return LZMA_OK; - // Copy from the buffer to output. - lzma_bufcpy(buf->buf, &outq->read_pos, buf->size, + // + // FIXME? In threaded decoder it may be bad to do this copy while + // the mutex is being held. + lzma_bufcpy(buf->buf, &outq->read_pos, buf->pos, out, out_pos, out_size); // Return if we didn't get all the data from the buffer. - if (outq->read_pos < buf->size) + if (!buf->finished || outq->read_pos < buf->pos) return LZMA_OK; // The buffer was finished. Tell the caller its size information. - *unpadded_size = buf->unpadded_size; - *uncompressed_size = buf->uncompressed_size; + if (unpadded_size != NULL) + *unpadded_size = buf->unpadded_size; + if (uncompressed_size != NULL) + *uncompressed_size = buf->uncompressed_size; + + // Remember the return value. + const lzma_ret finish_ret = buf->finish_ret; + // Free this buffer for further use. - --outq->bufs_used; + move_head_to_cache(outq, allocator); outq->read_pos = 0; - return LZMA_STREAM_END; + return finish_ret; +} + + +extern void +lzma_outq_enable_partial_output(lzma_outq *outq, + void (*enable_partial_output)(void *worker)) +{ + if (outq->head != NULL && !outq->head->finished + && outq->head->worker != NULL) { + enable_partial_output(outq->head->worker); + + // Set it to NULL since calling it twice is pointless. + outq->head->worker = NULL; + } + + return; } diff -ur xz-5.2.5/src/liblzma/common/outqueue.h xz-5.4.3/src/liblzma/common/outqueue.h --- xz-5.2.5/src/liblzma/common/outqueue.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/outqueue.h 2023-05-04 17:21:05 @@ -14,49 +14,92 @@ /// Output buffer for a single thread -typedef struct { - /// Pointer to the output buffer of lzma_outq.buf_size_max bytes - uint8_t *buf; +typedef struct lzma_outbuf_s lzma_outbuf; +struct lzma_outbuf_s { + /// Pointer to the next buffer. This is used for the cached buffers. + /// The worker thread must not modify this. + lzma_outbuf *next; - /// Amount of data written to buf - size_t size; + /// This initialized by lzma_outq_get_buf() and + /// is used by lzma_outq_enable_partial_output(). + /// The worker thread must not modify this. + void *worker; - /// Additional size information - lzma_vli unpadded_size; - lzma_vli uncompressed_size; + /// Amount of memory allocated for buf[]. + /// The worker thread must not modify this. + size_t allocated; + /// Writing position in the worker thread or, in other words, the + /// amount of finished data written to buf[] which can be copied out + /// + /// \note This is read by another thread and thus access + /// to this variable needs a mutex. + size_t pos; + + /// Decompression: Position in the input buffer in the worker thread + /// that matches the output "pos" above. This is used to detect if + /// more output might be possible from the worker thread: if it has + /// consumed all its input, then more output isn't possible. + /// + /// \note This is read by another thread and thus access + /// to this variable needs a mutex. + size_t decoder_in_pos; + /// True when no more data will be written into this buffer. /// /// \note This is read by another thread and thus access /// to this variable needs a mutex. bool finished; -} lzma_outbuf; + /// Return value for lzma_outq_read() when the last byte from + /// a finished buffer has been read. Defaults to LZMA_STREAM_END. + /// This must *not* be LZMA_OK. The idea is to allow a decoder to + /// pass an error code to the main thread, setting the code here + /// together with finished = true. + lzma_ret finish_ret; + /// Additional size information. lzma_outq_read() may read these + /// when "finished" is true. + lzma_vli unpadded_size; + lzma_vli uncompressed_size; + /// Buffer of "allocated" bytes + uint8_t buf[]; +}; + + typedef struct { - /// Array of buffers that are used cyclically. - lzma_outbuf *bufs; + /// Linked list of buffers in use. The next output byte will be + /// read from the head and buffers for the next thread will be + /// appended to the tail. tail->next is always NULL. + lzma_outbuf *head; + lzma_outbuf *tail; - /// Memory allocated for all the buffers - uint8_t *bufs_mem; + /// Number of bytes read from head->buf[] in lzma_outq_read() + size_t read_pos; - /// Amount of buffer space available in each buffer - size_t buf_size_max; + /// Linked list of allocated buffers that aren't currently used. + /// This way buffers of similar size can be reused and don't + /// need to be reallocated every time. For simplicity, all + /// cached buffers in the list have the same allocated size. + lzma_outbuf *cache; - /// Number of buffers allocated - uint32_t bufs_allocated; + /// Total amount of memory allocated for buffers + uint64_t mem_allocated; - /// Position in the bufs array. The next buffer to be taken - /// into use is bufs[bufs_pos]. - uint32_t bufs_pos; + /// Amount of memory used by the buffers that are in use in + /// the head...tail linked list. + uint64_t mem_in_use; - /// Number of buffers in use - uint32_t bufs_used; + /// Number of buffers in use in the head...tail list. If and only if + /// this is zero, the pointers head and tail above are NULL. + uint32_t bufs_in_use; - /// Position in the buffer in lzma_outq_read() - size_t read_pos; + /// Number of buffers allocated (in use + cached) + uint32_t bufs_allocated; + /// Maximum allowed number of allocated buffers + uint32_t bufs_limit; } lzma_outq; @@ -76,32 +119,60 @@ /// function knows that there are no previous /// allocations to free. /// \param allocator Pointer to allocator or NULL -/// \param buf_size_max Maximum amount of data that a single buffer -/// in the queue may need to store. /// \param threads Number of buffers that may be in use /// concurrently. Note that more than this number -/// of buffers will actually get allocated to +/// of buffers may actually get allocated to /// improve performance when buffers finish -/// out of order. +/// out of order. The actual maximum number of +/// allocated buffers is derived from the number +/// of threads. /// /// \return - LZMA_OK /// - LZMA_MEM_ERROR /// -extern lzma_ret lzma_outq_init( - lzma_outq *outq, const lzma_allocator *allocator, - uint64_t buf_size_max, uint32_t threads); +extern lzma_ret lzma_outq_init(lzma_outq *outq, + const lzma_allocator *allocator, uint32_t threads); /// \brief Free the memory associated with the output queue extern void lzma_outq_end(lzma_outq *outq, const lzma_allocator *allocator); +/// \brief Free all cached buffers that consume memory but aren't in use +extern void lzma_outq_clear_cache( + lzma_outq *outq, const lzma_allocator *allocator); + + +/// \brief Like lzma_outq_clear_cache() but might keep one buffer +/// +/// One buffer is not freed if its size is equal to keep_size. +/// This is useful if the caller knows that it will soon need a buffer of +/// keep_size bytes. This way it won't be freed and immediately reallocated. +extern void lzma_outq_clear_cache2( + lzma_outq *outq, const lzma_allocator *allocator, + size_t keep_size); + + +/// \brief Preallocate a new buffer into cache +/// +/// Splitting the buffer allocation into a separate function makes it +/// possible to ensure that way lzma_outq_get_buf() cannot fail. +/// If the preallocated buffer isn't actually used (for example, some +/// other error occurs), the caller has to do nothing as the buffer will +/// be used later or cleared from the cache when not needed. +/// +/// \return LZMA_OK on success, LZMA_MEM_ERROR if allocation fails +/// +extern lzma_ret lzma_outq_prealloc_buf( + lzma_outq *outq, const lzma_allocator *allocator, size_t size); + + /// \brief Get a new buffer /// -/// lzma_outq_has_buf() must be used to check that there is a buffer +/// lzma_outq_prealloc_buf() must be used to ensure that there is a buffer /// available before calling lzma_outq_get_buf(). /// -extern lzma_outbuf *lzma_outq_get_buf(lzma_outq *outq); +extern lzma_outbuf *lzma_outq_get_buf(lzma_outq *outq, void *worker); /// \brief Test if there is data ready to be read @@ -126,17 +197,32 @@ /// \return - LZMA: All OK. Either no data was available or the buffer /// being read didn't become empty yet. /// - LZMA_STREAM_END: The buffer being read was finished. -/// *unpadded_size and *uncompressed_size were set. +/// *unpadded_size and *uncompressed_size were set if they +/// were not NULL. /// -/// \note This reads lzma_outbuf.finished variables and thus call -/// to this function needs to be protected with a mutex. +/// \note This reads lzma_outbuf.finished and .pos variables and thus +/// calls to this function need to be protected with a mutex. /// extern lzma_ret lzma_outq_read(lzma_outq *restrict outq, + const lzma_allocator *restrict allocator, uint8_t *restrict out, size_t *restrict out_pos, size_t out_size, lzma_vli *restrict unpadded_size, lzma_vli *restrict uncompressed_size); +/// \brief Enable partial output from a worker thread +/// +/// If the buffer at the head of the output queue isn't finished, +/// this will call enable_partial_output on the worker associated with +/// that output buffer. +/// +/// \note This reads a lzma_outbuf.finished variable and thus +/// calls to this function need to be protected with a mutex. +/// +extern void lzma_outq_enable_partial_output(lzma_outq *outq, + void (*enable_partial_output)(void *worker)); + + /// \brief Test if there is at least one buffer free /// /// This must be used before getting a new buffer with lzma_outq_get_buf(). @@ -144,7 +230,7 @@ static inline bool lzma_outq_has_buf(const lzma_outq *outq) { - return outq->bufs_used < outq->bufs_allocated; + return outq->bufs_in_use < outq->bufs_limit; } @@ -152,5 +238,17 @@ static inline bool lzma_outq_is_empty(const lzma_outq *outq) { - return outq->bufs_used == 0; + return outq->bufs_in_use == 0; +} + + +/// \brief Get the amount of memory needed for a single lzma_outbuf +/// +/// \note Caller must check that the argument is significantly less +/// than SIZE_MAX to avoid an integer overflow! +static inline uint64_t +lzma_outq_outbuf_memusage(size_t buf_size) +{ + assert(buf_size <= SIZE_MAX - sizeof(lzma_outbuf)); + return sizeof(lzma_outbuf) + buf_size; } diff -ur xz-5.2.5/src/liblzma/common/stream_buffer_encoder.c xz-5.4.3/src/liblzma/common/stream_buffer_encoder.c --- xz-5.2.5/src/liblzma/common/stream_buffer_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/stream_buffer_encoder.c 2023-05-04 17:21:05 @@ -10,6 +10,7 @@ // /////////////////////////////////////////////////////////////////////////////// +#include "common.h" #include "index.h" diff -ur xz-5.2.5/src/liblzma/common/stream_decoder.c xz-5.4.3/src/liblzma/common/stream_decoder.c --- xz-5.2.5/src/liblzma/common/stream_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/stream_decoder.c 2023-05-04 17:21:05 @@ -12,21 +12,21 @@ #include "stream_decoder.h" #include "block_decoder.h" +#include "index.h" typedef struct { enum { SEQ_STREAM_HEADER, SEQ_BLOCK_HEADER, - SEQ_BLOCK, + SEQ_BLOCK_INIT, + SEQ_BLOCK_RUN, SEQ_INDEX, SEQ_STREAM_FOOTER, SEQ_STREAM_PADDING, } sequence; - /// Block or Metadata decoder. This takes little memory and the same - /// data structure can be used to decode every Block Header, so it's - /// a good idea to have a separate lzma_next_coder structure for it. + /// Block decoder lzma_next_coder block_decoder; /// Block options decoded by the Block Header decoder and used by @@ -63,9 +63,9 @@ /// If true, we will decode concatenated Streams that possibly have /// Stream Padding between or after them. LZMA_STREAM_END is returned - /// once the application isn't giving us any new input, and we aren't - /// in the middle of a Stream, and possible Stream Padding is a - /// multiple of four bytes. + /// once the application isn't giving us any new input (LZMA_FINISH), + /// and we aren't in the middle of a Stream, and possible + /// Stream Padding is a multiple of four bytes. bool concatenated; /// When decoding concatenated Streams, this is true as long as we @@ -165,7 +165,7 @@ if (coder->pos == 0) { // Detect if it's Index. - if (in[*in_pos] == 0x00) { + if (in[*in_pos] == INDEX_INDICATOR) { coder->sequence = SEQ_INDEX; break; } @@ -187,7 +187,16 @@ return LZMA_OK; coder->pos = 0; + coder->sequence = SEQ_BLOCK_INIT; + } + // Fall through + + case SEQ_BLOCK_INIT: { + // Checking memusage and doing the initialization needs + // its own sequence point because we need to be able to + // retry if we return LZMA_MEMLIMIT_ERROR. + // Version 1 is needed to support the .ignore_check option. coder->block_options.version = 1; @@ -235,22 +244,20 @@ // Free the allocated filter options since they are needed // only to initialize the Block decoder. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) - lzma_free(filters[i].options, allocator); - + lzma_filters_free(filters, allocator); coder->block_options.filters = NULL; - // Check if memory usage calculation and Block enocoder + // Check if memory usage calculation and Block decoder // initialization succeeded. if (ret != LZMA_OK) return ret; - coder->sequence = SEQ_BLOCK; + coder->sequence = SEQ_BLOCK_RUN; } // Fall through - case SEQ_BLOCK: { + case SEQ_BLOCK_RUN: { const lzma_ret ret = coder->block_decoder.code( coder->block_decoder.coder, allocator, in, in_pos, in_size, out, out_pos, out_size, Only in xz-5.4.3/src/liblzma/common: stream_decoder_mt.c diff -ur xz-5.2.5/src/liblzma/common/stream_encoder.c xz-5.4.3/src/liblzma/common/stream_encoder.c --- xz-5.2.5/src/liblzma/common/stream_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/stream_encoder.c 2023-05-04 17:21:05 @@ -219,8 +219,7 @@ lzma_next_end(&coder->index_encoder, allocator); lzma_index_end(coder->index, allocator); - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); + lzma_filters_free(coder->filters, allocator); lzma_free(coder, allocator); return; @@ -233,38 +232,54 @@ const lzma_filter *reversed_filters) { lzma_stream_coder *coder = coder_ptr; + lzma_ret ret; + // Make a copy to a temporary buffer first. This way it is easier + // to keep the encoder state unchanged if an error occurs with + // lzma_filters_copy(). + lzma_filter temp[LZMA_FILTERS_MAX + 1]; + return_if_error(lzma_filters_copy(filters, temp, allocator)); + if (coder->sequence <= SEQ_BLOCK_INIT) { // There is no incomplete Block waiting to be finished, // thus we can change the whole filter chain. Start by // trying to initialize the Block encoder with the new // chain. This way we detect if the chain is valid. coder->block_encoder_is_initialized = false; - coder->block_options.filters = (lzma_filter *)(filters); - const lzma_ret ret = block_encoder_init(coder, allocator); + coder->block_options.filters = temp; + ret = block_encoder_init(coder, allocator); coder->block_options.filters = coder->filters; if (ret != LZMA_OK) - return ret; + goto error; coder->block_encoder_is_initialized = true; } else if (coder->sequence <= SEQ_BLOCK_ENCODE) { // We are in the middle of a Block. Try to update only // the filter-specific options. - return_if_error(coder->block_encoder.update( + ret = coder->block_encoder.update( coder->block_encoder.coder, allocator, - filters, reversed_filters)); + filters, reversed_filters); + if (ret != LZMA_OK) + goto error; } else { // Trying to update the filter chain when we are already // encoding Index or Stream Footer. - return LZMA_PROG_ERROR; + ret = LZMA_PROG_ERROR; + goto error; } - // Free the copy of the old chain and make a copy of the new chain. - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); + // Free the options of the old chain. + lzma_filters_free(coder->filters, allocator); - return lzma_filters_copy(filters, coder->filters, allocator); + // Copy the new filter chain in place. + memcpy(coder->filters, temp, sizeof(temp)); + + return LZMA_OK; + +error: + lzma_filters_free(temp, allocator); + return ret; } @@ -319,7 +334,7 @@ // Initialize the Block encoder. This way we detect unsupported // filter chains when initializing the Stream encoder instead of - // giving an error after Stream Header has already written out. + // giving an error after Stream Header has already been written out. return stream_encoder_update(coder, allocator, filters, NULL); } diff -ur xz-5.2.5/src/liblzma/common/stream_encoder_mt.c xz-5.4.3/src/liblzma/common/stream_encoder_mt.c --- xz-5.2.5/src/liblzma/common/stream_encoder_mt.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/common/stream_encoder_mt.c 2023-05-04 17:21:05 @@ -85,6 +85,11 @@ /// Compression options for this Block lzma_block block_options; + /// Filter chain for this thread. By copying the filters array + /// to each thread it is possible to change the filter chain + /// between Blocks using lzma_filters_update(). + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + /// Next structure in the stack of free worker threads. worker_thread *next; @@ -109,10 +114,23 @@ /// LZMA_FULL_FLUSH or LZMA_FULL_BARRIER is used earlier. size_t block_size; - /// The filter chain currently in use + /// The filter chain to use for the next Block. + /// This can be updated using lzma_filters_update() + /// after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. lzma_filter filters[LZMA_FILTERS_MAX + 1]; + /// A copy of filters[] will be put here when attempting to get + /// a new worker thread. This will be copied to a worker thread + /// when a thread becomes free and then this cache is marked as + /// empty by setting [0].id = LZMA_VLI_UNKNOWN. Without this cache + /// the filter options from filters[] would get uselessly copied + /// multiple times (allocated and freed) when waiting for a new free + /// worker thread. + /// + /// This is freed if filters[] is updated via lzma_filters_update(). + lzma_filter filters_cache[LZMA_FILTERS_MAX + 1]; + /// Index to hold sizes of the Blocks lzma_index *index; @@ -133,7 +151,10 @@ /// Output buffer queue for compressed data lzma_outq outq; + /// How much memory to allocate for each lzma_outbuf.buf + size_t outbuf_alloc_size; + /// Maximum wait time if cannot use all the input and cannot /// fill the output buffer. This is in milliseconds. uint32_t timeout; @@ -196,7 +217,7 @@ static worker_state -worker_encode(worker_thread *thr, worker_state state) +worker_encode(worker_thread *thr, size_t *out_pos, worker_state state) { assert(thr->progress_in == 0); assert(thr->progress_out == 0); @@ -205,12 +226,9 @@ thr->block_options = (lzma_block){ .version = 0, .check = thr->coder->stream_flags.check, - .compressed_size = thr->coder->outq.buf_size_max, + .compressed_size = thr->outbuf->allocated, .uncompressed_size = thr->coder->block_size, - - // TODO: To allow changing the filter chain, the filters - // array must be copied to each worker_thread. - .filters = thr->coder->filters, + .filters = thr->filters, }; // Calculate maximum size of the Block Header. This amount is @@ -234,12 +252,12 @@ size_t in_pos = 0; size_t in_size = 0; - thr->outbuf->size = thr->block_options.header_size; - const size_t out_size = thr->coder->outq.buf_size_max; + *out_pos = thr->block_options.header_size; + const size_t out_size = thr->outbuf->allocated; do { mythread_sync(thr->mutex) { - // Store in_pos and out_pos into *thr so that + // Store in_pos and *out_pos into *thr so that // an application may read them via // lzma_get_progress() to get progress information. // @@ -247,7 +265,7 @@ // finishes. Instead, the final values are taken // later from thr->outbuf. thr->progress_in = in_pos; - thr->progress_out = thr->outbuf->size; + thr->progress_out = *out_pos; while (in_size == thr->in_size && thr->state == THR_RUN) @@ -277,8 +295,8 @@ ret = thr->block_encoder.code( thr->block_encoder.coder, thr->allocator, thr->in, &in_pos, in_limit, thr->outbuf->buf, - &thr->outbuf->size, out_size, action); - } while (ret == LZMA_OK && thr->outbuf->size < out_size); + out_pos, out_size, action); + } while (ret == LZMA_OK && *out_pos < out_size); switch (ret) { case LZMA_STREAM_END: @@ -313,10 +331,10 @@ return state; // Do the encoding. This takes care of the Block Header too. - thr->outbuf->size = 0; + *out_pos = 0; ret = lzma_block_uncomp_encode(&thr->block_options, thr->in, in_size, thr->outbuf->buf, - &thr->outbuf->size, out_size); + out_pos, out_size); // It shouldn't fail. if (ret != LZMA_OK) { @@ -367,11 +385,13 @@ } } + size_t out_pos = 0; + assert(state != THR_IDLE); assert(state != THR_STOP); if (state <= THR_FINISH) - state = worker_encode(thr, state); + state = worker_encode(thr, &out_pos, state); if (state == THR_EXIT) break; @@ -387,14 +407,17 @@ } mythread_sync(thr->coder->mutex) { - // Mark the output buffer as finished if - // no errors occurred. - thr->outbuf->finished = state == THR_FINISH; + // If no errors occurred, make the encoded data + // available to be copied out. + if (state == THR_FINISH) { + thr->outbuf->pos = out_pos; + thr->outbuf->finished = true; + } // Update the main progress info. thr->coder->progress_in += thr->outbuf->uncompressed_size; - thr->coder->progress_out += thr->outbuf->size; + thr->coder->progress_out += out_pos; thr->progress_in = 0; thr->progress_out = 0; @@ -407,6 +430,8 @@ } // Exiting, free the resources. + lzma_filters_free(thr->filters, thr->allocator); + mythread_mutex_destroy(&thr->mutex); mythread_cond_destroy(&thr->cond); @@ -490,6 +515,7 @@ thr->progress_in = 0; thr->progress_out = 0; thr->block_encoder = LZMA_NEXT_CODER_INIT; + thr->filters[0].id = LZMA_VLI_UNKNOWN; if (mythread_create(&thr->thread_id, &worker_start, thr)) goto error_thread; @@ -519,6 +545,18 @@ if (!lzma_outq_has_buf(&coder->outq)) return LZMA_OK; + // That's also true if we cannot allocate memory for the output + // buffer in the output queue. + return_if_error(lzma_outq_prealloc_buf(&coder->outq, allocator, + coder->outbuf_alloc_size)); + + // Make a thread-specific copy of the filter chain. Put it in + // the cache array first so that if we cannot get a new thread yet, + // the allocation is ready when we try again. + if (coder->filters_cache[0].id == LZMA_VLI_UNKNOWN) + return_if_error(lzma_filters_copy( + coder->filters, coder->filters_cache, allocator)); + // If there is a free structure on the stack, use it. mythread_sync(coder->mutex) { if (coder->threads_free != NULL) { @@ -541,7 +579,16 @@ mythread_sync(coder->thr->mutex) { coder->thr->state = THR_RUN; coder->thr->in_size = 0; - coder->thr->outbuf = lzma_outq_get_buf(&coder->outq); + coder->thr->outbuf = lzma_outq_get_buf(&coder->outq, NULL); + + // Free the old thread-specific filter options and replace + // them with the already-allocated new options from + // coder->filters_cache[]. Then mark the cache as empty. + lzma_filters_free(coder->thr->filters, allocator); + memcpy(coder->thr->filters, coder->filters_cache, + sizeof(coder->filters_cache)); + coder->filters_cache[0].id = LZMA_VLI_UNKNOWN; + mythread_cond_signal(&coder->thr->cond); } @@ -598,7 +645,7 @@ } if (block_error) { - lzma_ret ret; + lzma_ret ret = LZMA_OK; // Init to silence a warning. mythread_sync(coder->mutex) { ret = coder->thread_error; @@ -627,9 +674,13 @@ // to true here and calculate the absolute time when // we must return if there's nothing to do. // - // The idea of *has_blocked is to avoid unneeded calls - // to mythread_condtime_set(), which may do a syscall - // depending on the operating system. + // This way if we block multiple times for short moments + // less than "timeout" milliseconds, we will return once + // "timeout" amount of time has passed since the *first* + // blocking occurred. If the absolute time was calculated + // again every time we block, "timeout" would effectively + // be meaningless if we never consecutively block longer + // than "timeout" ms. *has_blocked = true; mythread_condtime_set(wait_abs, &coder->cond, coder->timeout); } @@ -704,7 +755,7 @@ } // Try to read compressed data to out[]. - ret = lzma_outq_read(&coder->outq, + ret = lzma_outq_read(&coder->outq, allocator, out, out_pos, out_size, &unpadded_size, &uncompressed_size); @@ -715,6 +766,10 @@ ret = lzma_index_append(coder->index, allocator, unpadded_size, uncompressed_size); + if (ret != LZMA_OK) { + threads_stop(coder, false); + return ret; + } // If we didn't fill the output buffer yet, // try to read more data. Maybe the next @@ -724,8 +779,7 @@ } if (ret != LZMA_OK) { - // coder->thread_error was set or - // lzma_index_append() failed. + // coder->thread_error was set. threads_stop(coder, false); return ret; } @@ -846,8 +900,8 @@ threads_end(coder, allocator); lzma_outq_end(&coder->outq, allocator); - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); + lzma_filters_free(coder->filters, allocator); + lzma_filters_free(coder->filters_cache, allocator); lzma_next_end(&coder->index_encoder, allocator); lzma_index_end(coder->index, allocator); @@ -860,6 +914,45 @@ } +static lzma_ret +stream_encoder_mt_update(void *coder_ptr, const lzma_allocator *allocator, + const lzma_filter *filters, + const lzma_filter *reversed_filters + lzma_attribute((__unused__))) +{ + lzma_stream_coder *coder = coder_ptr; + + // Applications shouldn't attempt to change the options when + // we are already encoding the Index or Stream Footer. + if (coder->sequence > SEQ_BLOCK) + return LZMA_PROG_ERROR; + + // For now the threaded encoder doesn't support changing + // the options in the middle of a Block. + if (coder->thr != NULL) + return LZMA_PROG_ERROR; + + // Check if the filter chain seems mostly valid. See the comment + // in stream_encoder_mt_init(). + if (lzma_raw_encoder_memusage(filters) == UINT64_MAX) + return LZMA_OPTIONS_ERROR; + + // Make a copy to a temporary buffer first. This way the encoder + // state stays unchanged if an error occurs in lzma_filters_copy(). + lzma_filter temp[LZMA_FILTERS_MAX + 1]; + return_if_error(lzma_filters_copy(filters, temp, allocator)); + + // Free the options of the old chain as well as the cache. + lzma_filters_free(coder->filters, allocator); + lzma_filters_free(coder->filters_cache, allocator); + + // Copy the new filter chain in place. + memcpy(coder->filters, temp, sizeof(temp)); + + return LZMA_OK; +} + + /// Options handling for lzma_stream_encoder_mt_init() and /// lzma_stream_encoder_mt_memusage() static lzma_ret @@ -951,14 +1044,16 @@ &block_size, &outbuf_size_max)); #if SIZE_MAX < UINT64_MAX - if (block_size > SIZE_MAX) + if (block_size > SIZE_MAX || outbuf_size_max > SIZE_MAX) return LZMA_MEM_ERROR; #endif // Validate the filter chain so that we can give an error in this // function instead of delaying it to the first call to lzma_code(). // The memory usage calculation verifies the filter chain as - // a side effect so we take advantage of that. + // a side effect so we take advantage of that. It's not a perfect + // check though as raw encoder allows LZMA1 too but such problems + // will be caught eventually with Block Header encoder. if (lzma_raw_encoder_memusage(filters) == UINT64_MAX) return LZMA_OPTIONS_ERROR; @@ -998,9 +1093,10 @@ next->code = &stream_encode_mt; next->end = &stream_encoder_mt_end; next->get_progress = &get_progress; -// next->update = &stream_encoder_mt_update; + next->update = &stream_encoder_mt_update; coder->filters[0].id = LZMA_VLI_UNKNOWN; + coder->filters_cache[0].id = LZMA_VLI_UNKNOWN; coder->index_encoder = LZMA_NEXT_CODER_INIT; coder->index = NULL; memzero(&coder->outq, sizeof(coder->outq)); @@ -1012,6 +1108,7 @@ // Basic initializations coder->sequence = SEQ_STREAM_HEADER; coder->block_size = (size_t)(block_size); + coder->outbuf_alloc_size = (size_t)(outbuf_size_max); coder->thread_error = LZMA_OK; coder->thr = NULL; @@ -1041,15 +1138,16 @@ // Output queue return_if_error(lzma_outq_init(&coder->outq, allocator, - outbuf_size_max, options->threads)); + options->threads)); // Timeout coder->timeout = options->timeout; - // Free the old filter chain and copy the new one. - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); + // Free the old filter chain and the cache. + lzma_filters_free(coder->filters, allocator); + lzma_filters_free(coder->filters_cache, allocator); + // Copy the new filter chain. return_if_error(lzma_filters_copy( filters, coder->filters, allocator)); @@ -1075,6 +1173,31 @@ } +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +// These are for compatibility with binaries linked against liblzma that +// has been patched with xz-5.2.2-compat-libs.patch from RHEL/CentOS 7. +// Actually that patch didn't create lzma_stream_encoder_mt@XZ_5.2.2 +// but it has been added here anyway since someone might misread the +// RHEL patch and think both @XZ_5.1.2alpha and @XZ_5.2.2 exist. +LZMA_SYMVER_API("lzma_stream_encoder_mt@XZ_5.1.2alpha", + lzma_ret, lzma_stream_encoder_mt_512a)( + lzma_stream *strm, const lzma_mt *options) + lzma_nothrow lzma_attr_warn_unused_result + __attribute__((__alias__("lzma_stream_encoder_mt_52"))); + +LZMA_SYMVER_API("lzma_stream_encoder_mt@XZ_5.2.2", + lzma_ret, lzma_stream_encoder_mt_522)( + lzma_stream *strm, const lzma_mt *options) + lzma_nothrow lzma_attr_warn_unused_result + __attribute__((__alias__("lzma_stream_encoder_mt_52"))); + +LZMA_SYMVER_API("lzma_stream_encoder_mt@@XZ_5.2", + lzma_ret, lzma_stream_encoder_mt_52)( + lzma_stream *strm, const lzma_mt *options) + lzma_nothrow lzma_attr_warn_unused_result; + +#define lzma_stream_encoder_mt lzma_stream_encoder_mt_52 +#endif extern LZMA_API(lzma_ret) lzma_stream_encoder_mt(lzma_stream *strm, const lzma_mt *options) { @@ -1090,6 +1213,23 @@ } +#ifdef HAVE_SYMBOL_VERSIONS_LINUX +LZMA_SYMVER_API("lzma_stream_encoder_mt_memusage@XZ_5.1.2alpha", + uint64_t, lzma_stream_encoder_mt_memusage_512a)( + const lzma_mt *options) lzma_nothrow lzma_attr_pure + __attribute__((__alias__("lzma_stream_encoder_mt_memusage_52"))); + +LZMA_SYMVER_API("lzma_stream_encoder_mt_memusage@XZ_5.2.2", + uint64_t, lzma_stream_encoder_mt_memusage_522)( + const lzma_mt *options) lzma_nothrow lzma_attr_pure + __attribute__((__alias__("lzma_stream_encoder_mt_memusage_52"))); + +LZMA_SYMVER_API("lzma_stream_encoder_mt_memusage@@XZ_5.2", + uint64_t, lzma_stream_encoder_mt_memusage_52)( + const lzma_mt *options) lzma_nothrow lzma_attr_pure; + +#define lzma_stream_encoder_mt_memusage lzma_stream_encoder_mt_memusage_52 +#endif // This function name is a monster but it's consistent with the older // monster names. :-( 31 chars is the max that C99 requires so in that // sense it's not too long. ;-) diff -ur xz-5.2.5/src/liblzma/common/stream_flags_decoder.c xz-5.4.3/src/liblzma/common/stream_flags_decoder.c --- xz-5.2.5/src/liblzma/common/stream_flags_decoder.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/common/stream_flags_decoder.c 2023-05-04 17:21:05 @@ -39,8 +39,11 @@ const uint32_t crc = lzma_crc32(in + sizeof(lzma_header_magic), LZMA_STREAM_FLAGS_SIZE, 0); if (crc != read32le(in + sizeof(lzma_header_magic) - + LZMA_STREAM_FLAGS_SIZE)) + + LZMA_STREAM_FLAGS_SIZE)) { +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION return LZMA_DATA_ERROR; +#endif + } // Stream Flags if (stream_flags_decode(options, in + sizeof(lzma_header_magic))) @@ -67,8 +70,11 @@ // CRC32 const uint32_t crc = lzma_crc32(in + sizeof(uint32_t), sizeof(uint32_t) + LZMA_STREAM_FLAGS_SIZE, 0); - if (crc != read32le(in)) + if (crc != read32le(in)) { +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION return LZMA_DATA_ERROR; +#endif + } // Stream Flags if (stream_flags_decode(options, in + sizeof(uint32_t) * 2)) Only in xz-5.4.3/src/liblzma/common: string_conversion.c diff -ur xz-5.2.5/src/liblzma/delta/delta_decoder.c xz-5.4.3/src/liblzma/delta/delta_decoder.c --- xz-5.2.5/src/liblzma/delta/delta_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/delta/delta_decoder.c 2023-05-04 17:21:05 @@ -42,7 +42,12 @@ in, in_pos, in_size, out, out_pos, out_size, action); - decode_buffer(coder, out + out_start, *out_pos - out_start); + // out might be NULL. In that case size == 0. Null pointer + 0 is + // undefined behavior so skip the call in that case as it would + // do nothing anyway. + const size_t size = *out_pos - out_start; + if (size > 0) + decode_buffer(coder, out + out_start, size); return ret; } diff -ur xz-5.2.5/src/liblzma/delta/delta_encoder.c xz-5.4.3/src/liblzma/delta/delta_encoder.c --- xz-5.2.5/src/liblzma/delta/delta_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/delta/delta_encoder.c 2023-05-04 17:21:05 @@ -63,7 +63,12 @@ const size_t out_avail = out_size - *out_pos; const size_t size = my_min(in_avail, out_avail); - copy_and_encode(coder, in + *in_pos, out + *out_pos, size); + // in and out might be NULL. In such cases size == 0. + // Null pointer + 0 is undefined behavior so skip + // the call in that case as it would do nothing anyway. + if (size > 0) + copy_and_encode(coder, in + *in_pos, out + *out_pos, + size); *in_pos += size; *out_pos += size; @@ -78,7 +83,10 @@ in, in_pos, in_size, out, out_pos, out_size, action); - encode_in_place(coder, out + out_start, *out_pos - out_start); + // Like above, avoid null pointer + 0. + const size_t size = *out_pos - out_start; + if (size > 0) + encode_in_place(coder, out + out_start, size); } return ret; Only in xz-5.2.5/src/liblzma: liblzma.map Only in xz-5.4.3/src/liblzma: liblzma_generic.map Only in xz-5.4.3/src/liblzma: liblzma_linux.map diff -ur xz-5.2.5/src/liblzma/lz/lz_decoder.c xz-5.4.3/src/liblzma/lz/lz_decoder.c --- xz-5.2.5/src/liblzma/lz/lz_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lz/lz_decoder.c 2023-05-04 17:21:05 @@ -212,7 +212,8 @@ lzma_lz_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, lzma_ret (*lz_init)(lzma_lz_decoder *lz, - const lzma_allocator *allocator, const void *options, + const lzma_allocator *allocator, + lzma_vli id, const void *options, lzma_lz_options *lz_options)) { // Allocate the base structure if it isn't already allocated. @@ -236,7 +237,7 @@ // us the dictionary size. lzma_lz_options lz_options; return_if_error(lz_init(&coder->lz, allocator, - filters[0].options, &lz_options)); + filters[0].id, filters[0].options, &lz_options)); // If the dictionary size is very small, increase it to 4096 bytes. // This is to prevent constant wrapping of the dictionary, which @@ -300,12 +301,4 @@ lzma_lz_decoder_memusage(size_t dictionary_size) { return sizeof(lzma_coder) + (uint64_t)(dictionary_size); -} - - -extern void -lzma_lz_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) -{ - lzma_coder *coder = coder_ptr; - coder->lz.set_uncompressed(coder->lz.coder, uncompressed_size); } diff -ur xz-5.2.5/src/liblzma/lz/lz_decoder.h xz-5.4.3/src/liblzma/lz/lz_decoder.h --- xz-5.2.5/src/liblzma/lz/lz_decoder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lz/lz_decoder.h 2023-05-04 17:21:05 @@ -62,8 +62,10 @@ void (*reset)(void *coder, const void *options); - /// Set the uncompressed size - void (*set_uncompressed)(void *coder, lzma_vli uncompressed_size); + /// Set the uncompressed size. If uncompressed_size == LZMA_VLI_UNKNOWN + /// then allow_eopm will always be true. + void (*set_uncompressed)(void *coder, lzma_vli uncompressed_size, + bool allow_eopm); /// Free allocated resources void (*end)(void *coder, const lzma_allocator *allocator); @@ -85,13 +87,11 @@ const lzma_allocator *allocator, const lzma_filter_info *filters, lzma_ret (*lz_init)(lzma_lz_decoder *lz, - const lzma_allocator *allocator, const void *options, + const lzma_allocator *allocator, + lzma_vli id, const void *options, lzma_lz_options *lz_options)); extern uint64_t lzma_lz_decoder_memusage(size_t dictionary_size); - -extern void lzma_lz_decoder_uncompressed( - void *coder, lzma_vli uncompressed_size); ////////////////////// diff -ur xz-5.2.5/src/liblzma/lz/lz_encoder.c xz-5.4.3/src/liblzma/lz/lz_encoder.c --- xz-5.2.5/src/liblzma/lz/lz_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lz/lz_encoder.c 2023-05-04 17:21:05 @@ -293,11 +293,15 @@ return true; } - // Calculate the sizes of mf->hash and mf->son and check that - // nice_len is big enough for the selected match finder. - const uint32_t hash_bytes = lz_options->match_finder & 0x0F; - if (hash_bytes > mf->nice_len) - return true; + // Calculate the sizes of mf->hash and mf->son. + // + // NOTE: Since 5.3.5beta the LZMA encoder ensures that nice_len + // is big enough for the selected match finder. This makes it + // easier for applications as nice_len = 2 will always be accepted + // even though the effective value can be slightly bigger. + const uint32_t hash_bytes + = mf_get_hash_bytes(lz_options->match_finder); + assert(hash_bytes <= mf->nice_len); const bool is_bt = (lz_options->match_finder & 0x10) != 0; uint32_t hs; @@ -521,14 +525,30 @@ } +static lzma_ret +lz_encoder_set_out_limit(void *coder_ptr, uint64_t *uncomp_size, + uint64_t out_limit) +{ + lzma_coder *coder = coder_ptr; + + // This is supported only if there are no other filters chained. + if (coder->next.code == NULL && coder->lz.set_out_limit != NULL) + return coder->lz.set_out_limit( + coder->lz.coder, uncomp_size, out_limit); + + return LZMA_OPTIONS_ERROR; +} + + extern lzma_ret lzma_lz_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, lzma_ret (*lz_init)(lzma_lz_encoder *lz, - const lzma_allocator *allocator, const void *options, + const lzma_allocator *allocator, + lzma_vli id, const void *options, lzma_lz_options *lz_options)) { -#ifdef HAVE_SMALL +#if defined(HAVE_SMALL) && !defined(HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR) // We need that the CRC32 table has been initialized. lzma_crc32_init(); #endif @@ -544,6 +564,7 @@ next->code = &lz_encode; next->end = &lz_encoder_end; next->update = &lz_encoder_update; + next->set_out_limit = &lz_encoder_set_out_limit; coder->lz.coder = NULL; coder->lz.code = NULL; @@ -565,7 +586,7 @@ // Initialize the LZ-based encoder. lzma_lz_options lz_options; return_if_error(lz_init(&coder->lz, allocator, - filters[0].options, &lz_options)); + filters[0].id, filters[0].options, &lz_options)); // Setup the size information into coder->mf and deallocate // old buffers if they have wrong size. @@ -585,32 +606,28 @@ extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder mf) { - bool ret = false; - + switch (mf) { #ifdef HAVE_MF_HC3 - if (mf == LZMA_MF_HC3) - ret = true; + case LZMA_MF_HC3: + return true; #endif - #ifdef HAVE_MF_HC4 - if (mf == LZMA_MF_HC4) - ret = true; + case LZMA_MF_HC4: + return true; #endif - #ifdef HAVE_MF_BT2 - if (mf == LZMA_MF_BT2) - ret = true; + case LZMA_MF_BT2: + return true; #endif - #ifdef HAVE_MF_BT3 - if (mf == LZMA_MF_BT3) - ret = true; + case LZMA_MF_BT3: + return true; #endif - #ifdef HAVE_MF_BT4 - if (mf == LZMA_MF_BT4) - ret = true; + case LZMA_MF_BT4: + return true; #endif - - return ret; + default: + return false; + } } diff -ur xz-5.2.5/src/liblzma/lz/lz_encoder.h xz-5.4.3/src/liblzma/lz/lz_encoder.h --- xz-5.2.5/src/liblzma/lz/lz_encoder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lz/lz_encoder.h 2023-05-04 17:21:05 @@ -204,6 +204,10 @@ /// Update the options in the middle of the encoding. lzma_ret (*options_update)(void *coder, const lzma_filter *filter); + /// Set maximum allowed output size + lzma_ret (*set_out_limit)(void *coder, uint64_t *uncomp_size, + uint64_t out_limit); + } lzma_lz_encoder; @@ -216,6 +220,15 @@ // are called `read ahead'. +/// Get how many bytes the match finder hashes in its initial step. +/// This is also the minimum nice_len value with the match finder. +static inline uint32_t +mf_get_hash_bytes(lzma_match_finder match_finder) +{ + return (uint32_t)match_finder & 0x0F; +} + + /// Get pointer to the first byte not ran through the match finder static inline const uint8_t * mf_ptr(const lzma_mf *mf) @@ -298,7 +311,8 @@ lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, lzma_ret (*lz_init)(lzma_lz_encoder *lz, - const lzma_allocator *allocator, const void *options, + const lzma_allocator *allocator, + lzma_vli id, const void *options, lzma_lz_options *lz_options)); diff -ur xz-5.2.5/src/liblzma/lz/lz_encoder_mf.c xz-5.4.3/src/liblzma/lz/lz_encoder_mf.c --- xz-5.2.5/src/liblzma/lz/lz_encoder_mf.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lz/lz_encoder_mf.c 2023-05-04 17:21:05 @@ -220,10 +220,11 @@ /// of matches found. #define call_find(func, len_best) \ do { \ - matches_count = func(len_limit, pos, cur, cur_match, mf->depth, \ - mf->son, mf->cyclic_pos, mf->cyclic_size, \ + matches_count = (uint32_t)(func(len_limit, pos, cur, cur_match, \ + mf->depth, mf->son, \ + mf->cyclic_pos, mf->cyclic_size, \ matches + matches_count, len_best) \ - - matches; \ + - matches); \ move_pos(mf); \ return matches_count; \ } while (0) @@ -242,8 +243,8 @@ /// \param cur_match Start position of the current match candidate /// \param depth Maximum length of the hash chain /// \param son lzma_mf.son (contains the hash chain) -/// \param cyclic_pos -/// \param cyclic_size +/// \param cyclic_pos lzma_mf.cyclic_pos +/// \param cyclic_size lzma_mf_cyclic_size /// \param matches Array to hold the matches. /// \param len_best The length of the longest match found so far. static lzma_match * diff -ur xz-5.2.5/src/liblzma/lzma/Makefile.inc xz-5.4.3/src/liblzma/lzma/Makefile.inc --- xz-5.2.5/src/liblzma/lzma/Makefile.inc 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/Makefile.inc 2023-05-04 17:21:05 @@ -7,12 +7,9 @@ EXTRA_DIST += lzma/fastpos_tablegen.c -liblzma_la_SOURCES += lzma/lzma_common.h - -if COND_FILTER_LZMA1 liblzma_la_SOURCES += \ + lzma/lzma_common.h \ lzma/lzma_encoder_presets.c -endif if COND_ENCODER_LZMA1 liblzma_la_SOURCES += \ diff -ur xz-5.2.5/src/liblzma/lzma/lzma2_decoder.c xz-5.4.3/src/liblzma/lzma/lzma2_decoder.c --- xz-5.2.5/src/liblzma/lzma/lzma2_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma2_decoder.c 2023-05-04 17:21:05 @@ -139,7 +139,7 @@ coder->uncompressed_size += in[(*in_pos)++] + 1U; coder->sequence = SEQ_COMPRESSED_0; coder->lzma.set_uncompressed(coder->lzma.coder, - coder->uncompressed_size); + coder->uncompressed_size, false); break; case SEQ_COMPRESSED_0: @@ -226,7 +226,8 @@ static lzma_ret lzma2_decoder_init(lzma_lz_decoder *lz, const lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) + lzma_vli id lzma_attribute((__unused__)), const void *opt, + lzma_lz_options *lz_options) { lzma_lzma2_coder *coder = lz->coder; if (coder == NULL) { diff -ur xz-5.2.5/src/liblzma/lzma/lzma2_encoder.c xz-5.4.3/src/liblzma/lzma/lzma2_encoder.c --- xz-5.2.5/src/liblzma/lzma/lzma2_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma2_encoder.c 2023-05-04 17:21:05 @@ -310,7 +310,8 @@ static lzma_ret lzma2_encoder_init(lzma_lz_encoder *lz, const lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) + lzma_vli id lzma_attribute((__unused__)), const void *options, + lzma_lz_options *lz_options) { if (options == NULL) return LZMA_PROG_ERROR; @@ -340,7 +341,7 @@ // Initialize LZMA encoder return_if_error(lzma_lzma_encoder_create(&coder->lzma, allocator, - &coder->opt_cur, lz_options)); + LZMA_FILTER_LZMA2, &coder->opt_cur, lz_options)); // Make sure that we will always have enough history available in // case we need to use uncompressed chunks. They are used when the @@ -378,6 +379,9 @@ extern lzma_ret lzma_lzma2_props_encode(const void *options, uint8_t *out) { + if (options == NULL) + return LZMA_PROG_ERROR; + const lzma_options_lzma *const opt = options; uint32_t d = my_max(opt->dict_size, LZMA_DICT_SIZE_MIN); diff -ur xz-5.2.5/src/liblzma/lzma/lzma_decoder.c xz-5.4.3/src/liblzma/lzma/lzma_decoder.c --- xz-5.2.5/src/liblzma/lzma/lzma_decoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma_decoder.c 2023-05-04 17:21:05 @@ -238,6 +238,11 @@ /// payload marker is expected. lzma_vli uncompressed_size; + /// True if end of payload marker (EOPM) is allowed even when + /// uncompressed_size is known; false if EOPM must not be present. + /// This is ignored if uncompressed_size == LZMA_VLI_UNKNOWN. + bool allow_eopm; + //////////////////////////////// // State of incomplete symbol // //////////////////////////////// @@ -343,12 +348,24 @@ lzma_ret ret = LZMA_OK; - // If uncompressed size is known, there must be no end of payload - // marker. - const bool no_eopm = coder->uncompressed_size - != LZMA_VLI_UNKNOWN; - if (no_eopm && coder->uncompressed_size < dict.limit - dict.pos) + // This is true when the next LZMA symbol is allowed to be EOPM. + // That is, if this is false, then EOPM is considered + // an invalid symbol and we will return LZMA_DATA_ERROR. + // + // EOPM is always required (not just allowed) when + // the uncompressed size isn't known. When uncompressed size + // is known, eopm_is_valid may be set to true later. + bool eopm_is_valid = coder->uncompressed_size == LZMA_VLI_UNKNOWN; + + // If uncompressed size is known and there is enough output space + // to decode all the data, limit the available buffer space so that + // the main loop won't try to decode past the end of the stream. + bool might_finish_without_eopm = false; + if (coder->uncompressed_size != LZMA_VLI_UNKNOWN + && coder->uncompressed_size <= dict.limit - dict.pos) { dict.limit = dict.pos + (size_t)(coder->uncompressed_size); + might_finish_without_eopm = true; + } // The main decoder loop. The "switch" is used to restart the decoder at // correct location. Once restarted, the "switch" is no longer used. @@ -361,9 +378,33 @@ case SEQ_NORMALIZE: case SEQ_IS_MATCH: - if (unlikely(no_eopm && dict.pos == dict.limit)) - break; + if (unlikely(might_finish_without_eopm + && dict.pos == dict.limit)) { + // In rare cases there is a useless byte that needs + // to be read anyway. + rc_normalize(SEQ_NORMALIZE); + // If the range decoder state is such that we can + // be at the end of the LZMA stream, then the + // decoding is finished. + if (rc_is_finished(rc)) { + ret = LZMA_STREAM_END; + goto out; + } + + // If the caller hasn't allowed EOPM to be present + // together with known uncompressed size, then the + // LZMA stream is corrupt. + if (!coder->allow_eopm) { + ret = LZMA_DATA_ERROR; + goto out; + } + + // Otherwise continue decoding with the expectation + // that the next LZMA symbol is EOPM. + eopm_is_valid = true; + } + rc_if_0(coder->is_match[state][pos_state], SEQ_IS_MATCH) { rc_update_0(coder->is_match[state][pos_state]); @@ -658,11 +699,18 @@ if (rep0 == UINT32_MAX) { // End of payload marker was - // found. It must not be - // present if uncompressed - // size is known. - if (coder->uncompressed_size - != LZMA_VLI_UNKNOWN) { + // found. It may only be + // present if + // - uncompressed size is + // unknown or + // - after known uncompressed + // size amount of bytes has + // been decompressed and + // caller has indicated + // that EOPM might be used + // (it's not allowed in + // LZMA2). + if (!eopm_is_valid) { ret = LZMA_DATA_ERROR; goto out; } @@ -671,7 +719,9 @@ // LZMA1 stream with // end-of-payload marker. rc_normalize(SEQ_EOPM); - ret = LZMA_STREAM_END; + ret = rc_is_finished(rc) + ? LZMA_STREAM_END + : LZMA_DATA_ERROR; goto out; } } @@ -793,9 +843,6 @@ } } - rc_normalize(SEQ_NORMALIZE); - coder->sequence = SEQ_IS_MATCH; - out: // Save state @@ -822,24 +869,21 @@ if (coder->uncompressed_size != LZMA_VLI_UNKNOWN) { coder->uncompressed_size -= dict.pos - dict_start; - // Since there cannot be end of payload marker if the - // uncompressed size was known, we check here if we - // finished decoding. + // If we have gotten all the output but the decoder wants + // to write more output, the file is corrupt. There are + // three SEQ values where output is produced. if (coder->uncompressed_size == 0 && ret == LZMA_OK - && coder->sequence != SEQ_NORMALIZE) - ret = coder->sequence == SEQ_IS_MATCH - ? LZMA_STREAM_END : LZMA_DATA_ERROR; + && (coder->sequence == SEQ_LITERAL_WRITE + || coder->sequence == SEQ_SHORTREP + || coder->sequence == SEQ_COPY)) + ret = LZMA_DATA_ERROR; } - // We can do an additional check in the range decoder to catch some - // corrupted files. if (ret == LZMA_STREAM_END) { - if (!rc_is_finished(coder->rc)) - ret = LZMA_DATA_ERROR; - // Reset the range decoder so that it is ready to reinitialize // for a new LZMA2 chunk. rc_reset(coder->rc); + coder->sequence = SEQ_IS_MATCH; } return ret; @@ -848,10 +892,12 @@ static void -lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) +lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size, + bool allow_eopm) { lzma_lzma1_decoder *coder = coder_ptr; coder->uncompressed_size = uncompressed_size; + coder->allow_eopm = allow_eopm; } @@ -940,7 +986,7 @@ extern lzma_ret lzma_lzma_decoder_create(lzma_lz_decoder *lz, const lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) + const lzma_options_lzma *options, lzma_lz_options *lz_options) { if (lz->coder == NULL) { lz->coder = lzma_alloc(sizeof(lzma_lzma1_decoder), allocator); @@ -954,7 +1000,6 @@ // All dictionary sizes are OK here. LZ decoder will take care of // the special cases. - const lzma_options_lzma *options = opt; lz_options->dict_size = options->dict_size; lz_options->preset_dict = options->preset_dict; lz_options->preset_dict_size = options->preset_dict_size; @@ -968,16 +1013,40 @@ /// the LZ initialization). static lzma_ret lzma_decoder_init(lzma_lz_decoder *lz, const lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) + lzma_vli id, const void *options, lzma_lz_options *lz_options) { if (!is_lclppb_valid(options)) return LZMA_PROG_ERROR; + lzma_vli uncomp_size = LZMA_VLI_UNKNOWN; + bool allow_eopm = true; + + if (id == LZMA_FILTER_LZMA1EXT) { + const lzma_options_lzma *opt = options; + + // Only one flag is supported. + if (opt->ext_flags & ~LZMA_LZMA1EXT_ALLOW_EOPM) + return LZMA_OPTIONS_ERROR; + + // FIXME? Using lzma_vli instead of uint64_t is weird because + // this has nothing to do with .xz headers and variable-length + // integer encoding. On the other hand, using LZMA_VLI_UNKNOWN + // instead of UINT64_MAX is clearer when unknown size is + // meant. A problem with using lzma_vli is that now we + // allow > LZMA_VLI_MAX which is fine in this file but + // it's still confusing. Note that alone_decoder.c also + // allows > LZMA_VLI_MAX when setting uncompressed size. + uncomp_size = opt->ext_size_low + + ((uint64_t)(opt->ext_size_high) << 32); + allow_eopm = (opt->ext_flags & LZMA_LZMA1EXT_ALLOW_EOPM) != 0 + || uncomp_size == LZMA_VLI_UNKNOWN; + } + return_if_error(lzma_lzma_decoder_create( lz, allocator, options, lz_options)); lzma_decoder_reset(lz->coder, options); - lzma_decoder_uncompressed(lz->coder, LZMA_VLI_UNKNOWN); + lzma_decoder_uncompressed(lz->coder, uncomp_size, allow_eopm); return LZMA_OK; } diff -ur xz-5.2.5/src/liblzma/lzma/lzma_decoder.h xz-5.4.3/src/liblzma/lzma/lzma_decoder.h --- xz-5.2.5/src/liblzma/lzma/lzma_decoder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma_decoder.h 2023-05-04 17:21:05 @@ -42,7 +42,7 @@ /// LZMA2 decoders. extern lzma_ret lzma_lzma_decoder_create( lzma_lz_decoder *lz, const lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options); + const lzma_options_lzma *opt, lzma_lz_options *lz_options); /// Gets memory usage without validating lc/lp/pb. This is used by LZMA2 /// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb. diff -ur xz-5.2.5/src/liblzma/lzma/lzma_encoder.c xz-5.4.3/src/liblzma/lzma/lzma_encoder.c --- xz-5.2.5/src/liblzma/lzma/lzma_encoder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma_encoder.c 2023-05-04 17:21:05 @@ -268,6 +268,7 @@ encode_init(lzma_lzma1_encoder *coder, lzma_mf *mf) { assert(mf_position(mf) == 0); + assert(coder->uncomp_size == 0); if (mf->read_pos == mf->read_limit) { if (mf->action == LZMA_RUN) @@ -283,6 +284,7 @@ mf->read_ahead = 0; rc_bit(&coder->rc, &coder->is_match[0][0], 0); rc_bittree(&coder->rc, coder->literal[0], 8, mf->buffer[0]); + ++coder->uncomp_size; } // Initialization is done (except if empty file). @@ -317,21 +319,28 @@ if (!coder->is_initialized && !encode_init(coder, mf)) return LZMA_OK; - // Get the lowest bits of the uncompressed offset from the LZ layer. - uint32_t position = mf_position(mf); + // Encode pending output bytes from the range encoder. + // At the start of the stream, encode_init() encodes one literal. + // Later there can be pending output only with LZMA1 because LZMA2 + // ensures that there is always enough output space. Thus when using + // LZMA2, rc_encode() calls in this function will always return false. + if (rc_encode(&coder->rc, out, out_pos, out_size)) { + // We don't get here with LZMA2. + assert(limit == UINT32_MAX); + return LZMA_OK; + } - while (true) { - // Encode pending bits, if any. Calling this before encoding - // the next symbol is needed only with plain LZMA, since - // LZMA2 always provides big enough buffer to flush - // everything out from the range encoder. For the same reason, - // rc_encode() never returns true when this function is used - // as part of LZMA2 encoder. - if (rc_encode(&coder->rc, out, out_pos, out_size)) { - assert(limit == UINT32_MAX); - return LZMA_OK; - } + // If the range encoder was flushed in an earlier call to this + // function but there wasn't enough output buffer space, those + // bytes would have now been encoded by the above rc_encode() call + // and the stream has now been finished. This can only happen with + // LZMA1 as LZMA2 always provides enough output buffer space. + if (coder->is_flushed) { + assert(limit == UINT32_MAX); + return LZMA_STREAM_END; + } + while (true) { // With LZMA2 we need to take care that compressed size of // a chunk doesn't get too big. // FIXME? Check if this could be improved. @@ -365,38 +374,65 @@ if (coder->fast_mode) lzma_lzma_optimum_fast(coder, mf, &back, &len); else - lzma_lzma_optimum_normal( - coder, mf, &back, &len, position); + lzma_lzma_optimum_normal(coder, mf, &back, &len, + (uint32_t)(coder->uncomp_size)); - encode_symbol(coder, mf, back, len, position); + encode_symbol(coder, mf, back, len, + (uint32_t)(coder->uncomp_size)); - position += len; - } + // If output size limiting is active (out_limit != 0), check + // if encoding this LZMA symbol would make the output size + // exceed the specified limit. + if (coder->out_limit != 0 && rc_encode_dummy( + &coder->rc, coder->out_limit)) { + // The most recent LZMA symbol would make the output + // too big. Throw it away. + rc_forget(&coder->rc); - if (!coder->is_flushed) { - coder->is_flushed = true; + // FIXME: Tell the LZ layer to not read more input as + // it would be waste of time. This doesn't matter if + // output-size-limited encoding is done with a single + // call though. - // We don't support encoding plain LZMA streams without EOPM, - // and LZMA2 doesn't use EOPM at LZMA level. - if (limit == UINT32_MAX) - encode_eopm(coder, position); + break; + } - // Flush the remaining bytes from the range encoder. - rc_flush(&coder->rc); + // This symbol will be encoded so update the uncompressed size. + coder->uncomp_size += len; - // Copy the remaining bytes to the output buffer. If there - // isn't enough output space, we will copy out the remaining - // bytes on the next call to this function by using - // the rc_encode() call in the encoding loop above. + // Encode the LZMA symbol. if (rc_encode(&coder->rc, out, out_pos, out_size)) { + // Once again, this can only happen with LZMA1. assert(limit == UINT32_MAX); return LZMA_OK; } } - // Make it ready for the next LZMA2 chunk. - coder->is_flushed = false; + // Make the uncompressed size available to the application. + if (coder->uncomp_size_ptr != NULL) + *coder->uncomp_size_ptr = coder->uncomp_size; + // LZMA2 doesn't use EOPM at LZMA level. + // + // Plain LZMA streams without EOPM aren't supported except when + // output size limiting is enabled. + if (coder->use_eopm) + encode_eopm(coder, (uint32_t)(coder->uncomp_size)); + + // Flush the remaining bytes from the range encoder. + rc_flush(&coder->rc); + + // Copy the remaining bytes to the output buffer. If there + // isn't enough output space, we will copy out the remaining + // bytes on the next call to this function. + if (rc_encode(&coder->rc, out, out_pos, out_size)) { + // This cannot happen with LZMA2. + assert(limit == UINT32_MAX); + + coder->is_flushed = true; + return LZMA_OK; + } + return LZMA_STREAM_END; } @@ -414,6 +450,23 @@ } +static lzma_ret +lzma_lzma_set_out_limit( + void *coder_ptr, uint64_t *uncomp_size, uint64_t out_limit) +{ + // Minimum output size is 5 bytes but that cannot hold any output + // so we use 6 bytes. + if (out_limit < 6) + return LZMA_BUF_ERROR; + + lzma_lzma1_encoder *coder = coder_ptr; + coder->out_limit = out_limit; + coder->uncomp_size_ptr = uncomp_size; + coder->use_eopm = false; + return LZMA_OK; +} + + //////////////////// // Initialization // //////////////////// @@ -440,7 +493,8 @@ lz_options->dict_size = options->dict_size; lz_options->after_size = LOOP_INPUT_MAX; lz_options->match_len_max = MATCH_LEN_MAX; - lz_options->nice_len = options->nice_len; + lz_options->nice_len = my_max(mf_get_hash_bytes(options->mf), + options->nice_len); lz_options->match_finder = options->mf; lz_options->depth = options->depth; lz_options->preset_dict = options->preset_dict; @@ -546,10 +600,13 @@ extern lzma_ret -lzma_lzma_encoder_create(void **coder_ptr, - const lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options) +lzma_lzma_encoder_create(void **coder_ptr, const lzma_allocator *allocator, + lzma_vli id, const lzma_options_lzma *options, + lzma_lz_options *lz_options) { + assert(id == LZMA_FILTER_LZMA1 || id == LZMA_FILTER_LZMA1EXT + || id == LZMA_FILTER_LZMA2); + // Allocate lzma_lzma1_encoder if it wasn't already allocated. if (*coder_ptr == NULL) { *coder_ptr = lzma_alloc(sizeof(lzma_lzma1_encoder), allocator); @@ -559,10 +616,9 @@ lzma_lzma1_encoder *coder = *coder_ptr; - // Set compression mode. We haven't validates the options yet, - // but it's OK here, since nothing bad happens with invalid - // options in the code below, and they will get rejected by - // lzma_lzma_encoder_reset() call at the end of this function. + // Set compression mode. Note that we haven't validated the options + // yet. Invalid options will get rejected by lzma_lzma_encoder_reset() + // call at the end of this function. switch (options->mode) { case LZMA_MODE_FAST: coder->fast_mode = true; @@ -573,6 +629,18 @@ // Set dist_table_size. // Round the dictionary size up to next 2^n. + // + // Currently the maximum encoder dictionary size + // is 1.5 GiB due to lz_encoder.c and here we need + // to be below 2 GiB to make the rounded up value + // fit in an uint32_t and avoid an infite while-loop + // (and undefined behavior due to a too large shift). + // So do the same check as in LZ encoder, + // limiting to 1.5 GiB. + if (options->dict_size > (UINT32_C(1) << 30) + + (UINT32_C(1) << 29)) + return LZMA_OPTIONS_ERROR; + uint32_t log_size = 0; while ((UINT32_C(1) << log_size) < options->dict_size) ++log_size; @@ -580,10 +648,14 @@ coder->dist_table_size = log_size * 2; // Length encoders' price table size + const uint32_t nice_len = my_max( + mf_get_hash_bytes(options->mf), + options->nice_len); + coder->match_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; + = nice_len + 1 - MATCH_LEN_MIN; coder->rep_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; + = nice_len + 1 - MATCH_LEN_MIN; break; } @@ -598,7 +670,38 @@ coder->is_initialized = options->preset_dict != NULL && options->preset_dict_size > 0; coder->is_flushed = false; + coder->uncomp_size = 0; + coder->uncomp_size_ptr = NULL; + // Output size limitting is disabled by default. + coder->out_limit = 0; + + // Determine if end marker is wanted: + // - It is never used with LZMA2. + // - It is always used with LZMA_FILTER_LZMA1 (unless + // lzma_lzma_set_out_limit() is called later). + // - LZMA_FILTER_LZMA1EXT has a flag for it in the options. + coder->use_eopm = (id == LZMA_FILTER_LZMA1); + if (id == LZMA_FILTER_LZMA1EXT) { + // Check if unsupported flags are present. + if (options->ext_flags & ~LZMA_LZMA1EXT_ALLOW_EOPM) + return LZMA_OPTIONS_ERROR; + + coder->use_eopm = (options->ext_flags + & LZMA_LZMA1EXT_ALLOW_EOPM) != 0; + + // TODO? As long as there are no filters that change the size + // of the data, it is enough to look at lzma_stream.total_in + // after encoding has been finished to know the uncompressed + // size of the LZMA1 stream. But in the future there could be + // filters that change the size of the data and then total_in + // doesn't work as the LZMA1 stream size might be different + // due to another filter in the chain. The problem is simple + // to solve: Add another flag to ext_flags and then set + // coder->uncomp_size_ptr to the address stored in + // lzma_options_lzma.reserved_ptr2 (or _ptr1). + } + set_lz_options(lz_options, options); return lzma_lzma_encoder_reset(coder, options); @@ -607,11 +710,12 @@ static lzma_ret lzma_encoder_init(lzma_lz_encoder *lz, const lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) + lzma_vli id, const void *options, lzma_lz_options *lz_options) { lz->code = &lzma_encode; + lz->set_out_limit = &lzma_lzma_set_out_limit; return lzma_lzma_encoder_create( - &lz->coder, allocator, options, lz_options); + &lz->coder, allocator, id, options, lz_options); } @@ -658,6 +762,9 @@ extern lzma_ret lzma_lzma_props_encode(const void *options, uint8_t *out) { + if (options == NULL) + return LZMA_PROG_ERROR; + const lzma_options_lzma *const opt = options; if (lzma_lzma_lclppb_encode(opt, out)) diff -ur xz-5.2.5/src/liblzma/lzma/lzma_encoder.h xz-5.4.3/src/liblzma/lzma/lzma_encoder.h --- xz-5.2.5/src/liblzma/lzma/lzma_encoder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma_encoder.h 2023-05-04 17:21:05 @@ -40,7 +40,8 @@ /// Initializes raw LZMA encoder; this is used by LZMA2. extern lzma_ret lzma_lzma_encoder_create( void **coder_ptr, const lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options); + lzma_vli id, const lzma_options_lzma *options, + lzma_lz_options *lz_options); /// Resets an already initialized LZMA encoder; this is used by LZMA2. diff -ur xz-5.2.5/src/liblzma/lzma/lzma_encoder_private.h xz-5.4.3/src/liblzma/lzma/lzma_encoder_private.h --- xz-5.2.5/src/liblzma/lzma/lzma_encoder_private.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/lzma/lzma_encoder_private.h 2023-05-04 17:21:05 @@ -72,6 +72,18 @@ /// Range encoder lzma_range_encoder rc; + /// Uncompressed size (doesn't include possible preset dictionary) + uint64_t uncomp_size; + + /// If non-zero, produce at most this much output. + /// Some input may then be missing from the output. + uint64_t out_limit; + + /// If the above out_limit is non-zero, *uncomp_size_ptr is set to + /// the amount of uncompressed data that we were able to fit + /// in the output buffer. + uint64_t *uncomp_size_ptr; + /// State lzma_lzma_state state; @@ -98,6 +110,9 @@ /// True if the range encoder has been flushed, but not all bytes /// have been written to the output buffer yet. bool is_flushed; + + /// True if end of payload marker will be written. + bool use_eopm; uint32_t pos_mask; ///< (1 << pos_bits) - 1 uint32_t literal_context_bits; diff -ur xz-5.2.5/src/liblzma/rangecoder/range_encoder.h xz-5.4.3/src/liblzma/rangecoder/range_encoder.h --- xz-5.2.5/src/liblzma/rangecoder/range_encoder.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/liblzma/rangecoder/range_encoder.h 2023-05-04 17:21:05 @@ -19,9 +19,9 @@ /// Maximum number of symbols that can be put pending into lzma_range_encoder -/// structure between calls to lzma_rc_encode(). For LZMA, 52+5 is enough +/// structure between calls to lzma_rc_encode(). For LZMA, 48+5 is enough /// (match with big distance and length followed by range encoder flush). -#define RC_SYMBOLS_MAX 58 +#define RC_SYMBOLS_MAX 53 typedef struct { @@ -30,6 +30,9 @@ uint32_t range; uint8_t cache; + /// Number of bytes written out by rc_encode() -> rc_shift_low() + uint64_t out_total; + /// Number of symbols in the tables size_t count; @@ -58,12 +61,22 @@ rc->cache_size = 1; rc->range = UINT32_MAX; rc->cache = 0; + rc->out_total = 0; rc->count = 0; rc->pos = 0; } static inline void +rc_forget(lzma_range_encoder *rc) +{ + // This must not be called when rc_encode() is partially done. + assert(rc->pos == 0); + rc->count = 0; +} + + +static inline void rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit) { rc->symbols[rc->count] = bit; @@ -132,6 +145,7 @@ out[*out_pos] = rc->cache + (uint8_t)(rc->low >> 32); ++*out_pos; + ++rc->out_total; rc->cache = 0xFF; } while (--rc->cache_size != 0); @@ -146,7 +160,35 @@ } +// NOTE: The last two arguments are uint64_t instead of size_t because in +// the dummy version these refer to the size of the whole range-encoded +// output stream, not just to the currently available output buffer space. static inline bool +rc_shift_low_dummy(uint64_t *low, uint64_t *cache_size, uint8_t *cache, + uint64_t *out_pos, uint64_t out_size) +{ + if ((uint32_t)(*low) < (uint32_t)(0xFF000000) + || (uint32_t)(*low >> 32) != 0) { + do { + if (*out_pos == out_size) + return true; + + ++*out_pos; + *cache = 0xFF; + + } while (--*cache_size != 0); + + *cache = (*low >> 24) & 0xFF; + } + + ++*cache_size; + *low = (*low & 0x00FFFFFF) << RC_SHIFT_BITS; + + return false; +} + + +static inline bool rc_encode(lzma_range_encoder *rc, uint8_t *out, size_t *out_pos, size_t out_size) { @@ -217,6 +259,83 @@ rc->count = 0; rc->pos = 0; + + return false; +} + + +static inline bool +rc_encode_dummy(const lzma_range_encoder *rc, uint64_t out_limit) +{ + assert(rc->count <= RC_SYMBOLS_MAX); + + uint64_t low = rc->low; + uint64_t cache_size = rc->cache_size; + uint32_t range = rc->range; + uint8_t cache = rc->cache; + uint64_t out_pos = rc->out_total; + + size_t pos = rc->pos; + + while (true) { + // Normalize + if (range < RC_TOP_VALUE) { + if (rc_shift_low_dummy(&low, &cache_size, &cache, + &out_pos, out_limit)) + return true; + + range <<= RC_SHIFT_BITS; + } + + // This check is here because the normalization above must + // be done before flushing the last bytes. + if (pos == rc->count) + break; + + // Encode a bit + switch (rc->symbols[pos]) { + case RC_BIT_0: { + probability prob = *rc->probs[pos]; + range = (range >> RC_BIT_MODEL_TOTAL_BITS) + * prob; + break; + } + + case RC_BIT_1: { + probability prob = *rc->probs[pos]; + const uint32_t bound = prob * (range + >> RC_BIT_MODEL_TOTAL_BITS); + low += bound; + range -= bound; + break; + } + + case RC_DIRECT_0: + range >>= 1; + break; + + case RC_DIRECT_1: + range >>= 1; + low += range; + break; + + case RC_FLUSH: + default: + assert(0); + break; + } + + ++pos; + } + + // Flush the last bytes. This isn't in rc->symbols[] so we do + // it after the above loop to take into account the size of + // the flushing that will be done at the end of the stream. + for (pos = 0; pos < 5; ++pos) { + if (rc_shift_low_dummy(&low, &cache_size, + &cache, &out_pos, out_limit)) + return true; + } return false; } diff -ur xz-5.2.5/src/liblzma/simple/Makefile.inc xz-5.4.3/src/liblzma/simple/Makefile.inc --- xz-5.2.5/src/liblzma/simple/Makefile.inc 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/Makefile.inc 2023-05-04 17:21:05 @@ -42,6 +42,10 @@ liblzma_la_SOURCES += simple/armthumb.c endif +if COND_FILTER_ARM64 +liblzma_la_SOURCES += simple/arm64.c +endif + if COND_FILTER_SPARC liblzma_la_SOURCES += simple/sparc.c endif diff -ur xz-5.2.5/src/liblzma/simple/arm.c xz-5.4.3/src/liblzma/simple/arm.c --- xz-5.2.5/src/liblzma/simple/arm.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/arm.c 2023-05-04 17:21:05 @@ -53,6 +53,7 @@ } +#ifdef HAVE_ENCODER_ARM extern lzma_ret lzma_simple_arm_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -60,8 +61,10 @@ { return arm_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_ARM extern lzma_ret lzma_simple_arm_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -69,3 +72,4 @@ { return arm_coder_init(next, allocator, filters, false); } +#endif Only in xz-5.4.3/src/liblzma/simple: arm64.c diff -ur xz-5.2.5/src/liblzma/simple/armthumb.c xz-5.4.3/src/liblzma/simple/armthumb.c --- xz-5.2.5/src/liblzma/simple/armthumb.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/armthumb.c 2023-05-04 17:21:05 @@ -58,6 +58,7 @@ } +#ifdef HAVE_ENCODER_ARMTHUMB extern lzma_ret lzma_simple_armthumb_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -65,8 +66,10 @@ { return armthumb_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_ARMTHUMB extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -74,3 +77,4 @@ { return armthumb_coder_init(next, allocator, filters, false); } +#endif diff -ur xz-5.2.5/src/liblzma/simple/ia64.c xz-5.4.3/src/liblzma/simple/ia64.c --- xz-5.2.5/src/liblzma/simple/ia64.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/ia64.c 2023-05-04 17:21:05 @@ -94,6 +94,7 @@ } +#ifdef HAVE_ENCODER_IA64 extern lzma_ret lzma_simple_ia64_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -101,8 +102,10 @@ { return ia64_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_IA64 extern lzma_ret lzma_simple_ia64_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -110,3 +113,4 @@ { return ia64_coder_init(next, allocator, filters, false); } +#endif diff -ur xz-5.2.5/src/liblzma/simple/powerpc.c xz-5.4.3/src/liblzma/simple/powerpc.c --- xz-5.2.5/src/liblzma/simple/powerpc.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/powerpc.c 2023-05-04 17:21:05 @@ -58,6 +58,7 @@ } +#ifdef HAVE_ENCODER_POWERPC extern lzma_ret lzma_simple_powerpc_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -65,8 +66,10 @@ { return powerpc_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_POWERPC extern lzma_ret lzma_simple_powerpc_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -74,3 +77,4 @@ { return powerpc_coder_init(next, allocator, filters, false); } +#endif diff -ur xz-5.2.5/src/liblzma/simple/simple_coder.c xz-5.4.3/src/liblzma/simple/simple_coder.c --- xz-5.2.5/src/liblzma/simple/simple_coder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/simple_coder.c 2023-05-04 17:21:05 @@ -139,9 +139,11 @@ return ret; } - // Filter out[]. + // Filter out[] unless there is nothing to filter. + // This way we avoid null pointer + 0 (undefined behavior) + // when out == NULL. const size_t size = *out_pos - out_start; - const size_t filtered = call_filter( + const size_t filtered = size == 0 ? 0 : call_filter( coder, out + out_start, size); const size_t unfiltered = size - filtered; diff -ur xz-5.2.5/src/liblzma/simple/simple_coder.h xz-5.4.3/src/liblzma/simple/simple_coder.h --- xz-5.2.5/src/liblzma/simple/simple_coder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/simple_coder.h 2023-05-04 17:21:05 @@ -61,6 +61,15 @@ const lzma_filter_info *filters); +extern lzma_ret lzma_simple_arm64_encoder_init(lzma_next_coder *next, + const lzma_allocator *allocator, + const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_arm64_decoder_init(lzma_next_coder *next, + const lzma_allocator *allocator, + const lzma_filter_info *filters); + + extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters); diff -ur xz-5.2.5/src/liblzma/simple/sparc.c xz-5.4.3/src/liblzma/simple/sparc.c --- xz-5.2.5/src/liblzma/simple/sparc.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/sparc.c 2023-05-04 17:21:05 @@ -65,6 +65,7 @@ } +#ifdef HAVE_ENCODER_SPARC extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -72,8 +73,10 @@ { return sparc_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_SPARC extern lzma_ret lzma_simple_sparc_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -81,3 +84,4 @@ { return sparc_coder_init(next, allocator, filters, false); } +#endif diff -ur xz-5.2.5/src/liblzma/simple/x86.c xz-5.4.3/src/liblzma/simple/x86.c --- xz-5.2.5/src/liblzma/simple/x86.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/simple/x86.c 2023-05-04 17:21:05 @@ -141,6 +141,7 @@ } +#ifdef HAVE_ENCODER_X86 extern lzma_ret lzma_simple_x86_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -148,8 +149,10 @@ { return x86_coder_init(next, allocator, filters, true); } +#endif +#ifdef HAVE_DECODER_X86 extern lzma_ret lzma_simple_x86_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, @@ -157,3 +160,4 @@ { return x86_coder_init(next, allocator, filters, false); } +#endif diff -ur xz-5.2.5/src/liblzma/validate_map.sh xz-5.4.3/src/liblzma/validate_map.sh --- xz-5.2.5/src/liblzma/validate_map.sh 2020-03-17 17:28:50 +++ xz-5.4.3/src/liblzma/validate_map.sh 2023-05-04 17:21:05 @@ -2,8 +2,80 @@ ############################################################################### # -# Check liblzma.map for certain types of errors +# Check liblzma_*.map for certain types of errors. # +# liblzma_generic.map is for FreeBSD and Solaris and possibly others +# except GNU/Linux. +# +# liblzma_linux.map is for GNU/Linux only. This and the matching extra code +# in the .c files make liblzma >= 5.2.7 compatible with binaries that were +# linked against ill-patched liblzma in RHEL/CentOS 7. By providing the +# compatibility in official XZ Utils release will hopefully prevent people +# from further copying the broken patch to other places when they want +# compatibility with binaries linked on RHEL/CentOS 7. The long version +# of the story: +# +# RHEL/CentOS 7 shipped with 5.1.2alpha, including the threaded +# encoder that is behind #ifdef LZMA_UNSTABLE in the API headers. +# In 5.1.2alpha these symbols are under XZ_5.1.2alpha in liblzma.map. +# API/ABI compatibility tracking isn't done between development +# releases so newer releases didn't have XZ_5.1.2alpha anymore. +# +# Later RHEL/CentOS 7 updated xz to 5.2.2 but they wanted to keep +# the exported symbols compatible with 5.1.2alpha. After checking +# the ABI changes it turned out that >= 5.2.0 ABI is backward +# compatible with the threaded encoder functions from 5.1.2alpha +# (but not vice versa as fixes and extensions to these functions +# were made between 5.1.2alpha and 5.2.0). +# +# In RHEL/CentOS 7, XZ Utils 5.2.2 was patched with +# xz-5.2.2-compat-libs.patch to modify liblzma.map: +# +# - XZ_5.1.2alpha was added with lzma_stream_encoder_mt and +# lzma_stream_encoder_mt_memusage. This matched XZ Utils 5.1.2alpha. +# +# - XZ_5.2 was replaced with XZ_5.2.2. It is clear that this was +# an error; the intention was to keep using XZ_5.2 (XZ_5.2.2 +# has never been used in XZ Utils). So XZ_5.2.2 lists all +# symbols that were listed under XZ_5.2 before the patch. +# lzma_stream_encoder_mt and _mt_memusage are included too so +# they are listed both here and under XZ_5.1.2alpha. +# +# The patch didn't add any __asm__(".symver ...") lines to the .c +# files. Thus the resulting liblzma.so exports the threaded encoder +# functions under XZ_5.1.2alpha only. Listing the two functions +# also under XZ_5.2.2 in liblzma.map has no effect without +# matching .symver lines. +# +# The lack of XZ_5.2 in RHEL/CentOS 7 means that binaries linked +# against unpatched XZ Utils 5.2.x won't run on RHEL/CentOS 7. +# This is unfortunate but this alone isn't too bad as the problem +# is contained within RHEL/CentOS 7 and doesn't affect users +# of other distributions. It could also be fixed internally in +# RHEL/CentOS 7. +# +# The second problem is more serious: In XZ Utils 5.2.2 the API +# headers don't have #ifdef LZMA_UNSTABLE for obvious reasons. +# This is true in RHEL/CentOS 7 version too. Thus now programs +# using new APIs can be compiled without an extra #define. However, +# the programs end up depending on symbol version XZ_5.1.2alpha +# (and possibly also XZ_5.2.2) instead of XZ_5.2 as they would +# with an unpatched XZ Utils 5.2.2. This means that such binaries +# won't run on other distributions shipping XZ Utils >= 5.2.0 as +# they don't provide XZ_5.1.2alpha or XZ_5.2.2; they only provide +# XZ_5.2 (and XZ_5.0). (This includes RHEL/CentOS 8 as the patch +# luckily isn't included there anymore with XZ Utils 5.2.4.) +# +# Binaries built by RHEL/CentOS 7 users get distributed and then +# people wonder why they don't run on some other distribution. +# Seems that people have found out about the patch and been copying +# it to some build scripts, seemingly curing the symptoms but +# actually spreading the illness further and outside RHEL/CentOS 7. +# Adding compatibility in an official XZ Utils release should work +# as a vaccine against this ill patch and stop it from spreading. +# The vaccine is kept GNU/Linux-only as other OSes should be immune +# (hopefully it hasn't spread via some build script to other OSes). +# # Author: Lasse Collin # # This file has been put into the public domain. @@ -18,11 +90,11 @@ cd "$(dirname "$0")" -# Get the list of symbols that aren't defined in liblzma.map. +# Get the list of symbols that aren't defined in liblzma_generic.map. SYMS=$(sed -n 's/^extern LZMA_API([^)]*) \([a-z0-9_]*\)(.*$/\1;/p' \ api/lzma/*.h \ | sort \ - | grep -Fve "$(sed '/[{}:*]/d;/^$/d;s/^ //' liblzma.map)") + | grep -Fve "$(sed '/[{}:*]/d;/^$/d;s/^ //' liblzma_generic.map)") # Check that there are no old alpha or beta versions listed. VER=$(cd ../.. && sh build-aux/version.sh) @@ -30,21 +102,41 @@ case $VER in *alpha | *beta) NAMES=$(sed -n 's/^.*XZ_\([^ ]*\)\(alpha\|beta\) .*$/\1\2/p' \ - liblzma.map | grep -Fv "$VER") + liblzma_generic.map | grep -Fv "$VER") ;; esac # Check for duplicate lines. It can catch missing dependencies. -DUPS=$(sort liblzma.map | sed '/^$/d;/^global:$/d' | uniq -d) +DUPS=$(sort liblzma_generic.map | sed '/^$/d;/^global:$/d' | uniq -d) +# Check that liblzma_linux.map is in sync with liblzma_generic.map. +# The RHEL/CentOS 7 compatibility symbols are in a fixed location +# so it makes it easy to remove them for comparison with liblzma_generic.map. +# +# NOTE: Putting XZ_5.2 before the compatibility symbols XZ_5.1.2alpha +# and XZ_5.2.2 in liblzma_linux.map is important: If liblzma_linux.map is +# incorrectly used without #define HAVE_SYMBOL_VERSIONS_LINUX, only the first +# occurrence of each function name will be used from liblzma_linux.map; +# the rest are ignored by the linker. Thus having XZ_5.2 before the +# compatibility symbols means that @@XZ_5.2 will be used for the symbols +# listed under XZ_5.2 {...} and the same function names later in +# the file under XZ_5.1.2alpha {...} and XZ_5.2.2 {...} will be +# ignored (@XZ_5.1.2alpha or @XZ_5.2.2 won't be added at all when +# the #define HAVE_SYMBOL_VERSIONS_LINUX isn't used). +IN_SYNC= +if ! sed '109,123d' liblzma_linux.map \ + | cmp -s - liblzma_generic.map; then + IN_SYNC=no +fi + # Print error messages if needed. -if test -n "$SYMS$NAMES$DUPS"; then +if test -n "$SYMS$NAMES$DUPS$IN_SYNC"; then echo - echo 'validate_map.sh found problems from liblzma.map:' + echo 'validate_map.sh found problems from liblzma_*.map:' echo if test -n "$SYMS"; then - echo 'liblzma.map lacks the following symbols:' + echo 'liblzma_generic.map lacks the following symbols:' echo "$SYMS" echo fi @@ -58,6 +150,11 @@ if test -n "$DUPS"; then echo 'Duplicate lines:' echo "$DUPS" + echo + fi + + if test -n "$IN_SYNC"; then + echo "liblzma_generic.map and liblzma_linux.map aren't in sync" echo fi diff -ur xz-5.2.5/src/lzmainfo/Makefile.in xz-5.4.3/src/lzmainfo/Makefile.in --- xz-5.2.5/src/lzmainfo/Makefile.in 2020-03-17 17:29:35 +++ xz-5.4.3/src/lzmainfo/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -224,8 +224,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -249,6 +247,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -259,8 +259,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -313,6 +315,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -371,6 +374,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -657,7 +661,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/src/scripts/Makefile.in xz-5.4.3/src/scripts/Makefile.in --- xz-5.2.5/src/scripts/Makefile.in 2020-03-17 17:29:36 +++ xz-5.4.3/src/scripts/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -199,6 +199,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -209,8 +211,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -263,6 +267,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -321,6 +326,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -462,7 +468,6 @@ ctags CTAGS: cscope cscopelist: - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/src/scripts/xzdiff.1 xz-5.4.3/src/scripts/xzdiff.1 --- xz-5.2.5/src/scripts/xzdiff.1 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzdiff.1 2023-05-04 17:21:05 @@ -6,7 +6,7 @@ .\" .\" License: GNU GPLv2+ .\" -.TH XZDIFF 1 "2011-03-19" "Tukaani" "XZ Utils" +.TH XZDIFF 1 "2021-06-04" "Tukaani" "XZ Utils" .SH NAME xzcmp, xzdiff, lzcmp, lzdiff \- compare compressed files .SH SYNOPSIS @@ -34,8 +34,9 @@ .BR lzma (1), .BR gzip (1), .BR bzip2 (1), +.BR lzop (1), or -.BR lzop (1). +.BR zstd (1). All options specified are passed directly to .BR cmp (1) or @@ -54,7 +55,7 @@ .BR cmp (1) or .BR diff (1) -is preserved. +is preserved unless a decompression error occurs; then exit status is 2. .PP The names .B lzcmp @@ -68,6 +69,7 @@ .BR gzip (1), .BR bzip2 (1), .BR lzop (1), +.BR zstd (1), .BR zdiff (1) .SH BUGS Messages from the diff -ur xz-5.2.5/src/scripts/xzdiff.in xz-5.4.3/src/scripts/xzdiff.in --- xz-5.2.5/src/scripts/xzdiff.in 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzdiff.in 2023-05-04 17:21:05 @@ -51,7 +51,7 @@ while :; do case $1 in --h*) printf '%s\n' "$usage" || exit 2; exit;; - --v*) echo "$version" || exit 2; exit;; + --v*) printf '%s\n' "$version" || exit 2; exit;; --) shift; break;; -*\'*) cmp="$cmp '"`printf '%sX\n' "$1" | sed "$escape"`;; -?*) cmp="$cmp '$1'";; @@ -65,14 +65,15 @@ test "X$file" = X- || <"$file" || exit 2 done -xz1=$xz -xz2=$xz +# xz needs -qQ to ignore warnings like unsupported check type. +xz1="$xz -qQ" +xz2="$xz -qQ" xz_status=0 exec 3>&1 if test $# -eq 1; then case $1 in - *[-.]xz | *[-.]lzma | *.t[lx]z) + *[-.]xz | *[-.]lzma | *[-.]lz | *.t[lx]z) ;; *[-.]bz2 | *.tbz | *.tbz2) xz1=bzip2;; @@ -80,19 +81,23 @@ xz1=gzip;; *[-.]lzo | *.tzo) xz1=lzop;; + *[-.]zst | *.tzst) + xz1='zstd -q';; *) - echo >&2 "$0: $1: Unknown compressed file name suffix" + printf '%s\n' "$0: $1: Unknown compressed file name suffix" >&2 exit 2;; esac case $1 in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lzo) - FILE=`expr "X$1" : 'X\(.*\)[-.][abglmoxzZ2]*$'`;; + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lz | *[-.]lzo | *[-.]zst) + FILE=`expr "X$1" : 'X\(.*\)[-.][abglmostxzZ2]*$'`;; *.t[abglx]z) FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;; *.tbz2) FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;; *.tzo) FILE=`expr "X$1" : 'X\(.*[-.]t\)zo$'`ar;; + *.tzst) + FILE=`expr "X$1" : 'X\(.*[-.]t\)zst$'`ar;; esac xz_status=$( exec 4>&1 @@ -103,36 +108,33 @@ *[-.]bz2 | *.tbz | *.tbz2) xz1=bzip2;; *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz1=gzip;; *[-.]lzo | *.tzo) xz1=lzop;; + *[-.]zst | *.tzst) xz1='zstd -q';; esac case $2 in *[-.]bz2 | *.tbz | *.tbz2) xz2=bzip2;; *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=gzip;; *[-.]lzo | *.tzo) xz2=lzop;; + *[-.]zst | *.tzst) xz2='zstd -q';; esac case $1 in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -) + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lz | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -) case "$2" in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -) + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lz | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -) if test "$1$2" = --; then xz_status=$( exec 4>&1 - ($xz1 -cdfq - 4>&-; echo $? >&4) 3>&- | + ($xz1 -cdf - 4>&-; echo $? >&4) 3>&- | eval "$cmp" - - >&3 ) elif # Reject Solaris 8's buggy /bin/bash 2.03. echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then + # NOTE: xz_status will contain two numbers. xz_status=$( exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | - ( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- &-; echo $? >&4) 3>&- | + ( ($xz2 -cdf -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- &3) 5<&0 ) - cmp_status=$? - case $xz_status in - *[1-9]*) xz_status=1;; - *) xz_status=0;; - esac - (exit $cmp_status) else F=`expr "/$2" : '.*/\(.*\)[-.][ablmotxz2]*$'` || F=$prog tmp= @@ -161,10 +163,10 @@ mkdir -- "${TMPDIR-/tmp}/$prog.$$" || exit 2 tmp="${TMPDIR-/tmp}/$prog.$$" fi - $xz2 -cdfq -- "$2" > "$tmp/$F" || exit 2 + $xz2 -cdf -- "$2" > "$tmp/$F" || exit 2 xz_status=$( exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | + ($xz1 -cdf -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$tmp/$F"' >&3 ) cmp_status=$? @@ -175,16 +177,16 @@ *) xz_status=$( exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | + ($xz1 -cdf -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$2"' >&3 );; esac;; *) case "$2" in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -) + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lz | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -) xz_status=$( exec 4>&1 - ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- | + ($xz2 -cdf -- "$2" 4>&-; echo $? >&4) 3>&- | eval "$cmp" '"$1"' - >&3 );; *) @@ -192,10 +194,22 @@ esac;; esac else - echo >&2 "$0: Invalid number of operands; try \`${0##*/} --help' for help" + printf '%s\n' "$0: Invalid number of operands; try \`${0##*/} --help' for help" >&2 exit 2 fi cmp_status=$? -test "$xz_status" -eq 0 || exit 2 +for num in $xz_status ; do + # 0 from decompressor means successful decompression. SIGPIPE from + # decompressor is possible when diff or cmp exits before the whole file + # has been decompressed. In that case we want to retain the exit status + # from diff or cmp. Note that using "trap '' PIPE" is not possible + # because gzip changes its behavior (including exit status) if SIGPIPE + # is ignored. + test "$num" -eq 0 && continue + test "$num" -ge 128 \ + && test "$(kill -l "$num" 2> /dev/null)" = "PIPE" \ + && continue + exit 2 +done exit $cmp_status diff -ur xz-5.2.5/src/scripts/xzgrep.1 xz-5.4.3/src/scripts/xzgrep.1 --- xz-5.2.5/src/scripts/xzgrep.1 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzgrep.1 2023-05-04 17:21:05 @@ -6,7 +6,7 @@ .\" .\" License: GNU GPLv2+ .\" -.TH XZGREP 1 "2011-03-19" "Tukaani" "XZ Utils" +.TH XZGREP 1 "2022-07-19" "Tukaani" "XZ Utils" .SH NAME xzgrep \- search compressed files for a regular expression .SH SYNOPSIS @@ -14,22 +14,22 @@ .RI [ grep_options ] .RB [ \-e ] .I pattern -.IR file "..." +.RI [ file... ] .br .B xzegrep -.RB ... +\&... .br .B xzfgrep -.RB ... +\&... .br .B lzgrep -.RB ... +\&... .br .B lzegrep -.RB ... +\&... .br .B lzfgrep -.RB ... +\&... .SH DESCRIPTION .B xzgrep invokes @@ -41,8 +41,9 @@ .BR lzma (1), .BR gzip (1), .BR bzip2 (1), +.BR lzop (1), or -.BR lzop (1). +.BR zstd (1). All options specified are passed directly to .BR grep (1). .PP @@ -54,8 +55,9 @@ When reading from standard input, .BR gzip (1), .BR bzip2 (1), +.BR lzop (1), and -.BR lzop (1) +.BR zstd (1) compressed files are not supported. .PP If @@ -65,9 +67,9 @@ or .B xzfgrep then -.BR egrep (1) +.B grep \-E or -.BR fgrep (1) +.B grep \-F is used instead of .BR grep (1). The same applies to names @@ -76,7 +78,19 @@ and .BR lzfgrep , which are provided for backward compatibility with LZMA Utils. -.PP +.SH EXIT STATUS +.TP +0 +At least one match was found from at least one of the input files. +No errors occurred. +.TP +1 +No matches were found from any of the input files. +No errors occurred. +.TP +>1 +One or more errors occurred. +It is unknown if matches were found. .SH ENVIRONMENT .TP .B GREP @@ -86,13 +100,14 @@ .B xzgrep uses it instead of .BR grep (1), -.BR egrep (1), +.BR "grep \-E" , or -.BR fgrep (1). +.BR "grep \-F" . .SH "SEE ALSO" .BR grep (1), .BR xz (1), .BR gzip (1), .BR bzip2 (1), .BR lzop (1), +.BR zstd (1), .BR zgrep (1) diff -ur xz-5.2.5/src/scripts/xzgrep.in xz-5.4.3/src/scripts/xzgrep.in --- xz-5.2.5/src/scripts/xzgrep.in 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzgrep.in 2023-05-04 17:21:05 @@ -29,8 +29,8 @@ unset GZIP BZIP BZIP2 LZOP case ${0##*/} in - *egrep*) prog=xzegrep; grep=${GREP:-egrep};; - *fgrep*) prog=xzfgrep; grep=${GREP:-fgrep};; + *egrep*) prog=xzegrep; grep=${GREP:-grep -E};; + *fgrep*) prog=xzfgrep; grep=${GREP:-grep -F};; *) prog=xzgrep; grep=${GREP:-grep};; esac @@ -57,22 +57,45 @@ no_filename=0 with_filename=0 +# See if -H and --label options are supported (GNU and *BSDs). +if test f:x = "$(eval "echo x | $grep -H --label=f x 2> /dev/null")"; then + grep_supports_label=1 +else + grep_supports_label=0 +fi + while test $# -ne 0; do option=$1 shift optarg= case $option in - (-[0123456789abcdhHiIKLlnoqrRsTuUvVwxyzZ]?*) - arg2=-\'$(expr "X${option}X" : 'X-.[0-9]*\(.*\)' | sed "$escape") + (-[0123456789abcdEFGhHiIKlLnoPqrRsTuUvVwxyzZ]*[!0123456789]*) + # Something like -Fiv was specified, that is, $option contains more + # than one option of which the first option (in this example -F) + # doesn't take an argument. Split the first option into a standalone + # argument and continue parsing the rest of the options (in this example, + # replace -Fiv with -iv in the argument list and set option=-F). + # + # If there are digits [0-9] they are treated as if they were a single + # option character because this syntax is an alias for -C for GNU grep. + # For example, "grep -25F" is equivalent to "grep -C25 -F". If only + # digits are specified like "grep -25" we don't get here because the + # above pattern in the case-statement doesn't match such strings. + arg2=-\'$(LC_ALL=C expr "X${option}X" : 'X-.[0-9]*\(.*\)' | + LC_ALL=C sed "$escape") eval "set -- $arg2 "'${1+"$@"}' - option=$(expr "X$option" : 'X\(-.[0-9]*\)');; + option=$(LC_ALL=C expr "X$option" : 'X\(-.[0-9]*\)');; (--binary-*=* | --[lm]a*=* | --reg*=*) + # These options require an argument and an argument has been provided + # with the --foo=argument syntax. All is good. ;; - (-[ABCDefm] | --binary-* | --file | --[lm]a* | --reg*) + (-[ABCDefmX] | --binary-* | --file | --[lm]a* | --reg*) + # These options require an argument which should now be in $1. + # If it isn't, display an error and exit. case ${1?"$option option requires an argument"} in (*\'*) - optarg=" '"$(printf '%sX\n' "$1" | sed "$escape");; + optarg=" '"$(printf '%sX\n' "$1" | LC_ALL=C sed "$escape");; (*) optarg=" '$1'";; esac @@ -84,7 +107,8 @@ (*) case $option in (*\'*) - operands="$operands '"$(printf '%sX\n' "$option" | sed "$escape");; + operands="$operands '"$(printf '%sX\n' "$option" | + LC_ALL=C sed "$escape");; (*) operands="$operands '$option'";; esac @@ -99,7 +123,7 @@ (-[ef]* | --file | --file=* | --reg*) have_pat=1;; (--h | --he | --hel | --help) - echo "$usage" || exit 2 + printf '%s\n' "$usage" || exit 2 exit;; (-H | --wi | --wit | --with | --with- | --with-f | --with-fi \ | --with-fil | --with-file | --with-filen | --with-filena | --with-filenam \ @@ -115,13 +139,13 @@ (-h | --no-f*) no_filename=1;; (-V | --v | --ve | --ver | --vers | --versi | --versio | --version) - echo "$version" || exit 2 + printf '%s\n' "$version" || exit 2 exit;; esac case $option in (*\'?*) - option=\'$(expr "X${option}X" : 'X\(.*\)' | sed "$escape");; + option=\'$(printf '%sX\n' "$option" | LC_ALL=C sed "$escape");; (*) option="'$option'";; esac @@ -129,18 +153,14 @@ grep="$grep $option$optarg" done -if test $files_with_matches -eq 1 || test $files_without_matches -eq 1; then - grep="$grep -q" -fi - eval "set -- $operands "'${1+"$@"}' if test $have_pat -eq 0; then case ${1?"Missing pattern; try \`${0##*/} --help' for help"} in (*\'*) - grep="$grep -- '"$(printf '%sX\n' "$1" | sed "$escape");; + grep="$grep -e '"$(printf '%sX\n' "$1" | LC_ALL=C sed "$escape");; (*) - grep="$grep -- '$1'";; + grep="$grep -e '$1'";; esac shift fi @@ -156,19 +176,22 @@ for i; do case $i in - *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) uncompress="gzip -cdfq";; - *[-.]bz2 | *[-.]tbz | *.tbz2) uncompress="bzip2 -cdfq";; - *[-.]lzo | *[-.]tzo) uncompress="lzop -cdfq";; - *) uncompress="$xz -cdfq";; + *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) uncompress="gzip -cdf";; + *[-.]bz2 | *[-.]tbz | *.tbz2) uncompress="bzip2 -cdf";; + *[-.]lzo | *[-.]tzo) uncompress="lzop -cdf";; + *[-.]zst | *[-.]tzst) uncompress="zstd -cdfq";; # zstd needs -q. + *) uncompress="$xz -cdfqQ";; # -qQ to ignore warnings like unsupp. check. esac - # Fail if xz or grep (or sed) fails. + # xz_status will hold the decompressor's exit status. + # Exit status of grep (and in rare cases, printf or sed) is + # available as the exit status of this assignment command. xz_status=$( exec 5>&1 ($uncompress -- "$i" 5>&-; echo $? >&5) 3>&- | if test $files_with_matches -eq 1; then - eval "$grep" && { printf '%s\n' "$i" || exit 2; } + eval "$grep -q" && { printf '%s\n' "$i" || exit 2; } elif test $files_without_matches -eq 1; then - eval "$grep" || { + eval "$grep -q" || { r=$? if test $r -eq 1; then printf '%s\n' "$i" || r=2 @@ -178,39 +201,98 @@ elif test $with_filename -eq 0 && { test $# -eq 1 || test $no_filename -eq 1; }; then eval "$grep" + elif test $grep_supports_label -eq 1; then + # The grep implementation in use allows us to specify the filename + # that grep will prefix to the output lines. This is faster and + # less prone to security bugs than the fallback method that uses sed. + # This also avoids confusing output with GNU grep >= 3.5 (2020-09-27) + # which prints "binary file matches" to stderr instead of stdout. + # + # If reading from stdin, let grep use whatever name it prefers for + # stdin. With GNU grep it is a locale-specific translated string. + if test "x$i" = "x-"; then + eval "$grep -H" + else + eval "$grep -H --label \"\$i\"" + fi else + # Append a colon so that the last character will never be a newline + # which would otherwise get lost in shell command substitution. + i="$i:" + + # Escape & \ | and newlines only if such characters are present + # (speed optimization). case $i in (*' '* | *'&'* | *'\'* | *'|'*) - i=$(printf '%s\n' "$i" | - sed ' - $!N - $s/[&\|]/\\&/g - $s/\n/\\n/g - ');; + # If sed fails, set i to a known safe string to ensure that + # failing sed did not create a half-escaped dangerous string. + i=$(printf '%s\n' "$i" | LC_ALL=C sed 's/[&\|]/\\&/g; $!s/$/\\/') || + i='(unknown filename):';; esac - sed_script="s|^|$i:|" - # Fail if grep or sed fails. + # $i already ends with a colon so do not add it here. + sed_script="s|^|$i|" + + # If grep or sed fails, pick the larger value of the two exit statuses. + # If sed fails, use at least 2 since we use >= 2 to indicate errors. r=$( exec 4>&1 - (eval "$grep" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&- - ) || r=2 + (eval "$grep" 4>&-; echo $? >&4) 3>&- | + LC_ALL=C sed "$sed_script" >&3 4>&- + ) || { + sed_status=$? + test "$sed_status" -lt 2 && sed_status=2 + test "$r" -lt "$sed_status" && r=$sed_status + } exit $r fi >&3 5>&- ) r=$? - # fail occurred previously, nothing worse can happen - test $res -gt 1 && continue + # If grep or sed or other non-decompression command failed with a signal, + # exit immediately and ignore the possible remaining files. + # + # NOTE: Instead of 128 + signal_number, some shells use + # 256 + signal_number (ksh) or 384 + signal_number (yash). + # This is fine for us since their "exit" and "kill -l" commands take + # this into account. (At least the versions I tried do but there is + # a report of an old ksh variant whose "exit" truncates the exit status + # to 8 bits without any special handling for values indicating a signal.) + test "$r" -ge 128 && exit "$r" - test "$xz_status" -eq 0 || test "$xz_status" -eq 2 \ - || test "$(kill -l "$xz_status" 2> /dev/null)" = "PIPE" || r=2 + if test -z "$xz_status"; then + # Something unusual happened, for example, we got a signal and + # the exit status of the decompressor was never echoed and thus + # $xz_status is empty. Exit immediately and ignore the possible + # remaining files. + exit 2 + elif test "$xz_status" -ge 128; then + # The decompressor died due to a signal. SIGPIPE is ignored since it can + # occur if grep exits before the whole file has been decompressed (grep -q + # can do that). If the decompressor died with some other signal, exit + # immediately and ignore the possible remaining files. + test "$(kill -l "$xz_status" 2> /dev/null)" != "PIPE" && exit "$xz_status" + elif test "$xz_status" -gt 0; then + # Decompression failed but we will continue with the remaining + # files anwyway. Set exit status to at least 2 to indicate an error. + test "$r" -lt 2 && r=2 + fi - # still no match - test $r -eq 1 && continue - - # 0 == match, >=2 == fail - res=$r + # Since res=1 is the initial value, we only need to care about + # matches (r == 0) and errors (r >= 2) here; r == 1 can be ignored. + if test "$r" -ge 2; then + # An error occurred in decompressor, grep, or some other command. Update + # res unless a larger error code has been seen with an earlier file. + test "$res" -lt "$r" && res=$r + elif test "$r" -eq 0; then + # grep found a match and no errors occurred. Update res if no errors have + # occurred with earlier files. + test "$res" -eq 1 && res=0 + fi done -exit $res + +# 0: At least one file matched and no errors occurred. +# 1: No matches were found and no errors occurred. +# >=2: Error. It's unknown if matches were found. +exit "$res" diff -ur xz-5.2.5/src/scripts/xzless.in xz-5.4.3/src/scripts/xzless.in --- xz-5.2.5/src/scripts/xzless.in 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzless.in 2023-05-04 17:21:05 @@ -33,8 +33,8 @@ Report bugs to <@PACKAGE_BUGREPORT@>." case $1 in - --help) echo "$usage" || exit 2; exit;; - --version) echo "$version" || exit 2; exit;; + --help) printf '%s\n' "$usage" || exit 2; exit;; + --version) printf '%s\n' "$version" || exit 2; exit;; esac if test "${LESSMETACHARS+set}" != set; then @@ -47,12 +47,12 @@ LESSMETACHARS="$space$tab$nl'"';*?"()<>[|&^`#\$%=~' fi -if test "$(less -V | { read _ ver _ && echo ${ver}; })" -ge 429; then +if test "$(less -V | { read _ ver _ && echo ${ver%%.*}; })" -ge 429; then # less 429 or later: LESSOPEN pipe will be used on # standard input if $LESSOPEN begins with |-. - LESSOPEN="|-$xz -cdfq -- %s" + LESSOPEN="|-$xz -cdfqQ -- %s" else - LESSOPEN="|$xz -cdfq -- %s" + LESSOPEN="|$xz -cdfqQ -- %s" fi export LESSMETACHARS LESSOPEN diff -ur xz-5.2.5/src/scripts/xzmore.in xz-5.4.3/src/scripts/xzmore.in --- xz-5.2.5/src/scripts/xzmore.in 2020-03-17 17:28:50 +++ xz-5.4.3/src/scripts/xzmore.in 2023-05-04 17:21:05 @@ -31,8 +31,8 @@ Report bugs to <@PACKAGE_BUGREPORT@>." case $1 in - --help) echo "$usage" || exit 2; exit;; - --version) echo "$version" || exit 2; exit;; + --help) printf '%s\n' "$usage" || exit 2; exit;; + --version) printf '%s\n' "$version" || exit 2; exit;; esac oldtty=`stty -g 2>/dev/null` @@ -50,9 +50,9 @@ if test $# = 0; then if test -t 0; then - echo "$usage"; exit 1 + printf '%s\n' "$usage"; exit 1 else - $xz -cdfq | eval "${PAGER:-more}" + $xz -cdfqQ | eval "${PAGER:-more}" fi else FIRST=1 @@ -69,8 +69,8 @@ esac fi if test "$ANS" != 's'; then - echo "------> $FILE <------" - $xz -cdfq -- "$FILE" | eval "${PAGER:-more}" + printf '%s\n' "------> $FILE <------" + $xz -cdfqQ -- "$FILE" | eval "${PAGER:-more}" fi if test -t 1; then FIRST=0 diff -ur xz-5.2.5/src/xz/Makefile.in xz-5.4.3/src/xz/Makefile.in --- xz-5.2.5/src/xz/Makefile.in 2020-03-17 17:29:36 +++ xz-5.4.3/src/xz/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -246,8 +246,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -271,6 +269,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -281,8 +281,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -335,6 +337,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -393,6 +396,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -897,7 +901,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/src/xz/args.c xz-5.4.3/src/xz/args.c --- xz-5.2.5/src/xz/args.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/args.c 2023-05-04 17:21:05 @@ -29,19 +29,29 @@ const char stdin_filename[] = "(stdin)"; -/// Parse and set the memory usage limit for compression and/or decompression. +/// Parse and set the memory usage limit for compression, decompression, +/// and/or multithreaded decompression. static void -parse_memlimit(const char *name, const char *name_percentage, char *str, - bool set_compress, bool set_decompress) +parse_memlimit(const char *name, const char *name_percentage, const char *str, + bool set_compress, bool set_decompress, bool set_mtdec) { bool is_percentage = false; uint64_t value; const size_t len = strlen(str); if (len > 0 && str[len - 1] == '%') { - str[len - 1] = '\0'; + // Make a copy so that we can get rid of %. + // + // In the past str wasn't const and we modified it directly + // but that modified argv[] and thus affected what was visible + // in "ps auxf" or similar tools which was confusing. For + // example, --memlimit=50% would show up as --memlimit=50 + // since the percent sign was overwritten here. + char *s = xstrdup(str); + s[len - 1] = '\0'; is_percentage = true; - value = str_to_uint64(name_percentage, str, 1, 100); + value = str_to_uint64(name_percentage, s, 1, 100); + free(s); } else { // On 32-bit systems, SIZE_MAX would make more sense than // UINT64_MAX. But use UINT64_MAX still so that scripts @@ -49,15 +59,19 @@ value = str_to_uint64(name, str, 0, UINT64_MAX); } - hardware_memlimit_set( - value, set_compress, set_decompress, is_percentage); + hardware_memlimit_set(value, set_compress, set_decompress, set_mtdec, + is_percentage); return; } static void -parse_block_list(char *str) +parse_block_list(const char *str_const) { + // We need a modifiable string in the for-loop. + char *str_start = xstrdup(str_const); + char *str = str_start; + // It must be non-empty and not begin with a comma. if (str[0] == '\0' || str[0] == ',') message_fatal(_("%s: Invalid argument to --block-list"), str); @@ -112,6 +126,8 @@ // Terminate the array. opt_block_list[count] = 0; + + free(str_start); return; } @@ -125,6 +141,7 @@ OPT_IA64, OPT_ARM, OPT_ARMTHUMB, + OPT_ARM64, OPT_SPARC, OPT_DELTA, OPT_LZMA1, @@ -138,6 +155,7 @@ OPT_BLOCK_LIST, OPT_MEM_COMPRESS, OPT_MEM_DECOMPRESS, + OPT_MEM_MT_DECOMPRESS, OPT_NO_ADJUST, OPT_INFO_MEMORY, OPT_ROBOT, @@ -176,6 +194,7 @@ { "block-list", required_argument, NULL, OPT_BLOCK_LIST }, { "memlimit-compress", required_argument, NULL, OPT_MEM_COMPRESS }, { "memlimit-decompress", required_argument, NULL, OPT_MEM_DECOMPRESS }, + { "memlimit-mt-decompress", required_argument, NULL, OPT_MEM_MT_DECOMPRESS }, { "memlimit", required_argument, NULL, 'M' }, { "memory", required_argument, NULL, 'M' }, // Old alias { "no-adjust", no_argument, NULL, OPT_NO_ADJUST }, @@ -194,6 +213,7 @@ { "ia64", optional_argument, NULL, OPT_IA64 }, { "arm", optional_argument, NULL, OPT_ARM }, { "armthumb", optional_argument, NULL, OPT_ARMTHUMB }, + { "arm64", optional_argument, NULL, OPT_ARM64 }, { "sparc", optional_argument, NULL, OPT_SPARC }, { "delta", optional_argument, NULL, OPT_DELTA }, @@ -225,20 +245,27 @@ case OPT_MEM_COMPRESS: parse_memlimit("memlimit-compress", "memlimit-compress%", optarg, - true, false); + true, false, false); break; // --memlimit-decompress case OPT_MEM_DECOMPRESS: parse_memlimit("memlimit-decompress", "memlimit-decompress%", optarg, - false, true); + false, true, false); break; + // --memlimit-mt-decompress + case OPT_MEM_MT_DECOMPRESS: + parse_memlimit("memlimit-mt-decompress", + "memlimit-mt-decompress%", optarg, + false, false, true); + break; + // --memlimit case 'M': parse_memlimit("memlimit", "memlimit%", optarg, - true, true); + true, true, true); break; // --suffix @@ -246,11 +273,23 @@ suffix_set(optarg); break; - case 'T': + case 'T': { + // Since xz 5.4.0: Ignore leading '+' first. + const char *s = optarg; + if (optarg[0] == '+') + ++s; + // The max is from src/liblzma/common/common.h. - hardware_threads_set(str_to_uint64("threads", - optarg, 0, 16384)); + uint32_t t = str_to_uint64("threads", s, 0, 16384); + + // If leading '+' was used then use multi-threaded + // mode even if exactly one thread was specified. + if (t == 1 && optarg[0] == '+') + t = UINT32_MAX; + + hardware_threads_set(t); break; + } // --version case 'V': @@ -360,6 +399,11 @@ options_bcj(optarg)); break; + case OPT_ARM64: + coder_add_filter(LZMA_FILTER_ARM64, + options_bcj(optarg)); + break; + case OPT_SPARC: coder_add_filter(LZMA_FILTER_SPARC, options_bcj(optarg)); @@ -395,8 +439,9 @@ { "xz", FORMAT_XZ }, { "lzma", FORMAT_LZMA }, { "alone", FORMAT_LZMA }, - // { "gzip", FORMAT_GZIP }, - // { "gz", FORMAT_GZIP }, +#ifdef HAVE_LZIP_DECODER + { "lzip", FORMAT_LZIP }, +#endif { "raw", FORMAT_RAW }, }; @@ -475,7 +520,7 @@ "or `--files0'.")); if (optarg == NULL) { - args->files_name = (char *)stdin_filename; + args->files_name = stdin_filename; args->files_file = stdin; } else { args->files_name = optarg; @@ -651,6 +696,12 @@ "at build time")); #endif +#ifdef HAVE_LZIP_DECODER + if (opt_mode == MODE_COMPRESS && opt_format == FORMAT_LZIP) + message_fatal(_("Compression of lzip files (.lz) " + "is not supported")); +#endif + // Never remove the source file when the destination is not on disk. // In test mode the data is written nowhere, but setting opt_stdout // will make the rest of the code behave well. @@ -669,8 +720,17 @@ // be done also when uncompressing raw data, since for raw decoding // the options given on the command line are used to know what kind // of raw data we are supposed to decode. - if (opt_mode == MODE_COMPRESS || opt_format == FORMAT_RAW) + if (opt_mode == MODE_COMPRESS || (opt_format == FORMAT_RAW + && opt_mode != MODE_LIST)) coder_set_compression_settings(); + + // If raw format is used and a custom suffix is not provided, + // then only stdout mode can be used when compressing or decompressing. + if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout + && (opt_mode == MODE_COMPRESS + || opt_mode == MODE_DECOMPRESS)) + message_fatal(_("With --format=raw, --suffix=.SUF is " + "required unless writing to stdout")); // If no filenames are given, use stdin. if (argv[optind] == NULL && args->files_name == NULL) { diff -ur xz-5.2.5/src/xz/args.h xz-5.4.3/src/xz/args.h --- xz-5.2.5/src/xz/args.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/args.h 2023-05-04 17:21:05 @@ -19,7 +19,7 @@ /// Name of the file from which to read filenames. This is NULL /// if --files or --files0 was not used. - char *files_name; + const char *files_name; /// File opened for reading from which filenames are read. This is /// non-NULL only if files_name is non-NULL. diff -ur xz-5.2.5/src/xz/coder.c xz-5.4.3/src/xz/coder.c --- xz-5.2.5/src/xz/coder.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/coder.c 2023-05-04 17:21:05 @@ -51,7 +51,12 @@ /// This becomes false if the --check=CHECK option is used. static bool check_default = true; -#if defined(HAVE_ENCODERS) && defined(MYTHREAD_ENABLED) +/// Indicates if unconsumed input is allowed to remain after +/// decoding has successfully finished. This is set for each file +/// in coder_init(). +static bool allow_trailing_input; + +#ifdef MYTHREAD_ENABLED static lzma_mt mt_options = { .flags = 0, .timeout = 300, @@ -136,6 +141,11 @@ extern void coder_set_compression_settings(void) { +#ifdef HAVE_LZIP_DECODER + // .lz compression isn't supported. + assert(opt_format != FORMAT_LZIP); +#endif + // The default check type is CRC64, but fallback to CRC32 // if CRC64 isn't supported by the copy of liblzma we are // using. CRC32 is always supported. @@ -211,7 +221,7 @@ } } - if (hardware_threads_get() > 1) { + if (hardware_threads_is_mt()) { message(V_WARNING, _("Switching to single-threaded " "mode due to --flush-timeout")); hardware_threads_set(1); @@ -220,12 +230,16 @@ // Get the memory usage. Note that if --format=raw was used, // we can be decompressing. - const uint64_t memory_limit = hardware_memlimit_get(opt_mode); + // + // If multithreaded .xz compression is done, this value will be + // replaced. + uint64_t memory_limit = hardware_memlimit_get(opt_mode); uint64_t memory_usage = UINT64_MAX; if (opt_mode == MODE_COMPRESS) { #ifdef HAVE_ENCODERS # ifdef MYTHREAD_ENABLED - if (opt_format == FORMAT_XZ && hardware_threads_get() > 1) { + if (opt_format == FORMAT_XZ && hardware_threads_is_mt()) { + memory_limit = hardware_memlimit_mtenc_get(); mt_options.threads = hardware_threads_get(); mt_options.block_size = opt_block_size; mt_options.check = check; @@ -269,47 +283,90 @@ if (memory_usage <= memory_limit) return; - // If --no-adjust was used or we didn't find LZMA1 or - // LZMA2 as the last filter, give an error immediately. - // --format=raw implies --no-adjust. - if (!opt_auto_adjust || opt_format == FORMAT_RAW) + // With --format=raw settings are never adjusted to meet + // the memory usage limit. + if (opt_format == FORMAT_RAW) memlimit_too_small(memory_usage); assert(opt_mode == MODE_COMPRESS); #ifdef HAVE_ENCODERS # ifdef MYTHREAD_ENABLED - if (opt_format == FORMAT_XZ && mt_options.threads > 1) { + if (opt_format == FORMAT_XZ && hardware_threads_is_mt()) { // Try to reduce the number of threads before // adjusting the compression settings down. - do { - // FIXME? The real single-threaded mode has - // lower memory usage, but it's not comparable - // because it doesn't write the size info - // into Block Headers. - if (--mt_options.threads == 0) - memlimit_too_small(memory_usage); - + while (mt_options.threads > 1) { + // Reduce the number of threads by one and check + // the memory usage. + --mt_options.threads; memory_usage = lzma_stream_encoder_mt_memusage( &mt_options); if (memory_usage == UINT64_MAX) message_bug(); - } while (memory_usage > memory_limit); + if (memory_usage <= memory_limit) { + // The memory usage is now low enough. + message(V_WARNING, _("Reduced the number of " + "threads from %s to %s to not exceed " + "the memory usage limit of %s MiB"), + uint64_to_str( + hardware_threads_get(), 0), + uint64_to_str(mt_options.threads, 1), + uint64_to_str(round_up_to_mib( + memory_limit), 2)); + return; + } + } - message(V_WARNING, _("Adjusted the number of threads " - "from %s to %s to not exceed " - "the memory usage limit of %s MiB"), - uint64_to_str(hardware_threads_get(), 0), - uint64_to_str(mt_options.threads, 1), - uint64_to_str(round_up_to_mib( - memory_limit), 2)); + // If the memory usage limit is only a soft limit (automatic + // number of threads and no --memlimit-compress), the limit + // is only used to reduce the number of threads and once at + // just one thread, the limit is completely ignored. This + // way -T0 won't use insane amount of memory but at the same + // time the soft limit will never make xz fail and never make + // xz change settings that would affect the compressed output. + if (hardware_memlimit_mtenc_is_default()) { + message(V_WARNING, _("Reduced the number of threads " + "from %s to one. The automatic memory usage " + "limit of %s MiB is still being exceeded. " + "%s MiB of memory is required. " + "Continuing anyway."), + uint64_to_str(hardware_threads_get(), 0), + uint64_to_str( + round_up_to_mib(memory_limit), 1), + uint64_to_str( + round_up_to_mib(memory_usage), 2)); + return; + } + + // If --no-adjust was used, we cannot drop to single-threaded + // mode since it produces different compressed output. + // + // NOTE: In xz 5.2.x, --no-adjust also prevented reducing + // the number of threads. This changed in 5.3.3alpha. + if (!opt_auto_adjust) + memlimit_too_small(memory_usage); + + // Switch to single-threaded mode. It uses + // less memory than using one thread in + // the multithreaded mode but the output + // is also different. + hardware_threads_set(1); + memory_usage = lzma_raw_encoder_memusage(filters); + message(V_WARNING, _("Switching to single-threaded mode " + "to not exceed the memory usage limit of %s MiB"), + uint64_to_str(round_up_to_mib(memory_limit), 0)); } # endif if (memory_usage <= memory_limit) return; + // Don't adjust LZMA2 or LZMA1 dictionary size if --no-adjust + // was specified as that would change the compressed output. + if (!opt_auto_adjust) + memlimit_too_small(memory_usage); + // Look for the last filter if it is LZMA2 or LZMA1, so we can make // it use less RAM. With other filters we don't know what to do. size_t i = 0; @@ -423,7 +480,19 @@ return true; } + + +#ifdef HAVE_LZIP_DECODER +/// Return true if the data in in_buf seems to be in the .lz format. +static bool +is_format_lzip(void) +{ + static const uint8_t magic[4] = { 0x4C, 0x5A, 0x49, 0x50 }; + return strm.avail_in >= sizeof(magic) + && memcmp(in_buf.u8, magic, sizeof(magic)) == 0; +} #endif +#endif /// Detect the input file type (for now, this done only when decompressing), @@ -436,6 +505,12 @@ { lzma_ret ret = LZMA_PROG_ERROR; + // In most cases if there is input left when coding finishes, + // something has gone wrong. Exceptions are --single-stream + // and decoding .lz files which can contain trailing non-.lz data. + // These will be handled later in this function. + allow_trailing_input = false; + if (opt_mode == MODE_COMPRESS) { #ifdef HAVE_ENCODERS switch (opt_format) { @@ -446,7 +521,7 @@ case FORMAT_XZ: # ifdef MYTHREAD_ENABLED - if (hardware_threads_get() > 1) + if (hardware_threads_is_mt()) ret = lzma_stream_encoder_mt( &strm, &mt_options); else @@ -459,6 +534,14 @@ ret = lzma_alone_encoder(&strm, filters[0].options); break; +# ifdef HAVE_LZIP_DECODER + case FORMAT_LZIP: + // args.c should disallow this. + assert(0); + ret = LZMA_PROG_ERROR; + break; +# endif + case FORMAT_RAW: ret = lzma_raw_encoder(&strm, filters); break; @@ -475,7 +558,9 @@ else flags |= LZMA_TELL_UNSUPPORTED_CHECK; - if (!opt_single_stream) + if (opt_single_stream) + allow_trailing_input = true; + else flags |= LZMA_CONCATENATED; // We abuse FORMAT_AUTO to indicate unknown file format, @@ -484,8 +569,14 @@ switch (opt_format) { case FORMAT_AUTO: + // .lz is checked before .lzma since .lzma detection + // is more complicated (no magic bytes). if (is_format_xz()) init_format = FORMAT_XZ; +# ifdef HAVE_LZIP_DECODER + else if (is_format_lzip()) + init_format = FORMAT_LZIP; +# endif else if (is_format_lzma()) init_format = FORMAT_LZMA; break; @@ -500,6 +591,13 @@ init_format = FORMAT_LZMA; break; +# ifdef HAVE_LZIP_DECODER + case FORMAT_LZIP: + if (is_format_lzip()) + init_format = FORMAT_LZIP; + break; +# endif + case FORMAT_RAW: init_format = FORMAT_RAW; break; @@ -513,16 +611,42 @@ // is needed, because we don't want to do use // passthru mode with --test. if (opt_mode == MODE_DECOMPRESS - && opt_stdout && opt_force) + && opt_stdout && opt_force) { + // These are needed for progress info. + strm.total_in = 0; + strm.total_out = 0; return CODER_INIT_PASSTHRU; + } ret = LZMA_FORMAT_ERROR; break; case FORMAT_XZ: +# ifdef MYTHREAD_ENABLED + mt_options.flags = flags; + + mt_options.threads = hardware_threads_get(); + mt_options.memlimit_stop + = hardware_memlimit_get(MODE_DECOMPRESS); + + // If single-threaded mode was requested, set the + // memlimit for threading to zero. This forces the + // decoder to use single-threaded mode which matches + // the behavior of lzma_stream_decoder(). + // + // Otherwise use the limit for threaded decompression + // which has a sane default (users are still free to + // make it insanely high though). + mt_options.memlimit_threading + = mt_options.threads == 1 + ? 0 : hardware_memlimit_mtdec_get(); + + ret = lzma_stream_decoder_mt(&strm, &mt_options); +# else ret = lzma_stream_decoder(&strm, hardware_memlimit_get( MODE_DECOMPRESS), flags); +# endif break; case FORMAT_LZMA: @@ -531,6 +655,15 @@ MODE_DECOMPRESS)); break; +# ifdef HAVE_LZIP_DECODER + case FORMAT_LZIP: + allow_trailing_input = true; + ret = lzma_lzip_decoder(&strm, + hardware_memlimit_get( + MODE_DECOMPRESS), flags); + break; +# endif + case FORMAT_RAW: // Memory usage has already been checked in // coder_set_compression_settings(). @@ -542,10 +675,30 @@ // memory usage limit in case it happens in the first // Block of the first Stream, which is where it very // probably will happen if it is going to happen. + // + // This will also catch unsupported check type which + // we treat as a warning only. If there are empty + // concatenated Streams with unsupported check type then + // the message can be shown more than once here. The loop + // is used in case there is first a warning about + // unsupported check type and then the first Block + // would exceed the memlimit. if (ret == LZMA_OK && init_format != FORMAT_RAW) { strm.next_out = NULL; strm.avail_out = 0; - ret = lzma_code(&strm, LZMA_RUN); + while ((ret = lzma_code(&strm, LZMA_RUN)) + == LZMA_UNSUPPORTED_CHECK) + message_warning("%s: %s", pair->src_name, + message_strm(ret)); + + // With --single-stream lzma_code won't wait for + // LZMA_FINISH and thus it can return LZMA_STREAM_END + // if the file has no uncompressed data inside. + // So treat LZMA_STREAM_END as LZMA_OK here. + // When lzma_code() is called again in coder_normal() + // it will return LZMA_STREAM_END again. + if (ret == LZMA_STREAM_END) + ret = LZMA_OK; } #endif } @@ -574,7 +727,7 @@ { if (*next_block_remaining > 0) { // The Block at *list_pos has previously been split up. - assert(hardware_threads_get() == 1); + assert(!hardware_threads_is_mt()); assert(opt_block_size > 0); assert(opt_block_list != NULL); @@ -602,7 +755,7 @@ // If in single-threaded mode, split up the Block if needed. // This is not needed in multi-threaded mode because liblzma // will do this due to how threaded encoding works. - if (hardware_threads_get() == 1 && opt_block_size > 0 + if (!hardware_threads_is_mt() && opt_block_size > 0 && *block_remaining > opt_block_size) { *next_block_remaining = *block_remaining - opt_block_size; @@ -662,7 +815,7 @@ // --block-size doesn't do anything here in threaded mode, // because the threaded encoder will take care of splitting // to fixed-sized Blocks. - if (hardware_threads_get() == 1 && opt_block_size > 0) + if (!hardware_threads_is_mt() && opt_block_size > 0) block_remaining = opt_block_size; // If --block-list was used, start with the first size. @@ -676,7 +829,7 @@ // mode the size info isn't written into Block Headers. if (opt_block_list != NULL) { if (block_remaining < opt_block_list[list_pos]) { - assert(hardware_threads_get() == 1); + assert(!hardware_threads_is_mt()); next_block_remaining = opt_block_list[list_pos] - block_remaining; } else { @@ -740,7 +893,7 @@ } else { // Start a new Block after LZMA_FULL_BARRIER. if (opt_block_list == NULL) { - assert(hardware_threads_get() == 1); + assert(!hardware_threads_is_mt()); assert(opt_block_size > 0); block_remaining = opt_block_size; } else { @@ -756,9 +909,9 @@ } else if (ret != LZMA_OK) { // Determine if the return value indicates that we - // won't continue coding. - const bool stop = ret != LZMA_NO_CHECK - && ret != LZMA_UNSUPPORTED_CHECK; + // won't continue coding. LZMA_NO_CHECK would be + // here too if LZMA_TELL_ANY_CHECK was used. + const bool stop = ret != LZMA_UNSUPPORTED_CHECK; if (stop) { // Write the remaining bytes even if something @@ -771,7 +924,7 @@ } if (ret == LZMA_STREAM_END) { - if (opt_single_stream) { + if (allow_trailing_input) { io_fix_src_pos(pair, strm.avail_in); success = true; break; @@ -779,7 +932,9 @@ // Check that there is no trailing garbage. // This is needed for LZMA_Alone and raw - // streams. + // streams. This is *not* done with .lz files + // as that format specifically requires + // allowing trailing garbage. if (strm.avail_in == 0 && !pair->src_eof) { // Try reading one more byte. // Hopefully we don't get any more @@ -907,6 +1062,15 @@ mytime_set_start_time(); // Initialize the progress indicator. + // + // NOTE: When reading from stdin, fstat() + // isn't called on it and thus src_st.st_size + // is zero. If stdin pointed to a regular + // file, it would still be possible to know + // the file size but then we would also need + // to take into account the current reading + // position since with stdin it isn't + // necessarily at the beginning of the file. const bool is_passthru = init_ret == CODER_INIT_PASSTHRU; const uint64_t in_size diff -ur xz-5.2.5/src/xz/coder.h xz-5.4.3/src/xz/coder.h --- xz-5.2.5/src/xz/coder.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/coder.h 2023-05-04 17:21:05 @@ -23,7 +23,9 @@ FORMAT_AUTO, FORMAT_XZ, FORMAT_LZMA, - // HEADER_GZIP, +#ifdef HAVE_LZIP_DECODER + FORMAT_LZIP, +#endif FORMAT_RAW, }; @@ -64,7 +66,8 @@ /// Add a filter to the custom filter chain extern void coder_add_filter(lzma_vli id, void *options); -/// +/// Set and partially validate compression settings. This can also be used +/// in decompression or test mode with the raw format. extern void coder_set_compression_settings(void); /// Compress or decompress the given file diff -ur xz-5.2.5/src/xz/file_io.c xz-5.4.3/src/xz/file_io.c --- xz-5.2.5/src/xz/file_io.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/xz/file_io.c 2023-05-04 17:21:05 @@ -140,7 +140,7 @@ // handler. So ignore the errors and try to avoid warnings with // GCC and glibc when _FORTIFY_SOURCE=2 is used. uint8_t b = '\0'; - const int ret = write(user_abort_pipe[1], &b, 1); + const ssize_t ret = write(user_abort_pipe[1], &b, 1); (void)ret; return; } @@ -192,15 +192,26 @@ // Capsicum needs FreeBSD 10.0 or later. cap_rights_t rights; + if (cap_enter()) + goto error; + if (cap_rights_limit(src_fd, cap_rights_init(&rights, CAP_EVENT, CAP_FCNTL, CAP_LOOKUP, CAP_READ, CAP_SEEK))) goto error; + if (src_fd != STDIN_FILENO && cap_rights_limit( + STDIN_FILENO, cap_rights_clear(&rights))) + goto error; + if (cap_rights_limit(STDOUT_FILENO, cap_rights_init(&rights, CAP_EVENT, CAP_FCNTL, CAP_FSTAT, CAP_LOOKUP, CAP_WRITE, CAP_SEEK))) goto error; + if (cap_rights_limit(STDERR_FILENO, cap_rights_init(&rights, + CAP_WRITE))) + goto error; + if (cap_rights_limit(user_abort_pipe[0], cap_rights_init(&rights, CAP_EVENT))) goto error; @@ -209,9 +220,17 @@ CAP_WRITE))) goto error; - if (cap_enter()) +#elif defined(HAVE_PLEDGE) + // pledge() was introduced in OpenBSD 5.9. + // + // main() unconditionally calls pledge() with fairly relaxed + // promises which work in all situations. Here we make the + // sandbox more strict. + if (pledge("stdio", "")) goto error; + (void)src_fd; + #else # error ENABLE_SANDBOX is defined but no sandboxing method was found. #endif @@ -221,7 +240,16 @@ return; error: - message(V_DEBUG, _("Failed to enable the sandbox")); +#ifdef HAVE_CAPSICUM + // If a kernel is configured without capability mode support or + // used in an emulator that does not implement the capability + // system calls, then the Capsicum system calls will fail and set + // errno to ENOSYS. In that case xz will silently run without + // the sandbox. + if (errno == ENOSYS) + return; +#endif + message_fatal(_("Failed to enable the sandbox")); } #endif // ENABLE_SANDBOX @@ -330,14 +358,14 @@ // it is possible that the user has put a new file in place // of the original file, and in that case it obviously // shouldn't be removed. - message_error(_("%s: File seems to have been moved, " + message_warning(_("%s: File seems to have been moved, " "not removing"), name); else #endif // There's a race condition between lstat() and unlink() // but at least we have tried to avoid removing wrong file. if (unlink(name)) - message_error(_("%s: Cannot remove: %s"), + message_warning(_("%s: Cannot remove: %s"), name, strerror(errno)); return; @@ -368,7 +396,14 @@ mode_t mode; - if (fchown(pair->dest_fd, (uid_t)(-1), pair->src_st.st_gid)) { + // With BSD semantics the new dest file may have a group that + // does not belong to the user. If the src file has the same gid + // nothing has to be done. Nevertheless OpenBSD fchown(2) fails + // in this case which seems to be POSIX compliant. As there is + // nothing to do, skip the system call. + if (pair->dest_st.st_gid != pair->src_st.st_gid + && fchown(pair->dest_fd, (uid_t)(-1), + pair->src_st.st_gid)) { message_warning(_("%s: Cannot set the file group: %s"), pair->dest_name, strerror(errno)); // We can still safely copy some additional permissions: @@ -536,8 +571,9 @@ } // Symlinks are not followed unless writing to stdout or --force - // was used. - const bool follow_symlinks = opt_stdout || opt_force; + // or --keep was used. + const bool follow_symlinks + = opt_stdout || opt_force || opt_keep_original; // We accept only regular files if we are writing the output // to disk too. bzip2 allows overriding this with --force but @@ -674,7 +710,7 @@ } #ifndef TUKLIB_DOSLIKE - if (reg_files_only && !opt_force) { + if (reg_files_only && !opt_force && !opt_keep_original) { if (pair->src_st.st_mode & (S_ISUID | S_ISGID)) { // gzip rejects setuid and setgid files even // when --force was used. bzip2 doesn't check @@ -683,7 +719,7 @@ // and setgid bits there. // // We accept setuid and setgid files if - // --force was used. We drop these bits + // --force or --keep was used. We drop these bits // explicitly in io_copy_attr(). message_warning(_("%s: File has setuid or " "setgid bit set, skipping"), @@ -740,13 +776,19 @@ extern file_pair * io_open_src(const char *src_name) { - if (is_empty_filename(src_name)) + if (src_name[0] == '\0') { + message_error(_("Empty filename, skipping")); return NULL; + } // Since we have only one file open at a time, we can use // a statically allocated structure. static file_pair pair; + // This implicitly also initializes src_st.st_size to zero + // which is expected to be <= 0 by default. fstat() isn't + // called when reading from standard input but src_st.st_size + // is still read. pair = (file_pair){ .src_name = src_name, .dest_name = NULL, @@ -1183,15 +1225,35 @@ extern bool -io_pread(file_pair *pair, io_buf *buf, size_t size, off_t pos) +io_seek_src(file_pair *pair, uint64_t pos) { - // Using lseek() and read() is more portable than pread() and - // for us it is as good as real pread(). - if (lseek(pair->src_fd, pos, SEEK_SET) != pos) { + // Caller must not attempt to seek past the end of the input file + // (seeking to 100 in a 100-byte file is seeking to the end of + // the file, not past the end of the file, and thus that is allowed). + // + // This also validates that pos can be safely cast to off_t. + if (pos > (uint64_t)(pair->src_st.st_size)) + message_bug(); + + if (lseek(pair->src_fd, (off_t)(pos), SEEK_SET) == -1) { message_error(_("%s: Error seeking the file: %s"), pair->src_name, strerror(errno)); return true; } + + pair->src_eof = false; + + return false; +} + + +extern bool +io_pread(file_pair *pair, io_buf *buf, size_t size, uint64_t pos) +{ + // Using lseek() and read() is more portable than pread() and + // for us it is as good as real pread(). + if (io_seek_src(pair, pos)) + return true; const size_t amount = io_read(pair, buf, size); if (amount == SIZE_MAX) diff -ur xz-5.2.5/src/xz/file_io.h xz-5.4.3/src/xz/file_io.h --- xz-5.2.5/src/xz/file_io.h 2020-03-17 17:28:54 +++ xz-5.4.3/src/xz/file_io.h 2023-05-04 17:21:05 @@ -139,6 +139,19 @@ extern void io_fix_src_pos(file_pair *pair, size_t rewind_size); +/// \brief Seek to the given absolute position in the source file +/// +/// This calls lseek() and also clears pair->src_eof. +/// +/// \param pair Seekable source file +/// \param pos Offset relative to the beginning of the file, +/// from which the data should be read. +/// +/// \return On success, false is returned. On error, error message +/// is printed and true is returned. +extern bool io_seek_src(file_pair *pair, uint64_t pos); + + /// \brief Read from source file from given offset to a buffer /// /// This is remotely similar to standard pread(). This uses lseek() though, @@ -152,7 +165,7 @@ /// /// \return On success, false is returned. On error, error message /// is printed and true is returned. -extern bool io_pread(file_pair *pair, io_buf *buf, size_t size, off_t pos); +extern bool io_pread(file_pair *pair, io_buf *buf, size_t size, uint64_t pos); /// \brief Writes a buffer to the destination file diff -ur xz-5.2.5/src/xz/hardware.c xz-5.4.3/src/xz/hardware.c --- xz-5.2.5/src/xz/hardware.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/xz/hardware.c 2023-05-04 17:21:05 @@ -17,12 +17,43 @@ /// the --threads=NUM command line option. static uint32_t threads_max = 1; +/// True when the number of threads is automatically determined based +/// on the available hardware threads. +static bool threads_are_automatic = false; + +/// If true, then try to use multi-threaded mode (if memlimit allows) +/// even if only one thread was requested explicitly (-T+1). +static bool use_mt_mode_with_one_thread = false; + /// Memory usage limit for compression -static uint64_t memlimit_compress; +static uint64_t memlimit_compress = 0; /// Memory usage limit for decompression -static uint64_t memlimit_decompress; +static uint64_t memlimit_decompress = 0; +/// Default memory usage for multithreaded modes: +/// +/// - Default value for --memlimit-compress when automatic number of threads +/// is used. However, if the limit wouldn't allow even one thread then +/// the limit is ignored in coder.c and one thread will be used anyway. +/// This mess is a compromise: we wish to prevent -T0 from using too +/// many threads but we also don't want xz to give an error due to +/// a memlimit that the user didn't explicitly set. +/// +/// - Default value for --memlimit-mt-decompress +/// +/// This value is caluclated in hardware_init() and cannot be changed later. +static uint64_t memlimit_mt_default; + +/// Memory usage limit for multithreaded decompression. This is a soft limit: +/// if reducing the number of threads to one isn't enough to keep memory +/// usage below this limit, then one thread is used and this limit is ignored. +/// memlimit_decompress is still obeyed. +/// +/// This can be set with --memlimit-mt-decompress. The default value for +/// this is memlimit_mt_default. +static uint64_t memlimit_mtdec; + /// Total amount of physical RAM static uint64_t total_ram; @@ -30,8 +61,17 @@ extern void hardware_threads_set(uint32_t n) { + // Reset these to false first and set them to true when appropriate. + threads_are_automatic = false; + use_mt_mode_with_one_thread = false; + if (n == 0) { // Automatic number of threads was requested. + // If there is only one hardware thread, multi-threaded + // mode will still be used if memory limit allows. + threads_are_automatic = true; + use_mt_mode_with_one_thread = true; + // If threading support was enabled at build time, // use the number of available CPU cores. Otherwise // use one thread since disabling threading support @@ -43,6 +83,9 @@ #else threads_max = 1; #endif + } else if (n == UINT32_MAX) { + use_mt_mode_with_one_thread = true; + threads_max = 1; } else { threads_max = n; } @@ -58,9 +101,21 @@ } +extern bool +hardware_threads_is_mt(void) +{ +#ifdef MYTHREAD_ENABLED + return threads_max > 1 || use_mt_mode_with_one_thread; +#else + return false; +#endif +} + + extern void hardware_memlimit_set(uint64_t new_memlimit, - bool set_compress, bool set_decompress, bool is_percentage) + bool set_compress, bool set_decompress, bool set_mtdec, + bool is_percentage) { if (is_percentage) { assert(new_memlimit > 0); @@ -91,7 +146,13 @@ // Use a value less than SIZE_MAX so that there's some room // for the xz program and so on. Don't use 4000 MiB because // it could look like someone mixed up base-2 and base-10. +#ifdef __mips__ + // For MIPS32, due to architectural pecularities, + // the limit is even lower. + const uint64_t limit_max = UINT64_C(2000) << 20; +#else const uint64_t limit_max = UINT64_C(4020) << 20; +#endif // UINT64_MAX is a special case for the string "max" so // that has to be handled specially. @@ -104,6 +165,9 @@ if (set_decompress) memlimit_decompress = new_memlimit; + if (set_mtdec) + memlimit_mtdec = new_memlimit; + return; } @@ -111,32 +175,69 @@ extern uint64_t hardware_memlimit_get(enum operation_mode mode) { - // Zero is a special value that indicates the default. Currently - // the default simply disables the limit. Once there is threading - // support, this might be a little more complex, because there will - // probably be a special case where a user asks for "optimal" number - // of threads instead of a specific number (this might even become - // the default mode). Each thread may use a significant amount of - // memory. When there are no memory usage limits set, we need some - // default soft limit for calculating the "optimal" number of - // threads. + // 0 is a special value that indicates the default. + // It disables the limit in single-threaded mode. + // + // NOTE: For multithreaded decompression, this is the hard limit + // (memlimit_stop). hardware_memlimit_mtdec_get() gives the + // soft limit (memlimit_threaded). const uint64_t memlimit = mode == MODE_COMPRESS ? memlimit_compress : memlimit_decompress; return memlimit != 0 ? memlimit : UINT64_MAX; } +extern uint64_t +hardware_memlimit_mtenc_get(void) +{ + return hardware_memlimit_mtenc_is_default() + ? memlimit_mt_default + : hardware_memlimit_get(MODE_COMPRESS); +} + + +extern bool +hardware_memlimit_mtenc_is_default(void) +{ + return memlimit_compress == 0 && threads_are_automatic; +} + + +extern uint64_t +hardware_memlimit_mtdec_get(void) +{ + uint64_t m = memlimit_mtdec != 0 + ? memlimit_mtdec + : memlimit_mt_default; + + // Cap the value to memlimit_decompress if it has been specified. + // This is nice for --info-memory. It wouldn't be needed for liblzma + // since it does this anyway. + if (memlimit_decompress != 0 && m > memlimit_decompress) + m = memlimit_decompress; + + return m; +} + + /// Helper for hardware_memlimit_show() to print one human-readable info line. static void -memlimit_show(const char *str, uint64_t value) +memlimit_show(const char *str, size_t str_columns, uint64_t value) { + // Calculate the field width so that str will be padded to take + // str_columns on the terminal. + // + // NOTE: If the string is invalid, this will be -1. Using -1 as + // the field width is fine here so it's not handled specially. + const int fw = tuklib_mbstr_fw(str, (int)(str_columns)); + // The memory usage limit is considered to be disabled if value // is 0 or UINT64_MAX. This might get a bit more complex once there // is threading support. See the comment in hardware_memlimit_get(). if (value == 0 || value == UINT64_MAX) - printf("%s %s\n", str, _("Disabled")); + printf(" %-*s %s\n", fw, str, _("Disabled")); else - printf("%s %s MiB (%s B)\n", str, + printf(" %-*s %s MiB (%s B)\n", fw, str, uint64_to_str(round_up_to_mib(value), 0), uint64_to_str(value, 1)); @@ -147,18 +248,60 @@ extern void hardware_memlimit_show(void) { + uint32_t cputhreads = 1; +#ifdef MYTHREAD_ENABLED + cputhreads = lzma_cputhreads(); + if (cputhreads == 0) + cputhreads = 1; +#endif + if (opt_robot) { - printf("%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\n", total_ram, - memlimit_compress, memlimit_decompress); + printf("%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 + "\t%" PRIu64 "\t%" PRIu32 "\n", + total_ram, + memlimit_compress, + memlimit_decompress, + hardware_memlimit_mtdec_get(), + memlimit_mt_default, + cputhreads); } else { - // TRANSLATORS: Test with "xz --info-memory" to see if - // the alignment looks nice. - memlimit_show(_("Total amount of physical memory (RAM): "), - total_ram); - memlimit_show(_("Memory usage limit for compression: "), - memlimit_compress); - memlimit_show(_("Memory usage limit for decompression: "), - memlimit_decompress); + const char *msgs[] = { + _("Amount of physical memory (RAM):"), + _("Number of processor threads:"), + _("Compression:"), + _("Decompression:"), + _("Multi-threaded decompression:"), + _("Default for -T0:"), + }; + + size_t width_max = 1; + for (unsigned i = 0; i < ARRAY_SIZE(msgs); ++i) { + size_t w = tuklib_mbstr_width(msgs[i], NULL); + + // When debugging, catch invalid strings with + // an assertion. Otherwise fallback to 1 so + // that the columns just won't be aligned. + assert(w != (size_t)-1); + if (w == (size_t)-1) + w = 1; + + if (width_max < w) + width_max = w; + } + + puts(_("Hardware information:")); + memlimit_show(msgs[0], width_max, total_ram); + printf(" %-*s %" PRIu32 "\n", + tuklib_mbstr_fw(msgs[1], (int)(width_max)), + msgs[1], cputhreads); + + putchar('\n'); + puts(_("Memory usage limits:")); + memlimit_show(msgs[2], width_max, memlimit_compress); + memlimit_show(msgs[3], width_max, memlimit_decompress); + memlimit_show(msgs[4], width_max, + hardware_memlimit_mtdec_get()); + memlimit_show(msgs[5], width_max, memlimit_mt_default); } tuklib_exit(E_SUCCESS, E_ERROR, message_verbosity_get() != V_SILENT); @@ -174,7 +317,22 @@ if (total_ram == 0) total_ram = (uint64_t)(ASSUME_RAM) * 1024 * 1024; - // Set the defaults. - hardware_memlimit_set(0, true, true, false); + // FIXME? There may be better methods to determine the default value. + // One Linux-specific suggestion is to use MemAvailable from + // /proc/meminfo as the starting point. + memlimit_mt_default = total_ram / 4; + +#if SIZE_MAX == UINT32_MAX + // A too high value may cause 32-bit xz to run out of address space. + // Use a conservative maximum value here. A few typical address space + // sizes with Linux: + // - x86-64 with 32-bit xz: 4 GiB + // - x86: 3 GiB + // - MIPS32: 2 GiB + const size_t mem_ceiling = 1400U << 20; + if (memlimit_mt_default > mem_ceiling) + memlimit_mt_default = mem_ceiling; +#endif + return; } diff -ur xz-5.2.5/src/xz/hardware.h xz-5.4.3/src/xz/hardware.h --- xz-5.2.5/src/xz/hardware.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/hardware.h 2023-05-04 17:21:05 @@ -16,22 +16,59 @@ /// Set the maximum number of worker threads. +/// A special value of UINT32_MAX sets one thread in multi-threaded mode. extern void hardware_threads_set(uint32_t threadlimit); /// Get the maximum number of worker threads. extern uint32_t hardware_threads_get(void); +/// Returns true if multithreaded mode should be used for .xz compression. +/// This can be true even if the number of threads is one. +extern bool hardware_threads_is_mt(void); -/// Set the memory usage limit. There are separate limits for compression -/// and decompression (the latter includes also --list), one or both can -/// be set with a single call to this function. Zero indicates resetting -/// the limit back to the defaults. The limit can also be set as a percentage -/// of installed RAM; the percentage must be in the range [1, 100]. + +/// Set the memory usage limit. There are separate limits for compression, +/// decompression (also includes --list), and multithreaded decompression. +/// Any combination of these can be set with a single call to this function. +/// Zero indicates resetting the limit back to the defaults. +/// The limit can also be set as a percentage of installed RAM; the +/// percentage must be in the range [1, 100]. extern void hardware_memlimit_set(uint64_t new_memlimit, - bool set_compress, bool set_decompress, bool is_percentage); + bool set_compress, bool set_decompress, bool set_mtdec, + bool is_percentage); /// Get the current memory usage limit for compression or decompression. +/// This is a hard limit that will not be exceeded. This is obeyed in +/// both single-threaded and multithreaded modes. extern uint64_t hardware_memlimit_get(enum operation_mode mode); + +/// This returns a system-specific default value if all of the following +/// conditions are true: +/// +/// - An automatic number of threads was requested (--threads=0). +/// +/// - --memlimit-compress wasn't used or it was reset to the default +/// value by setting it to 0. +/// +/// Otherwise this is identical to hardware_memlimit_get(MODE_COMPRESS). +/// +/// The idea is to keep automatic thread count reasonable so that too +/// high memory usage is avoided and, with 32-bit xz, running out of +/// address space is avoided. +extern uint64_t hardware_memlimit_mtenc_get(void); + +/// Returns true if the value returned by hardware_memlimit_mtenc_get() is +/// a system-specific default value. coder.c uses this to ignore the default +/// memlimit in case it's too small even for a single thread in multithreaded +/// mode. This way the default limit will never make xz fail or affect the +/// compressed output; it will only make xz reduce the number of threads. +extern bool hardware_memlimit_mtenc_is_default(void); + +/// Get the current memory usage limit for multithreaded decompression. +/// This is only used to reduce the number of threads. This limit can be +/// exceeded if the number of threads are reduce to one. Then the value +/// from hardware_memlimit_get() will be honored like in single-threaded mode. +extern uint64_t hardware_memlimit_mtdec_get(void); /// Display the amount of RAM and memory usage limits and exit. extern void hardware_memlimit_show(void) lzma_attribute((__noreturn__)); diff -ur xz-5.2.5/src/xz/list.c xz-5.4.3/src/xz/list.c --- xz-5.2.5/src/xz/list.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/xz/list.c 2023-05-04 17:21:05 @@ -52,23 +52,126 @@ uint64_t memusage; /// The filter chain of this Block in human-readable form - char filter_chain[FILTERS_STR_SIZE]; + char *filter_chain; } block_header_info; +#define BLOCK_HEADER_INFO_INIT { .filter_chain = NULL } +#define block_header_info_end(bhi) free((bhi)->filter_chain) + +/// Strings ending in a colon. These are used for lines like +/// " Foo: 123 MiB". These are grouped because translated strings +/// may have different maximum string length, and we want to pad all +/// strings so that the values are aligned nicely. +static const char *colon_strs[] = { + N_("Streams:"), + N_("Blocks:"), + N_("Compressed size:"), + N_("Uncompressed size:"), + N_("Ratio:"), + N_("Check:"), + N_("Stream Padding:"), + N_("Memory needed:"), + N_("Sizes in headers:"), + // This won't be aligned because it's so long: + //N_("Minimum XZ Utils version:"), + N_("Number of files:"), +}; + +/// Enum matching the above strings. +enum { + COLON_STR_STREAMS, + COLON_STR_BLOCKS, + COLON_STR_COMPRESSED_SIZE, + COLON_STR_UNCOMPRESSED_SIZE, + COLON_STR_RATIO, + COLON_STR_CHECK, + COLON_STR_STREAM_PADDING, + COLON_STR_MEMORY_NEEDED, + COLON_STR_SIZES_IN_HEADERS, + //COLON_STR_MINIMUM_XZ_VERSION, + COLON_STR_NUMBER_OF_FILES, +}; + +/// Field widths to use with printf to pad the strings to use the same number +/// of columns on a terminal. +static int colon_strs_fw[ARRAY_SIZE(colon_strs)]; + +/// Convenience macro to get the translated string and its field width +/// using a COLON_STR_foo enum. +#define COLON_STR(num) colon_strs_fw[num], _(colon_strs[num]) + + +/// Column headings +static struct { + /// Table column heading string + const char *str; + + /// Number of terminal-columns to use for this table-column. + /// If a translated string is longer than the initial value, + /// this value will be increased in init_headings(). + int columns; + + /// Field width to use for printf() to pad "str" to use "columns" + /// number of columns on a terminal. This is calculated in + /// init_headings(). + int fw; + +} headings[] = { + { N_("Stream"), 6, 0 }, + { N_("Block"), 9, 0 }, + { N_("Blocks"), 9, 0 }, + { N_("CompOffset"), 15, 0 }, + { N_("UncompOffset"), 15, 0 }, + { N_("CompSize"), 15, 0 }, + { N_("UncompSize"), 15, 0 }, + { N_("TotalSize"), 15, 0 }, + { N_("Ratio"), 5, 0 }, + { N_("Check"), 10, 0 }, + { N_("CheckVal"), 1, 0 }, + { N_("Padding"), 7, 0 }, + { N_("Header"), 5, 0 }, + { N_("Flags"), 2, 0 }, + { N_("MemUsage"), 7 + 4, 0 }, // +4 is for " MiB" + { N_("Filters"), 1, 0 }, +}; + +/// Enum matching the above strings. +enum { + HEADING_STREAM, + HEADING_BLOCK, + HEADING_BLOCKS, + HEADING_COMPOFFSET, + HEADING_UNCOMPOFFSET, + HEADING_COMPSIZE, + HEADING_UNCOMPSIZE, + HEADING_TOTALSIZE, + HEADING_RATIO, + HEADING_CHECK, + HEADING_CHECKVAL, + HEADING_PADDING, + HEADING_HEADERSIZE, + HEADING_HEADERFLAGS, + HEADING_MEMUSAGE, + HEADING_FILTERS, +}; + +#define HEADING_STR(num) headings[num].fw, _(headings[num].str) + + /// Check ID to string mapping static const char check_names[LZMA_CHECK_ID_MAX + 1][12] = { // TRANSLATORS: Indicates that there is no integrity check. - // This string is used in tables, so the width must not - // exceed ten columns with a fixed-width font. + // This string is used in tables. In older xz version this + // string was limited to ten columns in a fixed-width font, but + // nowadays there is no strict length restriction anymore. N_("None"), "CRC32", // TRANSLATORS: Indicates that integrity check name is not known, - // but the Check ID is known (here 2). This and other "Unknown-N" - // strings are used in tables, so the width must not exceed ten - // columns with a fixed-width font. It's OK to omit the dash if - // you need space for one extra letter, but don't use spaces. + // but the Check ID is known (here 2). In older xz version these + // strings were limited to ten columns in a fixed-width font, but + // nowadays there is no strict length restriction anymore. N_("Unknown-2"), N_("Unknown-3"), "CRC64", @@ -112,6 +215,104 @@ } totals = { 0, 0, 0, 0, 0, 0, 0, 0, 50000002, true }; +/// Initialize colon_strs_fw[]. +static void +init_colon_strs(void) +{ + // Lengths of translated strings as bytes. + size_t lens[ARRAY_SIZE(colon_strs)]; + + // Lengths of translated strings as columns. + size_t widths[ARRAY_SIZE(colon_strs)]; + + // Maximum number of columns needed by a translated string. + size_t width_max = 0; + + for (unsigned i = 0; i < ARRAY_SIZE(colon_strs); ++i) { + widths[i] = tuklib_mbstr_width(_(colon_strs[i]), &lens[i]); + + // If debugging is enabled, catch invalid strings with + // an assertion. However, when not debugging, use the + // byte count as the fallback width. This shouldn't + // ever happen unless there is a bad string in the + // translations, but in such case I guess it's better + // to try to print something useful instead of failing + // completely. + assert(widths[i] != (size_t)-1); + if (widths[i] == (size_t)-1) + widths[i] = lens[i]; + + if (widths[i] > width_max) + width_max = widths[i]; + } + + // Calculate the field width for printf("%*s") so that the strings + // will use width_max columns on a terminal. + for (unsigned i = 0; i < ARRAY_SIZE(colon_strs); ++i) + colon_strs_fw[i] = (int)(lens[i] + width_max - widths[i]); + + return; +} + + +/// Initialize headings[]. +static void +init_headings(void) +{ + // Before going through the heading strings themselves, treat + // the Check heading specially: Look at the widths of the various + // check names and increase the width of the Check column if needed. + // The width of the heading name "Check" will then be handled normally + // with other heading names in the second loop in this function. + for (unsigned i = 0; i < ARRAY_SIZE(check_names); ++i) { + size_t len; + size_t w = tuklib_mbstr_width(_(check_names[i]), &len); + + // Error handling like in init_colon_strs(). + assert(w != (size_t)-1); + if (w == (size_t)-1) + w = len; + + // If the translated string is wider than the minimum width + // set at compile time, increase the width. + if ((size_t)(headings[HEADING_CHECK].columns) < w) + headings[HEADING_CHECK].columns = (int)w; + } + + for (unsigned i = 0; i < ARRAY_SIZE(headings); ++i) { + size_t len; + size_t w = tuklib_mbstr_width(_(headings[i].str), &len); + + // Error handling like in init_colon_strs(). + assert(w != (size_t)-1); + if (w == (size_t)-1) + w = len; + + // If the translated string is wider than the minimum width + // set at compile time, increase the width. + if ((size_t)(headings[i].columns) < w) + headings[i].columns = (int)w; + + // Calculate the field width for printf("%*s") so that + // the string uses .columns number of columns on a terminal. + headings[i].fw = (int)(len + (size_t)headings[i].columns - w); + } + + return; +} + + +/// Initialize the printf field widths that are needed to get nicely aligned +/// output with translated strings. +static void +init_field_widths(void) +{ + init_colon_strs(); + init_headings(); + return; +} + + /// Convert XZ Utils version number to a string. static const char * xz_ver_to_str(uint32_t ver) @@ -143,9 +344,6 @@ /// /// \return On success, false is returned. On error, true is returned. /// -// TODO: This function is pretty big. liblzma should have a function that -// takes a callback function to parse the Index(es) from a .xz file to make -// it easy for applications. static bool parse_indexes(xz_file_info *xfi, file_pair *pair) { @@ -161,238 +359,74 @@ } io_buf buf; - lzma_stream_flags header_flags; - lzma_stream_flags footer_flags; - lzma_ret ret; - - // lzma_stream for the Index decoder lzma_stream strm = LZMA_STREAM_INIT; + lzma_index *idx = NULL; - // All Indexes decoded so far - lzma_index *combined_index = NULL; + lzma_ret ret = lzma_file_info_decoder(&strm, &idx, + hardware_memlimit_get(MODE_LIST), + (uint64_t)(pair->src_st.st_size)); + if (ret != LZMA_OK) { + message_error("%s: %s", pair->src_name, message_strm(ret)); + return true; + } - // The Index currently being decoded - lzma_index *this_index = NULL; - - // Current position in the file. We parse the file backwards so - // initialize it to point to the end of the file. - off_t pos = pair->src_st.st_size; - - // Each loop iteration decodes one Index. - do { - // Check that there is enough data left to contain at least - // the Stream Header and Stream Footer. This check cannot - // fail in the first pass of this loop. - if (pos < 2 * LZMA_STREAM_HEADER_SIZE) { - message_error("%s: %s", pair->src_name, - message_strm(LZMA_DATA_ERROR)); - goto error; + while (true) { + if (strm.avail_in == 0) { + strm.next_in = buf.u8; + strm.avail_in = io_read(pair, &buf, IO_BUFFER_SIZE); + if (strm.avail_in == SIZE_MAX) + goto error; } - pos -= LZMA_STREAM_HEADER_SIZE; - lzma_vli stream_padding = 0; + ret = lzma_code(&strm, LZMA_RUN); - // Locate the Stream Footer. There may be Stream Padding which - // we must skip when reading backwards. - while (true) { - if (pos < LZMA_STREAM_HEADER_SIZE) { - message_error("%s: %s", pair->src_name, - message_strm( - LZMA_DATA_ERROR)); - goto error; - } + switch (ret) { + case LZMA_OK: + break; - if (io_pread(pair, &buf, - LZMA_STREAM_HEADER_SIZE, pos)) + case LZMA_SEEK_NEEDED: + // liblzma won't ask us to seek past the known size + // of the input file. + assert(strm.seek_pos + <= (uint64_t)(pair->src_st.st_size)); + if (io_seek_src(pair, strm.seek_pos)) goto error; - // Stream Padding is always a multiple of four bytes. - int i = 2; - if (buf.u32[i] != 0) - break; + // avail_in must be zero so that we will read new + // input. + strm.avail_in = 0; + break; - // To avoid calling io_pread() for every four bytes - // of Stream Padding, take advantage that we read - // 12 bytes (LZMA_STREAM_HEADER_SIZE) already and - // check them too before calling io_pread() again. - do { - stream_padding += 4; - pos -= 4; - --i; - } while (i >= 0 && buf.u32[i] == 0); - } + case LZMA_STREAM_END: { + lzma_end(&strm); + xfi->idx = idx; - // Decode the Stream Footer. - ret = lzma_stream_footer_decode(&footer_flags, buf.u8); - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, - message_strm(ret)); - goto error; - } + // Calculate xfi->stream_padding. + lzma_index_iter iter; + lzma_index_iter_init(&iter, xfi->idx); + while (!lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_STREAM)) + xfi->stream_padding += iter.stream.padding; - // Check that the Stream Footer doesn't specify something - // that we don't support. This can only happen if the xz - // version is older than liblzma and liblzma supports - // something new. - // - // It is enough to check Stream Footer. Stream Header must - // match when it is compared against Stream Footer with - // lzma_stream_flags_compare(). - if (footer_flags.version != 0) { - message_error("%s: %s", pair->src_name, - message_strm(LZMA_OPTIONS_ERROR)); - goto error; + return false; } - // Check that the size of the Index field looks sane. - lzma_vli index_size = footer_flags.backward_size; - if ((lzma_vli)(pos) < index_size + LZMA_STREAM_HEADER_SIZE) { + default: message_error("%s: %s", pair->src_name, - message_strm(LZMA_DATA_ERROR)); - goto error; - } - - // Set pos to the beginning of the Index. - pos -= index_size; - - // See how much memory we can use for decoding this Index. - uint64_t memlimit = hardware_memlimit_get(MODE_LIST); - uint64_t memused = 0; - if (combined_index != NULL) { - memused = lzma_index_memused(combined_index); - if (memused > memlimit) - message_bug(); - - memlimit -= memused; - } - - // Decode the Index. - ret = lzma_index_decoder(&strm, &this_index, memlimit); - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, message_strm(ret)); - goto error; - } - do { - // Don't give the decoder more input than the - // Index size. - strm.avail_in = my_min(IO_BUFFER_SIZE, index_size); - if (io_pread(pair, &buf, strm.avail_in, pos)) - goto error; - - pos += strm.avail_in; - index_size -= strm.avail_in; - - strm.next_in = buf.u8; - ret = lzma_code(&strm, LZMA_RUN); - - } while (ret == LZMA_OK); - - // If the decoding seems to be successful, check also that - // the Index decoder consumed as much input as indicated - // by the Backward Size field. - if (ret == LZMA_STREAM_END) - if (index_size != 0 || strm.avail_in != 0) - ret = LZMA_DATA_ERROR; - - if (ret != LZMA_STREAM_END) { - // LZMA_BUFFER_ERROR means that the Index decoder - // would have liked more input than what the Index - // size should be according to Stream Footer. - // The message for LZMA_DATA_ERROR makes more - // sense in that case. - if (ret == LZMA_BUF_ERROR) - ret = LZMA_DATA_ERROR; - - message_error("%s: %s", pair->src_name, - message_strm(ret)); - // If the error was too low memory usage limit, // show also how much memory would have been needed. - if (ret == LZMA_MEMLIMIT_ERROR) { - uint64_t needed = lzma_memusage(&strm); - if (UINT64_MAX - needed < memused) - needed = UINT64_MAX; - else - needed += memused; + if (ret == LZMA_MEMLIMIT_ERROR) + message_mem_needed(V_ERROR, + lzma_memusage(&strm)); - message_mem_needed(V_ERROR, needed); - } - goto error; } + } - // Decode the Stream Header and check that its Stream Flags - // match the Stream Footer. - pos -= footer_flags.backward_size + LZMA_STREAM_HEADER_SIZE; - if ((lzma_vli)(pos) < lzma_index_total_size(this_index)) { - message_error("%s: %s", pair->src_name, - message_strm(LZMA_DATA_ERROR)); - goto error; - } - - pos -= lzma_index_total_size(this_index); - if (io_pread(pair, &buf, LZMA_STREAM_HEADER_SIZE, pos)) - goto error; - - ret = lzma_stream_header_decode(&header_flags, buf.u8); - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, - message_strm(ret)); - goto error; - } - - ret = lzma_stream_flags_compare(&header_flags, &footer_flags); - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, - message_strm(ret)); - goto error; - } - - // Store the decoded Stream Flags into this_index. This is - // needed so that we can print which Check is used in each - // Stream. - ret = lzma_index_stream_flags(this_index, &footer_flags); - if (ret != LZMA_OK) - message_bug(); - - // Store also the size of the Stream Padding field. It is - // needed to show the offsets of the Streams correctly. - ret = lzma_index_stream_padding(this_index, stream_padding); - if (ret != LZMA_OK) - message_bug(); - - if (combined_index != NULL) { - // Append the earlier decoded Indexes - // after this_index. - ret = lzma_index_cat( - this_index, combined_index, NULL); - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, - message_strm(ret)); - goto error; - } - } - - combined_index = this_index; - this_index = NULL; - - xfi->stream_padding += stream_padding; - - } while (pos > 0); - - lzma_end(&strm); - - // All OK. Make combined_index available to the caller. - xfi->idx = combined_index; - return false; - error: - // Something went wrong, free the allocated memory. lzma_end(&strm); - lzma_index_end(combined_index, NULL); - lzma_index_end(this_index, NULL); return true; } @@ -454,6 +488,10 @@ // Check the Block Flags. These must be done before calling // lzma_block_compressed_size(), because it overwrites // block.compressed_size. + // + // NOTE: If you add new characters here, update the minimum number of + // columns in headings[HEADING_HEADERFLAGS] to match the number of + // characters used here. bhi->flags[0] = block.compressed_size != LZMA_VLI_UNKNOWN ? 'c' : '-'; bhi->flags[1] = block.uncompressed_size != LZMA_VLI_UNKNOWN @@ -488,9 +526,7 @@ case LZMA_DATA_ERROR: // Free the memory allocated by lzma_block_header_decode(). - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) - free(filters[i].options); - + lzma_filters_free(filters, NULL); goto data_error; default: @@ -509,26 +545,43 @@ // Determine the minimum XZ Utils version that supports this Block. // - // Currently the only thing that 5.0.0 doesn't support is empty - // LZMA2 Block. This decoder bug was fixed in 5.0.2. - { + // - ARM64 filter needs 5.4.0. + // + // - 5.0.0 doesn't support empty LZMA2 streams and thus empty + // Blocks that use LZMA2. This decoder bug was fixed in 5.0.2. + if (xfi->min_version < 50040002U) { + for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { + if (filters[i].id == LZMA_FILTER_ARM64) { + xfi->min_version = 50040002U; + break; + } + } + } + + if (xfi->min_version < 50000022U) { size_t i = 0; while (filters[i + 1].id != LZMA_VLI_UNKNOWN) ++i; if (filters[i].id == LZMA_FILTER_LZMA2 - && iter->block.uncompressed_size == 0 - && xfi->min_version < 50000022U) + && iter->block.uncompressed_size == 0) xfi->min_version = 50000022U; } // Convert the filter chain to human readable form. - message_filters_to_str(bhi->filter_chain, filters, false); + const lzma_ret str_ret = lzma_str_from_filters( + &bhi->filter_chain, filters, + LZMA_STR_DECODER | LZMA_STR_GETOPT_LONG, NULL); // Free the memory allocated by lzma_block_header_decode(). - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) - free(filters[i].options); + lzma_filters_free(filters, NULL); + // Check if the stringification succeeded. + if (str_ret != LZMA_OK) { + message_error("%s: %s", pair->src_name, message_strm(str_ret)); + return true; + } + return false; data_error: @@ -553,7 +606,7 @@ // Locate and read the Check field. const uint32_t size = lzma_check_size(iter->stream.flags->check); - const off_t offset = iter->block.compressed_file_offset + const uint64_t offset = iter->block.compressed_file_offset + iter->block.total_size - size; io_buf buf; if (io_pread(pair, &buf, size, offset)) @@ -714,20 +767,20 @@ char checks_str[CHECKS_STR_SIZE]; get_check_names(checks_str, checks, true); - printf(_(" Streams: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_STREAMS), uint64_to_str(stream_count, 0)); - printf(_(" Blocks: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_BLOCKS), uint64_to_str(block_count, 0)); - printf(_(" Compressed size: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_COMPRESSED_SIZE), uint64_to_nicestr(compressed_size, NICESTR_B, NICESTR_TIB, true, 0)); - printf(_(" Uncompressed size: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_UNCOMPRESSED_SIZE), uint64_to_nicestr(uncompressed_size, NICESTR_B, NICESTR_TIB, true, 0)); - printf(_(" Ratio: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_RATIO), get_ratio(compressed_size, uncompressed_size)); - printf(_(" Check: %s\n"), checks_str); - printf(_(" Stream padding: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_CHECK), checks_str); + printf(" %-*s %s\n", COLON_STR(COLON_STR_STREAM_PADDING), uint64_to_nicestr(stream_padding, NICESTR_B, NICESTR_TIB, true, 0)); return; @@ -752,13 +805,19 @@ // Print information about the Streams. // - // TRANSLATORS: The second line is column headings. All except - // Check are right aligned; Check is left aligned. Test with - // "xz -lv foo.xz". - puts(_(" Streams:\n Stream Blocks" - " CompOffset UncompOffset" - " CompSize UncompSize Ratio" - " Check Padding")); + // All except Check are right aligned; Check is left aligned. + // Test with "xz -lv foo.xz". + printf(" %s\n %*s %*s %*s %*s %*s %*s %*s %-*s %*s\n", + _(colon_strs[COLON_STR_STREAMS]), + HEADING_STR(HEADING_STREAM), + HEADING_STR(HEADING_BLOCKS), + HEADING_STR(HEADING_COMPOFFSET), + HEADING_STR(HEADING_UNCOMPOFFSET), + HEADING_STR(HEADING_COMPSIZE), + HEADING_STR(HEADING_UNCOMPSIZE), + HEADING_STR(HEADING_RATIO), + HEADING_STR(HEADING_CHECK), + HEADING_STR(HEADING_PADDING)); lzma_index_iter iter; lzma_index_iter_init(&iter, xfi->idx); @@ -771,10 +830,18 @@ uint64_to_str(iter.stream.uncompressed_offset, 3), }; printf(" %*s %*s %*s %*s ", - tuklib_mbstr_fw(cols1[0], 6), cols1[0], - tuklib_mbstr_fw(cols1[1], 9), cols1[1], - tuklib_mbstr_fw(cols1[2], 15), cols1[2], - tuklib_mbstr_fw(cols1[3], 15), cols1[3]); + tuklib_mbstr_fw(cols1[0], + headings[HEADING_STREAM].columns), + cols1[0], + tuklib_mbstr_fw(cols1[1], + headings[HEADING_BLOCKS].columns), + cols1[1], + tuklib_mbstr_fw(cols1[2], + headings[HEADING_COMPOFFSET].columns), + cols1[2], + tuklib_mbstr_fw(cols1[3], + headings[HEADING_UNCOMPOFFSET].columns), + cols1[3]); const char *cols2[5] = { uint64_to_str(iter.stream.compressed_size, 0), @@ -785,11 +852,21 @@ uint64_to_str(iter.stream.padding, 2), }; printf("%*s %*s %*s %-*s %*s\n", - tuklib_mbstr_fw(cols2[0], 15), cols2[0], - tuklib_mbstr_fw(cols2[1], 15), cols2[1], - tuklib_mbstr_fw(cols2[2], 5), cols2[2], - tuklib_mbstr_fw(cols2[3], 10), cols2[3], - tuklib_mbstr_fw(cols2[4], 7), cols2[4]); + tuklib_mbstr_fw(cols2[0], + headings[HEADING_COMPSIZE].columns), + cols2[0], + tuklib_mbstr_fw(cols2[1], + headings[HEADING_UNCOMPSIZE].columns), + cols2[1], + tuklib_mbstr_fw(cols2[2], + headings[HEADING_RATIO].columns), + cols2[2], + tuklib_mbstr_fw(cols2[3], + headings[HEADING_CHECK].columns), + cols2[3], + tuklib_mbstr_fw(cols2[4], + headings[HEADING_PADDING].columns), + cols2[4]); // Update the maximum Check size. if (lzma_check_size(iter.stream.flags->check) > check_max) @@ -799,32 +876,47 @@ // Cache the verbosity level to a local variable. const bool detailed = message_verbosity_get() >= V_DEBUG; - // Information collected from Block Headers - block_header_info bhi; - // Print information about the Blocks but only if there is // at least one Block. if (lzma_index_block_count(xfi->idx) > 0) { - // Calculate the width of the CheckVal field. - const int checkval_width = my_max(8, 2 * check_max); + // Calculate the width of the CheckVal column. This can be + // used as is as the field width for printf() when printing + // the actual check value as it is hexadecimal. However, to + // print the column heading, further calculation is needed + // to handle a translated string (it's done a few lines later). + assert(check_max <= LZMA_CHECK_SIZE_MAX); + const int checkval_width = my_max( + headings[HEADING_CHECKVAL].columns, + (int)(2 * check_max)); - // TRANSLATORS: The second line is column headings. All - // except Check are right aligned; Check is left aligned. - printf(_(" Blocks:\n Stream Block" - " CompOffset UncompOffset" - " TotalSize UncompSize Ratio Check")); + // All except Check are right aligned; Check is left aligned. + printf(" %s\n %*s %*s %*s %*s %*s %*s %*s %-*s", + _(colon_strs[COLON_STR_BLOCKS]), + HEADING_STR(HEADING_STREAM), + HEADING_STR(HEADING_BLOCK), + HEADING_STR(HEADING_COMPOFFSET), + HEADING_STR(HEADING_UNCOMPOFFSET), + HEADING_STR(HEADING_TOTALSIZE), + HEADING_STR(HEADING_UNCOMPSIZE), + HEADING_STR(HEADING_RATIO), + detailed ? headings[HEADING_CHECK].fw : 1, + _(headings[HEADING_CHECK].str)); if (detailed) { - // TRANSLATORS: These are additional column headings - // for the most verbose listing mode. CheckVal - // (Check value), Flags, and Filters are left aligned. - // Header (Block Header Size), CompSize, and MemUsage - // are right aligned. %*s is replaced with 0-120 - // spaces to make the CheckVal column wide enough. - // Test with "xz -lvv foo.xz". - printf(_(" CheckVal %*s Header Flags " - "CompSize MemUsage Filters"), - checkval_width - 8, ""); + // CheckVal (Check value), Flags, and Filters are + // left aligned. Block Header Size, CompSize, and + // MemUsage are right aligned. Test with + // "xz -lvv foo.xz". + printf(" %-*s %*s %-*s %*s %*s %s", + headings[HEADING_CHECKVAL].fw + + checkval_width + - headings[HEADING_CHECKVAL].columns, + _(headings[HEADING_CHECKVAL].str), + HEADING_STR(HEADING_HEADERSIZE), + HEADING_STR(HEADING_HEADERFLAGS), + HEADING_STR(HEADING_COMPSIZE), + HEADING_STR(HEADING_MEMUSAGE), + _(headings[HEADING_FILTERS].str)); } putchar('\n'); @@ -833,8 +925,11 @@ // Iterate over the Blocks. while (!lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)) { + // If in detailed mode, collect the information from + // Block Header before starting to print the next line. + block_header_info bhi = BLOCK_HEADER_INFO_INIT; if (detailed && parse_details(pair, &iter, &bhi, xfi)) - return true; + return true; const char *cols1[4] = { uint64_to_str(iter.stream.number, 0), @@ -846,10 +941,18 @@ iter.block.uncompressed_file_offset, 3) }; printf(" %*s %*s %*s %*s ", - tuklib_mbstr_fw(cols1[0], 6), cols1[0], - tuklib_mbstr_fw(cols1[1], 9), cols1[1], - tuklib_mbstr_fw(cols1[2], 15), cols1[2], - tuklib_mbstr_fw(cols1[3], 15), cols1[3]); + tuklib_mbstr_fw(cols1[0], + headings[HEADING_STREAM].columns), + cols1[0], + tuklib_mbstr_fw(cols1[1], + headings[HEADING_BLOCK].columns), + cols1[1], + tuklib_mbstr_fw(cols1[2], + headings[HEADING_COMPOFFSET].columns), + cols1[2], + tuklib_mbstr_fw(cols1[3], headings[ + HEADING_UNCOMPOFFSET].columns), + cols1[3]); const char *cols2[4] = { uint64_to_str(iter.block.total_size, 0), @@ -860,11 +963,18 @@ _(check_names[iter.stream.flags->check]) }; printf("%*s %*s %*s %-*s", - tuklib_mbstr_fw(cols2[0], 15), cols2[0], - tuklib_mbstr_fw(cols2[1], 15), cols2[1], - tuklib_mbstr_fw(cols2[2], 5), cols2[2], - tuklib_mbstr_fw(cols2[3], detailed ? 11 : 1), - cols2[3]); + tuklib_mbstr_fw(cols2[0], + headings[HEADING_TOTALSIZE].columns), + cols2[0], + tuklib_mbstr_fw(cols2[1], + headings[HEADING_UNCOMPSIZE].columns), + cols2[1], + tuklib_mbstr_fw(cols2[2], + headings[HEADING_RATIO].columns), + cols2[2], + tuklib_mbstr_fw(cols2[3], detailed + ? headings[HEADING_CHECK].columns : 1), + cols2[3]); if (detailed) { const lzma_vli compressed_size @@ -885,25 +995,35 @@ }; // Show MiB for memory usage, because it // is the only size which is not in bytes. - printf("%-*s %*s %-5s %*s %*s MiB %s", + printf(" %-*s %*s %-*s %*s %*s MiB %s", checkval_width, cols3[0], - tuklib_mbstr_fw(cols3[1], 6), cols3[1], + tuklib_mbstr_fw(cols3[1], headings[ + HEADING_HEADERSIZE].columns), + cols3[1], + tuklib_mbstr_fw(cols3[2], headings[ + HEADING_HEADERFLAGS].columns), cols3[2], - tuklib_mbstr_fw(cols3[3], 15), - cols3[3], - tuklib_mbstr_fw(cols3[4], 7), cols3[4], + tuklib_mbstr_fw(cols3[3], headings[ + HEADING_COMPSIZE].columns), + cols3[3], + tuklib_mbstr_fw(cols3[4], headings[ + HEADING_MEMUSAGE].columns - 4), + cols3[4], cols3[5]); } putchar('\n'); + block_header_info_end(&bhi); } } if (detailed) { - printf(_(" Memory needed: %s MiB\n"), uint64_to_str( + printf(" %-*s %s MiB\n", COLON_STR(COLON_STR_MEMORY_NEEDED), + uint64_to_str( round_up_to_mib(xfi->memusage_max), 0)); - printf(_(" Sizes in headers: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_SIZES_IN_HEADERS), xfi->all_have_sizes ? _("Yes") : _("No")); + //printf(" %-*s %s\n", COLON_STR(COLON_STR_MINIMUM_XZ_VERSION), printf(_(" Minimum XZ Utils version: %s\n"), xz_ver_to_str(xfi->min_version)); } @@ -951,9 +1071,9 @@ iter.stream.padding); lzma_index_iter_rewind(&iter); - block_header_info bhi; while (!lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)) { + block_header_info bhi = BLOCK_HEADER_INFO_INIT; if (message_verbosity_get() >= V_DEBUG && parse_details( pair, &iter, &bhi, xfi)) @@ -984,6 +1104,7 @@ bhi.filter_chain); putchar('\n'); + block_header_info_end(&bhi); } } @@ -1068,17 +1189,19 @@ { putchar('\n'); puts(_("Totals:")); - printf(_(" Number of files: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_NUMBER_OF_FILES), uint64_to_str(totals.files, 0)); print_adv_helper(totals.streams, totals.blocks, totals.compressed_size, totals.uncompressed_size, totals.checks, totals.stream_padding); if (message_verbosity_get() >= V_DEBUG) { - printf(_(" Memory needed: %s MiB\n"), uint64_to_str( + printf(" %-*s %s MiB\n", COLON_STR(COLON_STR_MEMORY_NEEDED), + uint64_to_str( round_up_to_mib(totals.memusage_max), 0)); - printf(_(" Sizes in headers: %s\n"), + printf(" %-*s %s\n", COLON_STR(COLON_STR_SIZES_IN_HEADERS), totals.all_have_sizes ? _("Yes") : _("No")); + //printf(" %-*s %s\n", COLON_STR(COLON_STR_MINIMUM_XZ_VERSION), printf(_(" Minimum XZ Utils version: %s\n"), xz_ver_to_str(totals.min_version)); } @@ -1153,6 +1276,8 @@ "standard input")); return; } + + init_field_widths(); // Unset opt_stdout so that io_open_src() won't accept special files. // Set opt_force so that io_open_src() will follow symlinks. diff -ur xz-5.2.5/src/xz/main.c xz-5.4.3/src/xz/main.c --- xz-5.2.5/src/xz/main.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/main.c 2023-05-04 17:21:05 @@ -142,6 +142,20 @@ int main(int argc, char **argv) { +#ifdef HAVE_PLEDGE + // OpenBSD's pledge(2) sandbox + // + // Unconditionally enable sandboxing with fairly relaxed promises. + // This is still way better than having no sandbox at all. :-) + // More strict promises will be made later in file_io.c if possible. + if (pledge("stdio rpath wpath cpath fattr", "")) { + // Don't translate the string or use message_fatal() as + // those haven't been initialized yet. + fprintf(stderr, "%s: Failed to enable the sandbox\n", argv[0]); + return E_ERROR; + } +#endif + #if defined(_WIN32) && !defined(__CYGWIN__) InitializeCriticalSection(&exit_status_cs); #endif diff -ur xz-5.2.5/src/xz/message.c xz-5.4.3/src/xz/message.c --- xz-5.2.5/src/xz/message.c 2020-03-17 17:28:54 +++ xz-5.4.3/src/xz/message.c 2023-05-04 17:21:05 @@ -355,11 +355,8 @@ if (elapsed < 3000) return ""; - static const char unit[][8] = { - "KiB/s", - "MiB/s", - "GiB/s", - }; + // The first character of KiB/s, MiB/s, or GiB/s: + static const char unit[] = { 'K', 'M', 'G' }; size_t unit_index = 0; @@ -381,7 +378,7 @@ // - 999 KiB/s // Use big enough buffer to hold e.g. a multibyte decimal point. static char buf[16]; - snprintf(buf, sizeof(buf), "%.*f %s", + snprintf(buf, sizeof(buf), "%.*f %ciB/s", speed > 9.9 ? 0 : 1, speed, unit[unit_index]); return buf; } @@ -726,7 +723,16 @@ // This is a translatable string because French needs // a space before a colon. fprintf(stderr, _("%s: "), progname); + +#ifdef __clang__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif vfprintf(stderr, fmt, ap); +#ifdef __clang__ +# pragma GCC diagnostic pop +#endif + fputc('\n', stderr); signals_unblock(); @@ -832,6 +838,15 @@ case LZMA_STREAM_END: case LZMA_GET_CHECK: case LZMA_PROG_ERROR: + case LZMA_SEEK_NEEDED: + case LZMA_RET_INTERNAL1: + case LZMA_RET_INTERNAL2: + case LZMA_RET_INTERNAL3: + case LZMA_RET_INTERNAL4: + case LZMA_RET_INTERNAL5: + case LZMA_RET_INTERNAL6: + case LZMA_RET_INTERNAL7: + case LZMA_RET_INTERNAL8: // Without "default", compiler will warn if new constants // are added to lzma_ret, it is not too easy to forget to // add the new constants to this function. @@ -894,167 +909,20 @@ } -/// \brief Convert uint32_t to a nice string for --lzma[12]=dict=SIZE -/// -/// The idea is to use KiB or MiB suffix when possible. -static const char * -uint32_to_optstr(uint32_t num) -{ - static char buf[16]; - - if ((num & ((UINT32_C(1) << 20) - 1)) == 0) - snprintf(buf, sizeof(buf), "%" PRIu32 "MiB", num >> 20); - else if ((num & ((UINT32_C(1) << 10) - 1)) == 0) - snprintf(buf, sizeof(buf), "%" PRIu32 "KiB", num >> 10); - else - snprintf(buf, sizeof(buf), "%" PRIu32, num); - - return buf; -} - - extern void -message_filters_to_str(char buf[FILTERS_STR_SIZE], - const lzma_filter *filters, bool all_known) -{ - char *pos = buf; - size_t left = FILTERS_STR_SIZE; - - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - // Add the dashes for the filter option. A space is - // needed after the first and later filters. - my_snprintf(&pos, &left, "%s", i == 0 ? "--" : " --"); - - switch (filters[i].id) { - case LZMA_FILTER_LZMA1: - case LZMA_FILTER_LZMA2: { - const lzma_options_lzma *opt = filters[i].options; - const char *mode = NULL; - const char *mf = NULL; - - if (all_known) { - switch (opt->mode) { - case LZMA_MODE_FAST: - mode = "fast"; - break; - - case LZMA_MODE_NORMAL: - mode = "normal"; - break; - - default: - mode = "UNKNOWN"; - break; - } - - switch (opt->mf) { - case LZMA_MF_HC3: - mf = "hc3"; - break; - - case LZMA_MF_HC4: - mf = "hc4"; - break; - - case LZMA_MF_BT2: - mf = "bt2"; - break; - - case LZMA_MF_BT3: - mf = "bt3"; - break; - - case LZMA_MF_BT4: - mf = "bt4"; - break; - - default: - mf = "UNKNOWN"; - break; - } - } - - // Add the filter name and dictionary size, which - // is always known. - my_snprintf(&pos, &left, "lzma%c=dict=%s", - filters[i].id == LZMA_FILTER_LZMA2 - ? '2' : '1', - uint32_to_optstr(opt->dict_size)); - - // With LZMA1 also lc/lp/pb are known when - // decompressing, but this function is never - // used to print information about .lzma headers. - assert(filters[i].id == LZMA_FILTER_LZMA2 - || all_known); - - // Print the rest of the options, which are known - // only when compressing. - if (all_known) - my_snprintf(&pos, &left, - ",lc=%" PRIu32 ",lp=%" PRIu32 - ",pb=%" PRIu32 - ",mode=%s,nice=%" PRIu32 ",mf=%s" - ",depth=%" PRIu32, - opt->lc, opt->lp, opt->pb, - mode, opt->nice_len, mf, opt->depth); - break; - } - - case LZMA_FILTER_X86: - case LZMA_FILTER_POWERPC: - case LZMA_FILTER_IA64: - case LZMA_FILTER_ARM: - case LZMA_FILTER_ARMTHUMB: - case LZMA_FILTER_SPARC: { - static const char bcj_names[][9] = { - "x86", - "powerpc", - "ia64", - "arm", - "armthumb", - "sparc", - }; - - const lzma_options_bcj *opt = filters[i].options; - my_snprintf(&pos, &left, "%s", bcj_names[filters[i].id - - LZMA_FILTER_X86]); - - // Show the start offset only when really needed. - if (opt != NULL && opt->start_offset != 0) - my_snprintf(&pos, &left, "=start=%" PRIu32, - opt->start_offset); - - break; - } - - case LZMA_FILTER_DELTA: { - const lzma_options_delta *opt = filters[i].options; - my_snprintf(&pos, &left, "delta=dist=%" PRIu32, - opt->dist); - break; - } - - default: - // This should be possible only if liblzma is - // newer than the xz tool. - my_snprintf(&pos, &left, "UNKNOWN"); - break; - } - } - - return; -} - - -extern void message_filters_show(enum message_verbosity v, const lzma_filter *filters) { if (v > verbosity) return; - char buf[FILTERS_STR_SIZE]; - message_filters_to_str(buf, filters, true); + char *buf; + const lzma_ret ret = lzma_str_from_filters(&buf, filters, + LZMA_STR_ENCODER | LZMA_STR_GETOPT_LONG, NULL); + if (ret != LZMA_OK) + message_fatal("%s", message_strm(ret)); + fprintf(stderr, _("%s: Filter chain: %s\n"), progname, buf); + free(buf); return; } @@ -1116,6 +984,9 @@ " -k, --keep keep (don't delete) input files\n" " -f, --force force overwrite of output file and (de)compress links\n" " -c, --stdout write to standard output and don't delete input files")); + // NOTE: --to-stdout isn't included above because it's not + // the recommended spelling. It was copied from gzip but other + // compressors with gzip-like syntax don't support it. if (long_help) { puts(_( @@ -1134,7 +1005,7 @@ puts(_("\n Basic file format and compression options:\n")); puts(_( " -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" +" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " -C, --check=CHECK integrity check type: `none' (use with caution),\n" " `crc32', `crc64' (default), or `sha256'")); puts(_( @@ -1171,9 +1042,11 @@ puts(_( // xgettext:no-c-format " --memlimit-compress=LIMIT\n" " --memlimit-decompress=LIMIT\n" +" --memlimit-mt-decompress=LIMIT\n" " -M, --memlimit=LIMIT\n" " set memory usage limit for compression, decompression,\n" -" or both; LIMIT is in bytes, % of RAM, or 0 for defaults")); +" threaded decompression, or all of these; LIMIT is in\n" +" bytes, % of RAM, or 0 for defaults")); puts(_( " --no-adjust if compression settings exceed the memory usage limit,\n" @@ -1208,10 +1081,11 @@ puts(_( "\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" +" --arm[=OPTS] ARM BCJ filter\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter\n" +" --arm64[=OPTS] ARM64 BCJ filter\n" " --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" " --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" " --sparc[=OPTS] SPARC BCJ filter\n" " Valid OPTS for all BCJ filters:\n" " start=NUM start offset for conversions (default=0)")); diff -ur xz-5.2.5/src/xz/message.h xz-5.4.3/src/xz/message.h --- xz-5.2.5/src/xz/message.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/message.h 2023-05-04 17:21:05 @@ -90,22 +90,6 @@ extern void message_mem_needed(enum message_verbosity v, uint64_t memusage); -/// Buffer size for message_filters_to_str() -#define FILTERS_STR_SIZE 512 - - -/// \brief Get the filter chain as a string -/// -/// \param buf Pointer to caller allocated buffer to hold -/// the filter chain string -/// \param filters Pointer to the filter chain -/// \param all_known If true, all filter options are printed. -/// If false, only the options that get stored -/// into .xz headers are printed. -extern void message_filters_to_str(char buf[FILTERS_STR_SIZE], - const lzma_filter *filters, bool all_known); - - /// Print the filter chain. extern void message_filters_show( enum message_verbosity v, const lzma_filter *filters); diff -ur xz-5.2.5/src/xz/mytime.c xz-5.4.3/src/xz/mytime.c --- xz-5.2.5/src/xz/mytime.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/mytime.c 2023-05-04 17:22:00 @@ -12,7 +12,9 @@ #include "private.h" -#if !(defined(HAVE_CLOCK_GETTIME) && HAVE_DECL_CLOCK_MONOTONIC) +#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_CLOCK_MONOTONIC) +# include +#else # include #endif @@ -28,8 +30,7 @@ static uint64_t mytime_now(void) { - // NOTE: HAVE_DECL_CLOCK_MONOTONIC is always defined to 0 or 1. -#if defined(HAVE_CLOCK_GETTIME) && HAVE_DECL_CLOCK_MONOTONIC +#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_CLOCK_MONOTONIC) // If CLOCK_MONOTONIC was available at compile time but for some // reason isn't at runtime, fallback to CLOCK_REALTIME which // according to POSIX is mandatory for all implementations. diff -ur xz-5.2.5/src/xz/options.c xz-5.4.3/src/xz/options.c --- xz-5.2.5/src/xz/options.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/options.c 2023-05-04 17:21:05 @@ -49,13 +49,13 @@ /// is called, which should update the given value to filter-specific /// options structure. /// +/// This returns only if no errors occur. +/// /// \param str String containing the options from the command line /// \param opts Filter-specific option map /// \param set Filter-specific function to update filter_options /// \param filter_options Pointer to filter-specific options structure /// -/// \return Returns only if no errors occur. -/// static void parse_options(const char *str, const option_map *opts, void (*set)(void *filter_options, @@ -353,11 +353,6 @@ if (options->lc + options->lp > LZMA_LCLP_MAX) message_fatal(_("The sum of lc and lp must not exceed 4")); - - const uint32_t nice_len_min = options->mf & 0x0F; - if (options->nice_len < nice_len_min) - message_fatal(_("The selected match finder requires at " - "least nice=%" PRIu32), nice_len_min); return options; } diff -ur xz-5.2.5/src/xz/private.h xz-5.4.3/src/xz/private.h --- xz-5.2.5/src/xz/private.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/private.h 2023-05-04 17:22:00 @@ -45,7 +45,7 @@ # define STDERR_FILENO (fileno(stderr)) #endif -#ifdef HAVE_CAPSICUM +#if defined(HAVE_CAPSICUM) || defined(HAVE_PLEDGE) # define ENABLE_SANDBOX 1 #endif diff -ur xz-5.2.5/src/xz/suffix.c xz-5.4.3/src/xz/suffix.c --- xz-5.2.5/src/xz/suffix.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/suffix.c 2023-05-04 17:21:05 @@ -18,6 +18,9 @@ // For case-insensitive filename suffix on case-insensitive systems #if defined(TUKLIB_DOSLIKE) || defined(__VMS) +# ifdef HAVE_STRINGS_H +# include +# endif # define strcmp strcasecmp #endif @@ -119,23 +122,16 @@ #ifdef __DJGPP__ { ".lzm", "" }, #endif - { ".tlz", ".tar" }, - // { ".gz", "" }, - // { ".tgz", ".tar" }, + { ".tlz", ".tar" }, // Both .tar.lzma and .tar.lz +#ifdef HAVE_LZIP_DECODER + { ".lz", "" }, +#endif }; const char *new_suffix = ""; size_t new_len = 0; - if (opt_format == FORMAT_RAW) { - // Don't check for known suffixes when --format=raw was used. - if (custom_suffix == NULL) { - message_error(_("%s: With --format=raw, " - "--suffix=.SUF is required unless " - "writing to stdout"), src_name); - return NULL; - } - } else { + if (opt_format != FORMAT_RAW) { for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { new_len = test_suffix(suffixes[i].compressed, src_name, src_len); @@ -208,12 +204,15 @@ #endif ".tlz", NULL -/* +#ifdef HAVE_LZIP_DECODER + // This is needed to keep the table indexing in sync with + // enum format_type from coder.h. }, { - ".gz", - ".tgz", - NULL +/* + ".lz", */ + NULL +#endif }, { // --format=raw requires specifying the suffix // manually or using stdout. @@ -221,8 +220,11 @@ } }; - // args.c ensures this. + // args.c ensures these. assert(opt_format != FORMAT_AUTO); +#ifdef HAVE_LZIP_DECODER + assert(opt_format != FORMAT_LZIP); +#endif const size_t format = opt_format - 1; const char *const *suffixes = all_suffixes[format]; @@ -252,15 +254,6 @@ } } - // TODO: Hmm, maybe it would be better to validate this in args.c, - // since the suffix handling when decoding is weird now. - if (opt_format == FORMAT_RAW && custom_suffix == NULL) { - message_error(_("%s: With --format=raw, " - "--suffix=.SUF is required unless " - "writing to stdout"), src_name); - return NULL; - } - const char *suffix = custom_suffix != NULL ? custom_suffix : suffixes[0]; size_t suffix_len = strlen(suffix); @@ -299,9 +292,11 @@ // xz foo.tar -> foo.txz // xz -F lzma foo.tar -> foo.tlz static const char *const tar_suffixes[] = { - ".txz", - ".tlz", - // ".tgz", + ".txz", // .tar.xz + ".tlz", // .tar.lzma +/* + ".tlz", // .tar.lz +*/ }; suffix = tar_suffixes[format]; suffix_len = 4; @@ -396,4 +391,11 @@ free(custom_suffix); custom_suffix = xstrdup(suffix); return; +} + + +extern bool +suffix_is_set(void) +{ + return custom_suffix != NULL; } diff -ur xz-5.2.5/src/xz/suffix.h xz-5.4.3/src/xz/suffix.h --- xz-5.2.5/src/xz/suffix.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/suffix.h 2023-05-04 17:21:05 @@ -26,3 +26,11 @@ /// suffix, thus if this is called multiple times, the old suffixes are freed /// and forgotten. extern void suffix_set(const char *suffix); + + +/// \brief Check if a custom suffix has been set +/// +/// Returns true if the internal tracking of the suffix string has been set +/// and false if the string has not been set. This will keep the suffix +/// string encapsulated instead of extern-ing the variable. +extern bool suffix_is_set(void); diff -ur xz-5.2.5/src/xz/util.c xz-5.4.3/src/xz/util.c --- xz-5.2.5/src/xz/util.c 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/util.c 2023-05-04 17:21:05 @@ -261,18 +261,6 @@ extern bool -is_empty_filename(const char *filename) -{ - if (filename[0] == '\0') { - message_error(_("Empty filename, skipping")); - return true; - } - - return false; -} - - -extern bool is_tty_stdin(void) { const bool ret = isatty(STDIN_FILENO); diff -ur xz-5.2.5/src/xz/util.h xz-5.4.3/src/xz/util.h --- xz-5.2.5/src/xz/util.h 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/util.h 2023-05-04 17:21:05 @@ -105,10 +105,6 @@ lzma_attribute((__format__(__printf__, 3, 4))); -/// \brief Check if filename is empty and print an error message -extern bool is_empty_filename(const char *filename); - - /// \brief Test if stdin is a terminal /// /// If stdin is a terminal, an error message is printed and exit status set diff -ur xz-5.2.5/src/xz/xz.1 xz-5.4.3/src/xz/xz.1 --- xz-5.2.5/src/xz/xz.1 2020-03-17 17:28:50 +++ xz-5.4.3/src/xz/xz.1 2023-05-04 17:21:05 @@ -5,7 +5,7 @@ .\" This file has been put into the public domain. .\" You can do whatever you want with this file. .\" -.TH XZ 1 "2020-02-01" "Tukaani" "XZ Utils" +.TH XZ 1 "2022-12-01" "Tukaani" "XZ Utils" . .SH NAME xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files @@ -62,6 +62,11 @@ format used by LZMA Utils and raw compressed streams with no container format headers are also supported. +In addition, decompression of the +.B .lz +format used by +.B lzip +is supported. .PP .B xz compresses or decompresses each @@ -102,9 +107,10 @@ is appended to the source filename to get the target filename. .IP \(bu 3 When decompressing, the -.B .xz +.BR .xz , +.BR .lzma , or -.B .lzma +.B .lz suffix is removed from the filename to get the target filename. .B xz also recognizes the suffixes @@ -158,8 +164,9 @@ .RB ( .xz , .BR .txz , .BR .lzma , +.BR .tlz , or -.BR .tlz ). +.BR .lz ). .PP After successfully compressing or decompressing the .IR file , @@ -183,7 +190,8 @@ was specified. The source .I file -is never removed if the output is written to standard output. +is never removed if the output is written to standard output +or if an error occurs. .PP Sending .B SIGINFO @@ -221,7 +229,7 @@ has a built-in memory usage limiter, which is disabled by default. While some operating systems provide ways to limit the memory usage of processes, relying on it -wasn't deemed to be flexible enough (e.g. using +wasn't deemed to be flexible enough (for example, using .BR ulimit (1) to limit virtual memory tends to cripple .BR mmap (2)). @@ -231,19 +239,21 @@ Often it is more convenient to enable the limiter by default by setting the environment variable .BR XZ_DEFAULTS , -e.g.\& +for example, .BR XZ_DEFAULTS=\-\-memlimit=150MiB . It is possible to set the limits separately -for compression and decompression -by using \fB\-\-memlimit\-compress=\fIlimit\fR and -\fB\-\-memlimit\-decompress=\fIlimit\fR. +for compression and decompression by using +.BI \-\-memlimit\-compress= limit +and \fB\-\-memlimit\-decompress=\fIlimit\fR. Using these two options outside .B XZ_DEFAULTS is rarely useful because a single run of .B xz cannot do both compression and decompression and .BI \-\-memlimit= limit -(or \fB\-M\fR \fIlimit\fR) +(or +.B \-M +.IR limit ) is shorter to type on the command line. .PP If the specified memory usage limit is exceeded when decompressing, @@ -252,11 +262,13 @@ If the limit is exceeded when compressing, .B xz will try to scale the settings down so that the limit -is no longer exceeded (except when using \fB\-\-format=raw\fR -or \fB\-\-no\-adjust\fR). +is no longer exceeded (except when using +.B \-\-format=raw +or +.BR \-\-no\-adjust ). This way the operation won't fail unless the limit is very small. The scaling of the settings is done in steps that don't -match the compression level presets, e.g. if the limit is +match the compression level presets, for example, if the limit is only slightly less than the amount required for .BR "xz \-9" , the settings will be scaled down only a little, @@ -276,7 +288,7 @@ or after the last part. The padding must consist of null bytes and the size of the padding must be a multiple of four bytes. -This can be useful e.g. if the +This can be useful, for example, if the .B .xz file is stored on a medium that measures file sizes in 512-byte blocks. @@ -373,7 +385,7 @@ twice, but note that this may be slow, because getting all the extra information requires many seeks. The width of verbose output exceeds -80 characters, so piping the output to e.g.\& +80 characters, so piping the output to, for example, .B "less\ \-S" may be convenient if the terminal isn't wide enough. .IP "" @@ -388,6 +400,20 @@ .TP .BR \-k ", " \-\-keep Don't delete the input files. +.IP "" +Since +.B xz +5.2.6, +this option also makes +.B xz +compress or decompress even if the input is +a symbolic link to a regular file, +has more than one hard link, +or has the setuid, setgid, or sticky bit set. +The setuid, setgid, and sticky bits are not copied +to the target file. +In earlier versions this was only done with +.BR \-\-force . .TP .BR \-f ", " \-\-force This option has several effects: @@ -405,7 +431,7 @@ .IP \(bu 3 When used with .B \-\-decompress -.BR \-\-stdout +.B \-\-stdout and .B xz cannot recognize the type of the source file, @@ -488,8 +514,9 @@ .BR .xz , .BR .txz , .BR .lzma , +.BR .tlz , or -.B .tlz +.B .lz suffix. If the source file has the suffix .IR .suf , @@ -556,6 +583,34 @@ .B alone is provided for backwards compatibility with LZMA Utils. .TP +.B lzip +Accept only +.B .lz +files when decompressing. +Compression is not supported. +.IP "" +The +.B .lz +format version 0 and the unextended version 1 are supported. +Version 0 files were produced by +.B lzip +1.3 and older. +Such files aren't common but may be found from file archives +as a few source packages were released in this format. +People might have old personal files in this format too. +Decompression support for the format version 0 was removed in +.B lzip +1.18. +.IP "" +.B lzip +1.4 and later create files in the format version 1. +The sync flush marker extension to the format version 1 was added in +.B lzip +1.6. +This extension is rarely used and isn't supported by +.B xz +(diagnosed as corrupt input). +.TP .B raw Compress or uncompress a raw stream (no headers). This is meant for advanced users only. @@ -670,7 +725,7 @@ decompressor memory usage reasonable even for old systems. .B \-6 is the default, which is usually a good choice -e.g. for distributing files that need to be decompressible +for distributing files that need to be decompressible even on systems with only 16\ MiB RAM. .RB ( \-5e or @@ -840,7 +895,7 @@ .I size is three times the LZMA2 dictionary size or 1 MiB, whichever is more. -Typically a good value is 2\-4 times +Typically a good value is 2\(en4 times the size of the LZMA2 dictionary or at least 1 MiB. Using .I size @@ -946,15 +1001,28 @@ If the compression settings exceed the .IR limit , .B xz -will adjust the settings downwards so that +will attempt to adjust the settings downwards so that the limit is no longer exceeded and display a notice that automatic adjustment was done. -Such adjustments are not made when compressing with +The adjustments are done in this order: +reducing the number of threads, +switching to single-threaded mode +if even one thread in multi-threaded mode exceeds the +.IR limit , +and finally reducing the LZMA2 dictionary size. +.IP "" +When compressing with .B \-\-format=raw or if .B \-\-no\-adjust -has been specified. -In those cases, an error is displayed and +has been specified, +only the number of threads may be reduced +since it can be done without affecting the compressed output. +.IP "" +If the +.I limit +cannot be met even with the adjustments described above, +an error is displayed and .B xz will exit with exit status 1. .IP "" @@ -993,20 +1061,10 @@ to .B max (no memory usage limit). -Once multithreading support has been implemented, -there may be a difference between -.B 0 -and -.B max -for the multithreaded case, so it is recommended to use -.B 0 -instead of -.B max -until the details have been decided. .RE .IP "" For 32-bit -.BR xz +.B xz there is a special case: if the .I limit would be over @@ -1015,6 +1073,9 @@ .I limit is set to .BR "4020\ MiB" . +On MIPS32 +.B "2000\ MiB" +is used instead. (The values .B 0 and @@ -1022,7 +1083,8 @@ aren't affected by this. A similar feature doesn't exist for decompression.) This can be helpful when a 32-bit executable has access -to 4\ GiB address space while hopefully doing no harm in other situations. +to 4\ GiB address space (2 GiB on MIPS32) +while hopefully doing no harm in other situations. .IP "" See also the section .BR "Memory usage" . @@ -1041,15 +1103,80 @@ for possible ways to specify the .IR limit . .TP +.BI \-\-memlimit\-mt\-decompress= limit +Set a memory usage limit for multi-threaded decompression. +This can only affect the number of threads; +this will never make +.B xz +refuse to decompress a file. +If +.I limit +is too low to allow any multi-threading, the +.I limit +is ignored and +.B xz +will continue in single-threaded mode. +Note that if also +.B \-\-memlimit\-decompress +is used, +it will always apply to both single-threaded and multi-threaded modes, +and so the effective +.I limit +for multi-threading will never be higher than the limit set with +.BR \-\-memlimit\-decompress . +.IP "" +In contrast to the other memory usage limit options, +.BI \-\-memlimit\-mt\-decompress= limit +has a system-specific default +.IR limit . +.B "xz \-\-info\-memory" +can be used to see the current value. +.IP "" +This option and its default value exist +because without any limit the threaded decompressor +could end up allocating an insane amount of memory with some input files. +If the default +.I limit +is too low on your system, +feel free to increase the +.I limit +but never set it to a value larger than the amount of usable RAM +as with appropriate input files +.B xz +will attempt to use that amount of memory +even with a low number of threads. +Running out of memory or swapping +will not improve decompression performance. +.IP "" +See +.BI \-\-memlimit\-compress= limit +for possible ways to specify the +.IR limit . +Setting +.I limit +to +.B 0 +resets the +.I limit +to the default system-specific value. +.IP "" +.TP \fB\-M\fR \fIlimit\fR, \fB\-\-memlimit=\fIlimit\fR, \fB\-\-memory=\fIlimit -This is equivalent to specifying \fB\-\-memlimit\-compress=\fIlimit -\fB\-\-memlimit\-decompress=\fIlimit\fR. +This is equivalent to specifying +.BI \-\-memlimit\-compress= limit +.BI \-\-memlimit-decompress= limit +\fB\-\-memlimit\-mt\-decompress=\fIlimit\fR. .TP .B \-\-no\-adjust -Display an error and exit if the compression settings exceed -the memory usage limit. -The default is to adjust the settings downwards so -that the memory usage limit is not exceeded. +Display an error and exit if the memory usage limit cannot be +met without adjusting settings that affect the compressed output. +That is, this prevents +.B xz +from switching the encoder from multi-threaded mode to single-threaded mode +and from reducing the LZMA2 dictionary size. +Even when this option is used the number of threads may be reduced +to meet the memory usage limit as that won't affect the compressed output. +.IP "" Automatic adjusting is always disabled when creating raw streams .RB ( \-\-format=raw ). .TP @@ -1061,13 +1188,66 @@ .B 0 makes .B xz -use as many threads as there are CPU cores on the system. -The actual number of threads can be less than +use up to as many threads as the processor(s) on the system support. +The actual number of threads can be fewer than .I threads if the input file is not big enough for threading with the given settings or if using more threads would exceed the memory usage limit. .IP "" +The single-threaded and multi-threaded compressors produce different output. +Single-threaded compressor will give the smallest file size but +only the output from the multi-threaded compressor can be decompressed +using multiple threads. +Setting +.I threads +to +.B 1 +will use the single-threaded mode. +Setting +.I threads +to any other value, including +.BR 0 , +will use the multi-threaded compressor +even if the system supports only one hardware thread. +.RB ( xz +5.2.x +used single-threaded mode in this situation.) +.IP "" +To use multi-threaded mode with only one thread, set +.I threads +to +.BR +1 . +The +.B + +prefix has no effect with values other than +.BR 1 . +A memory usage limit can still make +.B xz +switch to single-threaded mode unless +.B \-\-no\-adjust +is used. +Support for the +.B + +prefix was added in +.B xz +5.4.0. +.IP "" +If an automatic number of threads has been requested and +no memory usage limit has been specified, +then a system-specific default soft limit will be used to possibly +limit the number of threads. +It is a soft limit in sense that it is ignored +if the number of threads becomes one, +thus a soft limit will never stop +.B xz +from compressing or decompressing. +This default soft limit will not make +.B xz +switch from multi-threaded mode to single-threaded mode. +The active limits can be seen with +.BR "xz \-\-info\-memory" . +.IP "" Currently the only threading method is to split the input into blocks and compress them independently from each other. The default block size depends on the compression level and @@ -1075,20 +1255,25 @@ .BI \-\-block\-size= size option. .IP "" -Threaded decompression hasn't been implemented yet. -It will only work on files that contain multiple blocks -with size information in block headers. -All files compressed in multi-threaded mode meet this condition, +Threaded decompression only works on files that contain +multiple blocks with size information in block headers. +All large enough files compressed in multi-threaded mode +meet this condition, but files compressed in single-threaded mode don't even if .BI \-\-block\-size= size -is used. +has been used. . .SS "Custom compressor filter chains" A custom filter chain allows specifying the compression settings in detail instead of relying on the settings associated to the presets. When a custom filter chain is specified, -preset options (\fB\-0\fR ... \fB\-9\fR and \fB\-\-extreme\fR) +preset options +.RB ( \-0 +\&...\& +.B \-9 +and +.BR \-\-extreme ) earlier on the command line are forgotten. If a preset option is specified after one or more custom filter chain options, @@ -1172,7 +1357,10 @@ .B 0 to .BR 9 , -matching the command line options \fB\-0\fR ... \fB\-9\fR. +matching the command line options +.B \-0 +\&...\& +.BR \-9 . The only supported modifier is currently .BR e , which matches @@ -1253,7 +1441,7 @@ .I lc bits of the previous uncompressed byte correlate with the next byte. -E.g. in typical English text, an upper-case letter is +For example, in typical English text, an upper-case letter is often followed by a lower-case letter, and a lower-case letter is usually followed by another lower-case letter. In the US-ASCII character set, the highest three bits are 010 @@ -1268,7 +1456,7 @@ .BR lc=4 . Sometimes it helps a little, and sometimes it makes compression worse. -If it makes it worse, test e.g.\& +If it makes it worse, test .B lc=2 too. .TP @@ -1294,10 +1482,10 @@ .RI (2^ pb =2^2=4), which is often a good choice when there's no better guess. .IP "" -When the aligment is known, setting +When the alignment is known, setting .I pb accordingly may reduce the file size a little. -E.g. with text files having one-byte +For example, with text files having one-byte alignment (US-ASCII, ISO-8859-*, UTF-8), setting .B pb=0 can improve compression slightly. @@ -1325,7 +1513,7 @@ .IR preset : 0 uses .BR hc3 , -1\-3 +1\(en3 use .BR hc4 , and the rest use @@ -1441,11 +1629,11 @@ .B fast for .I presets -0\-3 and +0\(en3 and .B normal for .I presets -4\-9. +4\(en9. .IP "" Usually .B fast @@ -1464,7 +1652,7 @@ looking for possibly better matches. .IP "" .I Nice -can be 2\-273 bytes. +can be 2\(en273 bytes. Higher values tend to give better compression ratio at the expense of speed. The default depends on the @@ -1482,7 +1670,7 @@ .IP "" Reasonable .I depth -for Hash Chains is 4\-100 and 16\-1000 for Binary Trees. +for Hash Chains is 4\(en100 and 16\(en1000 for Binary Trees. Using very high values for .I depth can make the encoder extremely slow with some files. @@ -1505,14 +1693,16 @@ \fB\-\-x86\fR[\fB=\fIoptions\fR] .PD 0 .TP -\fB\-\-powerpc\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-ia64\fR[\fB=\fIoptions\fR] -.TP \fB\-\-arm\fR[\fB=\fIoptions\fR] .TP \fB\-\-armthumb\fR[\fB=\fIoptions\fR] .TP +\fB\-\-arm64\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-powerpc\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-ia64\fR[\fB=\fIoptions\fR] +.TP \fB\-\-sparc\fR[\fB=\fIoptions\fR] .PD Add a branch/call/jump (BCJ) filter to the filter chain. @@ -1521,56 +1711,42 @@ .IP "" A BCJ filter converts relative addresses in the machine code to their absolute counterparts. -This doesn't change the size of the data, +This doesn't change the size of the data but it increases redundancy, -which can help LZMA2 to produce 0\-15\ % smaller +which can help LZMA2 to produce 0\(en15\ % smaller .B .xz file. The BCJ filters are always reversible, so using a BCJ filter for wrong type of data doesn't cause any data loss, although it may make the compression ratio slightly worse. +The BCJ filters are very fast and +use an insignificant amount of memory. .IP "" -It is fine to apply a BCJ filter on a whole executable; -there's no need to apply it only on the executable section. -Applying a BCJ filter on an archive that contains both executable -and non-executable files may or may not give good results, -so it generally isn't good to blindly apply a BCJ filter when -compressing binary packages for distribution. -.IP "" -These BCJ filters are very fast and -use insignificant amount of memory. -If a BCJ filter improves compression ratio of a file, -it can improve decompression speed at the same time. -This is because, on the same hardware, -the decompression speed of LZMA2 is roughly -a fixed number of bytes of compressed data per second. -.IP "" These BCJ filters have known problems related to the compression ratio: .RS .IP \(bu 3 Some types of files containing executable code -(e.g. object files, static libraries, and Linux kernel modules) +(for example, object files, static libraries, and Linux kernel modules) have the addresses in the instructions filled with filler values. These BCJ filters will still do the address conversion, which will make the compression worse with these files. .IP \(bu 3 -Applying a BCJ filter on an archive containing multiple similar -executables can make the compression ratio worse than not using -a BCJ filter. -This is because the BCJ filter doesn't detect the boundaries -of the executable files, and doesn't reset -the address conversion counter for each executable. +If a BCJ filter is applied on an archive, +it is possible that it makes the compression ratio +worse than not using a BCJ filter. +For example, if there are similar or even identical executables +then filtering will likely make the files less similar +and thus compression is worse. +The contents of non-executable files in the same archive can matter too. +In practice one has to try with and without a BCJ filter to see +which is better in each situation. .RE .IP "" -Both of the above problems will be fixed -in the future in a new filter. -The old BCJ filters will still be useful in embedded systems, -because the decoder of the new filter will be bigger -and use more memory. -.IP "" Different instruction sets have different alignment: +the executable file must be aligned to a multiple of +this value in the input data to make the filter work. .RS .RS .PP @@ -1580,11 +1756,12 @@ l n l. Filter;Alignment;Notes x86;1;32-bit or 64-bit x86 +ARM;4; +ARM-Thumb;2; +ARM64;4;4096-byte alignment is best PowerPC;4;Big endian only -ARM;4;Little endian only -ARM-Thumb;2;Little endian only -IA-64;16;Big or little endian -SPARC;4;Big or little endian +IA-64;16;Itanium +SPARC;4; .TE .RE .RE @@ -1595,6 +1772,8 @@ alignment of the selected BCJ filter. For example, with the IA-64 filter, it's good to set .B pb=4 +or even +.B pb=4,lp=4,lc=0 with LZMA2 (2^4=16). The x86 filter is an exception; it's usually good to stick to LZMA2's default @@ -1625,12 +1804,12 @@ in the filter chain. .IP "" Currently only simple byte-wise delta calculation is supported. -It can be useful when compressing e.g. uncompressed bitmap images +It can be useful when compressing, for example, uncompressed bitmap images or uncompressed PCM audio. However, special purpose algorithms may give significantly better results than Delta + LZMA2. This is true especially with audio, -which compresses faster and better e.g. with +which compresses faster and better, for example, with .BR flac (1). .IP "" Supported @@ -1642,7 +1821,7 @@ .I distance of the delta calculation in bytes. .I distance -must be 1\-256. +must be 1\(en256. The default is 1. .IP "" For example, with @@ -1701,7 +1880,7 @@ .B xz started processing the file. The time is shown in a less precise format which -never has any colons, e.g. 2 min 30 s. +never has any colons, for example, 2 min 30 s. .RE .IP "" When standard error is not a terminal, @@ -1714,7 +1893,7 @@ decompressing the file. The speed and elapsed time are included only when the operation took at least a few seconds. -If the operation didn't finish, e.g. due to user interruption, +If the operation didn't finish, for example, due to user interruption, also the completion percentage is printed if the size of the input file is known. .TP @@ -1740,8 +1919,9 @@ .B "ROBOT MODE" for details. .TP -.BR \-\-info\-memory +.B \-\-info\-memory Display, in human-readable format, how much physical memory (RAM) +and how many processor threads .B xz thinks the system has and the memory usage limits for compression and decompression, and exit successfully. @@ -1826,15 +2006,50 @@ .B "xz \-\-robot \-\-info\-memory" prints a single line with three tab-separated columns: .IP 1. 4 -Total amount of physical memory (RAM) in bytes +Total amount of physical memory (RAM) in bytes. .IP 2. 4 -Memory usage limit for compression in bytes. -A special value of zero indicates the default setting, +Memory usage limit for compression in bytes +.RB ( \-\-memlimit\-compress ). +A special value of +.B 0 +indicates the default setting which for single-threaded mode is the same as no limit. .IP 3. 4 -Memory usage limit for decompression in bytes. -A special value of zero indicates the default setting, +Memory usage limit for decompression in bytes +.RB ( \-\-memlimit\-decompress ). +A special value of +.B 0 +indicates the default setting which for single-threaded mode is the same as no limit. +.IP 4. 4 +Since +.B xz +5.3.4alpha: +Memory usage for multi-threaded decompression in bytes +.RB ( \-\-memlimit\-mt\-decompress ). +This is never zero because a system-specific default value +shown in the column 5 +is used if no limit has been specified explicitly. +This is also never greater than the value in the column 3 +even if a larger value has been specified with +.BR \-\-memlimit\-mt\-decompress . +.IP 5. 4 +Since +.B xz +5.3.4alpha: +A system-specific default memory usage limit +that is used to limit the number of threads +when compressing with an automatic number of threads +.RB ( \-\-threads=0 ) +and no memory usage limit has been specified +.RB ( \-\-memlimit\-compress ). +This is also used as the default value for +.BR \-\-memlimit\-mt\-decompress . +.IP 6. 4 +Since +.B xz +5.3.4alpha: +Number of available processor threads. .PP In the future, the output of .B "xz \-\-robot \-\-info\-memory" @@ -1916,8 +2131,8 @@ .IP 5. 4 Uncompressed size of the file .IP 6. 4 -Compression ratio, for example -.BR 0.123. +Compression ratio, for example, +.BR 0.123 . If ratio is over 9.999, three dashes .RB ( \-\-\- ) are displayed instead of the ratio. @@ -2168,9 +2383,9 @@ when it is not possible to set the options directly on the .B xz command line. -This is the case e.g. when +This is the case when .B xz -is run by a script or tool, e.g. GNU +is run by a script or tool, for example, GNU .BR tar (1): .RS .RS @@ -2184,11 +2399,12 @@ .RE .IP "" Scripts may use -.B XZ_OPT -e.g. to set script-specific default compression options. +.BR XZ_OPT , +for example, to set script-specific default compression options. It is still recommended to allow users to override .B XZ_OPT -if that is reasonable, e.g. in +if that is reasonable. +For example, in .BR sh (1) scripts one may use something like this: .RS @@ -2210,7 +2426,7 @@ .BR lzma , .BR unlzma , and -.BR lzcat +.B lzcat as found from LZMA Utils 4.32.x. In most cases, it is possible to replace LZMA Utils with XZ Utils without breaking existing scripts. @@ -2284,7 +2500,7 @@ and use end-of-payload marker to indicate where the decompressor should stop. LZMA Utils uses this method when uncompressed size isn't known, -which is the case for example in pipes. +which is the case, for example, in pipes. .PP .B xz supports decompressing @@ -2480,7 +2696,7 @@ with the preset .B \-4e .RB ( "\-4 \-\-extreme" ), -which is slower than e.g. the default +which is slower than the default .BR \-6 , but needs less memory for compression and decompression (48\ MiB and 5\ MiB, respectively): @@ -2590,7 +2806,7 @@ .PP .nf .ft CW -NEWLIM=$((123 << 20)) # 123 MiB +NEWLIM=$((123 << 20))\ \ # 123 MiB OLDLIM=$(xz \-\-robot \-\-info\-memory | cut \-f3) if [ $OLDLIM \-eq 0 \-o $OLDLIM \-gt $NEWLIM ]; then XZ_OPT="$XZ_OPT \-\-memlimit\-decompress=$NEWLIM" @@ -2634,10 +2850,10 @@ .RE .PP If you know that a file requires -somewhat big dictionary (e.g. 32 MiB) to compress well, +somewhat big dictionary (for example, 32\ MiB) to compress well, but you want to compress it quicker than .B "xz \-8" -would do, a preset with a low CompCPU value (e.g. 1) +would do, a preset with a low CompCPU value (for example, 1) can be modified to use a bigger dictionary: .RS .PP @@ -2687,9 +2903,8 @@ so the above command isn't useful for small files. .PP Sometimes the compression time doesn't matter, -but the decompressor memory usage has to be kept low -e.g. to make it possible to decompress the file on -an embedded system. +but the decompressor memory usage has to be kept low, for example, +to make it possible to decompress the file on an embedded system. The following command uses .B \-6e .RB ( "\-6 \-\-extreme" ) @@ -2720,7 +2935,7 @@ and .I pb are more important. -E.g. a source code archive contains mostly US-ASCII text, +For example, a source code archive contains mostly US-ASCII text, so something like the following might give slightly (like 0.1\ %) smaller file than .B "xz \-6e" @@ -2737,7 +2952,7 @@ .PP Using another filter together with LZMA2 can improve compression with certain file types. -E.g. to compress a x86-32 or x86-64 shared library +For example, to compress a x86-32 or x86-64 shared library using the x86 BCJ filter: .RS .PP @@ -2766,10 +2981,10 @@ delta but uses Deflate for the actual compression. .PP The image has to be saved in uncompressed format, -e.g. as uncompressed TIFF. +for example, as uncompressed TIFF. The distance parameter of the Delta filter is set to match the number of bytes per pixel in the image. -E.g. 24-bit RGB bitmap needs +For example, 24-bit RGB bitmap needs .BR dist=3 , and it is also good to pass .B pb=0 @@ -2783,7 +2998,7 @@ .fi .RE .PP -If multiple images have been put into a single archive (e.g.\& +If multiple images have been put into a single archive (for example, .BR .tar ), the Delta filter will work on that too as long as all images have the same number of bytes per pixel. @@ -2802,4 +3017,4 @@ .br XZ Embedded: .br -LZMA SDK: +LZMA SDK: diff -ur xz-5.2.5/src/xzdec/Makefile.in xz-5.4.3/src/xzdec/Makefile.in --- xz-5.2.5/src/xzdec/Makefile.in 2020-03-17 17:29:36 +++ xz-5.4.3/src/xzdec/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -251,8 +251,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -276,6 +274,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -286,8 +286,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -340,6 +342,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -398,6 +401,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -739,7 +743,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -ur xz-5.2.5/tests/Makefile.am xz-5.4.3/tests/Makefile.am --- xz-5.2.5/tests/Makefile.am 2020-03-17 17:28:54 +++ xz-5.4.3/tests/Makefile.am 2023-05-04 17:21:05 @@ -7,9 +7,16 @@ EXTRA_DIST = \ files \ + ossfuzz \ + tuktest.h \ tests.h \ test_files.sh \ test_compress.sh \ + test_compress_prepared_bcj_sparc \ + test_compress_prepared_bcj_x86 \ + test_compress_generated_abc \ + test_compress_generated_random \ + test_compress_generated_text \ test_scripts.sh \ bcj_test.c \ compress_prepared_bcj_sparc \ @@ -19,6 +26,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/common \ -I$(top_srcdir)/src/liblzma/api \ + -I$(top_srcdir)/src/liblzma \ -I$(top_builddir)/lib LDADD = $(top_builddir)/src/liblzma/liblzma.la @@ -32,21 +40,37 @@ check_PROGRAMS = \ create_compress_files \ test_check \ + test_hardware \ test_stream_flags \ test_filter_flags \ + test_filter_str \ test_block_header \ test_index \ - test_bcj_exact_size + test_index_hash \ + test_bcj_exact_size \ + test_memlimit \ + test_lzip_decoder \ + test_vli TESTS = \ test_check \ + test_hardware \ test_stream_flags \ test_filter_flags \ + test_filter_str \ test_block_header \ test_index \ + test_index_hash \ test_bcj_exact_size \ + test_memlimit \ + test_lzip_decoder \ + test_vli \ test_files.sh \ - test_compress.sh + test_compress_prepared_bcj_sparc \ + test_compress_prepared_bcj_x86 \ + test_compress_generated_abc \ + test_compress_generated_random \ + test_compress_generated_text if COND_SCRIPTS TESTS += test_scripts.sh diff -ur xz-5.2.5/tests/Makefile.in xz-5.4.3/tests/Makefile.in --- xz-5.2.5/tests/Makefile.in 2020-03-17 17:29:36 +++ xz-5.4.3/tests/Makefile.in 2023-05-04 17:31:30 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -89,13 +89,22 @@ host_triplet = @host@ @COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a check_PROGRAMS = create_compress_files$(EXEEXT) test_check$(EXEEXT) \ - test_stream_flags$(EXEEXT) test_filter_flags$(EXEEXT) \ + test_hardware$(EXEEXT) test_stream_flags$(EXEEXT) \ + test_filter_flags$(EXEEXT) test_filter_str$(EXEEXT) \ test_block_header$(EXEEXT) test_index$(EXEEXT) \ - test_bcj_exact_size$(EXEEXT) -TESTS = test_check$(EXEEXT) test_stream_flags$(EXEEXT) \ - test_filter_flags$(EXEEXT) test_block_header$(EXEEXT) \ - test_index$(EXEEXT) test_bcj_exact_size$(EXEEXT) test_files.sh \ - test_compress.sh $(am__append_2) + test_index_hash$(EXEEXT) test_bcj_exact_size$(EXEEXT) \ + test_memlimit$(EXEEXT) test_lzip_decoder$(EXEEXT) \ + test_vli$(EXEEXT) +TESTS = test_check$(EXEEXT) test_hardware$(EXEEXT) \ + test_stream_flags$(EXEEXT) test_filter_flags$(EXEEXT) \ + test_filter_str$(EXEEXT) test_block_header$(EXEEXT) \ + test_index$(EXEEXT) test_index_hash$(EXEEXT) \ + test_bcj_exact_size$(EXEEXT) test_memlimit$(EXEEXT) \ + test_lzip_decoder$(EXEEXT) test_vli$(EXEEXT) test_files.sh \ + test_compress_prepared_bcj_sparc \ + test_compress_prepared_bcj_x86 test_compress_generated_abc \ + test_compress_generated_random test_compress_generated_text \ + $(am__append_2) @COND_SCRIPTS_TRUE@am__append_2 = test_scripts.sh subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -157,17 +166,48 @@ test_filter_flags_DEPENDENCIES = \ $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ $(am__DEPENDENCIES_1) +test_filter_str_SOURCES = test_filter_str.c +test_filter_str_OBJECTS = test_filter_str.$(OBJEXT) +test_filter_str_LDADD = $(LDADD) +test_filter_str_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +test_hardware_SOURCES = test_hardware.c +test_hardware_OBJECTS = test_hardware.$(OBJEXT) +test_hardware_LDADD = $(LDADD) +test_hardware_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) test_index_SOURCES = test_index.c test_index_OBJECTS = test_index.$(OBJEXT) test_index_LDADD = $(LDADD) test_index_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ $(am__append_1) $(am__DEPENDENCIES_1) +test_index_hash_SOURCES = test_index_hash.c +test_index_hash_OBJECTS = test_index_hash.$(OBJEXT) +test_index_hash_LDADD = $(LDADD) +test_index_hash_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +test_lzip_decoder_SOURCES = test_lzip_decoder.c +test_lzip_decoder_OBJECTS = test_lzip_decoder.$(OBJEXT) +test_lzip_decoder_LDADD = $(LDADD) +test_lzip_decoder_DEPENDENCIES = \ + $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(am__DEPENDENCIES_1) +test_memlimit_SOURCES = test_memlimit.c +test_memlimit_OBJECTS = test_memlimit.$(OBJEXT) +test_memlimit_LDADD = $(LDADD) +test_memlimit_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) test_stream_flags_SOURCES = test_stream_flags.c test_stream_flags_OBJECTS = test_stream_flags.$(OBJEXT) test_stream_flags_LDADD = $(LDADD) test_stream_flags_DEPENDENCIES = \ $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ $(am__DEPENDENCIES_1) +test_vli_SOURCES = test_vli.c +test_vli_OBJECTS = test_vli.$(OBJEXT) +test_vli_LDADD = $(LDADD) +test_vli_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -186,8 +226,11 @@ am__depfiles_remade = ./$(DEPDIR)/create_compress_files.Po \ ./$(DEPDIR)/test_bcj_exact_size.Po \ ./$(DEPDIR)/test_block_header.Po ./$(DEPDIR)/test_check.Po \ - ./$(DEPDIR)/test_filter_flags.Po ./$(DEPDIR)/test_index.Po \ - ./$(DEPDIR)/test_stream_flags.Po + ./$(DEPDIR)/test_filter_flags.Po \ + ./$(DEPDIR)/test_filter_str.Po ./$(DEPDIR)/test_hardware.Po \ + ./$(DEPDIR)/test_index.Po ./$(DEPDIR)/test_index_hash.Po \ + ./$(DEPDIR)/test_lzip_decoder.Po ./$(DEPDIR)/test_memlimit.Po \ + ./$(DEPDIR)/test_stream_flags.Po ./$(DEPDIR)/test_vli.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -209,10 +252,14 @@ am__v_CCLD_1 = SOURCES = create_compress_files.c test_bcj_exact_size.c \ test_block_header.c test_check.c test_filter_flags.c \ - test_index.c test_stream_flags.c + test_filter_str.c test_hardware.c test_index.c \ + test_index_hash.c test_lzip_decoder.c test_memlimit.c \ + test_stream_flags.c test_vli.c DIST_SOURCES = create_compress_files.c test_bcj_exact_size.c \ test_block_header.c test_check.c test_filter_flags.c \ - test_index.c test_stream_flags.c + test_filter_str.c test_hardware.c test_index.c \ + test_index_hash.c test_lzip_decoder.c test_memlimit.c \ + test_stream_flags.c test_vli.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -235,8 +282,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no @@ -259,8 +304,192 @@ std=''; \ fi; \ } +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/build-aux/depcomp + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -282,6 +511,8 @@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -292,8 +523,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ @@ -346,6 +579,7 @@ PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RC = @RC@ @@ -404,6 +638,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -415,9 +650,16 @@ xz = @xz@ EXTRA_DIST = \ files \ + ossfuzz \ + tuktest.h \ tests.h \ test_files.sh \ test_compress.sh \ + test_compress_prepared_bcj_sparc \ + test_compress_prepared_bcj_x86 \ + test_compress_generated_abc \ + test_compress_generated_random \ + test_compress_generated_text \ test_scripts.sh \ bcj_test.c \ compress_prepared_bcj_sparc \ @@ -427,6 +669,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/common \ -I$(top_srcdir)/src/liblzma/api \ + -I$(top_srcdir)/src/liblzma \ -I$(top_builddir)/lib LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ @@ -434,7 +677,7 @@ all: all-am .SUFFIXES: -.SUFFIXES: .c .lo .o .obj +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -494,14 +737,38 @@ @rm -f test_filter_flags$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_filter_flags_OBJECTS) $(test_filter_flags_LDADD) $(LIBS) +test_filter_str$(EXEEXT): $(test_filter_str_OBJECTS) $(test_filter_str_DEPENDENCIES) $(EXTRA_test_filter_str_DEPENDENCIES) + @rm -f test_filter_str$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_filter_str_OBJECTS) $(test_filter_str_LDADD) $(LIBS) + +test_hardware$(EXEEXT): $(test_hardware_OBJECTS) $(test_hardware_DEPENDENCIES) $(EXTRA_test_hardware_DEPENDENCIES) + @rm -f test_hardware$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_hardware_OBJECTS) $(test_hardware_LDADD) $(LIBS) + test_index$(EXEEXT): $(test_index_OBJECTS) $(test_index_DEPENDENCIES) $(EXTRA_test_index_DEPENDENCIES) @rm -f test_index$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_index_OBJECTS) $(test_index_LDADD) $(LIBS) +test_index_hash$(EXEEXT): $(test_index_hash_OBJECTS) $(test_index_hash_DEPENDENCIES) $(EXTRA_test_index_hash_DEPENDENCIES) + @rm -f test_index_hash$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_index_hash_OBJECTS) $(test_index_hash_LDADD) $(LIBS) + +test_lzip_decoder$(EXEEXT): $(test_lzip_decoder_OBJECTS) $(test_lzip_decoder_DEPENDENCIES) $(EXTRA_test_lzip_decoder_DEPENDENCIES) + @rm -f test_lzip_decoder$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lzip_decoder_OBJECTS) $(test_lzip_decoder_LDADD) $(LIBS) + +test_memlimit$(EXEEXT): $(test_memlimit_OBJECTS) $(test_memlimit_DEPENDENCIES) $(EXTRA_test_memlimit_DEPENDENCIES) + @rm -f test_memlimit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_memlimit_OBJECTS) $(test_memlimit_LDADD) $(LIBS) + test_stream_flags$(EXEEXT): $(test_stream_flags_OBJECTS) $(test_stream_flags_DEPENDENCIES) $(EXTRA_test_stream_flags_DEPENDENCIES) @rm -f test_stream_flags$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stream_flags_OBJECTS) $(test_stream_flags_LDADD) $(LIBS) +test_vli$(EXEEXT): $(test_vli_OBJECTS) $(test_vli_DEPENDENCIES) $(EXTRA_test_vli_DEPENDENCIES) + @rm -f test_vli$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vli_OBJECTS) $(test_vli_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -513,8 +780,14 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_block_header.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_check.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filter_flags.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filter_str.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hardware.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_index.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_index_hash.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lzip_decoder.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_memlimit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_stream_flags.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_vli.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @@ -601,99 +874,294 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + color_start= color_end=; \ fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - fi; \ - echo "$${col}$$dashes$${std}"; \ - echo "$${col}$$banner$${std}"; \ - test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ - test -z "$$report" || echo "$${col}$$report$${std}"; \ - echo "$${col}$$dashes$${std}"; \ - test "$$failed" -eq 0; \ - else :; fi + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 +check-TESTS: $(check_PROGRAMS) + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test_check.log: test_check$(EXEEXT) + @p='test_check$(EXEEXT)'; \ + b='test_check'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_hardware.log: test_hardware$(EXEEXT) + @p='test_hardware$(EXEEXT)'; \ + b='test_hardware'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_stream_flags.log: test_stream_flags$(EXEEXT) + @p='test_stream_flags$(EXEEXT)'; \ + b='test_stream_flags'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_filter_flags.log: test_filter_flags$(EXEEXT) + @p='test_filter_flags$(EXEEXT)'; \ + b='test_filter_flags'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_filter_str.log: test_filter_str$(EXEEXT) + @p='test_filter_str$(EXEEXT)'; \ + b='test_filter_str'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_block_header.log: test_block_header$(EXEEXT) + @p='test_block_header$(EXEEXT)'; \ + b='test_block_header'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_index.log: test_index$(EXEEXT) + @p='test_index$(EXEEXT)'; \ + b='test_index'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_index_hash.log: test_index_hash$(EXEEXT) + @p='test_index_hash$(EXEEXT)'; \ + b='test_index_hash'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_bcj_exact_size.log: test_bcj_exact_size$(EXEEXT) + @p='test_bcj_exact_size$(EXEEXT)'; \ + b='test_bcj_exact_size'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_memlimit.log: test_memlimit$(EXEEXT) + @p='test_memlimit$(EXEEXT)'; \ + b='test_memlimit'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_lzip_decoder.log: test_lzip_decoder$(EXEEXT) + @p='test_lzip_decoder$(EXEEXT)'; \ + b='test_lzip_decoder'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_vli.log: test_vli$(EXEEXT) + @p='test_vli$(EXEEXT)'; \ + b='test_vli'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_files.sh.log: test_files.sh + @p='test_files.sh'; \ + b='test_files.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_compress_prepared_bcj_sparc.log: test_compress_prepared_bcj_sparc + @p='test_compress_prepared_bcj_sparc'; \ + b='test_compress_prepared_bcj_sparc'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_compress_prepared_bcj_x86.log: test_compress_prepared_bcj_x86 + @p='test_compress_prepared_bcj_x86'; \ + b='test_compress_prepared_bcj_x86'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_compress_generated_abc.log: test_compress_generated_abc + @p='test_compress_generated_abc'; \ + b='test_compress_generated_abc'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_compress_generated_random.log: test_compress_generated_random + @p='test_compress_generated_random'; \ + b='test_compress_generated_random'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_compress_generated_text.log: test_compress_generated_text + @p='test_compress_generated_text'; \ + b='test_compress_generated_text'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_scripts.sh.log: test_scripts.sh + @p='test_scripts.sh'; \ + b='test_scripts.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -753,6 +1221,9 @@ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: @@ -774,8 +1245,14 @@ -rm -f ./$(DEPDIR)/test_block_header.Po -rm -f ./$(DEPDIR)/test_check.Po -rm -f ./$(DEPDIR)/test_filter_flags.Po + -rm -f ./$(DEPDIR)/test_filter_str.Po + -rm -f ./$(DEPDIR)/test_hardware.Po -rm -f ./$(DEPDIR)/test_index.Po + -rm -f ./$(DEPDIR)/test_index_hash.Po + -rm -f ./$(DEPDIR)/test_lzip_decoder.Po + -rm -f ./$(DEPDIR)/test_memlimit.Po -rm -f ./$(DEPDIR)/test_stream_flags.Po + -rm -f ./$(DEPDIR)/test_vli.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -826,8 +1303,14 @@ -rm -f ./$(DEPDIR)/test_block_header.Po -rm -f ./$(DEPDIR)/test_check.Po -rm -f ./$(DEPDIR)/test_filter_flags.Po + -rm -f ./$(DEPDIR)/test_filter_str.Po + -rm -f ./$(DEPDIR)/test_hardware.Po -rm -f ./$(DEPDIR)/test_index.Po + -rm -f ./$(DEPDIR)/test_index_hash.Po + -rm -f ./$(DEPDIR)/test_lzip_decoder.Po + -rm -f ./$(DEPDIR)/test_memlimit.Po -rm -f ./$(DEPDIR)/test_stream_flags.Po + -rm -f ./$(DEPDIR)/test_vli.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -860,7 +1343,8 @@ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am + pdf pdf-am ps ps-am recheck tags tags-am uninstall \ + uninstall-am .PRECIOUS: Makefile diff -ur xz-5.2.5/tests/create_compress_files.c xz-5.4.3/tests/create_compress_files.c --- xz-5.2.5/tests/create_compress_files.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/create_compress_files.c 2023-05-04 17:21:05 @@ -17,10 +17,15 @@ #include +// If a command-line argument was given, only create the file if its +// name was specified on the command line. If no args were given then +// all files are created. +// // Avoid re-creating the test files every time the tests are run. -#define create_test(name) \ +#define maybe_create_test(argc, argv, name) \ do { \ - if (!file_exists("compress_generated_" #name)) { \ + if ((argc < 2 || strcmp(argv[1], "compress_generated_" #name) == 0) \ + && !file_exists("compress_generated_" #name)) { \ FILE *file = file_create("compress_generated_" #name); \ write_ ## name(file); \ file_finish(file, "compress_generated_" #name); \ @@ -53,7 +58,7 @@ if (file == NULL) { perror(filename); - exit(1); + exit(EXIT_FAILURE); } return file; @@ -68,7 +73,7 @@ if (ferror_fail || fclose_fail) { perror(filename); - exit(1); + exit(EXIT_FAILURE); } } @@ -80,7 +85,7 @@ { for (size_t i = 0; i < 12345; ++i) if (fwrite("abc\n", 4, 1, file) != 1) - exit(1); + exit(EXIT_FAILURE); } @@ -149,10 +154,10 @@ int -main(void) +main(int argc, char **argv) { - create_test(abc); - create_test(random); - create_test(text); - return 0; + maybe_create_test(argc, argv, abc); + maybe_create_test(argc, argv, random); + maybe_create_test(argc, argv, text); + return EXIT_SUCCESS; } diff -ur xz-5.2.5/tests/files/README xz-5.4.3/tests/files/README --- xz-5.2.5/tests/files/README 2020-03-17 17:28:50 +++ xz-5.4.3/tests/files/README 2023-05-04 17:21:05 @@ -1,31 +1,31 @@ -.xz Test Files ----------------- +.xz and .lzma Test Files +------------------------ 0. Introduction - This directory contains bunch of files to test handling of .xz files - in .xz decoder implementations. Many of the files have been created - by hand with a hex editor, thus there is no better "source code" than - the files themselves. All the test files (*.xz) and this README have - been put into the public domain. + This directory contains bunch of files to test handling of .xz, + .lzma (LZMA_Alone), and .lz (lzip) files in decoder implementations. + Many of the files have been created by hand with a hex editor, thus + there is no better "source code" than the files themselves. All the + test files and this README have been put into the public domain. 1. File Types - Good files (good-*.xz) must decode successfully without requiring + Good files (good-*) must decode successfully without requiring a lot of CPU time or RAM. - Unsupported files (unsupported-*.xz) are good files, but headers + Unsupported files (unsupported-*) are good files, but headers indicate features not supported by the current file format specification. - Bad files (bad-*.xz) must cause the decoder to give an error. Like - with the good files, these files must not require a lot of CPU time - or RAM before they get detected to be broken. + Bad files (bad-*) must cause the decoder to give an error. Like + with the good files, these files must not require a lot of CPU + time or RAM before they get detected to be broken. -2. Descriptions of Individual Files +2. Descriptions of Individual .xz Files 2.1. Good Files @@ -69,10 +69,17 @@ uncompressed file is compress_prepared_bcj_x86 found from the tests directory. - good-1-sparc-lzma2.xz uses the SPARC filter and LZMA. The + good-1-sparc-lzma2.xz uses the SPARC filter and LZMA2. The uncompressed file is compress_prepared_bcj_sparc found from the tests directory. + good-1-arm64-lzma2-1.xz uses the ARM64 filter and LZMA2. The + uncompressed data is constructed so that it tests integer + wrap around and sign extension. + + good-1-arm64-lzma2-2.xz is like good-1-arm64-lzma2-1.xz but with + non-zero start offset. XZ Embedded doesn't support this file. + good-1-lzma2-1.xz has two LZMA2 chunks, of which the second sets new properties. @@ -93,7 +100,12 @@ good-1-3delta-lzma2.xz has three Delta filters and LZMA2. + good-1-empty-bcj-lzma2.xz has an empty Block that uses PowerPC BCJ + and LZMA2. liblzma from XZ Utils 5.0.1 and older may incorrectly + return LZMA_BUF_ERROR in some cases. See commit message + d8db706acb8316f9861abd432cfbe001dd6d0c5c for the details. + 2.2. Unsupported Files unsupported-check.xz uses Check ID 0x02 which isn't supported by @@ -204,11 +216,28 @@ file gets rejected specifically due to Unpadded Size having an invalid value. + bad-3-index-uncomp-overflow.xz has Index whose Uncompressed Size + fields have huge values whose sum exceeds the maximum allowed size + of 2^63 - 1 bytes. In this file the sum is exactly 2^64. + lzma_index_append() in liblzma <= 5.2.6 lacks the integer overflow + check for the uncompressed size and thus doesn't catch the error + when decoding the Index field in this file. This makes "xz -l" + not detect the error and will display 0 as the uncompressed size. + Note that regular decompression isn't affected by this bug because + it uses lzma_index_hash_append() instead. + bad-2-compressed_data_padding.xz has non-null byte in the padding of the Compressed Data field of the first Block. bad-1-check-crc32.xz has wrong Check (CRC32). + bad-1-check-crc32-2.xz has Compressed Size and Uncompressed Size in + Block Header but wrong Check (CRC32) in the actual data. This file + differs by one byte from good-1-block_header-1.xz: the last byte of + the Check field is wrong. This file is useful for testing error + detection in the threaded decoder when a worker thread is configured + to pass input one byte at a time to the Block decoder. + bad-1-check-crc64.xz has wrong Check (CRC64). bad-1-check-sha256.xz has wrong Check (SHA-256). @@ -237,4 +266,144 @@ bad-1-lzma2-8.xz is like good-1-lzma2-4.xz but doesn't set new properties in the third LZMA2 chunk. + + bad-1-lzma2-9.xz has LZMA2 stream that is truncated at the end of + a LZMA2 chunk (no end marker). The uncompressed size of the partial + LZMA2 stream exceeds the value stored in the Block Header. + + bad-1-lzma2-10.xz has LZMA2 stream that, from point of view of a + LZMA2 decoder, extends past the end of Block (and even the end of + the file). Uncompressed Size in Block Header is bigger than the + invalid LZMA2 stream may produce (even if a decoder reads until + the end of the file). The Check type is None to nullify certain + simple size-based sanity checks in a Block decoder. + + bad-1-lzma2-11.xz has LZMA2 stream that lacks the end of + payload marker. When Compressed Size bytes have been decoded, + Uncompressed Size bytes of output will have been produced but + the LZMA2 decoder doesn't indicate end of stream. + + +3. Descriptions of Individual .lzma Files + +3.1. Good Files + + good-unknown_size-with_eopm.lzma has unknown size in the header + and end of payload marker at the end. + + good-known_size-without_eopm.lzma has a known size in the header + and no end of payload marker at the end. + + good-known_size-with_eopm.lzma has a known size in the header + and end of payload marker at the end. XZ Utils 5.2.5 and older + will give an error at the end of the file after producing the + correct uncompressed output. + + +3.2. Bad Files + + bad-unknown_size-without_eopm.lzma has unknown size in the header + but no end of payload marker at the end. This file might be seen + by a decoder as if it were truncated. + + bad-too_big_size-with_eopm.lzma has too big uncompressed size in + the header and the end of payload marker will be detected before + the specified number of bytes have been decoded. + + bad-too_small_size-without_eopm-1.lzma has too small uncompressed + size in the header. The decoder will look for end of payload marker + but instead find a literal that would produce more output. + + bad-too_small_size-without_eopm-2.lzma is like -1 above but instead + of a literal the problem occurs with a short repeated match. + + bad-too_small_size-without_eopm-3.lzma is like -1 above but instead + of a literal the problem occurs in the middle of a match. + + +4. Descriptions of Individual .lz (lzip) Files + +4.1. Good Files + + good-1-v0.lz contains a single version 0 member. lzip 1.17 and + *older* can decompress this; support for version 0 was removed + in lzip 1.18. + + good-1-v0-trailing-1.lz is like good-1-v0.lz but contains + trailing data that the decompressor must ignore. + + good-1-v1.lz contains a single version 1 member. lzip 1.3 and + newer can decompress this. + + good-1-v1-trailing-1.lz is like good-1-v1.lz but contains + trailing data that the decompressor must ignore. + + good-1-v1-trailing-2.lz is like good-1-v1.lz but contains + trailing data whose first three bytes match the .lz magic bytes. + With lzip >= 1.20 this file results in an error unless one uses + the command line option --loose-trailing. lzip 1.3 to 1.19 decode + this file successfully by default. XZ Utils uses the old behavior + because it allows lzma_code() to stop at the first byte of the + trailing data as long as the first byte isn't 0x4C (L in US-ASCII); + otherwise the first 1-3 bytes that equal to the magic bytes are + consumed and lost in lzma_code(), and this is visible in xz too: + + $ ( xz -dc ; cat ) < good-1-v1-trailing-2.lz + Hello + World! + Trailing garbage + + $ ( xz -dc --single-stream ; cat ) < good-1-v1-trailing-2.lz + Hello + World! + LZITrailing garbage + + good-2-v0-v1.lz contains two members of which the first is + version 0 and the second version 1. lzip versions 1.3 to 1.17 + (inclusive) can decompress this. + + good-2-v1-v0.lz contains two members of which the first is + version 1 and the second version 0. lzip versions 1.3 to 1.17 + (inclusive) can decompress this. + + good-2-v1-v1.lz contains two version 1 members. lzip versions 1.3 + and newer can decompress this. + + +4.2. Unsupported Files + + unsupported-1-v234.lz is like good-1-v1.lz except the version + field has been set to 234 (0xEA) which, as of writing, isn't + defined or supported by any .lz implementation. + + +4.3. Bad Files + + bad-1-v1-magic-1.lz is like good-1-v1.lz but the first magic byte + is wrong. + + bad-1-v1-magic-2.lz is like good-1-v1.lz but the last (fourth) + magic byte is wrong. + + bad-1-v1-dict-1.lz has too low value in the dictionary size field. + + bad-1-v1-dict-2.lz has too high value in the dictionary size field. + + bad-1-v1-crc32.lz has wrong CRC32 value. + + bad-1-v0-uncomp-size.lz is version 0 format with incorrect value + in the uncompressed size field. + + bad-1-v1-uncomp-size.lz is version 1 format with incorrect value + in the uncompressed size field. + + bad-1-v1-member-size.lz has incorrect value in the member size + field. + + bad-1-v1-trailing-magic.lz has the four .lz magic bytes as trailing + data. This should be detected as a truncated file and thus result + in an error. That is, the last four bytes of the file should not be + ignored as trailing garbage. lzip >= 1.18 matches this behavior + while older versions ignore the last four bytes and don't indicate + an error. Only in xz-5.4.3/tests/files: bad-1-check-crc32-2.xz Only in xz-5.4.3/tests/files: bad-1-lzma2-10.xz Only in xz-5.4.3/tests/files: bad-1-lzma2-11.xz Only in xz-5.4.3/tests/files: bad-1-lzma2-9.xz Only in xz-5.4.3/tests/files: bad-1-v0-uncomp-size.lz Only in xz-5.4.3/tests/files: bad-1-v1-crc32.lz Only in xz-5.4.3/tests/files: bad-1-v1-dict-1.lz Only in xz-5.4.3/tests/files: bad-1-v1-dict-2.lz Only in xz-5.4.3/tests/files: bad-1-v1-magic-1.lz Only in xz-5.4.3/tests/files: bad-1-v1-magic-2.lz Only in xz-5.4.3/tests/files: bad-1-v1-member-size.lz Only in xz-5.4.3/tests/files: bad-1-v1-trailing-magic.lz Only in xz-5.4.3/tests/files: bad-1-v1-uncomp-size.lz Only in xz-5.4.3/tests/files: bad-3-index-uncomp-overflow.xz Only in xz-5.4.3/tests/files: bad-too_big_size-with_eopm.lzma Only in xz-5.4.3/tests/files: bad-too_small_size-without_eopm-1.lzma Only in xz-5.4.3/tests/files: bad-too_small_size-without_eopm-2.lzma Only in xz-5.4.3/tests/files: bad-too_small_size-without_eopm-3.lzma Only in xz-5.4.3/tests/files: bad-unknown_size-without_eopm.lzma Only in xz-5.4.3/tests/files: good-1-arm64-lzma2-1.xz Only in xz-5.4.3/tests/files: good-1-arm64-lzma2-2.xz Only in xz-5.4.3/tests/files: good-1-empty-bcj-lzma2.xz Only in xz-5.4.3/tests/files: good-1-v0-trailing-1.lz Only in xz-5.4.3/tests/files: good-1-v0.lz Only in xz-5.4.3/tests/files: good-1-v1-trailing-1.lz Only in xz-5.4.3/tests/files: good-1-v1-trailing-2.lz Only in xz-5.4.3/tests/files: good-1-v1.lz Only in xz-5.4.3/tests/files: good-2-v0-v1.lz Only in xz-5.4.3/tests/files: good-2-v1-v0.lz Only in xz-5.4.3/tests/files: good-2-v1-v1.lz Only in xz-5.4.3/tests/files: good-known_size-with_eopm.lzma Only in xz-5.4.3/tests/files: good-known_size-without_eopm.lzma Only in xz-5.4.3/tests/files: good-unknown_size-with_eopm.lzma Only in xz-5.4.3/tests/files: unsupported-1-v234.lz Only in xz-5.4.3/tests: ossfuzz diff -ur xz-5.2.5/tests/test_bcj_exact_size.c xz-5.4.3/tests/test_bcj_exact_size.c --- xz-5.2.5/tests/test_bcj_exact_size.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_bcj_exact_size.c 2023-05-04 17:21:05 @@ -15,25 +15,33 @@ #include "tests.h" -/// Something to be compressed -static const uint8_t in[16] = "0123456789ABCDEF"; +static void +test_exact_size(void) +{ +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + if (!lzma_filter_encoder_is_supported(LZMA_FILTER_POWERPC) + || !lzma_filter_decoder_is_supported( + LZMA_FILTER_POWERPC)) + assert_skip("PowerPC BCJ encoder and/or decoder " + "is disabled"); -/// in[] after compression -static uint8_t compressed[1024]; -static size_t compressed_size = 0; + // Something to be compressed + const uint8_t in[16] = "0123456789ABCDEF"; -/// Output buffer for decompressing compressed[] -static uint8_t out[sizeof(in)]; + // in[] after compression + uint8_t compressed[1024]; + size_t compressed_size = 0; + // Output buffer for decompressing compressed[] + uint8_t out[sizeof(in)]; -static void -compress(void) -{ // Compress with PowerPC BCJ and LZMA2. PowerPC BCJ is used because // it has fixed 4-byte alignment which makes triggering the potential // bug easy. lzma_options_lzma opt_lzma2; - succeed(lzma_lzma_preset(&opt_lzma2, 0)); + assert_false(lzma_lzma_preset(&opt_lzma2, 0)); lzma_filter filters[3] = { { .id = LZMA_FILTER_POWERPC, .options = NULL }, @@ -41,18 +49,16 @@ { .id = LZMA_VLI_UNKNOWN, .options = NULL }, }; - expect(lzma_stream_buffer_encode(filters, LZMA_CHECK_CRC32, NULL, + assert_lzma_ret(lzma_stream_buffer_encode( + filters, LZMA_CHECK_CRC32, NULL, in, sizeof(in), - compressed, &compressed_size, sizeof(compressed)) - == LZMA_OK); -} + compressed, &compressed_size, sizeof(compressed)), + LZMA_OK); - -static void -decompress(void) -{ + // Decompress so that we won't give more output space than + // the Stream will need. lzma_stream strm = LZMA_STREAM_INIT; - expect(lzma_stream_decoder(&strm, 10 << 20, 0) == LZMA_OK); + assert_lzma_ret(lzma_stream_decoder(&strm, 10 << 20, 0), LZMA_OK); strm.next_in = compressed; strm.next_out = out; @@ -63,51 +69,56 @@ const lzma_ret ret = lzma_code(&strm, LZMA_RUN); if (ret == LZMA_STREAM_END) { - expect(strm.total_in == compressed_size); - expect(strm.total_out == sizeof(in)); + assert_uint_eq(strm.total_in, compressed_size); + assert_uint_eq(strm.total_out, sizeof(in)); lzma_end(&strm); return; } - expect(ret == LZMA_OK); + assert_lzma_ret(ret, LZMA_OK); if (strm.total_out < sizeof(in)) strm.avail_out = 1; } +#endif } static void -decompress_empty(void) +test_empty_block(void) { +#ifndef HAVE_DECODERS + assert_skip("Decoder support disabled"); +#else + if (!lzma_filter_decoder_is_supported(LZMA_FILTER_POWERPC)) + assert_skip("PowerPC BCJ decoder is disabled"); + // An empty file with one Block using PowerPC BCJ and LZMA2. - static const uint8_t empty_bcj_lzma2[] = { - 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00, 0x00, 0x01, - 0x69, 0x22, 0xDE, 0x36, 0x02, 0x01, 0x05, 0x00, - 0x21, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0xF1, 0xC8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x11, 0x00, 0x3B, 0x96, 0x5F, 0x73, - 0x90, 0x42, 0x99, 0x0D, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x59, 0x5A - }; + size_t in_size; + uint8_t *empty_bcj_lzma2 = tuktest_file_from_srcdir( + "files/good-1-empty-bcj-lzma2.xz", &in_size); // Decompress without giving any output space. uint64_t memlimit = 1 << 20; + uint8_t out[1]; size_t in_pos = 0; size_t out_pos = 0; - expect(lzma_stream_buffer_decode(&memlimit, 0, NULL, - empty_bcj_lzma2, &in_pos, sizeof(empty_bcj_lzma2), - out, &out_pos, 0) == LZMA_OK); - expect(in_pos == sizeof(empty_bcj_lzma2)); - expect(out_pos == 0); + assert_lzma_ret(lzma_stream_buffer_decode(&memlimit, 0, NULL, + empty_bcj_lzma2, &in_pos, in_size, out, &out_pos, 0), + LZMA_OK); + assert_uint_eq(in_pos, in_size); + assert_uint_eq(out_pos, 0); +#endif } extern int -main(void) +main(int argc, char **argv) { - compress(); - decompress(); - decompress_empty(); - return 0; + tuktest_start(argc, argv); + + tuktest_run(test_exact_size); + tuktest_run(test_empty_block); + + return tuktest_end(); } diff -ur xz-5.2.5/tests/test_block_header.c xz-5.4.3/tests/test_block_header.c --- xz-5.2.5/tests/test_block_header.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_block_header.c 2023-05-04 17:21:05 @@ -3,7 +3,8 @@ /// \file test_block_header.c /// \brief Tests Block Header coders // -// Author: Lasse Collin +// Authors: Lasse Collin +// Jia Tan // // This file has been put into the public domain. // You can do whatever you want with this file. @@ -13,12 +14,10 @@ #include "tests.h" -static uint8_t buf[LZMA_BLOCK_HEADER_SIZE_MAX]; -static lzma_block known_options; -static lzma_block decoded_options; - static lzma_options_lzma opt_lzma; + +#ifdef HAVE_ENCODERS static lzma_filter filters_none[1] = { { .id = LZMA_VLI_UNKNOWN, @@ -36,6 +35,9 @@ }; +// These filters are only used in test_lzma_block_header_decode() +// which only runs if encoders and decoders are configured. +#ifdef HAVE_DECODERS static lzma_filter filters_four[5] = { { .id = LZMA_FILTER_X86, @@ -53,6 +55,7 @@ .id = LZMA_VLI_UNKNOWN, } }; +#endif static lzma_filter filters_five[6] = { @@ -75,167 +78,437 @@ .id = LZMA_VLI_UNKNOWN, } }; +#endif static void -code(void) +test_lzma_block_header_size(void) { - expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); +#ifndef HAVE_ENCODERS + assert_skip("Encoder support disabled"); +#else + if (!lzma_filter_encoder_is_supported(LZMA_FILTER_X86)) + assert_skip("x86 BCJ encoder is disabled"); - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - memcrap(filters, sizeof(filters)); - memcrap(&decoded_options, sizeof(decoded_options)); + lzma_block block = { + .version = 0, + .filters = filters_one, + .compressed_size = LZMA_VLI_UNKNOWN, + .uncompressed_size = LZMA_VLI_UNKNOWN, + .check = LZMA_CHECK_CRC32 + }; - decoded_options.header_size = known_options.header_size; - decoded_options.check = known_options.check; - decoded_options.filters = filters; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OK); + // Test that all initial options are valid + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); - expect(known_options.compressed_size - == decoded_options.compressed_size); - expect(known_options.uncompressed_size - == decoded_options.uncompressed_size); + // Test invalid version number + for (uint32_t i = 2; i < 20; i++) { + block.version = i; + assert_lzma_ret(lzma_block_header_size(&block), + LZMA_OPTIONS_ERROR); + } - for (size_t i = 0; known_options.filters[i].id - != LZMA_VLI_UNKNOWN; ++i) - expect(known_options.filters[i].id == filters[i].id); + block.version = 1; - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) - free(decoded_options.filters[i].options); + // Test invalid compressed size + block.compressed_size = 0; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + + block.compressed_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + block.compressed_size = LZMA_VLI_UNKNOWN; + + // Test invalid uncompressed size + block.uncompressed_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + block.uncompressed_size = LZMA_VLI_MAX; + + // Test invalid filters + block.filters = NULL; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + + block.filters = filters_none; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + + block.filters = filters_five; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_PROG_ERROR); + + block.filters = filters_one; + + // Test setting compressed_size to something valid + block.compressed_size = 4096; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); + + // Test setting uncompressed_size to something valid + block.uncompressed_size = 4096; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); + + // This should pass, but header_size will be an invalid value + // because the total block size will not be able to fit in a valid + // lzma_vli. This way a temporary value can be used to reserve + // space for the header and later the actual value can be set. + block.compressed_size = LZMA_VLI_MAX; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); + + // Use an invalid value for a filter option. This should still pass + // because the size of the LZMA2 properties is known by liblzma + // without reading any of the options so it doesn't validate them. + lzma_options_lzma bad_ops; + assert_false(lzma_lzma_preset(&bad_ops, 1)); + bad_ops.pb = 0x1000; + + lzma_filter bad_filters[2] = { + { + .id = LZMA_FILTER_LZMA2, + .options = &bad_ops + }, + { + .id = LZMA_VLI_UNKNOWN, + .options = NULL + } + }; + + block.filters = bad_filters; + + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); + + // Use an invalid block option. The check type isn't stored in + // the Block Header and so _header_size ignores it. + block.check = INVALID_LZMA_CHECK_ID; + block.ignore_check = false; + + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_uint(block.header_size, >=, LZMA_BLOCK_HEADER_SIZE_MIN); + assert_uint(block.header_size, <=, LZMA_BLOCK_HEADER_SIZE_MAX); + assert_uint_eq(block.header_size % 4, 0); +#endif } static void -test1(void) +test_lzma_block_header_encode(void) { - known_options = (lzma_block){ - .check = LZMA_CHECK_NONE, +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + + if (!lzma_filter_encoder_is_supported(LZMA_FILTER_X86) + || !lzma_filter_decoder_is_supported(LZMA_FILTER_X86)) + assert_skip("x86 BCJ encoder and/or decoder " + "is disabled"); + + lzma_block block = { + .version = 1, + .filters = filters_one, .compressed_size = LZMA_VLI_UNKNOWN, .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = NULL, + .check = LZMA_CHECK_CRC32, }; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + // Ensure all block options are valid before changes are tested + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); - known_options.filters = filters_none; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + uint8_t out[LZMA_BLOCK_HEADER_SIZE_MAX]; - known_options.filters = filters_five; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + // Test invalid block version + for (uint32_t i = 2; i < 20; i++) { + block.version = i; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + } - known_options.filters = filters_one; - expect(lzma_block_header_size(&known_options) == LZMA_OK); + block.version = 1; - // Some invalid value, which gets ignored. - known_options.check = (lzma_check)(99); - expect(lzma_block_header_size(&known_options) == LZMA_OK); + // Test invalid header size (< min, > max, % 4 != 0) + block.header_size = LZMA_BLOCK_HEADER_SIZE_MIN - 4; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.header_size = LZMA_BLOCK_HEADER_SIZE_MIN + 2; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.header_size = LZMA_BLOCK_HEADER_SIZE_MAX + 4; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); - known_options.compressed_size = 5; - expect(lzma_block_header_size(&known_options) == LZMA_OK); + // Test invalid compressed_size + block.compressed_size = 0; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.compressed_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); - known_options.compressed_size = 0; // Cannot be zero. - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + // This test passes test_lzma_block_header_size, but should + // fail here because there is not enough space to encode the + // proper block size because the total size is too big to fit + // in an lzma_vli + block.compressed_size = LZMA_VLI_MAX; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.compressed_size = LZMA_VLI_UNKNOWN; - // LZMA_VLI_MAX is too big to keep the total size of the Block - // a valid VLI, but lzma_block_header_size() is not meant - // to validate it. (lzma_block_header_encode() must validate it.) - known_options.compressed_size = LZMA_VLI_MAX; - expect(lzma_block_header_size(&known_options) == LZMA_OK); + // Test invalid uncompressed size + block.uncompressed_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.uncompressed_size = LZMA_VLI_UNKNOWN; - known_options.compressed_size = LZMA_VLI_UNKNOWN; - known_options.uncompressed_size = 0; - expect(lzma_block_header_size(&known_options) == LZMA_OK); + // Test invalid block check + block.check = INVALID_LZMA_CHECK_ID; + block.ignore_check = false; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + block.check = LZMA_CHECK_CRC32; - known_options.uncompressed_size = LZMA_VLI_MAX + 1; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + // Test invalid filters + block.filters = NULL; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + + block.filters = filters_none; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + + block.filters = filters_five; + block.header_size = LZMA_BLOCK_HEADER_SIZE_MAX - 4; + assert_lzma_ret(lzma_block_header_encode(&block, out), + LZMA_PROG_ERROR); + + // Test valid encoding and verify bytes of block header. + // More complicated tests for encoding headers are included + // in test_lzma_block_header_decode. + block.filters = filters_one; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_lzma_ret(lzma_block_header_encode(&block, out), LZMA_OK); + + // First read block header size from out and verify + // that it == (encoded size + 1) * 4 + uint32_t header_size = (out[0] + 1U) * 4; + assert_uint_eq(header_size, block.header_size); + + // Next read block flags + uint8_t flags = out[1]; + + // Should have number of filters = 1 + assert_uint_eq((flags & 0x3) + 1, 1); + + // Bits 2-7 must be empty not set + assert_uint_eq(flags & (0xFF - 0x3), 0); + + // Verify filter flags + // Decode Filter ID + lzma_vli filter_id = 0; + size_t pos = 2; + assert_lzma_ret(lzma_vli_decode(&filter_id, NULL, out, + &pos, header_size), LZMA_OK); + assert_uint_eq(filter_id, filters_one[0].id); + + // Decode Size of Properties + lzma_vli prop_size = 0; + assert_lzma_ret(lzma_vli_decode(&prop_size, NULL, out, + &pos, header_size), LZMA_OK); + + // LZMA2 has 1 byte prop size + assert_uint_eq(prop_size, 1); + uint8_t expected_filter_props = 0; + assert_lzma_ret(lzma_properties_encode(filters_one, + &expected_filter_props), LZMA_OK); + assert_uint_eq(out[pos], expected_filter_props); + pos++; + + // Check null-padding + for (size_t i = pos; i < header_size - 4; i++) + assert_uint_eq(out[i], 0); + + // Check CRC32 + assert_uint_eq(read32le(&out[header_size - 4]), lzma_crc32(out, + header_size - 4, 0)); +#endif } +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) +// Helper function to compare two lzma_block structures field by field static void -test2(void) +compare_blocks(lzma_block *block_expected, lzma_block *block_actual) { - known_options = (lzma_block){ - .check = LZMA_CHECK_CRC32, - .compressed_size = LZMA_VLI_UNKNOWN, - .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = filters_four, - }; + assert_uint_eq(block_actual->version, block_expected->version); + assert_uint_eq(block_actual->compressed_size, + block_expected->compressed_size); + assert_uint_eq(block_actual->uncompressed_size, + block_expected->uncompressed_size); + assert_uint_eq(block_actual->check, block_expected->check); + assert_uint_eq(block_actual->header_size, block_expected->header_size); - expect(lzma_block_header_size(&known_options) == LZMA_OK); - code(); + // Compare filter IDs + assert_true(block_expected->filters && block_actual->filters); + lzma_filter expected_filter = block_expected->filters[0]; + uint32_t filter_count = 0; + while (expected_filter.id != LZMA_VLI_UNKNOWN) { + assert_uint_eq(block_actual->filters[filter_count].id, + expected_filter.id); + expected_filter = block_expected->filters[++filter_count]; + } - known_options.compressed_size = 123456; - known_options.uncompressed_size = 234567; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - code(); - - // We can make the sizes smaller while keeping the header size - // the same. - known_options.compressed_size = 12; - known_options.uncompressed_size = 23; - code(); + assert_uint_eq(block_actual->filters[filter_count].id, + LZMA_VLI_UNKNOWN); } +#endif static void -test3(void) +test_lzma_block_header_decode(void) { - known_options = (lzma_block){ - .check = LZMA_CHECK_CRC32, +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + if (!lzma_filter_encoder_is_supported(LZMA_FILTER_X86) + || !lzma_filter_decoder_is_supported(LZMA_FILTER_X86)) + assert_skip("x86 BCJ encoder and/or decoder " + "is disabled"); + + lzma_block block = { + .filters = filters_one, .compressed_size = LZMA_VLI_UNKNOWN, .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = filters_one, + .check = LZMA_CHECK_CRC32, + .version = 0 }; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - known_options.header_size += 4; - expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - decoded_options.header_size = known_options.header_size; - decoded_options.check = known_options.check; - decoded_options.filters = filters; + // Encode block header with simple options + uint8_t out[LZMA_BLOCK_HEADER_SIZE_MAX]; + assert_lzma_ret(lzma_block_header_encode(&block, out), LZMA_OK); - // Wrong size - ++buf[0]; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_PROG_ERROR); - --buf[0]; + // Decode block header and check that the options match + lzma_filter decoded_filters[LZMA_FILTERS_MAX + 1]; + lzma_block decoded_block = { + .version = 0, + .filters = decoded_filters, + .check = LZMA_CHECK_CRC32 + }; + decoded_block.header_size = lzma_block_header_size_decode(out[0]); - // Wrong CRC32 - buf[known_options.header_size - 1] ^= 1; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_DATA_ERROR); - buf[known_options.header_size - 1] ^= 1; + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OK); + compare_blocks(&block, &decoded_block); - // Unsupported filter - // NOTE: This may need updating when new IDs become supported. - buf[2] ^= 0x1F; - write32le(buf + known_options.header_size - 4, - lzma_crc32(buf, known_options.header_size - 4, 0)); - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OPTIONS_ERROR); - buf[2] ^= 0x1F; + // Reset output buffer and decoded_block + memzero(out, LZMA_BLOCK_HEADER_SIZE_MAX); + memzero(&decoded_block, sizeof(lzma_block)); + decoded_block.filters = decoded_filters; + decoded_block.check = LZMA_CHECK_CRC32; - // Non-nul Padding - buf[known_options.header_size - 4 - 1] ^= 1; - write32le(buf + known_options.header_size - 4, - lzma_crc32(buf, known_options.header_size - 4, 0)); - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OPTIONS_ERROR); - buf[known_options.header_size - 4 - 1] ^= 1; + // Test with compressed size set + block.compressed_size = 4096; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_lzma_ret(lzma_block_header_encode(&block, out), LZMA_OK); + decoded_block.header_size = lzma_block_header_size_decode(out[0]); + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OK); + compare_blocks(&block, &decoded_block); + + memzero(out, LZMA_BLOCK_HEADER_SIZE_MAX); + memzero(&decoded_block, sizeof(lzma_block)); + decoded_block.filters = decoded_filters; + decoded_block.check = LZMA_CHECK_CRC32; + + // Test with uncompressed size set + block.uncompressed_size = 4096; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_lzma_ret(lzma_block_header_encode(&block, out), LZMA_OK); + decoded_block.header_size = lzma_block_header_size_decode(out[0]); + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OK); + compare_blocks(&block, &decoded_block); + + memzero(out, LZMA_BLOCK_HEADER_SIZE_MAX); + memzero(&decoded_block, sizeof(lzma_block)); + decoded_block.filters = decoded_filters; + decoded_block.check = LZMA_CHECK_CRC32; + + // Test with multiple filters + block.filters = filters_four; + assert_lzma_ret(lzma_block_header_size(&block), LZMA_OK); + assert_lzma_ret(lzma_block_header_encode(&block, out), LZMA_OK); + decoded_block.header_size = lzma_block_header_size_decode(out[0]); + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OK); + compare_blocks(&block, &decoded_block); + + memzero(&decoded_block, sizeof(lzma_block)); + decoded_block.filters = decoded_filters; + decoded_block.check = LZMA_CHECK_CRC32; + decoded_block.header_size = lzma_block_header_size_decode(out[0]); + + // Test with too high version. The decoder will set it to a version + // that it supports. + decoded_block.version = 2; + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OK); + assert_uint_eq(decoded_block.version, 1); + + // Test bad check type + decoded_block.check = INVALID_LZMA_CHECK_ID; + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_PROG_ERROR); + decoded_block.check = LZMA_CHECK_CRC32; + + // Test bad check value + out[decoded_block.header_size - 1] -= 10; + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_DATA_ERROR); + out[decoded_block.header_size - 1] += 10; + + // Test non-NULL padding + out[decoded_block.header_size - 5] = 1; + + // Recompute CRC32 + write32le(&out[decoded_block.header_size - 4], lzma_crc32(out, + decoded_block.header_size - 4, 0)); + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OPTIONS_ERROR); + + // Test unsupported flags + out[1] = 0xFF; + + // Recompute CRC32 + write32le(&out[decoded_block.header_size - 4], lzma_crc32(out, + decoded_block.header_size - 4, 0)); + assert_lzma_ret(lzma_block_header_decode(&decoded_block, NULL, out), + LZMA_OPTIONS_ERROR); +#endif } -int -main(void) +extern int +main(int argc, char **argv) { - succeed(lzma_lzma_preset(&opt_lzma, 1)); + tuktest_start(argc, argv); - test1(); - test2(); - test3(); + if (lzma_lzma_preset(&opt_lzma, 1)) + tuktest_error("lzma_lzma_preset() failed"); - return 0; + tuktest_run(test_lzma_block_header_size); + tuktest_run(test_lzma_block_header_encode); + tuktest_run(test_lzma_block_header_decode); + + return tuktest_end(); } diff -ur xz-5.2.5/tests/test_check.c xz-5.4.3/tests/test_check.c --- xz-5.2.5/tests/test_check.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_check.c 2023-05-04 17:21:05 @@ -2,10 +2,9 @@ // /// \file test_check.c /// \brief Tests integrity checks -/// -/// \todo Add SHA256 // -// Author: Lasse Collin +// Authors: Lasse Collin +// Jia Tan // // This file has been put into the public domain. // You can do whatever you want with this file. @@ -13,6 +12,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "tests.h" +#include "mythread.h" // These must be specified as numbers so that the test works on EBCDIC @@ -23,66 +23,368 @@ static const uint8_t test_unaligned[12] = { 120, 120, 120, 49, 50, 51, 52, 53, 54, 55, 56, 57 }; +// 2 MB is more than enough for the tests. Actually a tiny value would +// work because we don't actually decompress the files, we only test +// decoding of the Stream Header fields. +#define TEST_CHECK_MEMLIMIT (2U << 20) -static bool -test_crc32(void) +static size_t no_check_size; +static uint8_t *no_check_xz_data; + +static size_t unsupported_check_size; +static uint8_t *unsupported_check_xz_data; + +#ifdef HAVE_CHECK_CRC32 +static size_t crc32_size; +static uint8_t *crc32_xz_data; +#endif + +#ifdef HAVE_CHECK_CRC64 +static size_t crc64_size; +static uint8_t *crc64_xz_data; +#endif + +#ifdef HAVE_CHECK_SHA256 +static size_t sha256_size; +static uint8_t *sha256_xz_data; +#endif + + +#ifdef HAVE_CHECK_CRC64 +static const uint8_t * +get_random256(uint32_t *seed) { - static const uint32_t test_vector = 0xCBF43926; + static uint8_t buf[256]; + for (size_t i = 0; i < sizeof(buf); ++i) { + *seed = *seed * 1103515245 + 12345; + buf[i] = (uint8_t)(*seed >> 22); + } + + return buf; +} +#endif + + +static void +test_lzma_crc32(void) +{ + // CRC32 is always enabled. + assert_true(lzma_check_is_supported(LZMA_CHECK_CRC32)); + + const uint32_t test_vector = 0xCBF43926; + // Test 1 - uint32_t crc = lzma_crc32(test_string, sizeof(test_string), 0); - if (crc != test_vector) - return true; + assert_uint_eq(lzma_crc32(test_string, sizeof(test_string), 0), + test_vector); // Test 2 - crc = lzma_crc32(test_unaligned + 3, sizeof(test_string), 0); - if (crc != test_vector) - return true; + assert_uint_eq(lzma_crc32(test_unaligned + 3, sizeof(test_string), 0), + test_vector); // Test 3 - crc = 0; + uint32_t crc = 0; for (size_t i = 0; i < sizeof(test_string); ++i) crc = lzma_crc32(test_string + i, 1, crc); - if (crc != test_vector) - return true; - - return false; + assert_uint_eq(crc, test_vector); } -static bool -test_crc64(void) +static void +test_lzma_crc64(void) { - static const uint64_t test_vector = 0x995DC9BBDF1939FA; + // CRC64 can be disabled. + if (!lzma_check_is_supported(LZMA_CHECK_CRC64)) + assert_skip("CRC64 support is disabled"); + // If CRC64 is disabled then lzma_crc64() will be missing. + // Using an ifdef here avoids a linker error. +#ifdef HAVE_CHECK_CRC64 + const uint64_t test_vector = 0x995DC9BBDF1939FA; + // Test 1 - uint64_t crc = lzma_crc64(test_string, sizeof(test_string), 0); - if (crc != test_vector) - return true; + assert_uint_eq(lzma_crc64(test_string, sizeof(test_string), 0), + test_vector); // Test 2 - crc = lzma_crc64(test_unaligned + 3, sizeof(test_string), 0); - if (crc != test_vector) - return true; + assert_uint_eq(lzma_crc64(test_unaligned + 3, sizeof(test_string), 0), + test_vector); // Test 3 - crc = 0; + uint64_t crc = 0; for (size_t i = 0; i < sizeof(test_string); ++i) crc = lzma_crc64(test_string + i, 1, crc); - if (crc != test_vector) - return true; + assert_uint_eq(crc, test_vector); - return false; + // Test 4: The CLMUL implementation works on 16-byte chunks. + // Test combination of different start and end alignments + // and also short buffer lengths where special handling is needed. + uint32_t seed = 29; + crc = 0x96E30D5184B7FA2C; // Random initial value + for (size_t start = 0; start < 32; ++start) + for (size_t size = 1; size < 256 - 32; ++size) + crc = lzma_crc64(get_random256(&seed), size, crc); + + assert_uint_eq(crc, 0x23AB787177231C9F); +#endif } -int -main(void) +static void +test_lzma_supported_checks(void) { - bool error = false; + static const lzma_check expected_check_ids[] = { + LZMA_CHECK_NONE, +#ifdef HAVE_CHECK_CRC32 + LZMA_CHECK_CRC32, +#endif +#ifdef HAVE_CHECK_CRC64 + LZMA_CHECK_CRC64, +#endif +#ifdef HAVE_CHECK_SHA256 + LZMA_CHECK_SHA256, +#endif + }; - error |= test_crc32(); - error |= test_crc64(); + for (lzma_check i = 0; i <= LZMA_CHECK_ID_MAX + 1; i++) { + bool matched = false; + for (unsigned int j = 0; j < ARRAY_SIZE(expected_check_ids); + j++) { + if (expected_check_ids[j] == i) { + matched = true; + break; + } + } - return error ? 1 : 0; + if (matched) + assert_true(lzma_check_is_supported(i)); + else + assert_false(lzma_check_is_supported(i)); + } +} + + +static void +test_lzma_check_size(void) +{ + // Expected check sizes taken from src/liblzma/api/lzma/check.h + static const uint32_t expected_check_sizes[] = { + 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, + 32, 32, 32, 64, 64, 64 + }; + + for (lzma_check i = 0; i < ARRAY_SIZE(expected_check_sizes); i++) + assert_uint_eq(expected_check_sizes[i], lzma_check_size(i)); + + assert_uint_eq(lzma_check_size(INVALID_LZMA_CHECK_ID), UINT32_MAX); +} + + +// Test the single threaded decoder for lzma_get_check +static void +test_lzma_get_check_st(void) +{ +#ifndef HAVE_DECODERS + assert_skip("Decoder support disabled"); +#else + const uint32_t flags = LZMA_TELL_ANY_CHECK | + LZMA_TELL_UNSUPPORTED_CHECK | + LZMA_TELL_NO_CHECK; + + uint8_t outbuf[128]; + lzma_stream strm = LZMA_STREAM_INIT; + + // Test a file with no integrity check: + assert_lzma_ret(lzma_stream_decoder(&strm, TEST_CHECK_MEMLIMIT, + flags), LZMA_OK); + strm.next_in = no_check_xz_data; + strm.avail_in = no_check_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_NO_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_NONE); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); + + // Test a file with an unsupported integrity check type: + assert_lzma_ret(lzma_stream_decoder(&strm, TEST_CHECK_MEMLIMIT, + flags), LZMA_OK); + strm.next_in = unsupported_check_xz_data; + strm.avail_in = unsupported_check_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_UNSUPPORTED_CHECK); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); + + // Test a file with CRC32 as the integrity check: +#ifdef HAVE_CHECK_CRC32 + assert_lzma_ret(lzma_stream_decoder(&strm, TEST_CHECK_MEMLIMIT, + flags), LZMA_OK); + strm.next_in = crc32_xz_data; + strm.avail_in = crc32_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_CRC32); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + // Test a file with CRC64 as the integrity check: +#ifdef HAVE_CHECK_CRC64 + assert_lzma_ret(lzma_stream_decoder(&strm, TEST_CHECK_MEMLIMIT, + flags), LZMA_OK); + strm.next_in = crc64_xz_data; + strm.avail_in = crc64_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_CRC64); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + // Test a file with SHA-256 as the integrity check: +#ifdef HAVE_CHECK_SHA256 + assert_lzma_ret(lzma_stream_decoder(&strm, TEST_CHECK_MEMLIMIT, + flags), LZMA_OK); + strm.next_in = sha256_xz_data; + strm.avail_in = sha256_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_SHA256); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + lzma_end(&strm); +#endif +} + + +static void +test_lzma_get_check_mt(void) +{ +#ifndef MYTHREAD_ENABLED + assert_skip("Threading support disabled"); +#elif !defined(HAVE_DECODERS) + assert_skip("Decoder support disabled"); +#else + const uint32_t flags = LZMA_TELL_ANY_CHECK | + LZMA_TELL_UNSUPPORTED_CHECK | + LZMA_TELL_NO_CHECK; + + const lzma_mt options = { + .flags = flags, + .threads = 2, + .timeout = 0, + .memlimit_threading = TEST_CHECK_MEMLIMIT, + .memlimit_stop = TEST_CHECK_MEMLIMIT + }; + + uint8_t outbuf[128]; + lzma_stream strm = LZMA_STREAM_INIT; + + // Test a file with no integrity check: + assert_lzma_ret(lzma_stream_decoder_mt(&strm, &options), LZMA_OK); + strm.next_in = no_check_xz_data; + strm.avail_in = no_check_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_NO_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_NONE); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); + + // Test a file with an unsupported integrity check type: + assert_lzma_ret(lzma_stream_decoder_mt(&strm, &options), LZMA_OK); + strm.next_in = unsupported_check_xz_data; + strm.avail_in = unsupported_check_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_UNSUPPORTED_CHECK); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); + + // Test a file with CRC32 as the integrity check: +#ifdef HAVE_CHECK_CRC32 + assert_lzma_ret(lzma_stream_decoder_mt(&strm, &options), LZMA_OK); + strm.next_in = crc32_xz_data; + strm.avail_in = crc32_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_CRC32); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + // Test a file with CRC64 as the integrity check: +#ifdef HAVE_CHECK_CRC64 + assert_lzma_ret(lzma_stream_decoder_mt(&strm, &options), LZMA_OK); + strm.next_in = crc64_xz_data; + strm.avail_in = crc64_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_CRC64); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + // Test a file with SHA-256 as the integrity check: +#ifdef HAVE_CHECK_SHA256 + assert_lzma_ret(lzma_stream_decoder_mt(&strm,&options), LZMA_OK); + strm.next_in = sha256_xz_data; + strm.avail_in = sha256_size; + strm.next_out = outbuf; + strm.avail_out = sizeof(outbuf); + + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_GET_CHECK); + assert_lzma_check(lzma_get_check(&strm), LZMA_CHECK_SHA256); + assert_lzma_ret(lzma_code(&strm, LZMA_RUN), LZMA_STREAM_END); +#endif + + lzma_end(&strm); +#endif +} + + +extern int +main(int argc, char **argv) +{ + tuktest_start(argc, argv); + + no_check_xz_data = tuktest_file_from_srcdir( + "files/good-1-check-none.xz", &no_check_size); + + unsupported_check_xz_data = tuktest_file_from_srcdir( + "files/unsupported-check.xz", + &unsupported_check_size); + +#ifdef HAVE_CHECK_CRC32 + crc32_xz_data = tuktest_file_from_srcdir( + "files/good-1-check-crc32.xz", &crc32_size); +#endif + +#ifdef HAVE_CHECK_CRC64 + crc64_xz_data = tuktest_file_from_srcdir( + "files/good-1-check-crc64.xz", &crc64_size); +#endif + +#ifdef HAVE_CHECK_SHA256 + sha256_xz_data = tuktest_file_from_srcdir( + "files/good-1-check-sha256.xz", &sha256_size); +#endif + + tuktest_run(test_lzma_crc32); + tuktest_run(test_lzma_crc64); + tuktest_run(test_lzma_supported_checks); + tuktest_run(test_lzma_check_size); + tuktest_run(test_lzma_get_check_st); + tuktest_run(test_lzma_get_check_mt); + + return tuktest_end(); } diff -ur xz-5.2.5/tests/test_compress.sh xz-5.4.3/tests/test_compress.sh --- xz-5.2.5/tests/test_compress.sh 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_compress.sh 2023-05-04 17:21:05 @@ -13,130 +13,137 @@ if test -x ../src/xz/xz ; then : else - (exit 77) exit 77 fi +# If compression or decompression support is missing, this test is skipped. +# This isn't perfect as if only some compressors or decompressors are disabled +# then this script can still fail because for now this doesn't check the +# availability of each filter. +if grep 'define HAVE_ENCODERS' ../config.h > /dev/null \ + && grep 'define HAVE_DECODERS' ../config.h > /dev/null ; then + : +else + echo "Compression or decompression support is disabled, skipping this test." + exit 77 +fi + # Find out if our shell supports functions. eval 'unset foo ; foo() { return 42; } ; foo' if test $? != 42 ; then echo "/bin/sh doesn't support functions, skipping this test." - (exit 77) exit 77 fi test_xz() { - if $XZ -c "$@" "$FILE" > tmp_compressed; then + if $XZ -c "$@" "$FILE" > "$TMP_COMP"; then : else echo "Compressing failed: $* $FILE" - (exit 1) exit 1 fi - if $XZ -cd tmp_compressed > tmp_uncompressed ; then + if $XZ -cd "$TMP_COMP" > "$TMP_UNCOMP" ; then : else echo "Decompressing failed: $* $FILE" - (exit 1) exit 1 fi - if cmp tmp_uncompressed "$FILE" ; then + if cmp "$TMP_UNCOMP" "$FILE" ; then : else echo "Decompressed file does not match" \ "the original: $* $FILE" - (exit 1) exit 1 fi if test -n "$XZDEC" ; then - if $XZDEC tmp_compressed > tmp_uncompressed ; then + if $XZDEC "$TMP_COMP" > "$TMP_UNCOMP" ; then : else echo "Decompressing failed: $* $FILE" - (exit 1) exit 1 fi - if cmp tmp_uncompressed "$FILE" ; then + if cmp "$TMP_UNCOMP" "$FILE" ; then : else echo "Decompressed file does not match" \ "the original: $* $FILE" - (exit 1) exit 1 fi fi - - # Show progress: - echo . | tr -d '\n\r' } XZ="../src/xz/xz --memlimit-compress=48MiB --memlimit-decompress=5MiB \ - --no-adjust --threads=1 --check=crc64" + --no-adjust --threads=1 --check=crc32" +grep "define HAVE_CHECK_CRC64" ../config.h > /dev/null \ + && XZ="$XZ --check=crc64" XZDEC="../src/xzdec/xzdec" # No memory usage limiter available test -x ../src/xzdec/xzdec || XZDEC= -# Create the required input files. -if ./create_compress_files ; then - : -else - rm -f compress_* - echo "Failed to create files to test compression." - (exit 1) - exit 1 -fi +# Create the required input file if needed. +# +# Derive temporary filenames for compressed and uncompressed outputs +# from the input filename. This is needed when multiple tests are +# run in parallel. +FILE=$1 +TMP_COMP="tmp_comp_$FILE" +TMP_UNCOMP="tmp_uncomp_$FILE" +case $FILE in + # compress_generated files will be created in the build directory + # in the /tests/ sub-directory. + compress_generated_*) + if ./create_compress_files "$FILE" ; then + : + else + rm -f "$FILE" + echo "Failed to create the file '$FILE'." + exit 1 + fi + ;; + # compress_prepared files exist in the source directory since they + # do not need to be copied or regenerated. + compress_prepared_*) + FILE="$srcdir/$FILE" + ;; + '') + echo "No test file was specified." + exit 1 + ;; +esac + # Remove temporary now (in case they are something weird), and on exit. -rm -f tmp_compressed tmp_uncompressed -trap 'rm -f tmp_compressed tmp_uncompressed' 0 +rm -f "$TMP_COMP" "$TMP_UNCOMP" +trap 'rm -f "$TMP_COMP" "$TMP_UNCOMP"' 0 -# Compress and decompress each file with various filter configurations. -# This takes quite a bit of time. -echo "test_compress.sh:" -for FILE in compress_generated_* "$srcdir"/compress_prepared_* -do - MSG=`echo "x$FILE" | sed 's,^x,,; s,^.*/,,; s,^compress_,,'` - echo " $MSG" | tr -d '\n\r' - - # Don't test with empty arguments; it breaks some ancient - # proprietary /bin/sh versions due to $@ used in test_xz(). - test_xz -1 - test_xz -2 - test_xz -3 - test_xz -4 - - # Disabled until Subblock format is stable. -# --subblock \ -# --subblock=size=1 \ -# --subblock=size=1,rle=1 \ -# --subblock=size=1,rle=4 \ -# --subblock=size=4,rle=4 \ -# --subblock=size=8,rle=4 \ -# --subblock=size=8,rle=8 \ -# --subblock=size=4096,rle=12 \ +# Compress and decompress the file with various filter configurations. # - for ARGS in \ - --delta=dist=1 \ - --delta=dist=4 \ - --delta=dist=256 \ - --x86 \ - --powerpc \ - --ia64 \ - --arm \ - --armthumb \ - --sparc - do - test_xz $ARGS --lzma2=dict=64KiB,nice=32,mode=fast +# Don't test with empty arguments; it breaks some ancient +# proprietary /bin/sh versions due to $@ used in test_xz(). +test_xz -1 +test_xz -2 +test_xz -3 +test_xz -4 - # Disabled until Subblock format is stable. - # test_xz --subblock $ARGS --lzma2=dict=64KiB,nice=32,mode=fast - done +test_filter() +{ + grep "define HAVE_ENCODER_$1" ../config.h > /dev/null || return + grep "define HAVE_DECODER_$1" ../config.h > /dev/null || return + shift + test_xz "$@" --lzma2=dict=64KiB,nice=32,mode=fast +} - echo -done +test_filter DELTA --delta=dist=1 +test_filter DELTA --delta=dist=4 +test_filter DELTA --delta=dist=256 +test_filter X86 --x86 +test_filter POWERPC --power +test_filter IA64 --ia64 +test_filter ARM --arm +test_filter ARMTHUMB --armthumb +test_filter SPARC --sparc -(exit 0) exit 0 Only in xz-5.4.3/tests: test_compress_generated_abc Only in xz-5.4.3/tests: test_compress_generated_random Only in xz-5.4.3/tests: test_compress_generated_text Only in xz-5.4.3/tests: test_compress_prepared_bcj_sparc Only in xz-5.4.3/tests: test_compress_prepared_bcj_x86 diff -ur xz-5.2.5/tests/test_files.sh xz-5.4.3/tests/test_files.sh --- xz-5.2.5/tests/test_files.sh 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_files.sh 2023-05-04 17:21:05 @@ -15,25 +15,83 @@ test -x "$XZ" || XZ= test -x "$XZDEC" || XZDEC= if test -z "$XZ$XZDEC"; then - (exit 77) + echo "xz and xzdec were not built, skipping this test." exit 77 fi +# If decompression support is missing, this test is skipped. +# This isn't perfect as if only some decompressors are disabled +# then some good files might not decompress and the test fails +# for a (kind of) wrong reason. +if grep 'define HAVE_DECODERS' ../config.h > /dev/null ; then + : +else + echo "Decompression support is disabled, skipping this test." + exit 77 +fi + +# If a feature was disabled at build time, make it possible to skip +# some of the test files. Use exit status 77 if any files were skipped. +EXIT_STATUS=0 +have_feature() +{ + grep "define HAVE_$1" ../config.h > /dev/null && return 0 + printf '%s: Skipping because HAVE_%s is not enabled\n' "$2" "$1" + EXIT_STATUS=77 + return 1 +} + + +####### +# .xz # +####### + +# If these integrity check types were disabled at build time, +# allow the tests to pass still. +NO_WARN= +grep 'define HAVE_CHECK_CRC64' ../config.h > /dev/null || NO_WARN=-qQ +grep 'define HAVE_CHECK_SHA256' ../config.h > /dev/null || NO_WARN=-qQ + for I in "$srcdir"/files/good-*.xz do - if test -z "$XZ" || "$XZ" -dc "$I" > /dev/null; then + # If features were disabled at build time, keep this still working. + case $I in + */good-1-*delta-lzma2*.xz) + have_feature DECODER_DELTA "$I" || continue + ;; + esac + case $I in + */good-1-empty-bcj-lzma2.xz) + have_feature DECODER_POWERPC "$I" || continue + ;; + esac + case $I in + */good-1-sparc-lzma2.xz) + have_feature DECODER_SPARC "$I" || continue + ;; + esac + case $I in + */good-1-x86-lzma2.xz) + have_feature DECODER_X86 "$I" || continue + ;; + esac + case $I in + */good-1-arm64-lzma2-*.xz) + have_feature DECODER_ARM64 "$I" || continue + ;; + esac + + if test -z "$XZ" || "$XZ" $NO_WARN -dc "$I" > /dev/null; then : else echo "Good file failed: $I" - (exit 1) exit 1 fi - if test -z "$XZDEC" || "$XZDEC" "$I" > /dev/null; then + if test -z "$XZDEC" || "$XZDEC" $NO_WARN "$I" > /dev/null; then : else echo "Good file failed: $I" - (exit 1) exit 1 fi done @@ -42,16 +100,98 @@ do if test -n "$XZ" && "$XZ" -dc "$I" > /dev/null 2>&1; then echo "Bad file succeeded: $I" - (exit 1) exit 1 fi - if test -n "$XZDEC" && "$XZDEC" "$I" > /dev/null 2>&1; then + # xzdec doesn't warn about unsupported check so skip this if any of + # the check types were disabled at built time (NO_WARN isn't empty). + if test -n "$XZDEC" && test -z "$NO_WARN" \ + && "$XZDEC" "$I" > /dev/null 2>&1; then echo "Bad file succeeded: $I" - (exit 1) exit 1 fi done -(exit 0) -exit 0 +# Testing for the lzma_index_append() bug in <= 5.2.6 needs "xz -l": +I="$srcdir/files/bad-3-index-uncomp-overflow.xz" +if test -n "$XZ" && "$XZ" -l "$I" > /dev/null 2>&1; then + echo "Bad file succeeded with xz -l: $I" + exit 1 +fi + +for I in "$srcdir"/files/unsupported-*.xz +do + # Test these only with xz as unsupported-check.xz will exit + # successfully with xzdec because it doesn't warn about + # unsupported check type. + if test -n "$XZ" && "$XZ" -dc "$I" > /dev/null 2>&1; then + echo "Unsupported file succeeded: $I" + exit 1 + fi +done + +# Test that this passes with --no-warn (-Q). +I="$srcdir/files/unsupported-check.xz" +if test -z "$XZ" || "$XZ" -dcqQ "$I" > /dev/null; then + : +else + echo "Unsupported file failed with xz -Q: $I" + exit 1 +fi + +if test -z "$XZDEC" || "$XZDEC" -qQ "$I" > /dev/null; then + : +else + echo "Unsupported file failed with xzdec -Q: $I" + exit 1 +fi + + +######### +# .lzma # +######### + +for I in "$srcdir"/files/good-*.lzma +do + if test -z "$XZ" || "$XZ" -dc "$I" > /dev/null; then + : + else + echo "Good file failed: $I" + exit 1 + fi +done + +for I in "$srcdir"/files/bad-*.lzma +do + if test -n "$XZ" && "$XZ" -dc "$I" > /dev/null 2>&1; then + echo "Bad file succeeded: $I" + exit 1 + fi +done + + +####### +# .lz # +####### + +if grep 'define HAVE_LZIP_DECODER' ../config.h > /dev/null ; then + for I in "$srcdir"/files/good-*.lz + do + if test -z "$XZ" || "$XZ" -dc "$I" > /dev/null; then + : + else + echo "Good file failed: $I" + exit 1 + fi + done + + for I in "$srcdir"/files/bad-*.lz "$srcdir"/files/unsupported-*.lz + do + if test -n "$XZ" && "$XZ" -dc "$I" > /dev/null 2>&1; then + echo "Bad file succeeded: $I" + exit 1 + fi + done +fi + +exit "$EXIT_STATUS" diff -ur xz-5.2.5/tests/test_filter_flags.c xz-5.4.3/tests/test_filter_flags.c --- xz-5.2.5/tests/test_filter_flags.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_filter_flags.c 2023-05-04 17:21:05 @@ -3,7 +3,8 @@ /// \file test_filter_flags.c /// \brief Tests Filter Flags coders // -// Author: Lasse Collin +// Authors: Jia Tan +// Lasse Collin // // This file has been put into the public domain. // You can do whatever you want with this file. @@ -12,247 +13,515 @@ #include "tests.h" +// FIXME: This is from src/liblzma/common/common.h but it cannot be +// included here. This constant is needed in only a few files, perhaps +// move it to some other internal header or create a new one? +#define LZMA_FILTER_RESERVED_START (LZMA_VLI_C(1) << 62) -static uint8_t buffer[4096]; -static lzma_filter known_flags; -static lzma_filter decoded_flags; -static lzma_stream strm = LZMA_STREAM_INIT; +#if defined(HAVE_ENCODERS) +// No tests are run without encoders, so init the global filters +// only when the encoders are enabled. +static lzma_filter lzma1_filter = { LZMA_FILTER_LZMA1, NULL }; +static lzma_filter lzma2_filter = { LZMA_FILTER_LZMA2, NULL }; +static lzma_filter delta_filter = { LZMA_FILTER_DELTA, NULL }; -static bool -encode(uint32_t known_size) -{ - memcrap(buffer, sizeof(buffer)); +static lzma_filter bcj_filters_encoders[] = { +#ifdef HAVE_ENCODER_X86 + { LZMA_FILTER_X86, NULL }, +#endif +#ifdef HAVE_ENCODER_POWERPC + { LZMA_FILTER_POWERPC, NULL }, +#endif +#ifdef HAVE_ENCODER_IA64 + { LZMA_FILTER_IA64, NULL }, +#endif +#ifdef HAVE_ENCODER_ARM + { LZMA_FILTER_ARM, NULL }, +#endif +#ifdef HAVE_ENCODER_ARM64 + { LZMA_FILTER_ARM64, NULL }, +#endif +#ifdef HAVE_ENCODER_ARMTHUMB + { LZMA_FILTER_ARMTHUMB, NULL }, +#endif +#ifdef HAVE_ENCODER_SPARC + { LZMA_FILTER_SPARC, NULL }, +#endif +}; - uint32_t tmp; - if (lzma_filter_flags_size(&tmp, &known_flags) != LZMA_OK) - return true; +// HAVE_ENCODERS ifdef not termianted here because decoders are +// only used if encoders are, but encoders can still be used +// even if decoders are not. - if (tmp != known_size) - return true; +#ifdef HAVE_DECODERS +static lzma_filter bcj_filters_decoders[] = { +#ifdef HAVE_DECODER_X86 + { LZMA_FILTER_X86, NULL }, +#endif +#ifdef HAVE_DECODER_POWERPC + { LZMA_FILTER_POWERPC, NULL }, +#endif +#ifdef HAVE_DECODER_IA64 + { LZMA_FILTER_IA64, NULL }, +#endif +#ifdef HAVE_DECODER_ARM + { LZMA_FILTER_ARM, NULL }, +#endif +#ifdef HAVE_DECODER_ARM64 + { LZMA_FILTER_ARM64, NULL }, +#endif +#ifdef HAVE_DECODER_ARMTHUMB + { LZMA_FILTER_ARMTHUMB, NULL }, +#endif +#ifdef HAVE_DECODER_SPARC + { LZMA_FILTER_SPARC, NULL }, +#endif +}; +#endif +#endif - size_t out_pos = 0; - if (lzma_filter_flags_encode(&known_flags, - buffer, &out_pos, known_size) != LZMA_OK) - return true; - if (out_pos != known_size) - return true; +static void +test_lzma_filter_flags_size(void) +{ +#ifndef HAVE_ENCODERS + assert_skip("Encoder support disabled"); +#else + // For each supported filter, test that the size can be calculated + // and that the size calculated is reasonable. A reasonable size + // must be greater than 0, but less than the maximum size for the + // block header. + uint32_t size = 0; + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA1)) { + assert_lzma_ret(lzma_filter_flags_size(&size, + &lzma1_filter), LZMA_PROG_ERROR); + } - return false; -} + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2)) { + assert_lzma_ret(lzma_filter_flags_size(&size, + &lzma2_filter), LZMA_OK); + assert_true(size != 0 && size < LZMA_BLOCK_HEADER_SIZE_MAX); + } + // Do not use macro ARRAY_SIZE() in the for loop condition directly. + // If the BCJ filters are not configured and built, then ARRAY_SIZE() + // will return 0 and cause a warning because the for loop will never + // execute since any unsigned number cannot be < 0 (-Werror=type-limits). + const uint32_t bcj_array_size = ARRAY_SIZE(bcj_filters_encoders); + for (uint32_t i = 0; i < bcj_array_size; i++) { + assert_lzma_ret(lzma_filter_flags_size(&size, + &bcj_filters_encoders[i]), LZMA_OK); + assert_true(size != 0 && size < LZMA_BLOCK_HEADER_SIZE_MAX); + } -static bool -decode_ret(uint32_t known_size, lzma_ret expected_ret) -{ - memcrap(&decoded_flags, sizeof(decoded_flags)); + if (lzma_filter_encoder_is_supported(LZMA_FILTER_DELTA)) { + assert_lzma_ret(lzma_filter_flags_size(&size, + &delta_filter), LZMA_OK); + assert_true(size != 0 && size < LZMA_BLOCK_HEADER_SIZE_MAX); + } - size_t pos = 0; - if (lzma_filter_flags_decode(&decoded_flags, NULL, - buffer, &pos, known_size) != expected_ret - || pos != known_size) - return true; + // Test invalid Filter IDs + lzma_filter bad_filter = { 2, NULL }; - return false; + assert_lzma_ret(lzma_filter_flags_size(&size, &bad_filter), + LZMA_OPTIONS_ERROR); + bad_filter.id = LZMA_VLI_MAX; + assert_lzma_ret(lzma_filter_flags_size(&size, &bad_filter), + LZMA_PROG_ERROR); + bad_filter.id = LZMA_FILTER_RESERVED_START; + assert_lzma_ret(lzma_filter_flags_size(&size, &bad_filter), + LZMA_PROG_ERROR); +#endif } -static bool -decode(uint32_t known_size) +// Helper function for test_lzma_filter_flags_encode. +// The should_encode parameter represents if the encoding operation +// is expected to fail. +// Avoid data -> encode -> decode -> compare to data. +// Instead create expected encoding and compare to result from +// lzma_filter_flags_encode. +// Filter Flags in .xz are encoded as: +// |Filter ID (VLI)|Size of Properties (VLI)|Filter Properties| +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) +static void +verify_filter_flags_encode(lzma_filter *filter, bool should_encode) { - if (decode_ret(known_size, LZMA_OK)) - return true; + uint32_t size = 0; - if (known_flags.id != decoded_flags.id) - return true; + // First calculate the size of Filter Flags to know how much + // memory to allocate to hold the encoded Filter Flags + assert_lzma_ret(lzma_filter_flags_size(&size, filter), LZMA_OK); + uint8_t *encoded_out = tuktest_malloc(size * sizeof(uint8_t)); + size_t out_pos = 0; + if (!should_encode) { + assert_false(lzma_filter_flags_encode(filter, encoded_out, + &out_pos, size) == LZMA_OK); + return; + } - return false; + // Next encode the Filter Flags for the provided filter + assert_lzma_ret(lzma_filter_flags_encode(filter, encoded_out, + &out_pos, size), LZMA_OK); + assert_uint_eq(size, out_pos); + + // Next decode the VLI for the Filter ID and verify it matches + // the expected Filter ID + size_t filter_id_vli_size = 0; + lzma_vli filter_id = 0; + assert_lzma_ret(lzma_vli_decode(&filter_id, NULL, encoded_out, + &filter_id_vli_size, size), LZMA_OK); + assert_uint_eq(filter->id, filter_id); + + // Next decode the Size of Properites and ensure it equals + // the expected size. + // Expected size should be: + // total filter flag length - size of filter id VLI + size of + // property size VLI + // Not verifying the contents of Filter Properties since + // that belongs in a different test + size_t size_of_properties_vli_size = 0; + lzma_vli size_of_properties = 0; + assert_lzma_ret(lzma_vli_decode(&size_of_properties, NULL, + encoded_out + filter_id_vli_size, + &size_of_properties_vli_size, size), LZMA_OK); + assert_uint_eq(size - (size_of_properties_vli_size + + filter_id_vli_size), size_of_properties); } +#endif -#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) static void -test_bcj(void) +test_lzma_filter_flags_encode(void) { - // Test 1 - known_flags.id = LZMA_FILTER_X86; - known_flags.options = NULL; +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + // No test for LZMA1 since the .xz format does not support LZMA1 + // and so the flags cannot be encoded for that filter + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2)) { + // Test with NULL options that should fail + lzma_options_lzma *options = lzma2_filter.options; + lzma2_filter.options = NULL; + verify_filter_flags_encode(&lzma2_filter, false); - expect(!encode(2)); - expect(!decode(2)); - expect(decoded_flags.options == NULL); + // Place options back in the filter, and test should pass + lzma2_filter.options = options; + verify_filter_flags_encode(&lzma2_filter, true); + } - // Test 2 - lzma_options_bcj options; - options.start_offset = 0; - known_flags.options = &options; - expect(!encode(2)); - expect(!decode(2)); - expect(decoded_flags.options == NULL); + // NOTE: Many BCJ filters require that start_offset is a multiple + // of some power of two. The Filter Flags encoder and decoder don't + // completely validate the options and thus 257 passes the tests + // with all BCJ filters. It would be caught when initializing + // a filter chain encoder or decoder. + lzma_options_bcj bcj_options = { + .start_offset = 257 + }; - // Test 3 - options.start_offset = 123456; - known_flags.options = &options; - expect(!encode(6)); - expect(!decode(6)); - expect(decoded_flags.options != NULL); + const uint32_t bcj_array_size = ARRAY_SIZE(bcj_filters_encoders); + for (uint32_t i = 0; i < bcj_array_size; i++) { + // NULL options should pass for bcj filters + verify_filter_flags_encode(&bcj_filters_encoders[i], true); + lzma_filter bcj_with_options = { + bcj_filters_encoders[i].id, &bcj_options }; + verify_filter_flags_encode(&bcj_with_options, true); + } - lzma_options_bcj *decoded = decoded_flags.options; - expect(decoded->start_offset == options.start_offset); + if (lzma_filter_encoder_is_supported(LZMA_FILTER_DELTA)) { + lzma_options_delta delta_opts_below_min = { + .type = LZMA_DELTA_TYPE_BYTE, + .dist = LZMA_DELTA_DIST_MIN - 1 + }; - free(decoded); -} -#endif + lzma_options_delta delta_opts_above_max = { + .type = LZMA_DELTA_TYPE_BYTE, + .dist = LZMA_DELTA_DIST_MAX + 1 + }; + verify_filter_flags_encode(&delta_filter, true); -#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) -static void -test_delta(void) -{ - // Test 1 - known_flags.id = LZMA_FILTER_DELTA; - known_flags.options = NULL; - expect(encode(99)); + lzma_filter delta_filter_bad_options = { + LZMA_FILTER_DELTA, &delta_opts_below_min }; - // Test 2 - lzma_options_delta options = { - .type = LZMA_DELTA_TYPE_BYTE, - .dist = 0 - }; - known_flags.options = &options; - expect(encode(99)); + // Next test error case using minimum - 1 delta distance + verify_filter_flags_encode(&delta_filter_bad_options, false); - // Test 3 - options.dist = LZMA_DELTA_DIST_MIN; - expect(!encode(3)); - expect(!decode(3)); - expect(((lzma_options_delta *)(decoded_flags.options))->dist - == options.dist); + // Next test error case using maximum + 1 delta distance + delta_filter_bad_options.options = &delta_opts_above_max; + verify_filter_flags_encode(&delta_filter_bad_options, false); - free(decoded_flags.options); + // Next test NULL case + delta_filter_bad_options.options = NULL; + verify_filter_flags_encode(&delta_filter_bad_options, false); + } - // Test 4 - options.dist = LZMA_DELTA_DIST_MAX; - expect(!encode(3)); - expect(!decode(3)); - expect(((lzma_options_delta *)(decoded_flags.options))->dist - == options.dist); + // Test expected failing cases + lzma_filter bad_filter = { LZMA_FILTER_RESERVED_START, NULL }; + size_t out_pos = 0; + size_t out_size = LZMA_BLOCK_HEADER_SIZE_MAX; + uint8_t out[LZMA_BLOCK_HEADER_SIZE_MAX]; - free(decoded_flags.options); - // Test 5 - options.dist = LZMA_DELTA_DIST_MAX + 1; - expect(encode(99)); -} + // Filter ID outside of valid range + assert_lzma_ret(lzma_filter_flags_encode(&bad_filter, out, &out_pos, + out_size), LZMA_PROG_ERROR); + out_pos = 0; + bad_filter.id = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_filter_flags_encode(&bad_filter, out, &out_pos, + out_size), LZMA_PROG_ERROR); + out_pos = 0; + + // Invalid Filter ID + bad_filter.id = 2; + assert_lzma_ret(lzma_filter_flags_encode(&bad_filter, out, &out_pos, + out_size), LZMA_OPTIONS_ERROR); + out_pos = 0; + + // Out size too small + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2)) { + uint32_t bad_size = 0; + + // First test with 0 output size + assert_lzma_ret(lzma_filter_flags_encode( + &lzma2_filter, out, &out_pos, 0), + LZMA_PROG_ERROR); + + // Next calculate the size needed to encode and + // use less than that + assert_lzma_ret(lzma_filter_flags_size(&bad_size, + &lzma2_filter), LZMA_OK); + + assert_lzma_ret(lzma_filter_flags_encode( + &lzma2_filter, out, &out_pos, + bad_size - 1), LZMA_PROG_ERROR); + out_pos = 0; + } + + // Invalid options + if (lzma_filter_encoder_is_supported(LZMA_FILTER_DELTA)) { + bad_filter.id = LZMA_FILTER_DELTA; + + // First test with NULL options + assert_lzma_ret(lzma_filter_flags_encode(&bad_filter, out, + &out_pos, out_size), LZMA_PROG_ERROR); + out_pos = 0; + + // Next test with invalid options + lzma_options_delta bad_options = { + .dist = LZMA_DELTA_DIST_MAX + 1, + .type = LZMA_DELTA_TYPE_BYTE + }; + bad_filter.options = &bad_options; + + assert_lzma_ret(lzma_filter_flags_encode(&bad_filter, out, + &out_pos, out_size), LZMA_PROG_ERROR); + } #endif +} -/* -#ifdef HAVE_FILTER_LZMA + +// Helper function for test_lzma_filter_flags_decode. +// Encodes the filter_in without using lzma_filter_flags_encode. +// Leaves the specific assertions of filter_out options to the caller +// because it is agnostic to the type of options used in the call +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) static void -validate_lzma(void) +verify_filter_flags_decode(lzma_filter *filter_in, lzma_filter *filter_out) { - const lzma_options_lzma *known = known_flags.options; - const lzma_options_lzma *decoded = decoded_flags.options; + uint32_t total_size = 0; - expect(known->dictionary_size <= decoded->dictionary_size); + assert_lzma_ret(lzma_filter_flags_size(&total_size, filter_in), + LZMA_OK); + assert_uint(total_size, >, 0); + uint8_t *filter_flag_buffer = tuktest_malloc(total_size); - if (known->dictionary_size == 1) - expect(decoded->dictionary_size == 1); - else - expect(known->dictionary_size + known->dictionary_size / 2 - > decoded->dictionary_size); - - expect(known->literal_context_bits == decoded->literal_context_bits); - expect(known->literal_pos_bits == decoded->literal_pos_bits); - expect(known->pos_bits == decoded->pos_bits); + uint32_t properties_size = 0; + size_t out_pos = 0; + size_t in_pos = 0; + assert_lzma_ret(lzma_properties_size(&properties_size, filter_in), + LZMA_OK); + assert_lzma_ret(lzma_vli_encode(filter_in->id, NULL, + filter_flag_buffer, &out_pos, total_size), LZMA_OK); + assert_lzma_ret(lzma_vli_encode(properties_size, NULL, + filter_flag_buffer, &out_pos, total_size), + LZMA_OK); + assert_lzma_ret(lzma_properties_encode(filter_in, + filter_flag_buffer + out_pos), LZMA_OK); + assert_lzma_ret(lzma_filter_flags_decode(filter_out, NULL, + filter_flag_buffer, &in_pos, total_size), + LZMA_OK); + assert_uint_eq(filter_in->id, filter_out->id); } +#endif static void -test_lzma(void) +test_lzma_filter_flags_decode(void) { - // Test 1 - known_flags.id = LZMA_FILTER_LZMA1; - known_flags.options = NULL; - expect(encode(99)); +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + // For each filter, only run the decoder test if both the encoder + // and decoder are enabled. This is because verify_filter_flags_decode + // uses lzma_filter_flags_size which requires the encoder. + if (lzma_filter_decoder_is_supported(LZMA_FILTER_LZMA2) && + lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2)) { + lzma_filter lzma2_decoded = { LZMA_FILTER_LZMA2, NULL }; - // Test 2 - lzma_options_lzma options = { - .dictionary_size = 0, - .literal_context_bits = 0, - .literal_pos_bits = 0, - .pos_bits = 0, - .preset_dictionary = NULL, - .preset_dictionary_size = 0, - .mode = LZMA_MODE_INVALID, - .fast_bytes = 0, - .match_finder = LZMA_MF_INVALID, - .match_finder_cycles = 0, - }; + verify_filter_flags_decode(&lzma2_filter, &lzma2_decoded); - // Test 3 (empty dictionary not allowed) - known_flags.options = &options; - expect(encode(99)); + lzma_options_lzma *expected = lzma2_filter.options; + lzma_options_lzma *decoded = lzma2_decoded.options; - // Test 4 (brute-force test some valid dictionary sizes) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; - while (options.dictionary_size != LZMA_DICTIONARY_SIZE_MAX) { - if (++options.dictionary_size == 5000) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX - 5; + // Only the dictionary size is encoded and decoded + // so only compare those + assert_uint_eq(decoded->dict_size, expected->dict_size); - expect(!encode(4)); - expect(!decode(4)); - validate_lzma(); - - free(decoded_flags.options); + // The decoded options must be freed by the caller + free(decoded); } - // Test 5 (too big dictionary size) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX + 1; - expect(encode(99)); + const uint32_t bcj_array_size = ARRAY_SIZE(bcj_filters_decoders); + for (uint32_t i = 0; i < bcj_array_size; i++) { + if (lzma_filter_encoder_is_supported( + bcj_filters_decoders[i].id)) { + lzma_filter bcj_decoded = { + bcj_filters_decoders[i].id, NULL }; - // Test 6 (brute-force test lc/lp/pb) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; - for (uint32_t lc = LZMA_LITERAL_CONTEXT_BITS_MIN; - lc <= LZMA_LITERAL_CONTEXT_BITS_MAX; ++lc) { - for (uint32_t lp = LZMA_LITERAL_POS_BITS_MIN; - lp <= LZMA_LITERAL_POS_BITS_MAX; ++lp) { - for (uint32_t pb = LZMA_POS_BITS_MIN; - pb <= LZMA_POS_BITS_MAX; ++pb) { - if (lc + lp > LZMA_LITERAL_BITS_MAX) - continue; + lzma_filter bcj_encoded = { + bcj_filters_decoders[i].id, NULL }; - options.literal_context_bits = lc; - options.literal_pos_bits = lp; - options.pos_bits = pb; + // First test without options + verify_filter_flags_decode(&bcj_encoded, + &bcj_decoded); + assert_true(bcj_decoded.options == NULL); - expect(!encode(4)); - expect(!decode(4)); - validate_lzma(); + // Next test with offset + lzma_options_bcj options = { + .start_offset = 257 + }; - free(decoded_flags.options); - } + bcj_encoded.options = &options; + verify_filter_flags_decode(&bcj_encoded, + &bcj_decoded); + lzma_options_bcj *decoded_opts = bcj_decoded.options; + assert_uint_eq(decoded_opts->start_offset, + options.start_offset); + free(decoded_opts); } } -} + + if (lzma_filter_decoder_is_supported(LZMA_FILTER_DELTA) && + lzma_filter_encoder_is_supported(LZMA_FILTER_DELTA)) { + lzma_filter delta_decoded = { LZMA_FILTER_DELTA, NULL }; + + verify_filter_flags_decode(&delta_filter, &delta_decoded); + lzma_options_delta *expected = delta_filter.options; + lzma_options_delta *decoded = delta_decoded.options; + assert_uint_eq(expected->dist, decoded->dist); + assert_uint_eq(expected->type, decoded->type); + + free(decoded); + } + + // Test expected failing cases + uint8_t bad_encoded_filter[LZMA_BLOCK_HEADER_SIZE_MAX]; + lzma_filter bad_filter; + + // Filter ID outside of valid range + lzma_vli bad_filter_id = LZMA_FILTER_RESERVED_START; + size_t bad_encoded_out_pos = 0; + size_t in_pos = 0; + + assert_lzma_ret(lzma_vli_encode(bad_filter_id, NULL, + bad_encoded_filter, &bad_encoded_out_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_OK); + + assert_lzma_ret(lzma_filter_flags_decode(&bad_filter, NULL, + bad_encoded_filter, &in_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_DATA_ERROR); + + bad_encoded_out_pos = 0; + in_pos = 0; + + // Invalid Filter ID + bad_filter_id = 2; + bad_encoded_out_pos = 0; + in_pos = 0; + + assert_lzma_ret(lzma_vli_encode(bad_filter_id, NULL, + bad_encoded_filter, &bad_encoded_out_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_OK); + + // Next encode Size of Properties with the value of 0 + assert_lzma_ret(lzma_vli_encode(0, NULL, + bad_encoded_filter, &bad_encoded_out_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_OK); + + // Decode should fail on bad Filter ID + assert_lzma_ret(lzma_filter_flags_decode(&bad_filter, NULL, + bad_encoded_filter, &in_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_OPTIONS_ERROR); + bad_encoded_out_pos = 0; + in_pos = 0; + + // Outsize too small + // Encode the LZMA2 filter normally, but then set + // the out size when decoding as too small + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2) && + lzma_filter_decoder_is_supported(LZMA_FILTER_LZMA2)) { + uint32_t filter_flag_size = 0; + assert_lzma_ret(lzma_filter_flags_size(&filter_flag_size, + &lzma2_filter), LZMA_OK); + + assert_lzma_ret(lzma_filter_flags_encode(&lzma2_filter, + bad_encoded_filter, &bad_encoded_out_pos, + LZMA_BLOCK_HEADER_SIZE_MAX), LZMA_OK); + + assert_lzma_ret(lzma_filter_flags_decode(&bad_filter, NULL, + bad_encoded_filter, &in_pos, + filter_flag_size - 1), LZMA_DATA_ERROR); + } #endif -*/ +} -int -main(void) + +extern int +main(int argc, char **argv) { -#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) - test_bcj(); -#endif -#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) - test_delta(); -#endif -// #ifdef HAVE_FILTER_LZMA -// test_lzma(); -// #endif + tuktest_start(argc, argv); - lzma_end(&strm); +#ifdef HAVE_ENCODERS + // Only init filter options if encoder is supported because decoder + // tests requires encoder support, so the decoder tests will only + // run if for a given filter both the encoder and decoder are enabled. + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA1)) { + lzma_options_lzma *options = tuktest_malloc( + sizeof(lzma_options_lzma)); + lzma_lzma_preset(options, LZMA_PRESET_DEFAULT); + lzma1_filter.options = options; + } - return 0; + if (lzma_filter_encoder_is_supported(LZMA_FILTER_LZMA2)) { + lzma_options_lzma *options = tuktest_malloc( + sizeof(lzma_options_lzma)); + lzma_lzma_preset(options, LZMA_PRESET_DEFAULT); + lzma2_filter.options = options; + } + + if (lzma_filter_encoder_is_supported(LZMA_FILTER_DELTA)) { + lzma_options_delta *options = tuktest_malloc( + sizeof(lzma_options_delta)); + options->dist = LZMA_DELTA_DIST_MIN; + options->type = LZMA_DELTA_TYPE_BYTE; + delta_filter.options = options; + } +#endif + + tuktest_run(test_lzma_filter_flags_size); + tuktest_run(test_lzma_filter_flags_encode); + tuktest_run(test_lzma_filter_flags_decode); + return tuktest_end(); } Only in xz-5.4.3/tests: test_filter_str.c Only in xz-5.4.3/tests: test_hardware.c diff -ur xz-5.2.5/tests/test_index.c xz-5.4.3/tests/test_index.c --- xz-5.2.5/tests/test_index.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_index.c 2023-05-04 17:22:00 @@ -2,9 +2,13 @@ // /// \file test_index.c /// \brief Tests functions handling the lzma_index structure +/// +/// \todo Implement tests for lzma_file_info_decoder // -// Author: Lasse Collin +// Authors: Jia Tan +// Lasse Collin // +// // This file has been put into the public domain. // You can do whatever you want with this file. // @@ -12,624 +16,1222 @@ #include "tests.h" -#define MEMLIMIT (LZMA_VLI_C(1) << 20) +// liblzma internal header file needed for: +// UNPADDED_SIZE_MIN +// UNPADDED_SIZE_MAX +// vli_ceil4 +#include "common/index.h" -#define SMALL_COUNT 3 -#define BIG_COUNT 5555 +#define MEMLIMIT (UINT64_C(1) << 20) -static lzma_index * -create_empty(void) +static uint8_t *decode_buffer; +static size_t decode_buffer_size = 0; +static lzma_index *decode_test_index; + + +static void +test_lzma_index_memusage(void) { - lzma_index *i = lzma_index_init(NULL); - expect(i != NULL); - return i; + // The return value from lzma_index_memusage is an approximation + // of the amount of memory needed for lzma_index for a given + // amount of Streams and Blocks. It will be an upperbound, + // so this test will mostly sanity check and error check the + // function. + + // The maximum number of Streams should be UINT32_MAX in the + // current implementation even though the parameter is lzma_vli. + assert_uint_eq(lzma_index_memusage((lzma_vli)UINT32_MAX + 1, 1), + UINT64_MAX); + + // The maximum number of Blocks should be LZMA_VLI_MAX + assert_uint_eq(lzma_index_memusage(1, LZMA_VLI_MAX), UINT64_MAX); + + // Number of Streams must be non-zero + assert_uint_eq(lzma_index_memusage(0, 1), UINT64_MAX); + + // Number of Blocks CAN be zero + assert_uint(lzma_index_memusage(1, 0), !=, UINT64_MAX); + + // Arbitrary values for Stream and Block should work without error + // and should always increase + uint64_t previous = 1; + lzma_vli streams = 1; + lzma_vli blocks = 1; + + // Test 100 different increasing values for Streams and Block + for (int i = 0; i < 100; i++) { + uint64_t current = lzma_index_memusage(streams, blocks); + assert_uint(current, >, previous); + previous = current; + streams += 29; + blocks += 107; + } + + // Force integer overflow in calculation (should result in an error) + assert_uint_eq(lzma_index_memusage(UINT32_MAX, LZMA_VLI_MAX), + UINT64_MAX); } -static lzma_index * -create_small(void) +static void +test_lzma_index_memused(void) { - lzma_index *i = lzma_index_init(NULL); - expect(i != NULL); - expect(lzma_index_append(i, NULL, 101, 555) == LZMA_OK); - expect(lzma_index_append(i, NULL, 602, 777) == LZMA_OK); - expect(lzma_index_append(i, NULL, 804, 999) == LZMA_OK); - return i; + // Very similar to test_lzma_index_memusage above since + // lzma_index_memused is essentially a wrapper for + // lzma_index_memusage + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + // Test with empty Index + assert_uint(lzma_index_memused(idx), <, UINT64_MAX); + + // Append small Blocks and then test again (should pass). + for (lzma_vli i = 0; i < 10; i++) + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + + assert_uint(lzma_index_memused(idx), <, UINT64_MAX); + + lzma_index_end(idx, NULL); } -static lzma_index * -create_big(void) +static void +test_lzma_index_append(void) { - lzma_index *i = lzma_index_init(NULL); - expect(i != NULL); + // Basic input-ouput test done here. + // Less trivial tests for this function are done throughout + // other tests. - lzma_vli total_size = 0; - lzma_vli uncompressed_size = 0; + // First test with NULL lzma_index + assert_lzma_ret(lzma_index_append(NULL, NULL, UNPADDED_SIZE_MIN, + 1), LZMA_PROG_ERROR); - // Add pseudo-random sizes (but always the same size values). - uint32_t n = 11; - for (size_t j = 0; j < BIG_COUNT; ++j) { - n = 7019 * n + 7607; - const uint32_t t = n * 3011; - expect(lzma_index_append(i, NULL, t, n) == LZMA_OK); - total_size += (t + 3) & ~LZMA_VLI_C(3); - uncompressed_size += n; - } + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - expect(lzma_index_block_count(i) == BIG_COUNT); - expect(lzma_index_total_size(i) == total_size); - expect(lzma_index_uncompressed_size(i) == uncompressed_size); - expect(lzma_index_total_size(i) + lzma_index_size(i) - + 2 * LZMA_STREAM_HEADER_SIZE - == lzma_index_stream_size(i)); + // Test with invalid Unpadded Size + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN - 1, 1), LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MAX + 1, 1), LZMA_PROG_ERROR); - return i; + // Test with invalid Uncompressed Size + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MAX, LZMA_VLI_MAX + 1), + LZMA_PROG_ERROR); + + // Test expected successful Block appends + assert_lzma_ret(lzma_index_append(idx, NULL, UNPADDED_SIZE_MIN, + 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 2, + 2), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 3, + 3), LZMA_OK); + + lzma_index_end(idx, NULL); + + // Test uncompressed .xz file size growing too large. + // Should result in LZMA_DATA_ERROR. + idx = lzma_index_init(NULL); + + assert_lzma_ret(lzma_index_append(idx, NULL, UNPADDED_SIZE_MAX, + 1), LZMA_DATA_ERROR); + + // Test compressed size growing too large. + // Should result in LZMA_DATA_ERROR. + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, LZMA_VLI_MAX), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_DATA_ERROR); + + // Currently not testing for error case when the size of the Index + // grows too large to be stored. This was not practical to test for + // since too many Blocks needed to be created to cause this. + + lzma_index_end(idx, NULL); } -static bool -is_equal(const lzma_index *a, const lzma_index *b) +static void +test_lzma_index_stream_flags(void) { - // Compare only the Stream and Block sizes and offsets. - lzma_index_iter ra, rb; - lzma_index_iter_init(&ra, a); - lzma_index_iter_init(&rb, b); + // Only trivial tests done here testing for basic functionality. + // More in-depth testing for this function will be done in + // test_lzma_index_checks. - while (true) { - bool reta = lzma_index_iter_next(&ra, LZMA_INDEX_ITER_ANY); - bool retb = lzma_index_iter_next(&rb, LZMA_INDEX_ITER_ANY); - if (reta) - return !(reta ^ retb); + // Testing for NULL inputs + assert_lzma_ret(lzma_index_stream_flags(NULL, NULL), + LZMA_PROG_ERROR); - if (ra.stream.number != rb.stream.number - || ra.stream.block_count - != rb.stream.block_count - || ra.stream.compressed_offset - != rb.stream.compressed_offset - || ra.stream.uncompressed_offset - != rb.stream.uncompressed_offset - || ra.stream.compressed_size - != rb.stream.compressed_size - || ra.stream.uncompressed_size - != rb.stream.uncompressed_size - || ra.stream.padding - != rb.stream.padding) - return false; + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - if (ra.stream.block_count == 0) - continue; + assert_lzma_ret(lzma_index_stream_flags(idx, NULL), + LZMA_PROG_ERROR); - if (ra.block.number_in_file != rb.block.number_in_file - || ra.block.compressed_file_offset - != rb.block.compressed_file_offset - || ra.block.uncompressed_file_offset - != rb.block.uncompressed_file_offset - || ra.block.number_in_stream - != rb.block.number_in_stream - || ra.block.compressed_stream_offset - != rb.block.compressed_stream_offset - || ra.block.uncompressed_stream_offset - != rb.block.uncompressed_stream_offset - || ra.block.uncompressed_size - != rb.block.uncompressed_size - || ra.block.unpadded_size - != rb.block.unpadded_size - || ra.block.total_size - != rb.block.total_size) - return false; + lzma_stream_flags stream_flags = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = LZMA_CHECK_CRC32 + }; + + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + + lzma_index_end(idx, NULL); +} + + +static void +test_lzma_index_checks(void) +{ + // Tests should still pass, even if some of the check types + // are disabled. + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + lzma_stream_flags stream_flags = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = LZMA_CHECK_NONE + }; + + // First set the check type to None + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + assert_uint_eq(lzma_index_checks(idx), + UINT32_C(1) << LZMA_CHECK_NONE); + + // Set the check type to CRC32 and repeat + stream_flags.check = LZMA_CHECK_CRC32; + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + assert_uint_eq(lzma_index_checks(idx), + UINT32_C(1) << LZMA_CHECK_CRC32); + + // Set the check type to CRC64 and repeat + stream_flags.check = LZMA_CHECK_CRC64; + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + assert_uint_eq(lzma_index_checks(idx), + UINT32_C(1) << LZMA_CHECK_CRC64); + + // Set the check type to SHA256 and repeat + stream_flags.check = LZMA_CHECK_SHA256; + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + assert_uint_eq(lzma_index_checks(idx), + UINT32_C(1) << LZMA_CHECK_SHA256); + + // Create second lzma_index and cat to first + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + // Set the check type to CRC32 for the second lzma_index + stream_flags.check = LZMA_CHECK_CRC32; + assert_lzma_ret(lzma_index_stream_flags(second, &stream_flags), + LZMA_OK); + + assert_uint_eq(lzma_index_checks(second), + UINT32_C(1) << LZMA_CHECK_CRC32); + + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + + // Index should now have both CRC32 and SHA256 + assert_uint_eq(lzma_index_checks(idx), + (UINT32_C(1) << LZMA_CHECK_CRC32) | + (UINT32_C(1) << LZMA_CHECK_SHA256)); + + // Change the check type of the second Stream to SHA256 + stream_flags.check = LZMA_CHECK_SHA256; + assert_lzma_ret(lzma_index_stream_flags(idx, &stream_flags), + LZMA_OK); + + // Index should now have only SHA256 + assert_uint_eq(lzma_index_checks(idx), + UINT32_C(1) << LZMA_CHECK_SHA256); + + // Test with a third Stream + lzma_index *third = lzma_index_init(NULL); + assert_true(third != NULL); + + stream_flags.check = LZMA_CHECK_CRC64; + assert_lzma_ret(lzma_index_stream_flags(third, &stream_flags), + LZMA_OK); + + assert_uint_eq(lzma_index_checks(third), + UINT32_C(1) << LZMA_CHECK_CRC64); + + assert_lzma_ret(lzma_index_cat(idx, third, NULL), LZMA_OK); + + // Index should now have CRC64 and SHA256 + assert_uint_eq(lzma_index_checks(idx), + (UINT32_C(1) << LZMA_CHECK_CRC64) | + (UINT32_C(1) << LZMA_CHECK_SHA256)); + + lzma_index_end(idx, NULL); +} + + +static void +test_lzma_index_stream_padding(void) +{ + // Test NULL lzma_index + assert_lzma_ret(lzma_index_stream_padding(NULL, 0), + LZMA_PROG_ERROR); + + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + // Test Stream Padding not a multiple of 4 + assert_lzma_ret(lzma_index_stream_padding(idx, 3), + LZMA_PROG_ERROR); + + // Test Stream Padding too large + assert_lzma_ret(lzma_index_stream_padding(idx, LZMA_VLI_MAX - 3), + LZMA_DATA_ERROR); + + // Test Stream Padding valid + assert_lzma_ret(lzma_index_stream_padding(idx, 0x1000), + LZMA_OK); + assert_lzma_ret(lzma_index_stream_padding(idx, 4), + LZMA_OK); + assert_lzma_ret(lzma_index_stream_padding(idx, 0), + LZMA_OK); + + // Test Stream Padding causing the file size to grow too large + assert_lzma_ret(lzma_index_append(idx, NULL, + LZMA_VLI_MAX - 0x1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_stream_padding(idx, 0x1000), + LZMA_DATA_ERROR); + + lzma_index_end(idx, NULL); +} + + +static void +test_lzma_index_stream_count(void) +{ + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + assert_uint_eq(lzma_index_stream_count(idx), 1); + + // Appending Blocks should not change the Stream count value + assert_lzma_ret(lzma_index_append(idx, NULL, UNPADDED_SIZE_MIN, + 1), LZMA_OK); + + assert_uint_eq(lzma_index_stream_count(idx), 1); + + // Test with multiple Streams + for (uint32_t i = 0; i < 100; i++) { + lzma_index *idx_cat = lzma_index_init(NULL); + assert_true(idx != NULL); + assert_lzma_ret(lzma_index_cat(idx, idx_cat, NULL), LZMA_OK); + assert_uint_eq(lzma_index_stream_count(idx), i + 2); } + + lzma_index_end(idx, NULL); } static void -test_equal(void) +test_lzma_index_block_count(void) { - lzma_index *a = create_empty(); - lzma_index *b = create_small(); - lzma_index *c = create_big(); - expect(a && b && c); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - expect(is_equal(a, a)); - expect(is_equal(b, b)); - expect(is_equal(c, c)); + assert_uint_eq(lzma_index_block_count(idx), 0); - expect(!is_equal(a, b)); - expect(!is_equal(a, c)); - expect(!is_equal(b, c)); + const uint32_t iterations = 0x1000; + for (uint32_t i = 0; i < iterations; i++) { + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + assert_uint_eq(lzma_index_block_count(idx), i + 1); + } - lzma_index_end(a, NULL); - lzma_index_end(b, NULL); - lzma_index_end(c, NULL); + // Create new lzma_index with a few Blocks + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + assert_lzma_ret(lzma_index_append(second, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(second, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(second, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + + assert_uint_eq(lzma_index_block_count(second), 3); + + // Concatenate the lzma_indexes together and the result should have + // the sum of the two individual counts. + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + assert_uint_eq(lzma_index_block_count(idx), iterations + 3); + + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + + assert_uint_eq(lzma_index_block_count(idx), iterations + 4); + + lzma_index_end(idx, NULL); } static void -test_overflow(void) +test_lzma_index_size(void) { - // Integer overflow tests - lzma_index *i = create_empty(); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - expect(lzma_index_append(i, NULL, LZMA_VLI_MAX - 5, 1234) - == LZMA_DATA_ERROR); + // Base size should be: + // 1 byte Index Indicator + // 1 byte Number of Records + // 0 bytes Records + // 2 bytes Index Padding + // 4 bytes CRC32 + // Total: 8 bytes + assert_uint_eq(lzma_index_size(idx), 8); - // TODO + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); - lzma_index_end(i, NULL); + // New size should be: + // 1 byte Index Indicator + // 1 byte Number of Records + // 2 bytes Records + // 0 bytes Index Padding + // 4 bytes CRC32 + // Total: 8 bytes + assert_uint_eq(lzma_index_size(idx), 8); + + assert_lzma_ret(lzma_index_append(idx, NULL, + LZMA_VLI_MAX / 4, LZMA_VLI_MAX / 4), LZMA_OK); + + // New size should be: + // 1 byte Index Indicator + // 1 byte Number of Records + // 20 bytes Records + // 2 bytes Index Padding + // 4 bytes CRC32 + // Total: 28 bytes + assert_uint_eq(lzma_index_size(idx), 28); + + lzma_index_end(idx, NULL); } static void -test_copy(const lzma_index *i) +test_lzma_index_stream_size(void) { - lzma_index *d = lzma_index_dup(i, NULL); - expect(d != NULL); - expect(is_equal(i, d)); - lzma_index_end(d, NULL); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + // Stream size calculated by: + // Size of Stream Header (12 bytes) + // Size of all Blocks + // Size of the Index + // Size of the Stream Footer (12 bytes) + + // First test with empty Index + // Stream size should be: + // Size of Stream Header - 12 bytes + // Size of all Blocks - 0 bytes + // Size of Index - 8 bytes + // Size of Stream Footer - 12 bytes + // Total: 32 bytes + assert_uint_eq(lzma_index_stream_size(idx), 32); + + // Next, append a few Blocks and retest + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + + // Stream size should be: + // Size of Stream Header - 12 bytes + // Size of all Blocks - 3000 bytes + // Size of Index - 16 bytes + // Size of Stream Footer - 12 bytes + // Total: 3040 bytes + assert_uint_eq(lzma_index_stream_size(idx), 3040); + + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + assert_uint_eq(lzma_index_stream_size(second), 32); + assert_lzma_ret(lzma_index_append(second, NULL, 1000, 1), LZMA_OK); + + // Stream size should be: + // Size of Stream Header - 12 bytes + // Size of all Blocks - 1000 bytes + // Size of Index - 12 bytes + // Size of Stream Footer - 12 bytes + // Total: 1036 bytes + assert_uint_eq(lzma_index_stream_size(second), 1036); + + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + + // Stream size should be: + // Size of Stream Header - 12 bytes + // Size of all Blocks - 4000 bytes + // Size of Index - 20 bytes + // Size of Stream Footer - 12 bytes + // Total: 4044 bytes + assert_uint_eq(lzma_index_stream_size(idx), 4044); + + lzma_index_end(idx, NULL); } static void -test_read(lzma_index *i) +test_lzma_index_total_size(void) { - lzma_index_iter r; - lzma_index_iter_init(&r, i); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - // Try twice so we see that rewinding works. - for (size_t j = 0; j < 2; ++j) { - lzma_vli total_size = 0; - lzma_vli uncompressed_size = 0; - lzma_vli stream_offset = LZMA_STREAM_HEADER_SIZE; - lzma_vli uncompressed_offset = 0; - uint32_t count = 0; + // First test empty lzma_index. + // Result should be 0 since no Blocks have been added. + assert_uint_eq(lzma_index_total_size(idx), 0); - while (!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)) { - ++count; + // Add a few Blocks and retest after each append + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_uint_eq(lzma_index_total_size(idx), 1000); - total_size += r.block.total_size; - uncompressed_size += r.block.uncompressed_size; + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_uint_eq(lzma_index_total_size(idx), 2000); - expect(r.block.compressed_file_offset - == stream_offset); - expect(r.block.uncompressed_file_offset - == uncompressed_offset); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_uint_eq(lzma_index_total_size(idx), 3000); - stream_offset += r.block.total_size; - uncompressed_offset += r.block.uncompressed_size; - } + // Create second lzma_index and append Blocks to it. + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); - expect(lzma_index_total_size(i) == total_size); - expect(lzma_index_uncompressed_size(i) == uncompressed_size); - expect(lzma_index_block_count(i) == count); + assert_uint_eq(lzma_index_total_size(second), 0); - lzma_index_iter_rewind(&r); - } + assert_lzma_ret(lzma_index_append(second, NULL, 100, 1), LZMA_OK); + assert_uint_eq(lzma_index_total_size(second), 100); + + assert_lzma_ret(lzma_index_append(second, NULL, 100, 1), LZMA_OK); + assert_uint_eq(lzma_index_total_size(second), 200); + + // Concatenate the Streams together + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + + // The resulting total size should be the size of all Blocks + // from both Streams + assert_uint_eq(lzma_index_total_size(idx), 3200); + + lzma_index_end(idx, NULL); } static void -test_code(lzma_index *i) +test_lzma_index_file_size(void) { - const size_t alloc_size = 128 * 1024; - uint8_t *buf = malloc(alloc_size); - expect(buf != NULL); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - // Encode - lzma_stream strm = LZMA_STREAM_INIT; - expect(lzma_index_encoder(&strm, i) == LZMA_OK); - const lzma_vli index_size = lzma_index_size(i); - succeed(coder_loop(&strm, NULL, 0, buf, index_size, - LZMA_STREAM_END, LZMA_RUN)); + // Should be the same as test_lzma_index_stream_size with + // only one Stream and no Stream Padding. + assert_uint_eq(lzma_index_file_size(idx), 32); - // Decode - lzma_index *d; - expect(lzma_index_decoder(&strm, &d, MEMLIMIT) == LZMA_OK); - expect(d == NULL); - succeed(decoder_loop(&strm, buf, index_size)); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); - expect(is_equal(i, d)); + assert_uint_eq(lzma_index_file_size(idx), 3040); - lzma_index_end(d, NULL); - lzma_end(&strm); + // Next add Stream Padding + assert_lzma_ret(lzma_index_stream_padding(idx, 1000), + LZMA_OK); - // Decode with hashing - lzma_index_hash *h = lzma_index_hash_init(NULL, NULL); - expect(h != NULL); - lzma_index_iter r; - lzma_index_iter_init(&r, i); - while (!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)) - expect(lzma_index_hash_append(h, r.block.unpadded_size, - r.block.uncompressed_size) == LZMA_OK); - size_t pos = 0; - while (pos < index_size - 1) - expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) - == LZMA_OK); - expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) - == LZMA_STREAM_END); + assert_uint_eq(lzma_index_file_size(idx), 4040); - lzma_index_hash_end(h, NULL); + // Create second lzma_index. + // Very similar to test_lzma_index_stream_size, but + // the values should include the headers of the second Stream. + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); - // Encode buffer - size_t buf_pos = 1; - expect(lzma_index_buffer_encode(i, buf, &buf_pos, index_size) - == LZMA_BUF_ERROR); - expect(buf_pos == 1); + assert_lzma_ret(lzma_index_append(second, NULL, 1000, 1), LZMA_OK); + assert_uint_eq(lzma_index_stream_size(second), 1036); - succeed(lzma_index_buffer_encode(i, buf, &buf_pos, index_size + 1)); - expect(buf_pos == index_size + 1); + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); - // Decode buffer - buf_pos = 1; - uint64_t memlimit = MEMLIMIT; - expect(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, - index_size) == LZMA_DATA_ERROR); - expect(buf_pos == 1); - expect(d == NULL); + // .xz file size should be: + // Size of 2 Stream Headers - 12 * 2 bytes + // Size of all Blocks - 3000 + 1000 bytes + // Size of 2 Indexes - 16 + 12 bytes + // Size of Stream Padding - 1000 bytes + // Size of 2 Stream Footers - 12 * 2 bytes + // Total: 5076 bytes + assert_uint_eq(lzma_index_file_size(idx), 5076); - succeed(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, - index_size + 1)); - expect(buf_pos == index_size + 1); - expect(is_equal(i, d)); + lzma_index_end(idx, NULL); +} - lzma_index_end(d, NULL); - free(buf); +static void +test_lzma_index_uncompressed_size(void) +{ + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + // Empty lzma_index should have 0 uncompressed .xz file size. + assert_uint_eq(lzma_index_uncompressed_size(idx), 0); + + // Append a few small Blocks + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 10), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 100), LZMA_OK); + + assert_uint_eq(lzma_index_uncompressed_size(idx), 111); + + // Create another lzma_index + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + // Append a few small Blocks + assert_lzma_ret(lzma_index_append(second, NULL, 1000, 2), LZMA_OK); + assert_lzma_ret(lzma_index_append(second, NULL, 1000, 20), LZMA_OK); + assert_lzma_ret(lzma_index_append(second, NULL, 1000, 200), LZMA_OK); + + assert_uint_eq(lzma_index_uncompressed_size(second), 222); + + // Concatenate second lzma_index to first + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + + // New uncompressed .xz file size should be the sum of the two Streams + assert_uint_eq(lzma_index_uncompressed_size(idx), 333); + + // Append one more Block to the lzma_index and ensure that + // it is properly updated + assert_lzma_ret(lzma_index_append(idx, NULL, 1000, 111), LZMA_OK); + assert_uint_eq(lzma_index_uncompressed_size(idx), 444); + + lzma_index_end(idx, NULL); } static void -test_many(lzma_index *i) +test_lzma_index_iter_init(void) { - test_copy(i); - test_read(i); - test_code(i); + // Testing basic init functionality. + // The init function should call rewind on the iterator. + lzma_index *first = lzma_index_init(NULL); + assert_true(first != NULL); + + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + lzma_index *third = lzma_index_init(NULL); + assert_true(third != NULL); + + assert_lzma_ret(lzma_index_cat(first, second, NULL), LZMA_OK); + assert_lzma_ret(lzma_index_cat(first, third, NULL), LZMA_OK); + + lzma_index_iter iter; + lzma_index_iter_init(&iter, first); + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + assert_uint_eq(iter.stream.number, 1); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + assert_uint_eq(iter.stream.number, 2); + + lzma_index_iter_init(&iter, first); + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + assert_uint_eq(iter.stream.number, 3); } static void -test_cat(void) +test_lzma_index_iter_rewind(void) { - lzma_index *a, *b, *c; - lzma_index_iter r; + lzma_index *first = lzma_index_init(NULL); + assert_true(first != NULL); - // Empty Indexes - a = create_empty(); - b = create_empty(); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_block_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); - lzma_index_iter_init(&r, a); - expect(lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)); + lzma_index_iter iter; + lzma_index_iter_init(&iter, first); - b = create_empty(); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_block_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 3 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); + // Append 3 Blocks and iterate over each. This is to test + // the LZMA_INDEX_ITER_BLOCK mode. + for (uint32_t i = 0; i < 3; i++) { + assert_lzma_ret(lzma_index_append(first, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_BLOCK)); + assert_uint_eq(iter.block.number_in_file, i + 1); + } - b = create_empty(); - c = create_empty(); - expect(lzma_index_stream_padding(b, 4) == LZMA_OK); - expect(lzma_index_cat(b, c, NULL) == LZMA_OK); - expect(lzma_index_block_count(b) == 0); - expect(lzma_index_stream_size(b) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(b) - == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4); + // Rewind back to the begining and iterate over the Blocks again + lzma_index_iter_rewind(&iter); - expect(lzma_index_stream_padding(a, 8) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_block_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 5 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4 + 8); + // Should be able to re-iterate over the Blocks again. + for (uint32_t i = 0; i < 3; i++) { + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_BLOCK)); + assert_uint_eq(iter.block.number_in_file, i + 1); + } - expect(lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)); - lzma_index_iter_rewind(&r); - expect(lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)); - lzma_index_end(a, NULL); + // Next concatenate two more lzma_indexes, iterate over them, + // rewind, and iterate over them again. This is to test + // the LZMA_INDEX_ITER_STREAM mode. + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); - // Small Indexes - a = create_small(); - lzma_vli stream_size = lzma_index_stream_size(a); - lzma_index_iter_init(&r, a); - for (int i = SMALL_COUNT; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + lzma_index *third = lzma_index_init(NULL); + assert_true(third != NULL); - b = create_small(); - expect(lzma_index_stream_padding(a, 4) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 2 + 4); - expect(lzma_index_stream_size(a) > stream_size); - expect(lzma_index_stream_size(a) < stream_size * 2); - for (int i = SMALL_COUNT; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + assert_lzma_ret(lzma_index_cat(first, second, NULL), LZMA_OK); + assert_lzma_ret(lzma_index_cat(first, third, NULL), LZMA_OK); - lzma_index_iter_rewind(&r); - for (int i = SMALL_COUNT * 2; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_STREAM)); + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_STREAM)); - b = create_small(); - c = create_small(); - expect(lzma_index_stream_padding(b, 8) == LZMA_OK); - expect(lzma_index_cat(b, c, NULL) == LZMA_OK); - expect(lzma_index_stream_padding(a, 12) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); + assert_uint_eq(iter.stream.number, 3); - expect(lzma_index_block_count(a) == SMALL_COUNT * 4); - for (int i = SMALL_COUNT * 2; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + lzma_index_iter_rewind(&iter); - lzma_index_iter_rewind(&r); - for (int i = SMALL_COUNT * 4; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + for (uint32_t i = 0; i < 3; i++) { + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_STREAM)); + assert_uint_eq(iter.stream.number, i + 1); + } - lzma_index_end(a, NULL); + lzma_index_end(first, NULL); +} - // Mix of empty and small - a = create_empty(); - b = create_small(); - expect(lzma_index_stream_padding(a, 4) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - lzma_index_iter_init(&r, a); - for (int i = SMALL_COUNT; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); - lzma_index_end(a, NULL); +static void +test_lzma_index_iter_next(void) +{ + lzma_index *first = lzma_index_init(NULL); + assert_true(first != NULL); - // Big Indexes - a = create_big(); - stream_size = lzma_index_stream_size(a); - b = create_big(); - expect(lzma_index_stream_padding(a, 4) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 2 + 4); - expect(lzma_index_stream_size(a) > stream_size); - expect(lzma_index_stream_size(a) < stream_size * 2); + lzma_index_iter iter; + lzma_index_iter_init(&iter, first); - b = create_big(); - c = create_big(); - expect(lzma_index_stream_padding(b, 8) == LZMA_OK); - expect(lzma_index_cat(b, c, NULL) == LZMA_OK); - expect(lzma_index_stream_padding(a, 12) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); + // First test bad mode values + for (uint32_t i = LZMA_INDEX_ITER_NONEMPTY_BLOCK + 1; i < 100; i++) + assert_true(lzma_index_iter_next(&iter, i)); - lzma_index_iter_init(&r, a); - for (int i = BIG_COUNT * 4; i >= 0; --i) - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK) - ^ (i == 0)); + // Test iterating over Blocks + assert_lzma_ret(lzma_index_append(first, NULL, + UNPADDED_SIZE_MIN, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(first, NULL, + UNPADDED_SIZE_MIN * 2, 10), LZMA_OK); + assert_lzma_ret(lzma_index_append(first, NULL, + UNPADDED_SIZE_MIN * 3, 100), LZMA_OK); - lzma_index_end(a, NULL); + // For Blocks, need to verify: + // - number_in_file (overall Block number) + // - compressed_file_offset + // - uncompressed_file_offset + // - number_in_stream (Block number relative to current Stream) + // - compressed_stream_offset + // - uncompressed_stream_offset + // - uncompressed_size + // - unpadded_size + // - total_size + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + // Verify Block data stored correctly + assert_uint_eq(iter.block.number_in_file, 1); + + // Should start right after the Stream Header + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); + assert_uint_eq(iter.block.number_in_stream, 1); + assert_uint_eq(iter.block.compressed_stream_offset, + LZMA_STREAM_HEADER_SIZE); + assert_uint_eq(iter.block.uncompressed_stream_offset, 0); + assert_uint_eq(iter.block.unpadded_size, UNPADDED_SIZE_MIN); + assert_uint_eq(iter.block.total_size, vli_ceil4(UNPADDED_SIZE_MIN)); + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + // Verify Block data stored correctly + assert_uint_eq(iter.block.number_in_file, 2); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + + vli_ceil4(UNPADDED_SIZE_MIN)); + assert_uint_eq(iter.block.uncompressed_file_offset, 1); + assert_uint_eq(iter.block.number_in_stream, 2); + assert_uint_eq(iter.block.compressed_stream_offset, + LZMA_STREAM_HEADER_SIZE + + vli_ceil4(UNPADDED_SIZE_MIN)); + assert_uint_eq(iter.block.uncompressed_stream_offset, 1); + assert_uint_eq(iter.block.unpadded_size, UNPADDED_SIZE_MIN * 2); + assert_uint_eq(iter.block.total_size, vli_ceil4(UNPADDED_SIZE_MIN * 2)); + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + // Verify Block data stored correctly + assert_uint_eq(iter.block.number_in_file, 3); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + + vli_ceil4(UNPADDED_SIZE_MIN) + + vli_ceil4(UNPADDED_SIZE_MIN * 2)); + assert_uint_eq(iter.block.uncompressed_file_offset, 11); + assert_uint_eq(iter.block.number_in_stream, 3); + assert_uint_eq(iter.block.compressed_stream_offset, + LZMA_STREAM_HEADER_SIZE + + vli_ceil4(UNPADDED_SIZE_MIN) + + vli_ceil4(UNPADDED_SIZE_MIN * 2)); + assert_uint_eq(iter.block.uncompressed_stream_offset, 11); + assert_uint_eq(iter.block.unpadded_size, UNPADDED_SIZE_MIN * 3); + assert_uint_eq(iter.block.total_size, + vli_ceil4(UNPADDED_SIZE_MIN * 3)); + + // Only three Blocks were added, so this should return true + assert_true(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + const lzma_vli second_stream_compressed_start = + LZMA_STREAM_HEADER_SIZE * 2 + + vli_ceil4(UNPADDED_SIZE_MIN) + + vli_ceil4(UNPADDED_SIZE_MIN * 2) + + vli_ceil4(UNPADDED_SIZE_MIN * 3) + + lzma_index_size(first); + const lzma_vli second_stream_uncompressed_start = 1 + 10 + 100; + + // Test iterating over Streams. + // The second Stream will have 0 Blocks + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + // Set Stream Flags for Stream 2 + lzma_stream_flags flags = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = LZMA_CHECK_CRC32 + }; + + assert_lzma_ret(lzma_index_stream_flags(second, &flags), LZMA_OK); + + // The Second stream will have 8 bytes of Stream Padding + assert_lzma_ret(lzma_index_stream_padding(second, 8), LZMA_OK); + + const lzma_vli second_stream_index_size = lzma_index_size(second); + + // The third Stream will have 2 Blocks + lzma_index *third = lzma_index_init(NULL); + assert_true(third != NULL); + + assert_lzma_ret(lzma_index_append(third, NULL, 32, 20), LZMA_OK); + assert_lzma_ret(lzma_index_append(third, NULL, 64, 40), LZMA_OK); + + const lzma_vli third_stream_index_size = lzma_index_size(third); + + assert_lzma_ret(lzma_index_cat(first, second, NULL), LZMA_OK); + assert_lzma_ret(lzma_index_cat(first, third, NULL), LZMA_OK); + + // For Streams, need to verify: + // - flags (Stream Flags) + // - number (Stream count) + // - block_count + // - compressed_offset + // - uncompressed_offset + // - compressed_size + // - uncompressed_size + // - padding (Stream Padding) + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + + // Verify Stream + assert_uint_eq(iter.stream.flags->backward_size, + LZMA_BACKWARD_SIZE_MIN); + assert_uint_eq(iter.stream.flags->check, LZMA_CHECK_CRC32); + assert_uint_eq(iter.stream.number, 2); + assert_uint_eq(iter.stream.block_count, 0); + assert_uint_eq(iter.stream.compressed_offset, + second_stream_compressed_start); + assert_uint_eq(iter.stream.uncompressed_offset, + second_stream_uncompressed_start); + assert_uint_eq(iter.stream.compressed_size, + LZMA_STREAM_HEADER_SIZE * 2 + + second_stream_index_size); + assert_uint_eq(iter.stream.uncompressed_size, 0); + assert_uint_eq(iter.stream.padding, 8); + + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + + // Verify Stream + const lzma_vli third_stream_compressed_start = + second_stream_compressed_start + + LZMA_STREAM_HEADER_SIZE * 2 + + 8 + // Stream padding + second_stream_index_size; + const lzma_vli third_stream_uncompressed_start = + second_stream_uncompressed_start; + + assert_uint_eq(iter.stream.number, 3); + assert_uint_eq(iter.stream.block_count, 2); + assert_uint_eq(iter.stream.compressed_offset, + third_stream_compressed_start); + assert_uint_eq(iter.stream.uncompressed_offset, + third_stream_uncompressed_start); + assert_uint_eq(iter.stream.compressed_size, + LZMA_STREAM_HEADER_SIZE * 2 + + 96 + // Total compressed size + third_stream_index_size); + assert_uint_eq(iter.stream.uncompressed_size, 60); + assert_uint_eq(iter.stream.padding, 0); + + assert_true(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_STREAM)); + + // Even after a failing call to next with ITER_STREAM mode, + // should still be able to iterate over the 2 Blocks in + // Stream 3. + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + // Verify both Blocks + + // Next call to iterate Block should return true because the + // first Block can already be read from the LZMA_INDEX_ITER_STREAM + // call. + assert_true(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + + // Rewind to test LZMA_INDEX_ITER_ANY + lzma_index_iter_rewind(&iter); + + // Iterate past the first three Blocks + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + + // Iterate past the next Stream + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + + // Iterate past the next Stream + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + + // Last call should fail + assert_true(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + + // Rewind to test LZMA_INDEX_ITER_NONEMPTY_BLOCK + lzma_index_iter_rewind(&iter); + + // Iterate past the first three Blocks + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_NONEMPTY_BLOCK)); + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_NONEMPTY_BLOCK)); + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_NONEMPTY_BLOCK)); + + // Skip past the next Stream which has no Blocks. + // We will get to the first Block of the third Stream. + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_NONEMPTY_BLOCK)); + + // Iterate past the second (the last) Block in the third Stream + assert_false(lzma_index_iter_next(&iter, + LZMA_INDEX_ITER_NONEMPTY_BLOCK)); + + // Last call should fail since there is nothing left to iterate over. + assert_true(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)); + + lzma_index_end(first, NULL); } static void -test_locate(void) +test_lzma_index_iter_locate(void) { - lzma_index *i = lzma_index_init(NULL); - expect(i != NULL); - lzma_index_iter r; - lzma_index_iter_init(&r, i); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + lzma_index_iter iter; + lzma_index_iter_init(&iter, idx); + // Cannot locate anything from an empty Index. - expect(lzma_index_iter_locate(&r, 0)); - expect(lzma_index_iter_locate(&r, 555)); + assert_true(lzma_index_iter_locate(&iter, 0)); + assert_true(lzma_index_iter_locate(&iter, 555)); // One empty Record: nothing is found since there's no uncompressed // data. - expect(lzma_index_append(i, NULL, 16, 0) == LZMA_OK); - expect(lzma_index_iter_locate(&r, 0)); + assert_lzma_ret(lzma_index_append(idx, NULL, 16, 0), LZMA_OK); + assert_true(lzma_index_iter_locate(&iter, 0)); // Non-empty Record and we can find something. - expect(lzma_index_append(i, NULL, 32, 5) == LZMA_OK); - expect(!lzma_index_iter_locate(&r, 0)); - expect(r.block.total_size == 32); - expect(r.block.uncompressed_size == 5); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.block.uncompressed_file_offset == 0); + assert_lzma_ret(lzma_index_append(idx, NULL, 32, 5), LZMA_OK); + assert_false(lzma_index_iter_locate(&iter, 0)); + assert_uint_eq(iter.block.total_size, 32); + assert_uint_eq(iter.block.uncompressed_size, 5); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); // Still cannot find anything past the end. - expect(lzma_index_iter_locate(&r, 5)); + assert_true(lzma_index_iter_locate(&iter, 5)); // Add the third Record. - expect(lzma_index_append(i, NULL, 40, 11) == LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 40, 11), LZMA_OK); - expect(!lzma_index_iter_locate(&r, 0)); - expect(r.block.total_size == 32); - expect(r.block.uncompressed_size == 5); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.block.uncompressed_file_offset == 0); + assert_false(lzma_index_iter_locate(&iter, 0)); + assert_uint_eq(iter.block.total_size, 32); + assert_uint_eq(iter.block.uncompressed_size, 5); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); - expect(!lzma_index_iter_next(&r, LZMA_INDEX_ITER_BLOCK)); - expect(r.block.total_size == 40); - expect(r.block.uncompressed_size == 11); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.block.uncompressed_file_offset == 5); + assert_false(lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)); + assert_uint_eq(iter.block.total_size, 40); + assert_uint_eq(iter.block.uncompressed_size, 11); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16 + 32); + assert_uint_eq(iter.block.uncompressed_file_offset, 5); - expect(!lzma_index_iter_locate(&r, 2)); - expect(r.block.total_size == 32); - expect(r.block.uncompressed_size == 5); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.block.uncompressed_file_offset == 0); + assert_false(lzma_index_iter_locate(&iter, 2)); + assert_uint_eq(iter.block.total_size, 32); + assert_uint_eq(iter.block.uncompressed_size, 5); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); - expect(!lzma_index_iter_locate(&r, 5)); - expect(r.block.total_size == 40); - expect(r.block.uncompressed_size == 11); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.block.uncompressed_file_offset == 5); + assert_false(lzma_index_iter_locate(&iter, 5)); + assert_uint_eq(iter.block.total_size, 40); + assert_uint_eq(iter.block.uncompressed_size, 11); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16 + 32); + assert_uint_eq(iter.block.uncompressed_file_offset, 5); - expect(!lzma_index_iter_locate(&r, 5 + 11 - 1)); - expect(r.block.total_size == 40); - expect(r.block.uncompressed_size == 11); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.block.uncompressed_file_offset == 5); + assert_false(lzma_index_iter_locate(&iter, 5 + 11 - 1)); + assert_uint_eq(iter.block.total_size, 40); + assert_uint_eq(iter.block.uncompressed_size, 11); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 16 + 32); + assert_uint_eq(iter.block.uncompressed_file_offset, 5); - expect(lzma_index_iter_locate(&r, 5 + 11)); - expect(lzma_index_iter_locate(&r, 5 + 15)); + assert_true(lzma_index_iter_locate(&iter, 5 + 11)); + assert_true(lzma_index_iter_locate(&iter, 5 + 15)); // Large Index - lzma_index_end(i, NULL); - i = lzma_index_init(NULL); - expect(i != NULL); - lzma_index_iter_init(&r, i); + lzma_index_end(idx, NULL); + idx = lzma_index_init(NULL); + assert_true(idx != NULL); + lzma_index_iter_init(&iter, idx); - for (size_t n = 4; n <= 4 * 5555; n += 4) - expect(lzma_index_append(i, NULL, n + 8, n) == LZMA_OK); + for (uint32_t n = 4; n <= 4 * 5555; n += 4) + assert_lzma_ret(lzma_index_append(idx, NULL, n + 8, n), + LZMA_OK); - expect(lzma_index_block_count(i) == 5555); + assert_uint_eq(lzma_index_block_count(idx), 5555); // First Record - expect(!lzma_index_iter_locate(&r, 0)); - expect(r.block.total_size == 4 + 8); - expect(r.block.uncompressed_size == 4); - expect(r.block.compressed_file_offset == LZMA_STREAM_HEADER_SIZE); - expect(r.block.uncompressed_file_offset == 0); + assert_false(lzma_index_iter_locate(&iter, 0)); + assert_uint_eq(iter.block.total_size, 4 + 8); + assert_uint_eq(iter.block.uncompressed_size, 4); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); - expect(!lzma_index_iter_locate(&r, 3)); - expect(r.block.total_size == 4 + 8); - expect(r.block.uncompressed_size == 4); - expect(r.block.compressed_file_offset == LZMA_STREAM_HEADER_SIZE); - expect(r.block.uncompressed_file_offset == 0); + assert_false(lzma_index_iter_locate(&iter, 3)); + assert_uint_eq(iter.block.total_size, 4 + 8); + assert_uint_eq(iter.block.uncompressed_size, 4); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); // Second Record - expect(!lzma_index_iter_locate(&r, 4)); - expect(r.block.total_size == 2 * 4 + 8); - expect(r.block.uncompressed_size == 2 * 4); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + 4 + 8); - expect(r.block.uncompressed_file_offset == 4); + assert_false(lzma_index_iter_locate(&iter, 4)); + assert_uint_eq(iter.block.total_size, 2 * 4 + 8); + assert_uint_eq(iter.block.uncompressed_size, 2 * 4); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + 4 + 8); + assert_uint_eq(iter.block.uncompressed_file_offset, 4); // Last Record - expect(!lzma_index_iter_locate( - &r, lzma_index_uncompressed_size(i) - 1)); - expect(r.block.total_size == 4 * 5555 + 8); - expect(r.block.uncompressed_size == 4 * 5555); - expect(r.block.compressed_file_offset == lzma_index_total_size(i) + assert_false(lzma_index_iter_locate( + &iter, lzma_index_uncompressed_size(idx) - 1)); + assert_uint_eq(iter.block.total_size, 4 * 5555 + 8); + assert_uint_eq(iter.block.uncompressed_size, 4 * 5555); + assert_uint_eq(iter.block.compressed_file_offset, + lzma_index_total_size(idx) + LZMA_STREAM_HEADER_SIZE - 4 * 5555 - 8); - expect(r.block.uncompressed_file_offset - == lzma_index_uncompressed_size(i) - 4 * 5555); + assert_uint_eq(iter.block.uncompressed_file_offset, + lzma_index_uncompressed_size(idx) - 4 * 5555); // Allocation chunk boundaries. See INDEX_GROUP_SIZE in // liblzma/common/index.c. - const size_t group_multiple = 256 * 4; - const size_t radius = 8; - const size_t start = group_multiple - radius; + const uint32_t group_multiple = 256 * 4; + const uint32_t radius = 8; + const uint32_t start = group_multiple - radius; lzma_vli ubase = 0; lzma_vli tbase = 0; - size_t n; + uint32_t n; for (n = 1; n < start; ++n) { ubase += n * 4; tbase += n * 4 + 8; } while (n < start + 2 * radius) { - expect(!lzma_index_iter_locate(&r, ubase + n * 4)); + assert_false(lzma_index_iter_locate(&iter, ubase + n * 4)); - expect(r.block.compressed_file_offset == tbase + n * 4 + 8 + assert_uint_eq(iter.block.compressed_file_offset, + tbase + n * 4 + 8 + LZMA_STREAM_HEADER_SIZE); - expect(r.block.uncompressed_file_offset == ubase + n * 4); + assert_uint_eq(iter.block.uncompressed_file_offset, + ubase + n * 4); tbase += n * 4 + 8; ubase += n * 4; ++n; - expect(r.block.total_size == n * 4 + 8); - expect(r.block.uncompressed_size == n * 4); + assert_uint_eq(iter.block.total_size, n * 4 + 8); + assert_uint_eq(iter.block.uncompressed_size, n * 4); } // Do it also backwards. while (n > start) { - expect(!lzma_index_iter_locate(&r, ubase + (n - 1) * 4)); + assert_false(lzma_index_iter_locate( + &iter, ubase + (n - 1) * 4)); - expect(r.block.total_size == n * 4 + 8); - expect(r.block.uncompressed_size == n * 4); + assert_uint_eq(iter.block.total_size, n * 4 + 8); + assert_uint_eq(iter.block.uncompressed_size, n * 4); --n; tbase -= n * 4 + 8; ubase -= n * 4; - expect(r.block.compressed_file_offset == tbase + n * 4 + 8 + assert_uint_eq(iter.block.compressed_file_offset, + tbase + n * 4 + 8 + LZMA_STREAM_HEADER_SIZE); - expect(r.block.uncompressed_file_offset == ubase + n * 4); + assert_uint_eq(iter.block.uncompressed_file_offset, + ubase + n * 4); } // Test locating in concatenated Index. - lzma_index_end(i, NULL); - i = lzma_index_init(NULL); - expect(i != NULL); - lzma_index_iter_init(&r, i); + lzma_index_end(idx, NULL); + idx = lzma_index_init(NULL); + assert_true(idx != NULL); + lzma_index_iter_init(&iter, idx); for (n = 0; n < group_multiple; ++n) - expect(lzma_index_append(i, NULL, 8, 0) == LZMA_OK); - expect(lzma_index_append(i, NULL, 16, 1) == LZMA_OK); - expect(!lzma_index_iter_locate(&r, 0)); - expect(r.block.total_size == 16); - expect(r.block.uncompressed_size == 1); - expect(r.block.compressed_file_offset - == LZMA_STREAM_HEADER_SIZE + group_multiple * 8); - expect(r.block.uncompressed_file_offset == 0); + assert_lzma_ret(lzma_index_append(idx, NULL, 8, 0), + LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, 16, 1), LZMA_OK); + assert_false(lzma_index_iter_locate(&iter, 0)); + assert_uint_eq(iter.block.total_size, 16); + assert_uint_eq(iter.block.uncompressed_size, 1); + assert_uint_eq(iter.block.compressed_file_offset, + LZMA_STREAM_HEADER_SIZE + group_multiple * 8); + assert_uint_eq(iter.block.uncompressed_file_offset, 0); - lzma_index_end(i, NULL); + lzma_index_end(idx, NULL); } static void -test_corrupt(void) +test_lzma_index_cat(void) { - const size_t alloc_size = 128 * 1024; - uint8_t *buf = malloc(alloc_size); - expect(buf != NULL); - lzma_stream strm = LZMA_STREAM_INIT; + // Most complex tests for this function are done in other tests. + // This will mostly test basic functionality. - lzma_index *i = create_empty(); - expect(lzma_index_append(i, NULL, 0, 1) == LZMA_PROG_ERROR); - lzma_index_end(i, NULL); + lzma_index *dest = lzma_index_init(NULL); + assert_true(dest != NULL); - // Create a valid Index and corrupt it in different ways. - i = create_small(); - expect(lzma_index_encoder(&strm, i) == LZMA_OK); - succeed(coder_loop(&strm, NULL, 0, buf, 20, - LZMA_STREAM_END, LZMA_RUN)); - lzma_index_end(i, NULL); + lzma_index *src = lzma_index_init(NULL); + assert_true(src != NULL); - // Wrong Index Indicator - buf[0] ^= 1; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 1, LZMA_DATA_ERROR)); - buf[0] ^= 1; + // First test NULL dest or src + assert_lzma_ret(lzma_index_cat(NULL, NULL, NULL), LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_cat(dest, NULL, NULL), LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_cat(NULL, src, NULL), LZMA_PROG_ERROR); - // Wrong Number of Records and thus CRC32 fails. - --buf[1]; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 10, LZMA_DATA_ERROR)); - ++buf[1]; + // Check for uncompressed size overflow + assert_lzma_ret(lzma_index_append(dest, NULL, + (UNPADDED_SIZE_MAX / 2) + 1, 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(src, NULL, + (UNPADDED_SIZE_MAX / 2) + 1, 1), LZMA_OK); + assert_lzma_ret(lzma_index_cat(dest, src, NULL), LZMA_DATA_ERROR); - // Padding not NULs - buf[15] ^= 1; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 16, LZMA_DATA_ERROR)); + // Check for compressed size overflow + dest = lzma_index_init(NULL); + assert_true(dest != NULL); - lzma_end(&strm); - free(buf); + src = lzma_index_init(NULL); + assert_true(src != NULL); + + assert_lzma_ret(lzma_index_append(dest, NULL, + UNPADDED_SIZE_MIN, LZMA_VLI_MAX - 1), LZMA_OK); + assert_lzma_ret(lzma_index_append(src, NULL, + UNPADDED_SIZE_MIN, LZMA_VLI_MAX - 1), LZMA_OK); + assert_lzma_ret(lzma_index_cat(dest, src, NULL), LZMA_DATA_ERROR); + + lzma_index_end(dest, NULL); + lzma_index_end(src, NULL); } +// Helper function for test_lzma_index_dup(). +static bool +index_is_equal(const lzma_index *a, const lzma_index *b) +{ + // Compare only the Stream and Block sizes and offsets. + lzma_index_iter ra, rb; + lzma_index_iter_init(&ra, a); + lzma_index_iter_init(&rb, b); + + while (true) { + bool reta = lzma_index_iter_next(&ra, LZMA_INDEX_ITER_ANY); + bool retb = lzma_index_iter_next(&rb, LZMA_INDEX_ITER_ANY); + + // If both iterators finish at the same time, then the Indexes + // are identical. + if (reta) + return retb; + + if (ra.stream.number != rb.stream.number + || ra.stream.block_count + != rb.stream.block_count + || ra.stream.compressed_offset + != rb.stream.compressed_offset + || ra.stream.uncompressed_offset + != rb.stream.uncompressed_offset + || ra.stream.compressed_size + != rb.stream.compressed_size + || ra.stream.uncompressed_size + != rb.stream.uncompressed_size + || ra.stream.padding + != rb.stream.padding) + return false; + + if (ra.stream.block_count == 0) + continue; + + if (ra.block.number_in_file != rb.block.number_in_file + || ra.block.compressed_file_offset + != rb.block.compressed_file_offset + || ra.block.uncompressed_file_offset + != rb.block.uncompressed_file_offset + || ra.block.number_in_stream + != rb.block.number_in_stream + || ra.block.compressed_stream_offset + != rb.block.compressed_stream_offset + || ra.block.uncompressed_stream_offset + != rb.block.uncompressed_stream_offset + || ra.block.uncompressed_size + != rb.block.uncompressed_size + || ra.block.unpadded_size + != rb.block.unpadded_size + || ra.block.total_size + != rb.block.total_size) + return false; + } +} + + // Allocator that succeeds for the first two allocation but fails the rest. static void * my_alloc(void *opaque, size_t a, size_t b) @@ -643,47 +1245,440 @@ return malloc(a * b); } -static const lzma_allocator my_allocator = { &my_alloc, NULL, NULL }; +static const lzma_allocator test_index_dup_alloc = { &my_alloc, NULL, NULL }; -int -main(void) +static void +test_lzma_index_dup(void) { - test_equal(); + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); - test_overflow(); + // Test for the bug fix 21515d79d778b8730a434f151b07202d52a04611: + // liblzma: Fix lzma_index_dup() for empty Streams. + assert_lzma_ret(lzma_index_stream_padding(idx, 4), LZMA_OK); + lzma_index *copy = lzma_index_dup(idx, NULL); + assert_true(copy != NULL); + assert_true(index_is_equal(idx, copy)); + lzma_index_end(copy, NULL); - lzma_index *i = create_empty(); - test_many(i); - lzma_index_end(i, NULL); + // Test for the bug fix 3bf857edfef51374f6f3fffae3d817f57d3264a0: + // liblzma: Fix a memory leak in error path of lzma_index_dup(). + // Use Valgrind to see that there are no leaks. + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 10), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 2, 100), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 3, 1000), LZMA_OK); - i = create_small(); - test_many(i); - lzma_index_end(i, NULL); + assert_true(lzma_index_dup(idx, &test_index_dup_alloc) == NULL); - i = create_big(); - test_many(i); - lzma_index_end(i, NULL); + // Test a few streams and blocks + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); - test_cat(); + assert_lzma_ret(lzma_index_stream_padding(second, 16), LZMA_OK); - test_locate(); + lzma_index *third = lzma_index_init(NULL); + assert_true(third != NULL); - test_corrupt(); + assert_lzma_ret(lzma_index_append(third, NULL, + UNPADDED_SIZE_MIN * 10, 40), LZMA_OK); + assert_lzma_ret(lzma_index_append(third, NULL, + UNPADDED_SIZE_MIN * 20, 400), LZMA_OK); + assert_lzma_ret(lzma_index_append(third, NULL, + UNPADDED_SIZE_MIN * 30, 4000), LZMA_OK); - // Test for the bug fix 21515d79d778b8730a434f151b07202d52a04611: - // liblzma: Fix lzma_index_dup() for empty Streams. - i = create_empty(); - expect(lzma_index_stream_padding(i, 4) == LZMA_OK); - test_copy(i); - lzma_index_end(i, NULL); + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + assert_lzma_ret(lzma_index_cat(idx, third, NULL), LZMA_OK); - // Test for the bug fix 3bf857edfef51374f6f3fffae3d817f57d3264a0: - // liblzma: Fix a memory leak in error path of lzma_index_dup(). - // Use Valgrind to see that there are no leaks. - i = create_small(); - expect(lzma_index_dup(i, &my_allocator) == NULL); - lzma_index_end(i, NULL); + copy = lzma_index_dup(idx, NULL); + assert_true(copy != NULL); + assert_true(index_is_equal(idx, copy)); - return 0; + lzma_index_end(idx, NULL); +} + +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) +static void +verify_index_buffer(const lzma_index *idx, const uint8_t *buffer, + const size_t buffer_size) +{ + lzma_index_iter iter; + lzma_index_iter_init(&iter, idx); + + size_t buffer_pos = 0; + + // Verify Index Indicator + assert_uint_eq(buffer[buffer_pos++], 0); + + // Get Number of Records + lzma_vli number_of_records = 0; + lzma_vli block_count = 0; + assert_lzma_ret(lzma_vli_decode(&number_of_records, NULL, buffer, + &buffer_pos, buffer_size), LZMA_OK); + + while (!lzma_index_iter_next(&iter, LZMA_INDEX_ITER_ANY)) { + // Verify each Record (Unpadded Size, then Uncompressed Size). + // Verify Unpadded Size. + lzma_vli unpadded_size, uncompressed_size; + assert_lzma_ret(lzma_vli_decode(&unpadded_size, + NULL, buffer, &buffer_pos, + buffer_size), LZMA_OK); + assert_uint_eq(unpadded_size, + iter.block.unpadded_size); + + // Verify Uncompressed Size + assert_lzma_ret(lzma_vli_decode(&uncompressed_size, + NULL, buffer, &buffer_pos, + buffer_size), LZMA_OK); + assert_uint_eq(uncompressed_size, + iter.block.uncompressed_size); + + block_count++; + } + + // Verify Number of Records + assert_uint_eq(number_of_records, block_count); + + // Verify Index Padding + for (; buffer_pos % 4 != 0; buffer_pos++) + assert_uint_eq(buffer[buffer_pos], 0); + + // Verify CRC32 + uint32_t crc32 = lzma_crc32(buffer, buffer_pos, 0); + assert_uint_eq(read32le(buffer + buffer_pos), crc32); +} + + +// In a few places the Index size is needed as a size_t but lzma_index_size() +// returns lzma_vli. +static size_t +get_index_size(const lzma_index *idx) +{ + const lzma_vli size = lzma_index_size(idx); + assert_uint(size, <, SIZE_MAX); + return (size_t)size; +} +#endif + + +static void +test_lzma_index_encoder(void) +{ +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + lzma_stream strm = LZMA_STREAM_INIT; + + // First do basic NULL checks + assert_lzma_ret(lzma_index_encoder(NULL, NULL), LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_encoder(&strm, NULL), LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_encoder(NULL, idx), LZMA_PROG_ERROR); + + // Append three small Blocks + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 10), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 2, 100), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 3, 1000), LZMA_OK); + + // Encode this lzma_index into a buffer + size_t buffer_size = get_index_size(idx); + uint8_t *buffer = tuktest_malloc(buffer_size); + + assert_lzma_ret(lzma_index_encoder(&strm, idx), LZMA_OK); + + strm.avail_out = buffer_size; + strm.next_out = buffer; + + assert_lzma_ret(lzma_code(&strm, LZMA_FINISH), LZMA_STREAM_END); + assert_uint_eq(strm.avail_out, 0); + + lzma_end(&strm); + + verify_index_buffer(idx, buffer, buffer_size); + + // Test with multiple Streams concatenated into 1 Index + lzma_index *second = lzma_index_init(NULL); + assert_true(second != NULL); + + // Include 1 Block + assert_lzma_ret(lzma_index_append(second, NULL, + UNPADDED_SIZE_MIN * 4, 20), LZMA_OK); + + // Include Stream Padding + assert_lzma_ret(lzma_index_stream_padding(second, 16), LZMA_OK); + + assert_lzma_ret(lzma_index_cat(idx, second, NULL), LZMA_OK); + buffer_size = get_index_size(idx); + buffer = tuktest_malloc(buffer_size); + assert_lzma_ret(lzma_index_encoder(&strm, idx), LZMA_OK); + + strm.avail_out = buffer_size; + strm.next_out = buffer; + + assert_lzma_ret(lzma_code(&strm, LZMA_FINISH), LZMA_STREAM_END); + assert_uint_eq(strm.avail_out, 0); + + verify_index_buffer(idx, buffer, buffer_size); + + lzma_end(&strm); +#endif +} + +static void +generate_index_decode_buffer(void) +{ +#ifdef HAVE_ENCODERS + decode_test_index = lzma_index_init(NULL); + if (decode_test_index == NULL) + return; + + // Add 4 Blocks + for (uint32_t i = 1; i < 5; i++) + if (lzma_index_append(decode_test_index, NULL, + 0x1000 * i, 0x100 * i) != LZMA_OK) + return; + + size_t size = lzma_index_size(decode_test_index); + decode_buffer = tuktest_malloc(size); + + if (lzma_index_buffer_encode(decode_test_index, + decode_buffer, &decode_buffer_size, size) != LZMA_OK) + decode_buffer_size = 0; +#endif +} + + +#ifdef HAVE_DECODERS +static void +decode_index(const uint8_t *buffer, const size_t size, lzma_stream *strm, + lzma_ret expected_error) +{ + strm->avail_in = size; + strm->next_in = buffer; + assert_lzma_ret(lzma_code(strm, LZMA_FINISH), expected_error); +} +#endif + + +static void +test_lzma_index_decoder(void) +{ +#ifndef HAVE_DECODERS + assert_skip("Decoder support disabled"); +#else + if (decode_buffer_size == 0) + assert_skip("Could not initialize decode test buffer"); + + lzma_stream strm = LZMA_STREAM_INIT; + + assert_lzma_ret(lzma_index_decoder(NULL, NULL, MEMLIMIT), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_decoder(&strm, NULL, MEMLIMIT), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_decoder(NULL, &decode_test_index, + MEMLIMIT), LZMA_PROG_ERROR); + + // Do actual decode + lzma_index *idx; + assert_lzma_ret(lzma_index_decoder(&strm, &idx, MEMLIMIT), + LZMA_OK); + + decode_index(decode_buffer, decode_buffer_size, &strm, + LZMA_STREAM_END); + + // Compare results with expected + assert_true(index_is_equal(decode_test_index, idx)); + + lzma_index_end(idx, NULL); + + // Test again with too low memory limit + assert_lzma_ret(lzma_index_decoder(&strm, &idx, 0), LZMA_OK); + + decode_index(decode_buffer, decode_buffer_size, &strm, + LZMA_MEMLIMIT_ERROR); + + uint8_t *corrupt_buffer = tuktest_malloc(decode_buffer_size); + memcpy(corrupt_buffer, decode_buffer, decode_buffer_size); + + assert_lzma_ret(lzma_index_decoder(&strm, &idx, MEMLIMIT), + LZMA_OK); + + // First corrupt the Index Indicator + corrupt_buffer[0] ^= 1; + decode_index(corrupt_buffer, decode_buffer_size, &strm, + LZMA_DATA_ERROR); + corrupt_buffer[0] ^= 1; + + // Corrupt something in the middle of Index + corrupt_buffer[decode_buffer_size / 2] ^= 1; + assert_lzma_ret(lzma_index_decoder(&strm, &idx, MEMLIMIT), + LZMA_OK); + decode_index(corrupt_buffer, decode_buffer_size, &strm, + LZMA_DATA_ERROR); + corrupt_buffer[decode_buffer_size / 2] ^= 1; + + // Corrupt CRC32 + corrupt_buffer[decode_buffer_size - 1] ^= 1; + assert_lzma_ret(lzma_index_decoder(&strm, &idx, MEMLIMIT), + LZMA_OK); + decode_index(corrupt_buffer, decode_buffer_size, &strm, + LZMA_DATA_ERROR); + corrupt_buffer[decode_buffer_size - 1] ^= 1; + + // Corrupt Index Padding by setting it to non-zero + corrupt_buffer[decode_buffer_size - 5] ^= 1; + assert_lzma_ret(lzma_index_decoder(&strm, &idx, MEMLIMIT), + LZMA_OK); + decode_index(corrupt_buffer, decode_buffer_size, &strm, + LZMA_DATA_ERROR); + corrupt_buffer[decode_buffer_size - 1] ^= 1; + + lzma_end(&strm); +#endif +} + + +static void +test_lzma_index_buffer_encode(void) +{ +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + // More simple test than test_lzma_index_encoder() because + // currently lzma_index_buffer_encode() is mostly a wrapper + // around lzma_index_encoder() anyway. + lzma_index *idx = lzma_index_init(NULL); + assert_true(idx != NULL); + + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN, 10), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 2, 100), LZMA_OK); + assert_lzma_ret(lzma_index_append(idx, NULL, + UNPADDED_SIZE_MIN * 3, 1000), LZMA_OK); + + size_t buffer_size = get_index_size(idx); + uint8_t *buffer = tuktest_malloc(buffer_size); + size_t out_pos = 1; + + // First test bad arguments + assert_lzma_ret(lzma_index_buffer_encode(NULL, NULL, NULL, 0), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_buffer_encode(idx, NULL, NULL, 0), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_buffer_encode(idx, buffer, NULL, 0), + LZMA_PROG_ERROR); + assert_lzma_ret(lzma_index_buffer_encode(idx, buffer, &out_pos, + 0), LZMA_PROG_ERROR); + out_pos = 0; + assert_lzma_ret(lzma_index_buffer_encode(idx, buffer, &out_pos, + 1), LZMA_BUF_ERROR); + + // Do encoding + assert_lzma_ret(lzma_index_buffer_encode(idx, buffer, &out_pos, + buffer_size), LZMA_OK); + assert_uint_eq(out_pos, buffer_size); + + // Validate results + verify_index_buffer(idx, buffer, buffer_size); +#endif +} + + +static void +test_lzma_index_buffer_decode(void) +{ +#ifndef HAVE_DECODERS + assert_skip("Decoder support disabled"); +#else + if (decode_buffer_size == 0) + assert_skip("Could not initialize decode test buffer"); + + // Simple test since test_lzma_index_decoder() covers most of the + // lzma_index_buffer_decode() code anyway. + + // First test NULL checks + assert_lzma_ret(lzma_index_buffer_decode(NULL, NULL, NULL, NULL, + NULL, 0), LZMA_PROG_ERROR); + + lzma_index *idx; + uint64_t memlimit = MEMLIMIT; + size_t in_pos = 0; + + assert_lzma_ret(lzma_index_buffer_decode(&idx, NULL, NULL, NULL, + NULL, 0), LZMA_PROG_ERROR); + + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + NULL, NULL, 0), LZMA_PROG_ERROR); + + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, NULL, 0), LZMA_PROG_ERROR); + + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, NULL, 0), LZMA_PROG_ERROR); + + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, &in_pos, 0), LZMA_DATA_ERROR); + + in_pos = 1; + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, &in_pos, 0), LZMA_PROG_ERROR); + in_pos = 0; + + // Test expected successful decode + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, &in_pos, decode_buffer_size), LZMA_OK); + + assert_true(index_is_equal(decode_test_index, idx)); + + // Test too small memlimit + in_pos = 0; + memlimit = 1; + assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL, + decode_buffer, &in_pos, decode_buffer_size), + LZMA_MEMLIMIT_ERROR); + assert_uint(memlimit, >, 1); + assert_uint(memlimit, <, MEMLIMIT); +#endif +} + + +extern int +main(int argc, char **argv) +{ + tuktest_start(argc, argv); + generate_index_decode_buffer(); + tuktest_run(test_lzma_index_memusage); + tuktest_run(test_lzma_index_memused); + tuktest_run(test_lzma_index_append); + tuktest_run(test_lzma_index_stream_flags); + tuktest_run(test_lzma_index_checks); + tuktest_run(test_lzma_index_stream_padding); + tuktest_run(test_lzma_index_stream_count); + tuktest_run(test_lzma_index_block_count); + tuktest_run(test_lzma_index_size); + tuktest_run(test_lzma_index_stream_size); + tuktest_run(test_lzma_index_total_size); + tuktest_run(test_lzma_index_file_size); + tuktest_run(test_lzma_index_uncompressed_size); + tuktest_run(test_lzma_index_iter_init); + tuktest_run(test_lzma_index_iter_rewind); + tuktest_run(test_lzma_index_iter_next); + tuktest_run(test_lzma_index_iter_locate); + tuktest_run(test_lzma_index_cat); + tuktest_run(test_lzma_index_dup); + tuktest_run(test_lzma_index_encoder); + tuktest_run(test_lzma_index_decoder); + tuktest_run(test_lzma_index_buffer_encode); + tuktest_run(test_lzma_index_buffer_decode); + lzma_index_end(decode_test_index, NULL); + return tuktest_end(); } Only in xz-5.4.3/tests: test_index_hash.c Only in xz-5.4.3/tests: test_lzip_decoder.c Only in xz-5.4.3/tests: test_memlimit.c diff -ur xz-5.2.5/tests/test_scripts.sh xz-5.4.3/tests/test_scripts.sh --- xz-5.2.5/tests/test_scripts.sh 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_scripts.sh 2023-05-04 17:21:05 @@ -16,10 +16,20 @@ for i in XZ XZDIFF XZGREP; do eval test -x "\$$i" && continue - (exit 77) exit 77 done +# If decompression support is missing, this test is skipped. +# Installing the scripts in this case is a bit silly but they +# could still be used with other decompression tools so configure +# doesn't automatically disable scripts if decoders are disabled. +if grep 'define HAVE_DECODERS' ../config.h > /dev/null ; then + : +else + echo "Decompression support is disabled, skipping this test." + exit 77 +fi + PATH=`pwd`/../src/xz:$PATH export PATH @@ -32,7 +42,6 @@ status=$? if test "$status" != 0 ; then echo "xzdiff with no changes exited with status $status != 0" - (exit 1) exit 1 fi @@ -40,7 +49,6 @@ status=$? if test "$status" != 1 ; then echo "xzdiff with changes exited with status $status != 1" - (exit 1) exit 1 fi @@ -48,7 +56,6 @@ status=$? if test "$status" != 2 ; then echo "xzdiff with missing operand exited with status $status != 2" - (exit 1) exit 1 fi @@ -68,9 +75,7 @@ : else echo "unexpected output from xzgrep" - (exit 1) exit 1 fi -(exit 0) exit 0 diff -ur xz-5.2.5/tests/test_stream_flags.c xz-5.4.3/tests/test_stream_flags.c --- xz-5.2.5/tests/test_stream_flags.c 2020-03-17 17:28:50 +++ xz-5.4.3/tests/test_stream_flags.c 2023-05-04 17:21:05 @@ -3,7 +3,8 @@ /// \file test_stream_flags.c /// \brief Tests Stream Header and Stream Footer coders // -// Author: Lasse Collin +// Authors: Jia Tan +// Lasse Collin // // This file has been put into the public domain. // You can do whatever you want with this file. @@ -13,168 +14,466 @@ #include "tests.h" -static lzma_stream_flags known_flags; -static lzma_stream_flags decoded_flags; -static uint8_t buffer[LZMA_STREAM_HEADER_SIZE]; +// Size of the Stream Flags field +// (taken from src/liblzma/common/stream_flags_common.h) +#define XZ_STREAM_FLAGS_SIZE 2 +#ifdef HAVE_ENCODERS +// Header and footer magic bytes for .xz file format +// (taken from src/liblzma/common/stream_flags_common.c) +static const uint8_t xz_header_magic[6] + = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 }; +static const uint8_t xz_footer_magic[2] = { 0x59, 0x5A }; +#endif -static bool -validate(void) + +#ifdef HAVE_ENCODERS +static void +stream_header_encode_helper(lzma_check check) { - // TODO: This could require the specific error type as an argument. - // We could also test that lzma_stream_flags_compare() gives - // the correct return values in different situations. - return lzma_stream_flags_compare(&known_flags, &decoded_flags) - != LZMA_OK; + lzma_stream_flags flags = { + .version = 0, + .check = check, + }; + + uint8_t header[LZMA_STREAM_HEADER_SIZE]; + + // Encode Stream Header + assert_lzma_ret(lzma_stream_header_encode(&flags, header), LZMA_OK); + + // Stream Header must start with Header Magic Bytes + const uint32_t magic_size = sizeof(xz_header_magic); + assert_array_eq(header, xz_header_magic, magic_size); + + // Next must come Stream Flags + const uint8_t *encoded_stream_flags = header + magic_size; + + // First byte is always null-byte. + // Second byte must have the Check ID in the lowest four bits + // and the highest four bits zero. + const uint8_t expected_stream_flags[] = { 0, check }; + assert_array_eq(encoded_stream_flags, expected_stream_flags, + XZ_STREAM_FLAGS_SIZE); + + // Last part is the CRC32 of the Stream Flags + const uint8_t *crc_ptr = encoded_stream_flags + XZ_STREAM_FLAGS_SIZE; + const uint32_t expected_crc = lzma_crc32(expected_stream_flags, + XZ_STREAM_FLAGS_SIZE, 0); + assert_uint_eq(read32le(crc_ptr), expected_crc); } +#endif -static bool -test_header_decoder(lzma_ret expected_ret) +static void +test_lzma_stream_header_encode(void) { - memcrap(&decoded_flags, sizeof(decoded_flags)); +#ifndef HAVE_ENCODERS + assert_skip("Encoder support disabled"); +#else + for (lzma_check i = 0; i < LZMA_CHECK_ID_MAX; i++) + stream_header_encode_helper(i); - if (lzma_stream_header_decode(&decoded_flags, buffer) != expected_ret) - return true; + lzma_stream_flags flags = { + .version = 0, + .check = LZMA_CHECK_CRC32 + }; - if (expected_ret != LZMA_OK) - return false; + uint8_t header[LZMA_STREAM_HEADER_SIZE]; - // Header doesn't have Backward Size, so make - // lzma_stream_flags_compare() ignore it. - decoded_flags.backward_size = LZMA_VLI_UNKNOWN; - return validate(); + // Should fail if version > 0 + flags.version = 1; + assert_lzma_ret(lzma_stream_header_encode(&flags, header), + LZMA_OPTIONS_ERROR); + flags.version = 0; + + // Should fail if Check ID is invalid + flags.check = INVALID_LZMA_CHECK_ID; + assert_lzma_ret(lzma_stream_header_encode(&flags, header), + LZMA_PROG_ERROR); + flags.check = LZMA_CHECK_CRC32; + + // Should pass even if Backward Size is invalid + // because Stream Header doesn't have that field. + flags.backward_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_stream_header_encode(&flags, header), LZMA_OK); +#endif } +#if defined(HAVE_ENCODERS) static void -test_header(void) +stream_footer_encode_helper(lzma_check check) { - memcrap(buffer, sizeof(buffer)); - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - succeed(test_header_decoder(LZMA_OK)); + lzma_stream_flags flags = { + .version = 0, + .check = check, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + }; + + uint8_t footer[LZMA_STREAM_HEADER_SIZE]; + + // Encode Stream Footer + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), LZMA_OK); + + // Stream Footer must start with CRC32 + const uint32_t crc = read32le(footer); + const uint32_t expected_crc = lzma_crc32(footer + sizeof(uint32_t), + LZMA_STREAM_HEADER_SIZE - (sizeof(uint32_t) + + sizeof(xz_footer_magic)), 0); + assert_uint_eq(crc, expected_crc); + + // Next the Backward Size + const uint32_t backwards_size = read32le(footer + sizeof(uint32_t)); + const uint32_t expected_backwards_size = flags.backward_size / 4 - 1; + assert_uint_eq(backwards_size, expected_backwards_size); + + // Next the Stream Flags + const uint8_t *stream_flags = footer + sizeof(uint32_t) * 2; + + // First byte must be null + assert_uint_eq(stream_flags[0], 0); + + // Second byte must have the Check ID in the lowest four bits + // and the highest four bits zero. + assert_uint_eq(stream_flags[1], check); + + // And ends with Footer Magic Bytes + const uint8_t *expected_footer_magic = stream_flags + + XZ_STREAM_FLAGS_SIZE; + assert_array_eq(expected_footer_magic, xz_footer_magic, + sizeof(xz_footer_magic)); } +#endif -static bool -test_footer_decoder(lzma_ret expected_ret) +static void +test_lzma_stream_footer_encode(void) { - memcrap(&decoded_flags, sizeof(decoded_flags)); +#ifndef HAVE_ENCODERS + assert_skip("Encoder support disabled"); +#else + for (lzma_check i = 0; i < LZMA_CHECK_ID_MAX; i++) + stream_footer_encode_helper(i); - if (lzma_stream_footer_decode(&decoded_flags, buffer) != expected_ret) - return true; + lzma_stream_flags flags = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = LZMA_CHECK_CRC32 + }; - if (expected_ret != LZMA_OK) - return false; + uint8_t footer[LZMA_STREAM_HEADER_SIZE]; - return validate(); + // Should fail if version > 0 + flags.version = 1; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), + LZMA_OPTIONS_ERROR); + flags.version = 0; + + // Should fail if Check ID is invalid + flags.check = INVALID_LZMA_CHECK_ID; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), + LZMA_PROG_ERROR); + + // Should fail if Backward Size is invalid + flags.backward_size -= 1; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), + LZMA_PROG_ERROR); + flags.backward_size += 2; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), + LZMA_PROG_ERROR); + flags.backward_size = LZMA_BACKWARD_SIZE_MAX + 4; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), + LZMA_PROG_ERROR); +#endif } +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) static void -test_footer(void) +stream_header_decode_helper(lzma_check check) { - memcrap(buffer, sizeof(buffer)); - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - succeed(test_footer_decoder(LZMA_OK)); + lzma_stream_flags flags = { + .version = 0, + .check = check + }; + + uint8_t header[LZMA_STREAM_HEADER_SIZE]; + + assert_lzma_ret(lzma_stream_header_encode(&flags, header), LZMA_OK); + + lzma_stream_flags dest_flags; + assert_lzma_ret(lzma_stream_header_decode(&dest_flags, header), + LZMA_OK); + + // Version should be 0 + assert_uint_eq(dest_flags.version, 0); + + // Backward Size should be LZMA_VLI_UNKNOWN + assert_uint_eq(dest_flags.backward_size, LZMA_VLI_UNKNOWN); + + // Check ID must equal the argument given to this function. + assert_uint_eq(dest_flags.check, check); } +#endif static void -test_encode_invalid(void) +test_lzma_stream_header_decode(void) { - known_flags.check = (lzma_check)(LZMA_CHECK_ID_MAX + 1); - known_flags.backward_size = 1024; +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + for (lzma_check i = 0; i < LZMA_CHECK_ID_MAX; i++) + stream_header_decode_helper(i); - expect(lzma_stream_header_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); + lzma_stream_flags flags = { + .version = 0, + .check = LZMA_CHECK_CRC32 + }; - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); + uint8_t header[LZMA_STREAM_HEADER_SIZE]; + lzma_stream_flags dest; - known_flags.check = (lzma_check)(-1); + // First encode known flags to header buffer + assert_lzma_ret(lzma_stream_header_encode(&flags, header), LZMA_OK); - expect(lzma_stream_header_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); + // Should fail if magic bytes do not match + header[0] ^= 1; + assert_lzma_ret(lzma_stream_header_decode(&dest, header), + LZMA_FORMAT_ERROR); + header[0] ^= 1; - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); + // Should fail if a reserved bit is set + uint8_t *stream_flags = header + sizeof(xz_header_magic); + stream_flags[0] = 1; - known_flags.check = LZMA_CHECK_NONE; - known_flags.backward_size = 0; + // Need to adjust CRC32 after making a change since the CRC32 + // is verified before decoding the Stream Flags field. + uint8_t *crc32_ptr = header + sizeof(xz_header_magic) + + XZ_STREAM_FLAGS_SIZE; + const uint32_t crc_orig = read32le(crc32_ptr); + uint32_t new_crc32 = lzma_crc32( + stream_flags, XZ_STREAM_FLAGS_SIZE, 0); + write32le(crc32_ptr, new_crc32); + assert_lzma_ret(lzma_stream_header_decode(&dest, header), + LZMA_OPTIONS_ERROR); + stream_flags[0] = 0; + write32le(crc32_ptr, crc_orig); - // Header encoder ignores backward_size. - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + // Should fail if upper bits of check ID are set + stream_flags[1] |= 0xF0; + new_crc32 = lzma_crc32(stream_flags, XZ_STREAM_FLAGS_SIZE, 0); + write32le(crc32_ptr, new_crc32); + assert_lzma_ret(lzma_stream_header_decode(&dest, header), + LZMA_OPTIONS_ERROR); + stream_flags[1] = flags.check; + write32le(crc32_ptr, crc_orig); - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); + // Should fail if CRC32 does not match. + // First, alter a byte in the Stream Flags. + stream_flags[0] = 1; + assert_lzma_ret(lzma_stream_header_decode(&dest, header), + LZMA_DATA_ERROR); + stream_flags[0] = 0; - known_flags.backward_size = LZMA_VLI_MAX; + // Next, change the CRC32. + *crc32_ptr ^= 1; + assert_lzma_ret(lzma_stream_header_decode(&dest, header), + LZMA_DATA_ERROR); +#endif +} - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) +static void +stream_footer_decode_helper(lzma_check check) +{ + lzma_stream_flags flags = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = check, + }; + + uint8_t footer[LZMA_STREAM_HEADER_SIZE]; + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), LZMA_OK); + + lzma_stream_flags dest_flags; + assert_lzma_ret(lzma_stream_footer_decode(&dest_flags, footer), + LZMA_OK); + + // Version should be 0. + assert_uint_eq(dest_flags.version, 0); + + // Backward Size should equal the value from the flags. + assert_uint_eq(dest_flags.backward_size, flags.backward_size); + + // Check ID must equal argument given to this function. + assert_uint_eq(dest_flags.check, check); } +#endif static void -test_decode_invalid(void) +test_lzma_stream_footer_decode(void) { - known_flags.check = LZMA_CHECK_NONE; - known_flags.backward_size = 1024; +#if !defined(HAVE_ENCODERS) || !defined(HAVE_DECODERS) + assert_skip("Encoder or decoder support disabled"); +#else + for (lzma_check i = 0; i < LZMA_CHECK_ID_MAX; i++) + stream_footer_decode_helper(i); - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + lzma_stream_flags flags = { + .version = 0, + .check = LZMA_CHECK_CRC32, + .backward_size = LZMA_BACKWARD_SIZE_MIN + }; - // Test 1 (invalid Magic Bytes) - buffer[5] ^= 1; - succeed(test_header_decoder(LZMA_FORMAT_ERROR)); - buffer[5] ^= 1; + uint8_t footer[LZMA_STREAM_HEADER_SIZE]; + lzma_stream_flags dest; - // Test 2a (valid CRC32) - uint32_t crc = lzma_crc32(buffer + 6, 2, 0); - write32le(buffer + 8, crc); - succeed(test_header_decoder(LZMA_OK)); + // First encode known flags to the footer buffer + assert_lzma_ret(lzma_stream_footer_encode(&flags, footer), LZMA_OK); - // Test 2b (invalid Stream Flags with valid CRC32) - buffer[6] ^= 0x20; - crc = lzma_crc32(buffer + 6, 2, 0); - write32le(buffer + 8, crc); - succeed(test_header_decoder(LZMA_OPTIONS_ERROR)); + // Should fail if magic bytes do not match + footer[LZMA_STREAM_HEADER_SIZE - 1] ^= 1; + assert_lzma_ret(lzma_stream_footer_decode(&dest, footer), + LZMA_FORMAT_ERROR); + footer[LZMA_STREAM_HEADER_SIZE - 1] ^= 1; - // Test 3 (invalid CRC32) - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - buffer[9] ^= 1; - succeed(test_header_decoder(LZMA_DATA_ERROR)); + // Should fail if a reserved bit is set. + // In the Stream Footer, the Stream Flags follow the CRC32 (4 bytes) + // and the Backward Size (4 bytes) + uint8_t *stream_flags = footer + sizeof(uint32_t) * 2; + stream_flags[0] = 1; - // Test 4 (invalid Stream Flags with valid CRC32) - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - buffer[9] ^= 0x40; - crc = lzma_crc32(buffer + 4, 6, 0); - write32le(buffer, crc); - succeed(test_footer_decoder(LZMA_OPTIONS_ERROR)); + // Need to adjust the CRC32 so it will not fail that check instead + uint8_t *crc32_ptr = footer; + const uint32_t crc_orig = read32le(crc32_ptr); + uint8_t *backward_size = footer + sizeof(uint32_t); + uint32_t new_crc32 = lzma_crc32(backward_size, sizeof(uint32_t) + + XZ_STREAM_FLAGS_SIZE, 0); + write32le(crc32_ptr, new_crc32); + assert_lzma_ret(lzma_stream_footer_decode(&dest, footer), + LZMA_OPTIONS_ERROR); + stream_flags[0] = 0; + write32le(crc32_ptr, crc_orig); - // Test 5 (invalid Magic Bytes) - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - buffer[11] ^= 1; - succeed(test_footer_decoder(LZMA_FORMAT_ERROR)); + // Should fail if upper bits of check ID are set + stream_flags[1] |= 0xF0; + new_crc32 = lzma_crc32(backward_size, sizeof(uint32_t) + + XZ_STREAM_FLAGS_SIZE, 0); + write32le(crc32_ptr, new_crc32); + assert_lzma_ret(lzma_stream_footer_decode(&dest, footer), + LZMA_OPTIONS_ERROR); + stream_flags[1] = flags.check; + write32le(crc32_ptr, crc_orig); + + // Should fail if CRC32 does not match. + // First, alter a byte in the Stream Flags. + stream_flags[0] = 1; + assert_lzma_ret(lzma_stream_footer_decode(&dest, footer), + LZMA_DATA_ERROR); + stream_flags[0] = 0; + + // Next, change the CRC32 + *crc32_ptr ^= 1; + assert_lzma_ret(lzma_stream_footer_decode(&dest, footer), + LZMA_DATA_ERROR); +#endif } -int -main(void) +static void +test_lzma_stream_flags_compare(void) { - // Valid headers - known_flags.backward_size = 1024; - for (lzma_check check = LZMA_CHECK_NONE; - check <= LZMA_CHECK_ID_MAX; ++check) { - test_header(); - test_footer(); + lzma_stream_flags first = { + .version = 0, + .backward_size = LZMA_BACKWARD_SIZE_MIN, + .check = LZMA_CHECK_CRC32, + }; + + lzma_stream_flags second = first; + + // First test should pass + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), LZMA_OK); + + // Altering either version should cause an error + first.version = 1; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_OPTIONS_ERROR); + second.version = 1; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_OPTIONS_ERROR); + first.version = 0; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_OPTIONS_ERROR); + second.version = 0; + + // Check types must be under the maximum + first.check = INVALID_LZMA_CHECK_ID; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + second.check = INVALID_LZMA_CHECK_ID; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + first.check = LZMA_CHECK_CRC32; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + second.check = LZMA_CHECK_CRC32; + + // Check types must be equal + for (lzma_check i = 0; i < LZMA_CHECK_ID_MAX; i++) { + first.check = i; + if (i == second.check) + assert_lzma_ret(lzma_stream_flags_compare(&first, + &second), LZMA_OK); + else + assert_lzma_ret(lzma_stream_flags_compare(&first, + &second), LZMA_DATA_ERROR); } + first.check = LZMA_CHECK_CRC32; - // Invalid headers - test_encode_invalid(); - test_decode_invalid(); + // Backward Size comparison is skipped if either are LZMA_VLI_UNKNOWN + first.backward_size = LZMA_VLI_UNKNOWN; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), LZMA_OK); + second.backward_size = LZMA_VLI_MAX + 1; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), LZMA_OK); + second.backward_size = LZMA_BACKWARD_SIZE_MIN; - return 0; + // Backward Sizes need to be valid + first.backward_size = LZMA_VLI_MAX + 4; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + second.backward_size = LZMA_VLI_MAX + 4; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + first.backward_size = LZMA_BACKWARD_SIZE_MIN; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); + second.backward_size = LZMA_BACKWARD_SIZE_MIN; + + // Backward Sizes must be equal + second.backward_size = first.backward_size + 4; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_DATA_ERROR); + + // Should fail if Backward Sizes are > LZMA_BACKWARD_SIZE_MAX + // even though they are equal + first.backward_size = LZMA_BACKWARD_SIZE_MAX + 1; + second.backward_size = LZMA_BACKWARD_SIZE_MAX + 1; + assert_lzma_ret(lzma_stream_flags_compare(&first, &second), + LZMA_PROG_ERROR); +} + + +extern int +main(int argc, char **argv) +{ + tuktest_start(argc, argv); + tuktest_run(test_lzma_stream_header_encode); + tuktest_run(test_lzma_stream_footer_encode); + tuktest_run(test_lzma_stream_header_decode); + tuktest_run(test_lzma_stream_footer_decode); + tuktest_run(test_lzma_stream_flags_compare); + return tuktest_end(); } Only in xz-5.4.3/tests: test_vli.c diff -ur xz-5.2.5/tests/tests.h xz-5.4.3/tests/tests.h --- xz-5.2.5/tests/tests.h 2020-03-17 17:28:50 +++ xz-5.4.3/tests/tests.h 2023-05-04 17:21:05 @@ -16,104 +16,60 @@ #include "sysdefs.h" #include "tuklib_integer.h" #include "lzma.h" +#include "tuktest.h" -#include -#define memcrap(buf, size) memset(buf, 0xFD, size) +// Invalid value for the lzma_check enumeration. This must be positive +// but small enough to fit into signed char since the underlying type might +// one some platform be a signed char. +// +// Don't put LZMA_ at the beginning of the name so that it is obvious that +// this constant doesn't come from the API headers. +#define INVALID_LZMA_CHECK_ID ((lzma_check)(LZMA_CHECK_ID_MAX + 1)) -#define expect(test) ((test) ? 0 : (fprintf(stderr, "%s:%d: %s\n", \ - __FILE__, __LINE__, #test), abort(), 0)) -#define succeed(test) expect(!(test)) +// This table and macro allow getting more readable error messages when +// comparing the lzma_ret enumeration values. +static const char enum_strings_lzma_ret[][24] = { + "LZMA_OK", + "LZMA_STREAM_END", + "LZMA_NO_CHECK", + "LZMA_UNSUPPORTED_CHECK", + "LZMA_GET_CHECK", + "LZMA_MEM_ERROR", + "LZMA_MEMLIMIT_ERROR", + "LZMA_FORMAT_ERROR", + "LZMA_OPTIONS_ERROR", + "LZMA_DATA_ERROR", + "LZMA_BUF_ERROR", + "LZMA_PROG_ERROR", + "LZMA_SEEK_NEEDED", +}; -#define fail(test) expect(test) +#define assert_lzma_ret(test_expr, ref_val) \ + assert_enum_eq(test_expr, ref_val, enum_strings_lzma_ret) -static inline const char * -lzma_ret_sym(lzma_ret ret) -{ - if ((unsigned int)(ret) > LZMA_PROG_ERROR) - return "UNKNOWN_ERROR"; +static const char enum_strings_lzma_check[][24] = { + "LZMA_CHECK_NONE", + "LZMA_CHECK_CRC32", + "LZMA_CHECK_UNKNOWN_2", + "LZMA_CHECK_UNKNOWN_3", + "LZMA_CHECK_CRC64", + "LZMA_CHECK_UNKNOWN_5", + "LZMA_CHECK_UNKNOWN_6", + "LZMA_CHECK_UNKNOWN_7", + "LZMA_CHECK_UNKNOWN_8", + "LZMA_CHECK_UNKNOWN_9", + "LZMA_CHECK_SHA256", + "LZMA_CHECK_UNKNOWN_11", + "LZMA_CHECK_UNKNOWN_12", + "LZMA_CHECK_UNKNOWN_13", + "LZMA_CHECK_UNKNOWN_14", + "LZMA_CHECK_UNKNOWN_15", +}; - static const char *msgs[] = { - "LZMA_OK", - "LZMA_STREAM_END", - "LZMA_NO_CHECK", - "LZMA_UNSUPPORTED_CHECK", - "LZMA_GET_CHECK", - "LZMA_MEM_ERROR", - "LZMA_MEMLIMIT_ERROR", - "LZMA_FORMAT_ERROR", - "LZMA_OPTIONS_ERROR", - "LZMA_DATA_ERROR", - "LZMA_BUF_ERROR", - "LZMA_PROG_ERROR" - }; - - return msgs[ret]; -} - - -static inline bool -coder_loop(lzma_stream *strm, uint8_t *in, size_t in_size, - uint8_t *out, size_t out_size, - lzma_ret expected_ret, lzma_action finishing_action) -{ - size_t in_left = in_size; - size_t out_left = out_size > 0 ? out_size + 1 : 0; - lzma_action action = LZMA_RUN; - lzma_ret ret; - - strm->next_in = NULL; - strm->avail_in = 0; - strm->next_out = NULL; - strm->avail_out = 0; - - while (true) { - if (in_left > 0) { - if (--in_left == 0) - action = finishing_action; - - strm->next_in = in++; - strm->avail_in = 1; - } - - if (out_left > 0) { - --out_left; - strm->next_out = out++; - strm->avail_out = 1; - } - - ret = lzma_code(strm, action); - if (ret != LZMA_OK) - break; - } - - bool error = false; - - if (ret != expected_ret) - error = true; - - if (strm->total_in != in_size || strm->total_out != out_size) - error = true; - - return error; -} - - -static inline bool -decoder_loop_ret(lzma_stream *strm, uint8_t *in, size_t in_size, - lzma_ret expected_ret) -{ - return coder_loop(strm, in, in_size, NULL, 0, expected_ret, LZMA_RUN); -} - - -static inline bool -decoder_loop(lzma_stream *strm, uint8_t *in, size_t in_size) -{ - return coder_loop(strm, in, in_size, NULL, 0, - LZMA_STREAM_END, LZMA_RUN); -} +#define assert_lzma_check(test_expr, ref_val) \ + assert_enum_eq(test_expr, ref_val, enum_strings_lzma_check) #endif Only in xz-5.4.3/tests: tuktest.h diff -ur xz-5.2.5/windows/INSTALL-MSVC.txt xz-5.4.3/windows/INSTALL-MSVC.txt --- xz-5.2.5/windows/INSTALL-MSVC.txt 2020-03-17 17:28:50 +++ xz-5.4.3/windows/INSTALL-MSVC.txt 2023-05-04 17:21:05 @@ -18,8 +18,12 @@ Building -------- - The following files in this directory are for MSVC: + It is recommended to use CMake to generate build files for MSVC. + The project files in vs201x directories will be removed in the + future (5.4.x releases will include them still). + Descriptions of the files in the vs201x directories: + config.h liblzma configuration #defines for MSVC. liblzma.vcxproj This builds static liblzma. liblzma_dll.vcxproj This builds liblzma.dll. @@ -34,18 +38,19 @@ This means that you may need to either install Windows SDK 8.1 or you may need to set the target platform version before building. - Currently no test programs are built or run under MSVC. + Currently no test programs are built or run under MSVC from the + project files. CMake-based builds include tests too. - MSVC gives a bunch of compiler warnings. Some warnings are specific - to 32-bit or 64-bit build and some appear for both builds. These - are known and shouldn't be a problem. Some of them will probably - be fixed in the future. - Notes ----- liblzma API headers declare the functions with __declspec(dllimport) by default. To avoid this when using static liblzma from your code, #define LZMA_API_STATIC before #including . + + MSVC gives a bunch of compiler warnings. Some warnings are specific + to 32-bit or 64-bit build and some appear for both builds. These + are known and shouldn't be a problem. Some of them will probably + be fixed in the future. diff -ur xz-5.2.5/windows/INSTALL-MinGW.txt xz-5.4.3/windows/INSTALL-MinGW.txt --- xz-5.2.5/windows/INSTALL-MinGW.txt 2020-03-17 17:28:50 +++ xz-5.4.3/windows/INSTALL-MinGW.txt 2023-05-04 17:21:05 @@ -32,7 +32,7 @@ So you need to pick between MinGW and MinGW-w32 when building 32-bit version. You don't need both. - You might find 7-Zip handy when extracting + You might find 7-Zip handy when extracting some files. The ready-made build script build.bash will also use 7-Zip to create the distributable .zip and .7z files. @@ -50,7 +50,7 @@ You can download MSYS from MinGW's Sourceforge page: - http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/ + https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/ I recommend using MSYS 1.0.11 (MSYS-1.0.11.exe or msysCORE-1.0.11-bin.tar.gz) because that package includes all the @@ -69,7 +69,7 @@ You can download the required packages from MinGW's Sourceforge page: - http://sourceforge.net/projects/mingw/files/ + https://sourceforge.net/projects/mingw/files/ These version numbers were the latest when I wrote this document, but you probably should pick the latest versions: @@ -94,9 +94,9 @@ toolchain. For XZ Utils 5.2.0 I used the packages from these directories: - http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/ + https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/ - http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/ + https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/ If you install both MinGW-w32 and MinGW-w64, remember to extract them into different directories. build.bash looks at diff -ur xz-5.2.5/windows/README-Windows.txt xz-5.4.3/windows/README-Windows.txt --- xz-5.2.5/windows/README-Windows.txt 2020-03-17 17:28:50 +++ xz-5.4.3/windows/README-Windows.txt 2023-05-04 17:21:05 @@ -118,5 +118,5 @@ Reporting bugs -------------- - Report bugs to (in English or Finnish). + Report bugs to . diff -ur xz-5.2.5/windows/build.bash xz-5.4.3/windows/build.bash --- xz-5.2.5/windows/build.bash 2020-03-17 17:28:50 +++ xz-5.4.3/windows/build.bash 2023-05-04 17:21:05 @@ -163,7 +163,7 @@ # Copy the headers, the .def file, and the docs. # They are the same for all architectures and builds. -mkdir -pv pkg/{include/lzma,doc/{manuals,examples}} +mkdir -pv pkg/{include/lzma,doc/{api,manuals,examples}} txtcp pkg/include "" src/liblzma/api/lzma.h txtcp pkg/include/lzma "" src/liblzma/api/lzma/*.h txtcp pkg/doc "" src/liblzma/liblzma.def @@ -171,6 +171,7 @@ txtcp pkg/doc "" doc/*.txt windows/README-Windows.txt txtcp pkg/doc/manuals "" doc/man/txt/{xz,xzdec,lzmainfo}.txt cp -v doc/man/pdf-*/{xz,xzdec,lzmainfo}-*.pdf pkg/doc/manuals +cp -v doc/api/* pkg/doc/api txtcp pkg/doc/examples "" doc/examples/* if [ -f windows/COPYING-Windows.txt ]; then diff -ur xz-5.2.5/windows/vs2013/config.h xz-5.4.3/windows/vs2013/config.h --- xz-5.2.5/windows/vs2013/config.h 2020-03-17 17:28:50 +++ xz-5.4.3/windows/vs2013/config.h 2023-05-04 17:21:05 @@ -21,6 +21,9 @@ /* Define to 1 if arm decoder is enabled. */ #define HAVE_DECODER_ARM 1 +/* Define to 1 if arm64 decoder is enabled. */ +#define HAVE_DECODER_ARM64 1 + /* Define to 1 if armthumb decoder is enabled. */ #define HAVE_DECODER_ARMTHUMB 1 @@ -51,6 +54,9 @@ /* Define to 1 if arm encoder is enabled. */ #define HAVE_ENCODER_ARM 1 +/* Define to 1 if arm64 encoder is enabled. */ +#define HAVE_ENCODER_ARM64 1 + /* Define to 1 if armthumb encoder is enabled. */ #define HAVE_ENCODER_ARMTHUMB 1 @@ -80,6 +86,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 + +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#define HAVE_LZIP_DECODER 1 /* Define to 1 to enable bt2 match finder. */ #define HAVE_MF_BT2 1 diff -ur xz-5.2.5/windows/vs2013/liblzma.vcxproj xz-5.4.3/windows/vs2013/liblzma.vcxproj --- xz-5.2.5/windows/vs2013/liblzma.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2013/liblzma.vcxproj 2023-05-04 17:21:05 @@ -229,6 +229,7 @@ + @@ -242,15 +243,20 @@ + + + + + @@ -270,6 +276,7 @@ + @@ -318,8 +325,10 @@ + + @@ -351,4 +360,4 @@ - \ No newline at end of file + diff -ur xz-5.2.5/windows/vs2013/liblzma_dll.vcxproj xz-5.4.3/windows/vs2013/liblzma_dll.vcxproj --- xz-5.2.5/windows/vs2013/liblzma_dll.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2013/liblzma_dll.vcxproj 2023-05-04 17:21:05 @@ -137,6 +137,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -154,6 +155,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -173,6 +175,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -191,6 +194,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -210,6 +214,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -228,6 +233,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -255,6 +261,7 @@ + @@ -268,15 +275,20 @@ + + + + + @@ -296,6 +308,7 @@ + @@ -344,8 +357,10 @@ + + @@ -380,4 +395,4 @@ - \ No newline at end of file + diff -ur xz-5.2.5/windows/vs2017/config.h xz-5.4.3/windows/vs2017/config.h --- xz-5.2.5/windows/vs2017/config.h 2020-03-17 17:28:50 +++ xz-5.4.3/windows/vs2017/config.h 2023-05-04 17:21:05 @@ -21,6 +21,9 @@ /* Define to 1 if arm decoder is enabled. */ #define HAVE_DECODER_ARM 1 +/* Define to 1 if arm64 decoder is enabled. */ +#define HAVE_DECODER_ARM64 1 + /* Define to 1 if armthumb decoder is enabled. */ #define HAVE_DECODER_ARMTHUMB 1 @@ -51,6 +54,9 @@ /* Define to 1 if arm encoder is enabled. */ #define HAVE_ENCODER_ARM 1 +/* Define to 1 if arm64 encoder is enabled. */ +#define HAVE_ENCODER_ARM64 1 + /* Define to 1 if armthumb encoder is enabled. */ #define HAVE_ENCODER_ARMTHUMB 1 @@ -80,6 +86,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 + +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#define HAVE_LZIP_DECODER 1 /* Define to 1 to enable bt2 match finder. */ #define HAVE_MF_BT2 1 diff -ur xz-5.2.5/windows/vs2017/liblzma.vcxproj xz-5.4.3/windows/vs2017/liblzma.vcxproj --- xz-5.2.5/windows/vs2017/liblzma.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2017/liblzma.vcxproj 2023-05-04 17:21:05 @@ -229,6 +229,7 @@ + @@ -242,15 +243,20 @@ + + + + + @@ -270,6 +276,7 @@ + @@ -318,8 +325,10 @@ + + diff -ur xz-5.2.5/windows/vs2017/liblzma_dll.vcxproj xz-5.4.3/windows/vs2017/liblzma_dll.vcxproj --- xz-5.2.5/windows/vs2017/liblzma_dll.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2017/liblzma_dll.vcxproj 2023-05-04 17:21:05 @@ -137,6 +137,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -154,6 +155,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -173,6 +175,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -191,6 +194,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -210,6 +214,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -228,6 +233,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -255,6 +261,7 @@ + @@ -268,15 +275,20 @@ + + + + + @@ -296,6 +308,7 @@ + @@ -344,8 +357,10 @@ + + diff -ur xz-5.2.5/windows/vs2019/config.h xz-5.4.3/windows/vs2019/config.h --- xz-5.2.5/windows/vs2019/config.h 2020-03-17 17:28:50 +++ xz-5.4.3/windows/vs2019/config.h 2023-05-04 17:21:05 @@ -21,6 +21,9 @@ /* Define to 1 if arm decoder is enabled. */ #define HAVE_DECODER_ARM 1 +/* Define to 1 if arm64 decoder is enabled. */ +#define HAVE_DECODER_ARM64 1 + /* Define to 1 if armthumb decoder is enabled. */ #define HAVE_DECODER_ARMTHUMB 1 @@ -51,6 +54,9 @@ /* Define to 1 if arm encoder is enabled. */ #define HAVE_ENCODER_ARM 1 +/* Define to 1 if arm64 encoder is enabled. */ +#define HAVE_ENCODER_ARM64 1 + /* Define to 1 if armthumb encoder is enabled. */ #define HAVE_ENCODER_ARMTHUMB 1 @@ -80,6 +86,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 + +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#define HAVE_LZIP_DECODER 1 /* Define to 1 to enable bt2 match finder. */ #define HAVE_MF_BT2 1 diff -ur xz-5.2.5/windows/vs2019/liblzma.vcxproj xz-5.4.3/windows/vs2019/liblzma.vcxproj --- xz-5.2.5/windows/vs2019/liblzma.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2019/liblzma.vcxproj 2023-05-04 17:21:05 @@ -230,6 +230,7 @@ + @@ -243,15 +244,20 @@ + + + + + @@ -271,6 +277,7 @@ + @@ -319,8 +326,10 @@ + + @@ -352,4 +361,4 @@ - \ No newline at end of file + diff -ur xz-5.2.5/windows/vs2019/liblzma_dll.vcxproj xz-5.4.3/windows/vs2019/liblzma_dll.vcxproj --- xz-5.2.5/windows/vs2019/liblzma_dll.vcxproj 2020-03-17 17:28:54 +++ xz-5.4.3/windows/vs2019/liblzma_dll.vcxproj 2023-05-04 17:21:05 @@ -138,6 +138,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -155,6 +156,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -174,6 +176,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -192,6 +195,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -211,6 +215,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -229,6 +234,7 @@ ./;../../src/liblzma/common;../../src/common;../../src/liblzma/api; + HAVE_CONFIG_H @@ -256,6 +262,7 @@ + @@ -269,15 +276,20 @@ + + + + + @@ -297,6 +309,7 @@ + @@ -345,8 +358,10 @@ + + @@ -381,4 +396,4 @@ - \ No newline at end of file +