diff options
author | Xin LI <delphij@FreeBSD.org> | 2024-06-03 05:49:22 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2024-06-03 05:49:22 +0000 |
commit | b599c3410cda4294a1f24783c500a7ee63f2f3af (patch) | |
tree | 054b08c2435be5f8667e773fa494e5501bfb6f71 | |
parent | a7819ed7ade8bf37ad82b0b26da9237692430eef (diff) | |
download | src-vendor/xz/5.6.2.tar.gz src-vendor/xz/5.6.2.zip |
Vendor import of xz 5.6.2 (trimmed)vendor/xz/5.6.2vendor/xz
51 files changed, 3508 insertions, 3690 deletions
@@ -2,8 +2,8 @@ Authors of XZ Utils =================== - XZ Utils is developed and maintained by Lasse Collin - <lasse.collin@tukaani.org> and Jia Tan <jiat0218@gmail.com>. + XZ Utils is developed and maintained by + Lasse Collin <lasse.collin@tukaani.org>. Major parts of liblzma are based on code written by Igor Pavlov, specifically the LZMA SDK <https://7-zip.org/sdk.html>. Without @@ -30,6 +30,11 @@ Authors of XZ Utils - Jonathan Nieder - Joachim Henke + Special author: Jia Tan was a co-maintainer in 2022-2024. He and + the team behind him inserted a backdoor (CVE-2024-3094) into + XZ Utils 5.6.0 and 5.6.1 releases. He suddenly disappeared when + this was discovered. + Many people have contributed improvements or reported bugs. Most of these people are mentioned in the file THANKS. @@ -3,8 +3,7 @@ XZ Utils Licensing ================== Different licenses apply to different files in this package. Here - is a rough summary of which licenses apply to which parts of this - package (but check the individual files to be sure!): + is a summary of which licenses apply to which parts of this package: - liblzma is under the BSD Zero Clause License (0BSD). @@ -25,20 +24,6 @@ XZ Utils Licensing lzma-file-format.xt are in the public domain but may be distributed under the terms of 0BSD too. - - Doxygen-generated HTML version of the liblzma API documentation: - While Doxygen is under the GNU GPLv2, the license information - in Doxygen includes 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. - - Note: The JavaScript files (under the MIT license) have - been removed from the Doxygen output. - - - The XZ logo (xz-logo.png) included in the Doxygen-generated - documentation is under the Creative Commons BY-SA 4.0 license. - - Translated messages and man pages are under 0BSD except that some old translations are in the public domain. @@ -51,8 +36,9 @@ XZ Utils Licensing These files don't affect the licensing of the binaries being built. - - The extra directory contain files that are under various - free software licenses. + - The 'extra' directory contains files that are under various + free software licenses. These aren't built or installed as + part of XZ Utils. For the files under the BSD Zero Clause License (0BSD), if a copyright notice is needed, the following is sufficient: @@ -65,16 +51,13 @@ XZ Utils Licensing it is not legally required by the license terms. Here is an example of a good notice to put into "about box" or into documentation: - This software includes code from XZ Utils - <https://xz.tukaani.org/xz-utils/>. + This software includes code from XZ Utils <https://tukaani.org/xz/>. The following license texts are included in the following files: - COPYING.0BSD: BSD Zero Clause License - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 - COPYING.GPLv2: GNU General Public License version 2 - COPYING.GPLv3: GNU General Public License version 3 - - COPYING.CC-BY-SA-4.0: Creative Commons Attribution-ShareAlike 4.0 - International Public License A note about old XZ Utils releases: diff --git a/COPYING.CC-BY-SA-4.0 b/COPYING.CC-BY-SA-4.0 deleted file mode 100644 index 7d4f96c54aa1..000000000000 --- a/COPYING.CC-BY-SA-4.0 +++ /dev/null @@ -1,427 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - including for purposes of Section 3(b); and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/ChangeLog b/ChangeLog index 54b68744af86..c7795974ba23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,2901 @@ +commit 3ec664d3f652133136587a51d4505b1abe1acdd7 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 18:03:51 +0300 + + Bump version and soname for 5.6.2 + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 3cc0aa702e50b786c52c6f3d3f831a635c4df197 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 18:03:04 +0300 + + Add NEWS for 5.6.2 + + NEWS | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 130 insertions(+) + +commit 526d3f7f2c2d5e134157d08b37fb5fd0b125799e +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 18:03:04 +0300 + + Add NEWS for 5.4.7 + + NEWS | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 89 insertions(+) + +commit 660b09279e8f544acf120d29194d5c3051b484eb +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 18:03:04 +0300 + + Add NEWS for 5.2.13 + + NEWS | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 115 insertions(+) + +commit 7d76282dac766c0ced8ae24e0f7ce0005f3e377d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 17:47:13 +0300 + + Translations: Run po4a/update-po + + Now the files are in the new formatting without source file + line numbers. Future updates should keep the diffs much smaller. + + po4a/de.po | 1592 ++++++++++--------- + po4a/fr.po | 4450 +++++++++++++++++----------------------------------- + po4a/ko.po | 1592 ++++++++++--------- + po4a/pt_BR.po | 4817 ++++++++++++++++++--------------------------------------- + po4a/ro.po | 1592 ++++++++++--------- + po4a/uk.po | 1592 ++++++++++--------- + 6 files changed, 6114 insertions(+), 9521 deletions(-) + +commit 4470c3f7d8954bb47b280ec07ad0bd4be2223083 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 17:44:53 +0300 + + Translations: Run "make -C po update-po" + + In the past this wasn't done before releases; the Git repository + just contained the files from the Translation Project. But this + way it is clearer when comparing release tarballs against the + Git repository. In future releases this might no longer be necessary + within a stable branch as the .po files won't change so easily anymore + when creating a tarball. + + po/ca.po | 567 +++++++++++++++++++++++++--------------- + po/cs.po | 821 +++++++++++++++++++++++++++++++++++++-------------------- + po/da.po | 809 +++++++++++++++++++++++++++++++++++--------------------- + po/de.po | 403 ++++++++++++++-------------- + po/eo.po | 403 ++++++++++++++-------------- + po/es.po | 403 ++++++++++++++-------------- + po/fi.po | 578 +++++++++++++++++++++++++--------------- + po/fr.po | 538 +++++++++++++++++++++++--------------- + po/hr.po | 403 ++++++++++++++-------------- + po/hu.po | 403 ++++++++++++++-------------- + po/it.po | 854 +++++++++++++++++++++++++++++++++++++++--------------------- + po/ko.po | 403 ++++++++++++++-------------- + po/pl.po | 403 ++++++++++++++-------------- + po/pt.po | 842 +++++++++++++++++++++++++++++++++++++++-------------------- + po/pt_BR.po | 567 +++++++++++++++++++++++++--------------- + po/ro.po | 403 ++++++++++++++-------------- + po/sr.po | 838 ++++++++++++++++++++++++++++++++++++++-------------------- + po/sv.po | 403 ++++++++++++++-------------- + po/tr.po | 567 +++++++++++++++++++++++++--------------- + po/uk.po | 403 ++++++++++++++-------------- + po/vi.po | 403 ++++++++++++++-------------- + po/zh_CN.po | 417 +++++++++++++++-------------- + po/zh_TW.po | 558 ++++++++++++++++++++++++--------------- + 23 files changed, 7257 insertions(+), 5132 deletions(-) + +commit 33b8a85face5392b5ac843bdbe3a72f024cad6ef +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-29 16:33:24 +0300 + + Build: Update po/*.po files only when needed + + When po/xz.pot doesn't exist, running "make" or "make dist" will + create it. Then the .po files will be updated but only if they + actually would change more than the POT-Creation-Date line. + Then the .gmo files would be generated from the .po files. + This is the case before and after this commit. + + However, "make dist" and thus "make mydist" did a forced update + to the files, updating them even if the only change was the + POT-Creation-Date line. This had pros and cons: It made it clear + that the .po file really is in sync with the recent strings in + the package. On the other hand, it added noise in form of changed + files in the source tree and distribution tarballs. It can be + ignored with something like "diff -I'^"POT-Creation-Date: '" but + it's still a minor annoyance *if* there's not enough value in + having the most recent timestamp. + + Setting DIST_DEPENDS_ON_UPDATE_PO = no means that such forced + update won't happen in "make dist" anymore. However, the "mydist" + target will use xz.pot-update target which is the same target that + is run when xz.pot doesn't exist at all yet. Thus "mydist" will + ensure that the translations are up to date, without noise from + changes that would affect only the POT-Creation-Date line. + + Note that po4a always uses msgmerge with --update, so POT-Creation-Date + in the man page translations is never the only change in .po files. + In that sense this commit makes the message translations behave more + similarly to the man page translations. + + Distribution tarballs will still have non-reproducible POT-Creation-Date + in po/xz.pot and po4a/xz-man.pot but those are just two files. Even they + could be made reproducible from a Git timestamp if desired. + + (cherry picked from commit 9284f1aea31f0eb23e2ea72f7218b271e2234762) + + Makefile.am | 3 ++- + po/Makevars | 6 +++++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 09daebd66b55799bbc495b84310a86c91bbfc1c8 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 21:10:33 +0300 + + po4a/update-po: Disable wrapping in .pot and .po files + + The .po files from the Translation Project come with unwrapped + strings so this matches it. + + This may reduce the noise in diffs too. When the beginning of + a paragraph had changed, the rest of the lines got rewrapped + in msgsid. Now it's just one very long line that changes when + a paragraph has been edited. + + The --add-location=file option was removed as redundant. The line + numbers don't exist in the .pot file due to --porefs file and thus + they cannot get copied to the .po files either. + + (cherry picked from commit 4beba1cd62d7f8f7a6f1e899b68292d94c53b599) + + po4a/update-po | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +commit 51ad72dae4e516e9292f6f399bd1e4970b77f7c1 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 18:36:53 +0300 + + Update contact info in README + + (cherry picked from commit b14c130a58a649f9a73392eeb122cb252327c569) + + README | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit 18463917f9b255b8f925fa54ab9388319735b14a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 13:25:07 +0300 + + Translations: Use --package-name=xz-man with po4a + + This is to match reality. See the added comment. + + (cherry picked from commit 75f5f2e014b0ee646963f36bc6a9c840fb272353) + + po4a/update-po | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit 26bbcb13cd2bbb56fe406544a484b4edfc7e0837 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 13:03:40 +0300 + + Translations: Omit --package-name from po/Makevars + + This is closer to the reality in the po/*.po files. + + (cherry picked from commit eb217d016cfbbba1babc19a61095b3ea25898af6) + + po/Makevars | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit c35ee804b89556d15bc8cdc16867f4316e69392f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 01:17:45 +0300 + + Translations: Omit man page line numbers from .pot and .po files + + (cherry picked from commit 9114267038deaecf4832a5cacb5acbe6591ac839) + + po4a/update-po | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 0f4429d47f9cfe2cdfbad115a7bc2f11221cb217 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 01:06:30 +0300 + + Translations: Use the xgettext option --add-location=file + + (cherry picked from commit 093490b58271e9424ce38a7b1b38bcf61b9c86c6) + + po/Makevars | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit a93e2c2d1d34a6f609d24a8e62072ce78df7a734 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-28 00:43:53 +0300 + + Translations: Use the msgmerge option --add-location=file + + This way the PO file diffs are less noisy but the locations of the + strings are still present at file level, just without line numbers. + + The option is available since gettext 0.19 (2014). + configure.ac requires 0.19.6. + + (cherry picked from commit fccebe2b4fd513488fc920e4dac32562ed3c7637) + + po/Makevars | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d4389895592e9a8e0f6391fdad816ae0537bb07b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-27 12:22:08 +0300 + + Build: Use $(SHELL) instead of sh to run scripts in Makefile.am + + (cherry picked from commit f361d9ae85707a87eb28db400eb7229cec103d58) + + Makefile.am | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 5781414b6e3120098b0060d073aa2b0580ff6f40 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-23 17:25:13 +0300 + + Translations: Change the home page URLs in man page translations + + Since the source strings have changed, these would get marked as + fuzzy and the original string would be used instead. The original + and translated strings are identical in this case so it wouldn't + matter. But patching the translations helps still because then + po4a will show the correct translation percentage. + + (cherry picked from commit a26dece34793a09aac2476f954d162d03e9cf62b) + + po4a/de.po | 8 ++++---- + po4a/fr.po | 4 ++-- + po4a/ko.po | 4 ++-- + po4a/pt_BR.po | 4 ++-- + po4a/ro.po | 8 ++++---- + po4a/uk.po | 8 ++++---- + 6 files changed, 18 insertions(+), 18 deletions(-) + +commit 3670e0616eb9d86e7519d2b76242fd32c6e0c1ae +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-23 15:15:18 +0300 + + CMake: Add manual support for 32-bit x86 assembly files + + One has to pass -DENABLE_X86_ASM=ON to cmake to enable the + CRC assembly code. Autodetection isn't done. Looking at + CMAKE_SYSTEM_PROCESSOR might not work as it comes from uname + unless cross-compilation is done using a CMake toolchain file. + + On top of this, if the code is run on modern processors that support + the CLMUL instruction, then the C code should be faster (but then + one should also be using a x86-64 build if possible). + + (cherry picked from commit 24387c234b4eed1ef9a7eaa107391740b4095568) + + CMakeLists.txt | 34 +++++++++++++++++++++++++++++++--- + 1 file changed, 31 insertions(+), 3 deletions(-) + +commit c1b001b09e902ecacabb8a2ae1fc991018a4d1f8 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-23 14:26:45 +0300 + + CMake: Rename USE_DOXYGEN to ENABLE_DOXYGEN + + It's more consistent with the other option() uses. + + (cherry picked from commit 0fb3c9c3f684f5a25bd425ed079a20a79f0c969d) + + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7213fe39c717d4623c92af715484a71d9a6ff8d0 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-22 15:21:53 +0300 + + Use more confident language in COPYING + + (cherry picked from commit 62733592a1cc6f0b41f46ef52e06d1a6fe1ff38a) + + COPYING | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 15358be94a4e3f9c20f331b64b3980f3e5283760 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-29 17:16:38 +0300 + + Add SPDX license identifiers to files under tests/ossfuzz + + (cherry picked from commit 9ae2ebc1e504a1814b0788de95fb5c58c0328dde) + + tests/ossfuzz/Makefile | 2 ++ + tests/ossfuzz/config/fuzz_decode_alone.options | 2 ++ + tests/ossfuzz/config/fuzz_decode_stream.options | 2 ++ + tests/ossfuzz/config/fuzz_encode_stream.options | 2 ++ + tests/ossfuzz/config/fuzz_lzma.dict | 2 ++ + tests/ossfuzz/config/fuzz_xz.dict | 2 ++ + 6 files changed, 12 insertions(+) + +commit 1aa92c7ffd0bf8f9738ebf3bd1263bd6f5f096a2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-29 17:16:06 +0300 + + Add SPDX license identifier to .codespellrc + + (cherry picked from commit 9000d70eb9815bd7f43ffddc1c3316c507aa0e05) + + .codespellrc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3c7e400fdcabc0a1b78863948fc17964667a9401 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-22 15:12:09 +0300 + + Move entries po4a/.gitignore to the top level .gitignore + + The po4a directory is in EXTRA_DIST and thus all files there + are included in the package. .gitignore doesn't belong in the + package so keep that file out of the po4a directory. + + (cherry picked from commit 903c16fcfa5bfad0cdb2a7383d941243bcb12e76) + + .gitignore | 4 ++++ + po4a/.gitignore | 3 --- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 8a99272d4a9358dabdb5bc0b72f4c5240a9dc066 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + CMake: Add comments + + (cherry picked from commit 9d997d6f9d4f042412e45c7b7a23a14ad2e4f9aa) + + tests/tests.cmake | 2 ++ + 1 file changed, 2 insertions(+) + +commit c35259c9e2400f6f88c269d95ecafdb223ff45d2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + CMake: Remove the note that some tests aren't run + + They are now in the common build configurations. + + (cherry picked from commit d35368b33e54bad2f566df99fac29ffea38e34de) + + CMakeLists.txt | 2 -- + 1 file changed, 2 deletions(-) + +commit 30982a215395f19b3837c3da540e1cb3f913569f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + CMake: Add support for test_files.sh + + (cherry picked from commit dc232d584619b2819a9c52d6ad5d8b5d56b392ba) + + tests/tests.cmake | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +commit 3a8f81e0ad4cd1c102a03ff09e703cf8cb074afc +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + Tests: Make test_files.sh more flexible + + Add a new optional argument to specify the directory of the xz and + xzdec executables. + + If ../config.h doesn't exist, assume that all encoders and decoders + are available. + + (cherry picked from commit a7e9230af9d1f87f474fe38886eb977d4149dc9b) + + tests/test_files.sh | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +commit 0644675c829143112c85455f8a6aa91bfc4e1bbb +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + CMake: Add support for test_compress.sh tests + + (cherry picked from commit b40e6efbb48d740b9b5b303e59e344801cbb5bd8) + + tests/tests.cmake | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +commit dcc02a6ca0e0ac4e330e820683754badbcf9815b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + Tests: Make test_compress.sh more flexible + + Add a new optional second argument: directory of the xz and xzdec + executables. This is need with the CMake build where the binaries + end up in the top-level build directory. + + If ../config.h doesn't exist, assume that all encoders and decoders + are available. This will make this script usable from CMake in the + most common build configuration. + + NOTE: Since the existence of ../config.h is checked, the working + directory of the test script must be a subdir in the build tree! + Otherwise ../config.h would look outside the build tree. + + Use the default check type instead of forcing CRC32 or CRC64. + Now the script doesn't need to check if CRC64 is available. + + (cherry picked from commit ac3222d2cb1ff3a15eb6d58f9ea9bc78e8bc3bb2) + + tests/test_compress.sh | 41 +++++++++++++++++++++++++++++------------ + 1 file changed, 29 insertions(+), 12 deletions(-) + +commit c761b7051fb2ebb6da3cbecafe695fb5af7b2c9c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + CMake: Prepare to support the test_*.sh tests + + This is a bit hacky since the scripts grep config.h to know which + features were built but the CMake build doesn't create config.h. + So instead those test scripts will be run only when all relevant + features have been enabled. + + (cherry picked from commit 006040b29c83104403621e950ada0c8956c56b3d) + + tests/tests.cmake | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit a71bc2d75b95f85fe046f0fd1fb25d36be2b20ba +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-20 16:55:00 +0300 + + Tests: test_suffix.sh: Add a comment + + (cherry picked from commit 6167607a6ea72fb74eefb943c4566e3cab528cd2) + + tests/test_suffix.sh | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8fda5ce872632e464a1f9660b3ab8dac939a03c6 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-18 00:34:07 +0300 + + Fix typos + + Thanks to xx on #tukaani. + + (cherry picked from commit 4e9023857d287f624562156b60dc23d2b64c0f10) + + src/common/mythread.h | 2 +- + src/common/tuklib_integer.h | 2 +- + src/liblzma/api/lzma/base.h | 2 +- + src/liblzma/common/filter_buffer_decoder.c | 2 +- + src/liblzma/common/filter_common.c | 2 +- + src/scripts/xzgrep.in | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +commit 2729079bcb8dd1c3ab1a79426690d17f6f8e6f7d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-18 00:23:52 +0300 + + liblzma: Fix white space + + Thanks to xx on #tukaani. + + (cherry picked from commit b14d08fbbc254485ace9ccfe7908674f608a62ae) + + src/liblzma/simple/simple_coder.h | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit a289c4dfeb3ded35e129c48b13f46605f0138704 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-13 17:15:04 +0300 + + xz: Document the static function get_chains_memusage() + + (cherry picked from commit 142e670a413a7bce1a2647f1cf1f33f8ee2dbe88) + + src/xz/coder.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +commit 6f0db31713845386ce2419c55b2df89b53b80dd3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-13 17:07:22 +0300 + + xz: Rename filters_memusage_max() to get_chains_memusage() + + (cherry picked from commit 78e984399a64bfee5d11e7308e0bdbc1006db2ca) + + src/xz/coder.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +commit d7e2bf7e2dc9289a7a5dd0311d19d10de6d7ea1b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-13 17:04:05 +0300 + + xz: Rename filter_memusages to chains_memusages + + (cherry picked from commit 54c3db0a83d3e67d89aba92a0957f2dce9b111a7) + + src/xz/coder.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 58f200b6d1dc4cbc1ab3315a359120ab6eb84878 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 22:26:30 +0300 + + xz: Simplify the memory usage scaling code + + This is closer to what it was before the --filtersX support was added, + just extended to support for scaling all filter chains. The method + before this commit was an extended version of the original too but + it was done in a more complex way for no clear reason. In case of + an error, the complex version printed fewer informative messages + (a good thing) but it's not a sigificant benefit. + + In the limit is too low even for single-threaded mode, the required + amount of memory is now reported like in 5.4.x instead of like in + 5.5.1alpha - 5.6.1 which showed the original non-scaled usage. It + had been a FIXME in the old code but it's not clear what message + makes the most sense. + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + (cherry picked from commit d9e1ae79ec90d6a7eafeaceaf0ece4f0c83d4417) + + src/xz/coder.c | 163 ++++++++++++++++++++------------------------------------- + 1 file changed, 57 insertions(+), 106 deletions(-) + +commit 41bdc9fa5cc2fc2a70f4331329ac724773cc2f26 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-13 12:14:00 +0300 + + xz: Edit comments + + (cherry picked from commit 0ee56983d198b776878432703de664049b1be32e) + + src/xz/coder.h | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 52e40c1912dfdbf8c7aa85e3a4c3eb138fa73d5d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-13 12:03:51 +0300 + + xz: Rename chain_idx to chain_num + + (cherry picked from commit ec82a49c3553f7206104582dbfb8b64fa433b491) + + src/xz/coder.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 8a019633319c694423691f58c55fa23a46e45ded +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 22:29:11 +0300 + + xz: Edit coding style + + (cherry picked from commit a731a6993c34bbbd55abaf9c166718682b1da24f) + + src/xz/coder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e3ad7eda74caea29849e2e9ec01212f5f7d0f574 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 22:16:05 +0300 + + xz: Edit comments + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + (cherry picked from commit 32eb176b89243fce3112347fe43a8ad14a9fd2be) + + src/xz/coder.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +commit 09cabae2ab47a06f6eee02419a815d4bfd0d9490 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:57:49 +0300 + + xz: Fix grammar in a comment + + Fixes: cb3111e3ed84152912b5138d690c8d9f00c6ef02 + (cherry picked from commit b90339f4daa510d2b1b8c550f855a99667f1d004) + + src/xz/coder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c10b66fbf9b2442741a1f052bdb4ce7009af9cda +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:46:56 +0300 + + xz: Rename filter_memusages to encoder_memusages + + (cherry picked from commit 4c0bdaf13d651b22ba13bd93f8379724d6ccdc13) + + src/xz/coder.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 9132ce3564b2c003bffd6de6294a3d98dccf314e +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:42:05 +0300 + + xz: Edit coding style + + (cherry picked from commit b54aa023e0ec291b06e976e5f094ab0549e7b09b) + + src/xz/coder.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d642e13874e93b03959d1de523f1c8ebe9428838 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:31:02 +0300 + + xz: Rename filters_index to chain_num + + The reason is the same as in bd0782c1f13e52cd0fd8415208e30e47004a4c68. + + (cherry picked from commit 49f67d3d3f42b640a7dfc4ca04c8934f658e10ce) + + src/xz/args.c | 8 ++++---- + src/xz/coder.c | 8 ++++---- + src/xz/coder.h | 2 +- + 3 files changed, 9 insertions(+), 9 deletions(-) + +commit 47599f3b73f0a2bc18e0a8367d723f1eb0f11b63 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:22:43 +0300 + + xz: Replace a few uint32_t with "unsigned" to reduce the number of casts + + These hold only tiny values. + + (cherry picked from commit ff9e8b3d069ecfa52ec43dcdb198542d1692a492) + + src/xz/args.c | 2 +- + src/xz/coder.c | 17 ++++++++--------- + src/xz/coder.h | 2 +- + 3 files changed, 10 insertions(+), 11 deletions(-) + +commit 8f5ab75c454ea8676ed09c7f6eda8afe87b008ad +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 21:10:45 +0300 + + xz: Rename filters_used_mask to chains_used_mask + + The reason is the same as in bd0782c1f13e52cd0fd8415208e30e47004a4c68. + + (cherry picked from commit b5e6c1113b1ba02c282bd9163eccdb521c937a78) + + src/xz/coder.c | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +commit 3eb7cf9dd5b90a074f741234225d7de51ad88774 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 17:14:43 +0300 + + xz: Move the setting of "check" in coder_set_compression_settings() + + It's more logical to do it in the beginning instead of in the middle + of the filter chain handling. + + Fixes: d6af7f347077b22403133239592e478931307759 + (cherry picked from commit 32500dfaadae2ea36fda2e17b49ae7d9ac1acf52) + + src/xz/coder.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 067961ee0e1adaa66a43fbf8c3be31697554a839 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 17:09:17 +0300 + + xz: Rename "filters" to "chains" + + The convention is that + + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + + contains the filters of a single filter chain. + It was so here as well before the commit + d6af7f347077b22403133239592e478931307759. + It changes "filters" to a ten-element array of filter chains. + It's clearer to call this array-of-arrays "chains". + + This also renames "filter_idx" to "chain_idx" which is used + as an index as in chains[chain_idx]. + + (cherry picked from commit ad146b1f42bbb678175a503a45ce525e779f9b8b) + + src/xz/coder.c | 68 +++++++++++++++++++++++++++++----------------------------- + 1 file changed, 34 insertions(+), 34 deletions(-) + +commit 6822f6f891d43c97ea379a51223ce8ea69439161 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 16:56:15 +0300 + + xz: Clean up a comment + + (cherry picked from commit 5a4ae4e4d0105404184e9a82ee08f94e1b7783e0) + + src/xz/coder.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +commit 0e5e3e7bdcfcdc4b4607665ff0f6ad794e5195af +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 16:52:09 +0300 + + xz: Add clarifying assertions + + (cherry picked from commit 2de80494ed9a4dc7db395a32a5efb770ce769804) + + src/xz/coder.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 77bcf6b76a26833923e62b2dec717474d5d44700 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-10 20:23:33 +0300 + + xz: Add a clarifying assertion + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + (cherry picked from commit 1eaad004bf7748976324672db028e34f42802e61) + + src/xz/coder.c | 1 + + 1 file changed, 1 insertion(+) + +commit df3efc058a256629ea0153b4750d3df308757038 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 16:47:17 +0300 + + xz: Clarify a comment + + (cherry picked from commit 605094329b986244833c967c04963cacc41a868d) + + src/xz/coder.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 4ebfe11cd33439675f03e1e3725abf03d6f8251b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 16:28:25 +0300 + + xz: Use the info collected in parse_block_list() + + This is slightly simpler and it avoids looping through + the opt_block_list array. + + (cherry picked from commit 8fac2577f2dbb9491afd8500f60d004c9071df3b) + + src/xz/coder.c | 95 ++++++++++++++++++++++++---------------------------------- + 1 file changed, 39 insertions(+), 56 deletions(-) + +commit bfea6913618357a7034a1d79079bccb688262124 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 15:48:45 +0300 + + xz: Remember the filter chains and the largest Block in parse_block_list() + + (cherry picked from commit 81d350dab864b985b740742772f3b132d4c52914) + + src/xz/args.c | 18 ++++++++++++++++++ + src/xz/coder.c | 2 ++ + src/xz/coder.h | 13 +++++++++++++ + 3 files changed, 33 insertions(+) + +commit d4e33e73922427a0f5277b91b239af538fd41c06 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 15:38:48 +0300 + + xz: Update a comment and initialization of filters_used_mask + + (cherry picked from commit 46ab56968f7dfdac187710a1223659d832fa1565) + + src/xz/coder.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 3c130737c9bb4a5021bb14eb19e9ceae30ffef3a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 15:08:10 +0300 + + xz: parse_block_list: Edit integer type casting + + (cherry picked from commit e89293a0baeb8663707c6b4a74fbb310ec698a8f) + + src/xz/args.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 40c8513b4ee42b8c0fae9b2a229e078ac7e0f87a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-12 14:51:37 +0300 + + xz: Make filter_memusages a local variable + + (cherry picked from commit 87011e40c168255cd2edea129ee68c901770603b) + + src/xz/coder.c | 35 +++++++++++++++++++++-------------- + 1 file changed, 21 insertions(+), 14 deletions(-) + +commit cacaf25aa71cd1110cc049d037c11e4075602c35 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-10 20:33:08 +0300 + + xz: Remove unused code and simplify + + opt_mode == MODE_COMPRESS isn't possible when HAVE_ENCODERS isn't + defined. Thus, when *encoding*, the message about *decoder* memory + usage is possible to show only when both encoder and decoder have + been built. + + Since the message is shown only at V_DEBUG, skip the memusage + calculation if verbosity level isn't high enough. + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + (cherry picked from commit 347b412a9374e0456bef9da0d7d79174c0b6f1a5) + + src/xz/coder.c | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + +commit 3495a6b291f49079485854bb185a52c29d06cd2f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-10 20:22:58 +0300 + + xz: Fix integer type from uint64_t to uint32_t + + lzma_options_lzma.dict_size is uint32_t so use it here too. + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + (cherry picked from commit 31358c057c9de9d6aba96bae112b2d17942de7cb) + + src/xz/coder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2861d856deb557734f067c5c471d670f0b0c6684 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-08 21:40:07 +0300 + + debug/translation.bash: Remove an outdated test command + + Since 5.3.5beta, "xz --lzma2=mf=bt4,nice=2" works even though bt4 needs + at least nice=4. It is rounded up internally by liblzma when needed. + + Fixes: 5cd9f0df78cc4f8a7807bf6104adea13034fbb45 + (cherry picked from commit 3f71e0f3a118e1012526f94fd640a626d30cb599) + + debug/translation.bash | 1 - + 1 file changed, 1 deletion(-) + +commit 54546babc3feb2786e541b80f9e7216b8f1bd543 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-07 20:41:28 +0300 + + Fix the date of NEWS for 5.4.5 + + (cherry picked from commit b05a516830095a0e1937aeb31c937fb0400408b6) + + NEWS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a7e58d1fdb493d58854ac599347cf64da0cecca4 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-07 16:21:15 +0300 + + Build: Update visibility.m4 from Gnulib + + This fixes the syntax of the "serial" line and renames + a temporary variable. + + (cherry picked from commit 6d336aeb97b69c496ddc626af403f6f21c753658) + + m4/visibility.m4 | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit 07a9cda037042b262ba6c8c18fae4a5b3333d508 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-07 15:05:21 +0300 + + po4a/update-po: Delete the *.po.authors files + + These are temporary files that are needed only when running po4a. + The top-level Makefile.am puts the whole po4a directory into + distribution tarball (it's simpler) so deleting these temporary + files is needed to prevent them from getting into tarballs. + + (cherry picked from commit ab51e8ee610e2a893906859848f93d5cb0d5ba83) + + po4a/update-po | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 1b4e7dca243d8ef297a245b5ee3ce9cd1ca20f56 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-07 13:12:17 +0300 + + xz: Edit comments and coding style + + (cherry picked from commit e4780244a17420cc95d5498cd6e02ad10eac6e5f) + + src/xz/coder.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +commit 18683525a78e96ec6d7c2b4e841e94ad39be7096 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 23:08:22 +0300 + + xz: Omit an incorrect comment + + It likely was a leftover from a development version of the code. + + Fixes: 183819bfd9efac8c184d9bf123325719b7eee30f + (cherry picked from commit fe4d8b0c80eaeca3381be302eeb89aba871a7e7c) + + src/xz/coder.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +commit 005f0398645b0342c9c1915d422743c77ec1d435 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 23:04:31 +0300 + + xz: Add braces to a for-statement and to an if-statement + + No functional changes. + + Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a + Fixes: 479fd58d60622331fcbe48fddf756927b9f80d9a + (cherry picked from commit 9bef5b8d17dd5e009d6a6b2becc2dc535da53937) + + src/xz/coder.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 34be4e6aa62376314fde250ea4f142c18274272f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 23:00:09 +0300 + + liblzma: Omit an unneeded array from the x86 filter + + Fixes: 6aa2a6deeba04808a0fe4461396e7fb70277f3d4 + (cherry picked from commit de06b9f0c0a3f72569829ecadbc9c0a3ef099f57) + + src/liblzma/simple/x86.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 79e329b771210c30ea317dd4d99e8968f3e6f9b2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 22:56:31 +0300 + + CMake: Add test_suffix.sh to the tests + + (cherry picked from commit 7da488cb933fdf51cfc14cb5810beb0766224380) + + tests/tests.cmake | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 86f33bb90c6cfe6950f1d36c9e5dd7fdc9798124 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 22:55:54 +0300 + + Test: Add CMake support to test_suffix.sh + + It needs to find the xz executable from a different directory + and work without config.h. + + (cherry picked from commit a805594ed0b4cbf7b81aa28ff46a8ab3c83c6876) + + tests/test_suffix.sh | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit 1e243ab378e8f78ebb3af741fb38354954cf20f9 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-06 20:45:34 +0300 + + Update INSTALL about MINIX 3 + + The latest stable is 3.3.0 and it's from 2014. + Don't mention the older versions in INSTALL. + 3.3.0 ships with Clang already. + + Testing with 3.4.0beta6 shows that tuklib_physmem + works too so omit comments about that from INSTALL. + Visibility warnigns weren't a problem either. + + Thus it's enough to mention the need for --disable-threads + as configure doesn't autodetect the lack of pthreads. + + (cherry picked from commit 50e19489387774bab3c4a988397d0d9c7a142a46) + + INSTALL | 20 +++++++------------- + 1 file changed, 7 insertions(+), 13 deletions(-) + +commit 8595b5ab3ba766eb6daed890bfe91a16fe329c2c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-02 23:00:16 +0300 + + Windows: Remove the "doc/api" line from README-Windows.txt + + Fixes: 252aa1d67bc015eeba462803ab72edeb7744d864 + (cherry picked from commit 68d18aea1422a2b86b98b71d0b019233d84e01b0) + + windows/README-Windows.txt | 2 -- + 1 file changed, 2 deletions(-) + +commit a3f163a4ad97189744107e964e4dea505fbcc252 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-02 22:59:04 +0300 + + Build: Don't copy doc/api from source tree to distribution tarball + + It was copied if it existed. This was intentional when autogen.sh + still built liblzma API docs with Doxygen. + + Fixes: d3a77ebc04bf1db8d52de2d9b0f07877bc4fd139 + (cherry picked from commit 8ede961374613aa302a13571d662cfaea1cf91f7) + + Makefile.am | 5 ----- + 1 file changed, 5 deletions(-) + +commit cb0e847fe07099c1ef6d8076f6a46e17bc431acb +Author: Sam James <sam@gentoo.org> +Date: 2024-05-02 13:26:40 +0100 + + ci: add SPDX headers + + I've checked over each of these and they're straightforward applications + of the relevant Github Actions. + + (cherry picked from commit 9a6761aa35ed84d30bd2fda2333a4fdf3f46ecdc) + + .github/workflows/freebsd.yml | 2 ++ + .github/workflows/netbsd.yml | 2 ++ + .github/workflows/openbsd.yml | 2 ++ + 3 files changed, 6 insertions(+) + +commit c3c854dc759fe0c5549aa0a730be9e259243edb6 +Author: Yaroslav Halchenko <debian@onerussian.com> +Date: 2024-03-29 14:37:24 -0400 + + codespell: Ignore the THANKS file and debbugs.gnu.org URL + + This way "codespell -i 0" is silent. + + This is the first commit from + https://github.com/tukaani-project/xz/pull/93 + with trivial edits by Lasse Collin. + + (cherry picked from commit 81efe6119f86e3274e512c9eca5ec22b2196c2b3) + + .codespellrc | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 3216301aa20fcf9d5a7485e35a295d5c451d9658 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-30 14:37:11 +0300 + + Add .gitattributes to clean up git-archive output + + (cherry picked from commit 905bfc74fe2670fd9c39014803017ab53d325401) + + .gitattributes | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit f99e7c69ada9e0db0ee1ebbc38c8ce9390cd9788 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 12:11:09 +0300 + + xzdec: Support Landlock ABI version 4 + + This was added to xz in 02e3505991233901575b7eabc06b2c6c62a96899 + but I forgot to do the same in xzdec. + + The Landlock sandbox in xzdec could be stricter as now it's + active only for the last file being decompressed. In xz, + read-only sandbox is used for multi-file case. On the other hand, + xz doesn't go to the strictest mode when processing the last file + when more than one file was specified; xzdec does. + + (cherry picked from commit 3334c71d3d4294a4f6569df3ba9bcf2443dfa501) + + src/xzdec/xzdec.c | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +commit bfe9be7a46cfd3b3069c15f7ba1432192bca1f5b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-30 22:22:45 +0300 + + liblzma: Fix incorrect function type error from sanitizer + + Clang 17 with -fsanitize=address,undefined: + + src/liblzma/common/filter_common.c:366:8: runtime error: + call to function encoder_find through pointer to incorrect + function type 'const lzma_filter_coder *(*)(unsigned long)' + src/liblzma/common/filter_encoder.c:187: note: + encoder_find defined here + + Use a wrapper function to get the correct type neatly. + This reduces the number of casts needed too. + + This issue could be a problem with control flow integrity (CFI) + methods that check the function type on indirect function calls. + + Fixes: 3b34851de1eaf358cf9268922fa0eeed8278d680 + (cherry picked from commit 278563ef8f2b8d98d7f2c85e1a64ec1bc21d26d8) + + src/liblzma/common/filter_decoder.c | 15 ++++++++++++--- + src/liblzma/common/filter_encoder.c | 17 +++++++++++++---- + 2 files changed, 25 insertions(+), 7 deletions(-) + +commit 882eadc5b820b6b1495fc91ba3573ac2aa6c1df3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-30 21:41:11 +0300 + + xz: Avoid arithmetic on a null pointer + + It's undefined behavior. The result wasn't ever used as it occurred + in the last iteration of a loop. + + Clang 17 with -fsanitize=address,undefined: + + $ src/xz/xz --block-list=123 + src/xz/args.c:164:12: runtime error: applying non-zero offset 1 + to null pointer + + Fixes: 88ccf47205d7f3aa314d358c72ef214f10f68b43 + Co-authored-by: Sam James <sam@gentoo.org> + (cherry picked from commit 77c8f60547decefca8f2d0c905d9c708c38ee8ff) + + src/xz/args.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit ec5458e1c9b2beb416781e81ad4ff22b0149b99d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 20:42:00 +0300 + + CMake: Support building liblzma API docs using Doxygen + + This is disabled by default to match the default in Autotools. + Use -DUSE_DOXYGEN=ON to enable Doxygen usage. + + This uses the update-doxygen script, thus this is under if(UNIX) + although Doxygen itself can run on Windows too. + + (cherry picked from commit 64503cc2b76a388ced4ec5f68234a07f0dcddcd5) + + CMakeLists.txt | 40 +++++++++++++++++++++++++++++++--------- + 1 file changed, 31 insertions(+), 9 deletions(-) + +commit 8c93ced56bcb23df723dab23b7477d580720f522 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-20 23:36:39 +0300 + + CMake: List API headers in LIBLZMA_API_HEADERS variable + + This way the same list will be usable in more than one location. + + (cherry picked from commit 0a7f5a80d8532a1d8cfa0a902c9d1ad7651eca37) + + CMakeLists.txt | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +commit f7c9bab0372db357511e42c9c610a2cfe5fca9b1 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 15:16:42 +0300 + + PACKAGERS: Document the optional Doxygen usage + + Also add a note that packagers should check the licensing + of the Doxygen output. + + (cherry picked from commit 541406bee3f09e9813103c6406b10fc6ab2e0d30) + + PACKAGERS | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +commit 28e7d130cb843e96d7e6b0358f8dd58bd1b2a275 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 17:47:09 +0300 + + Build: Add --enable-doxygen to generate and install API docs + + It requires Doxygen. This option is disabled by default. + + (cherry picked from commit e21efdf96f39378fe417479f89e97046680406f5) + + INSTALL | 6 ++++++ + configure.ac | 10 +++++++++- + src/liblzma/api/Makefile.am | 19 +++++++++++++++++++ + 3 files changed, 34 insertions(+), 1 deletion(-) + +commit cca7e6c05bc6cc51c0271c36856b7fe29f65c648 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 15:15:17 +0300 + + Doxygen: update-doxygen: Support out-of-tree builds + + Also, now $0 is used to refer to the script itself. + + (cherry picked from commit 0ece09a575d7e542bda8825808ddd6cf7de8cc4b) + + doxygen/update-doxygen | 110 ++++++++++++++++++++++++++++++------------------- + 1 file changed, 68 insertions(+), 42 deletions(-) + +commit 8090d3dc7f0eea4a3a61f4f6d46a0d0866e345fe +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-28 21:08:00 +0300 + + Doxygen: Simplify Doxyfile and add SPDX license identifier + + This omits all comments and a few non-default options that weren't + needed. Now it contains no copyrighted content from Doxygen itself. + + (cherry picked from commit 2c519f641f266fd897edf680827d9c905f411440) + + doxygen/Doxyfile | 2698 +----------------------------------------------------- + 1 file changed, 25 insertions(+), 2673 deletions(-) + +commit 0721b8bfe558502669f06c97601fe59ad0d52541 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 15:14:02 +0300 + + Doxygen: Don't strip JavaScript anymore + + The stripping method worked well with Doxygen 1.8 and 1.9 but + it doesn't work with Doxygen 1.10 anymore. Since we won't ship + pre-generated liblzma API docs anymore, the extra bloat and + extra license info of the JavaScript files won't affect the + upstream source package anymore. + + (cherry picked from commit bdba39a57530d11b88440df8024002be3d09e4a1) + + doxygen/update-doxygen | 21 --------------------- + 1 file changed, 21 deletions(-) + +commit 1ddb40f6fd286c3c6ef510735112db1ac1b60936 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 17:26:41 +0300 + + Build: Remove old Doxygen rules from top-level Makefile.am + + (cherry picked from commit d3a77ebc04bf1db8d52de2d9b0f07877bc4fd139) + + Makefile.am | 12 ------------ + 1 file changed, 12 deletions(-) + +commit 092af76234b1bc79380427456b3215aa0b80f339 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 15:10:06 +0300 + + Update COPYING to match the autogen.sh and mydist changes + + (cherry picked from commit fd7faa4c338a42a6a40e854b837d285ae2e8c609) + + COPYING | 11 ----------- + 1 file changed, 11 deletions(-) + +commit 77bce9a0a250cfb20333ee0dca036b3193dd4941 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 17:23:43 +0300 + + Build: Don't run update-doxygen as part of "make mydist" + + (cherry picked from commit b2bc55d8a0a9f2f59bfd4302067300e650f6baa3) + + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit 3a2fc62f59b2e8cc45f8d8fd9988b4305efe4bff +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 15:09:48 +0300 + + autogen.sh: Don't generated Doxygen docs anymore + + (cherry picked from commit e9be74f5b129fe8a5388d588e68b1b7f5168a310) + + autogen.sh | 18 +++--------------- + 1 file changed, 3 insertions(+), 15 deletions(-) + +commit b04c16f9a5a8675a87783305568cadfa3f17d999 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 17:41:36 +0300 + + windows/build.bash: Omit Doxygen docs from the package + + They will be omitted from the source tarball and I don't want + to make Doxygen a dependency of build.bash. + + (cherry picked from commit 252aa1d67bc015eeba462803ab72edeb7744d864) + + windows/build.bash | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d4dd3c8f6169adf50cad8fe6872e0f5fcb82475c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 14:14:47 +0300 + + README: Don't mention PDF man pages anymore + + (cherry picked from commit 634095364d87444d62d8ec54c134c0cd4705f5d7) + + README | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit be90720d6cd7fbb1b170794445815f579b444a6f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 14:10:39 +0300 + + Build: Omit PDF man pages from the package + + pdf-local rule was added to create the PDFs still with "make pdf". + The install rules are missing but that likely doesn't matter at all. + + (cherry picked from commit dc684bf76ea23574ee9d88382057381e04e6089a) + + Makefile.am | 29 +++++++++++++++++++---------- + 1 file changed, 19 insertions(+), 10 deletions(-) + +commit f724552d0c1ae2e3aa693d80d8d0da962dfac4e8 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 13:54:39 +0300 + + windows/build.bash: Don't copy PDF man pages to the package + + (cherry picked from commit e3531ab4125cbd5c01ebd3200791350960547189) + + windows/README-Windows.txt | 2 +- + windows/build.bash | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 00e774819c6550a8eac219e9f6f083ab2b155505 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-28 01:34:50 +0300 + + Tests: test_index: Fix failures when features are disabled + + Fixes: cd88423e76d54eb72aea037364f3ebb21f122503 + (cherry picked from commit 710a4573ef2cbd19c66318c3b2d1388e418e26c7) + + tests/test_index.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +commit 51133ad71eecc19bdb3ab287a0732fd9441753f4 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-20 17:09:11 +0300 + + CMake: Keep the build working if the "tests" directory is missing + + This moves the tests section as is from CMakeLists.txt into + tests/tests.cmake. CMakeLists.txt now includes tests/tests.cmake + if the latter file exists. + + Now it's possible to delete the whole "tests" directory and + building with CMake will still work normally, just without + the tests. This way the tests are readily available for those + who want them, and those who won't run the tests anyway have + a straightforward way to ensure that nothing from the "tests" + directory can affect the build process. + + (cherry picked from commit aaff75c3486c4489ce88b0efb36b41cf138af7c3) + + CMakeLists.txt | 76 ++--------------------------------------------- + tests/Makefile.am | 1 + + tests/tests.cmake | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 92 insertions(+), 73 deletions(-) + +commit 85b5595b67f0081b2a900104ed7589de4bb75e12 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-20 13:12:50 +0300 + + Tests: Remove x86 and SPARC BCJ tests + + These are very old but the exact test file isn't easy to reproduce + as it was compiled from a short C program (bcj_test.c) long ago. + These tests weren't very good anyway, just a little better than nothing. + + (cherry picked from commit a5f2aa5618fe9183706c9c514c3067985f6c338b) + + tests/Makefile.am | 7 ---- + tests/bcj_test.c | 64 --------------------------------- + tests/compress_prepared_bcj_sparc | Bin 1240 -> 0 bytes + tests/compress_prepared_bcj_x86 | Bin 1388 -> 0 bytes + tests/files/README | 8 ----- + tests/files/good-1-sparc-lzma2.xz | Bin 612 -> 0 bytes + tests/files/good-1-x86-lzma2.xz | Bin 716 -> 0 bytes + tests/test_compress_prepared_bcj_sparc | 4 --- + tests/test_compress_prepared_bcj_x86 | 4 --- + 9 files changed, 87 deletions(-) + +commit d8228d1ea08155a17acaadd76ed95805d3b0a929 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 18:30:40 +0300 + + Tests: test_index: Edit a misleading test + + (cherry picked from commit d879686469c9c4bf2a7c0bb6420ebe4530fc8f07) + + tests/test_index.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 2358ef8238f166c49e66f438e7494d4d352eb113 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 16:46:01 +0300 + + Tests: test_index: Use minimal values to test integer overflow + + (cherry picked from commit 612005bbdb0dea9dc09e9e2e9cc16a15c1480acd) + + tests/test_index.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 54f4a4162aae8796580489013583d6148be5a473 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 15:13:39 +0300 + + Tests: test_index: Test lzma_index_buffer_decode() more + + (cherry picked from commit 4ad88b2544c2aaf8de8f38af54587098cbe66c1d) + + tests/test_index.c | 29 ++++++++++++++++++++++++++--- + 1 file changed, 26 insertions(+), 3 deletions(-) + +commit 85ab59a6b70db33f320a3ea7a854249cb693dea2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 15:08:29 +0300 + + Tests: test_index: Test that *i = NULL is done on LZMA_PROG_ERROR + + On LZMA_DATA_ERROR from lzma_index_buffer_decode(), *i = NULL was + already done but this adds a test for that case too. + + (cherry picked from commit 575b11b0d291e66c5fce31ce7a72f11436d57c83) + + tests/test_index.c | 31 +++++++++++++++++++++++++++---- + 1 file changed, 27 insertions(+), 4 deletions(-) + +commit fb42599e44dde417305c7d92fd782147ca923079 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 15:01:25 +0300 + + Tests: test_index: Test lzma_index_buffer_encode() with empty output buf + + (cherry picked from commit 2c970debdb285823f01f75e875561d893345ac2b) + + tests/test_index.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 20cac20f63a96a39391f2d613bef0f7bd6553495 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:59:55 +0300 + + Tests: test_index: Replace if-statements with tuktest assertions + + (cherry picked from commit cd88423e76d54eb72aea037364f3ebb21f122503) + + tests/test_index.c | 22 +++++++++------------- + 1 file changed, 9 insertions(+), 13 deletions(-) + +commit 91e3ea8735752db5d0373991e84607196070aeaa +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:56:16 +0300 + + Tests: test_index: Make it clear that my_alloc() has no integer overflows + + liblzma guarantees that the product of the allocation size arguments + will fit in size_t. + + Putting the pre-increment in the if-statement was clearly wrong + although in practice it didn't matter here as the function is + called only a couple of times. + + (cherry picked from commit 7f865577a6224fbbb5f5ca52574b62ea8ac9bf51) + + tests/test_index.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit df1659a6c8367db69e82e2ea59ad5f959cf4e615 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:51:52 +0300 + + Tests: test_index: Verify also iter.block.number_in_stream + + (cherry picked from commit 12313a3b6596cdcf012e180597f84d231f8730d3) + + tests/test_index.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit e083e95dbfda73900109cca4c82c8713d0a1da21 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:51:06 +0300 + + Tests: test_index: Check cases that aren't a multiple of 4 bytes + + (cherry picked from commit ad2654010d9d641ce1601beeff00630027e6bcd4) + + tests/test_index.c | 33 +++++++++++++++++++++++++-------- + 1 file changed, 25 insertions(+), 8 deletions(-) + +commit b0d3b86ecf1881d10e6614b64b0fcc6c16a3b08f +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:40:25 +0300 + + Tests: test_index: Edit comments and white space + + (cherry picked from commit 2524fcf2b68b662035437cee8edbe80067c0c240) + + tests/test_index.c | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit bae288ea6ffb976c36e2387c03d75ce84a8a1034 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-27 14:33:38 +0300 + + liblzma: index_decoder: Fix missing initializations on LZMA_PROG_ERROR + + If the arguments to lzma_index_decoder() or lzma_index_buffer_decode() + were such that LZMA_PROG_ERROR was returned, the lzma_index **i + argument wasn't touched even though the API docs say that *i = NULL + is done if an error occurs. This obviously won't be done even now + if i == NULL but otherwise it is best to do it due to the wording + in the API docs. + + In practice this matters very little: The problem can occur only + if the functions are called with invalid arguments, that is, + the calling application must already have a bug. + + (cherry picked from commit 71eed2520e2eecae89bade9dceea16e56cfa2ea0) + + src/liblzma/common/index_decoder.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit f10cb93f335900a29e50f990b751996ef026b3a3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-26 18:25:18 +0300 + + CMake: Bump maximum policy version to 3.29 + + (cherry picked from commit 0478473953f50716a2bc37b619b1c7dc2682b1ad) + + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 59055d70cdd3df091264ae9da793821bfd65314d +Author: Sam James <sam@gentoo.org> +Date: 2024-04-13 22:30:44 +0100 + + ci: add NetBSD + + (cherry picked from commit a607e2b40d23f7d998dbaba76692aa30b4c3d9d3) + + .github/workflows/netbsd.yml | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +commit 812c1f95f37751aaa1e020fc2360949a674842fd +Author: Sam James <sam@gentoo.org> +Date: 2024-04-13 23:49:26 +0100 + + ci: add FreeBSD + + (cherry picked from commit 72c210336de26fb87a928160d025fa10a638d23b) + + .github/workflows/freebsd.yml | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +commit d2a4f963c28b864aa179464f7827cc10c6e1365d +Author: Sam James <sam@gentoo.org> +Date: 2024-04-13 23:16:08 +0100 + + ci: add OpenBSD + + (cherry picked from commit b526ec2dbfb5889845ea60548c4f5b1f97d84ab2) + + .github/workflows/openbsd.yml | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +commit 493bc57c33385bda5ad32d01ab73dcfe8f5e7ced +Author: Sam James <sam@gentoo.org> +Date: 2024-04-15 05:53:01 +0100 + + liblzma: outqueue: add header guard + + Reported by github's codeql. + + (cherry picked from commit c7ef767c49351743d8d011574abb9e200bf6b24f) + + src/liblzma/common/outqueue.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit cede418d4f8e1fb4c8a30839fa5d3b14743e83d4 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-15 05:53:56 +0100 + + liblzma: easy_preset: add header guard + + Reported by github's codeql. + + (cherry picked from commit 55dcae3056d95cb2ddb8b560c12ba7596bc79f2c) + + src/liblzma/common/easy_preset.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 6e76a25df28b47407a201bf0381fa6d3c80cb0bb +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-25 14:00:57 +0300 + + tuklib_integer: Rename bswapXX to byteswapXX + + The __builtin_bswapXX from GCC and Clang are preferred when + they are available. This can allow compilers to emit the x86 MOVBE + instruction instead of doing a load + byteswap as two instructions + (which would happen if the byteswapping is done in inline asm). + + bswap16, bswap32, and bswap64 exist in system headers on *BSDs + and Darwin. #defining bswap16 on NetBSD results in a warning about + macro redefinition. It's safest to avoid this namespace conflict + completely. + + No OS supported by tuklib_integer.h uses byteswapXX names and + a web search doesn't immediately find any obvious danger of + namespace conflicts. So let's try these still-pretty-short names + for the macros. + + Thanks to Sam James for pointing out the compiler warning on + NetBSD 10.0. + + (cherry picked from commit 4ffc60f32397371769b7d6b5e3ed8626292d58df) + + src/common/tuklib_integer.h | 47 ++++++++++++++++++++------------------ + src/liblzma/check/crc32_fast.c | 4 ++-- + src/liblzma/check/crc32_tablegen.c | 2 +- + src/liblzma/check/crc64_fast.c | 4 ++-- + src/liblzma/check/crc64_tablegen.c | 2 +- + 5 files changed, 31 insertions(+), 28 deletions(-) + +commit 0ca14871f306b97ce81bfe44c4a39b6b2af31bb3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-24 01:20:26 +0300 + + liblzma: API doc cleanups + + (cherry picked from commit 08ab0966a75b501aa7c717622223f0c13a113c75) + + src/liblzma/api/lzma/container.h | 2 +- + src/liblzma/api/lzma/index.h | 6 +++--- + src/liblzma/api/lzma/vli.h | 5 ++--- + 3 files changed, 6 insertions(+), 7 deletions(-) + +commit 94a462850bc8718f5dd5b30116bce2165b2403c2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-23 16:35:33 +0300 + + Tests: test_filter_str: Add a few assertions + + (cherry picked from commit 3ac8a9bb4cccbee88350696dc9c645c48d77c989) + + tests/test_filter_str.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 72058ca22a7f3c9c67ed58be624f8302c6337cd7 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-23 16:35:08 +0300 + + Tests: test_filter_str: Move one assertion and add a comment + + (cherry picked from commit 26c69be80523b05c84dea86c47c4ddd9a10945d7) + + tests/test_filter_str.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit c59ebbe1c6dd18b78a046aae3133702dd52c352e +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-23 16:26:06 +0300 + + Tests: test_filter_str: Tweak comments and white space + + (cherry picked from commit 4f6af853bc99904efb8b6c28a0af7b81a8476c1b) + + tests/test_filter_str.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit ceda860934b0272689d0722ceeb490cf9c559956 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-23 16:25:22 +0300 + + Tests: test_filter_str: Add missing RISC-V case + + Fixes: 89ea1a22f4ed3685b053b7260bc5acf6c75d1664 + (cherry picked from commit c92663aa1bd576e0615498a4189acf0df12e84b9) + + tests/test_filter_str.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2234b7cc472e62f3401216a71261579342fa2959 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-22 22:23:32 +0300 + + Tests: test_filter_str: Test *error_pos more thoroughly + + (cherry picked from commit b0366df1d7ed26268101f9303a001c91c0806dfc) + + tests/test_filter_str.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 76 insertions(+), 1 deletion(-) + +commit 3ba3ef57f929670adb1f9c5e5207a81a29374237 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-22 21:54:39 +0300 + + liblzma: lzma_str_to_filters: Set *error_pos on all errors + + The API docs clearly say that if error_pos isn't NULL then *error + is always set on any error. However, it wasn't touched if str == NULL + or filters == NULL or unsupported flags were specified. + + Fixes: cedeeca2ea6ada5b0411b2ae10d7a859e837f203 + (cherry picked from commit 70d12dd069bb9bb0d6bb1c8fafc4e6f77780263d) + + src/liblzma/common/string_conversion.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 57ad820e15381344a812c78ce9b67a77a60b9cf3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-22 20:31:25 +0300 + + liblzma: Clean up white space + + (cherry picked from commit ed8e552395701fbf046027cebc8be4a6755b263f) + + src/liblzma/lz/lz_encoder.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ba0b5bfe7cb3cdbd9a4e3c268e10c304cb834e8a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-22 18:35:19 +0300 + + Tests: test_filter_flags: Edit comments and style + + (cherry picked from commit 2f06920f20b1ad63b7953dc09569e1d424998849) + + tests/test_filter_flags.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit d2ed6759596185ac6a9c69ea713c27cd4bd1d9ba +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-22 16:39:44 +0300 + + Tests: Fix C99/C11 compatibility when features are disabled + + The array could become empty and then the initializer would be + simply {} which is allowed only in GNU-C and C23. + + (cherry picked from commit b101e1d1dbc81577c0c9aa0cb89cf2e46a15eb82) + + tests/test_filter_flags.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +commit 9a70e93fef3fd5943484e56f1881a7c6e3296027 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-21 20:32:16 +0300 + + DOS: Omit useless defines from config.h + + (cherry picked from commit f8f3a220ac8afcb8cb2812917d3b77e00c2eab0d) + + dos/config.h | 12 ------------ + 1 file changed, 12 deletions(-) + +commit dc4740f720e08bdd496aa2736db3b7aea6dd3d1e +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-21 20:27:50 +0300 + + Build: Omit useless checks for fcntl.h, limits.h, and sys/time.h + + (cherry picked from commit fc1921b04b8840caaa777c2bd5340d41b259da20) + + configure.ac | 6 ------ + 1 file changed, 6 deletions(-) + +commit 6e210d5766b25d36729152a13c5889bb0605a1e3 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 22:04:21 +0300 + + liblzma: Silence a warning from Coverity static analysis + + It is logical why it cannot know for sure that the value has + to be at most 4 if it is less than 16. + + The x86 filter is based on a very old LZMA SDK version. Newer + ones have quite a different implementation for the same filter. + + Thanks to Sam James. + + (cherry picked from commit 6aa2a6deeba04808a0fe4461396e7fb70277f3d4) + + src/liblzma/simple/x86.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit 4019b012f29008ea6545aba6fe6c141a2d920ae2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 23:18:19 +0300 + + Update .gitignore + + (cherry picked from commit e89d3e83b4496d0b5410870634970c0aa9721d59) + + .gitignore | 21 ++++++++------------- + 1 file changed, 8 insertions(+), 13 deletions(-) + +commit 09a0311a1e8cdefbcfab9e490cdd41c97a459d24 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 20:53:24 +0300 + + Tests: test_lzip_decoder: Tweak coding style and comments + + (cherry picked from commit 86fc4ee859709da0ff9617a1490f13ddac0a109b) + + tests/test_lzip_decoder.c | 58 +++++++++++++++++++++++------------------------ + 1 file changed, 28 insertions(+), 30 deletions(-) + +commit 3117336a0291309ddd2a54d2966a589f9f806850 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 20:51:36 +0300 + + Tests: test_lzip_decoder: Remove redundant initializations + + (cherry picked from commit 38be573a279bd7b608ee7d8509ec10884e6fb0d5) + + tests/test_lzip_decoder.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit f78081eb12c804ec4f5a3dc569b859646b16e9e5 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-19 20:47:24 +0300 + + Tests: test_lzip_decoder: Remove unneeded tuktest_malloc() calls + + (cherry picked from commit d7e4bc53eacfab9f3de95d8252bdfdc9419079c9) + + tests/test_lzip_decoder.c | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +commit 7413383e4280065b79ca70abe4d8ebc78055b35a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-15 20:35:07 +0300 + + xz: Fix white space error. + + Thanks to xx on #tukaani. + + (cherry picked from commit eeca8f7c5baf1ad69606bb734d5001763466d58f) + + src/xz/args.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eed2f26c0edb6e31a50d48bab4ff619778690a1e +Author: Sam James <sam@gentoo.org> +Date: 2024-04-11 23:01:44 +0100 + + xz: add missing noreturn for message_filters_help + + Fixes: a165d7df1964121eb9df715e6f836a31c865beef + (cherry picked from commit 462ca9409940a19f743daee6b3bcc611277d0007) + + src/xz/message.h | 1 + + 1 file changed, 1 insertion(+) + +commit 2633d8df616405bd54fd748d7bf887ebc4505b88 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-11 19:34:04 +0100 + + xz: signals: suppress -Wsign-conversion on macOS + + On macOS, we get: + ``` + signals.c: In function 'signals_init': + signals.c:76:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] + 76 | sigaddset(&hooked_signals, sigs[i]); + | ^~~~~~~~~ + signals.c:81:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] + 81 | sigaddset(&hooked_signals, message_progress_sigs[i]); + | ^~~~~~~~~ + signals.c:86:9: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] + 86 | sigaddset(&hooked_signals, SIGTSTP); + | ^~~~~~~~~ + ``` + + We use `int` for `hooked_signals` but we can't just cast to whatever + `sigset_t` is because `sigset_t` is an opaque type. It's an unsigned int + on macOS. On macOS, `sigaddset` is implemented as a macro. + + Just suppress -Wsign-conversion for `signals_init` for macOS given + there's no real nice way of fixing this. + + (cherry picked from commit 863f13d2828b99b0539ce73f9cf85bde32358034) + + src/xz/signals.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 50fb269c7a9cf62a9f3fe08859e2aa4348b600a7 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-13 22:19:40 +0300 + + Tests: test_microlzma: Add a "FIXME?" about LZMA_FINISH handling + + (cherry picked from commit fcbd0d199933a69713cb293cbd7409a757d854cd) + + tests/test_microlzma.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 3e2ff2d38c54c8fc7ce15aaf91185dc105d9c92c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-13 18:05:31 +0300 + + Tests: test_microlzma: Tweak comments, coding style, and minor details + + A few lines were reordered, a few ARRAY_SIZE were changed to sizeof, + and a few uint32_t were changed to size_t. No real functional changes + were intended. + + (cherry picked from commit 0fe2dfa68355d2b165544b2bc8babf77dcc2039e) + + tests/test_microlzma.c | 149 +++++++++++++++++++++++++++---------------------- + 1 file changed, 83 insertions(+), 66 deletions(-) + +commit ebc8b8de19d641c37ab7959a224bcd0ff4c0833f +Author: Ryan Carsten Schmidt <git@ryandesign.com> +Date: 2024-04-12 19:31:13 -0500 + + CI: Use only the active CPUs on macOS + + hw.ncpu counts all CPUs including inactive ones. hw.activecpu counts + only the active CPUs. + + (cherry picked from commit 97f0ee0f1f903f4e7c4ea23e9b89d687025d2992) + + build-aux/ci_build.bash | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1e63f7d53648beb6dd5acb5771850d7c4bc30477 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 18:33:55 +0100 + + ci: rename ci_build.sh -> ci_build.bash + + We discussed the name and it's less cognitive load to just call it '.bash' + so you don't have an immediate question about if bashisms are OK. + + (cherry picked from commit 73f629e321b74f68c9954728fa4f19261afccf46) + + .github/workflows/ci.yml | 52 ++++++++++++++++---------------- + .github/workflows/windows-ci.yml | 20 ++++++------ + build-aux/{ci_build.sh => ci_build.bash} | 0 + 3 files changed, 36 insertions(+), 36 deletions(-) + +commit aea54a4724414466a20afd7493156d40d0a2741c +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 17:42:23 +0100 + + ci: build in parallel by default + + (cherry picked from commit 8709407a9ef8e7e8aec117879400e4dd3e227ada) + + build-aux/ci_build.sh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 4381fcf00b2fabb6dcc9fd5cf35d520feb9e775a +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 15:41:08 +0100 + + ci: default to -O2 + + We need this for when we're passing sanitizer flags or -gdwarf-4 for Clang + with Valgrind. Just always start with -O2 if CFLAGS isn't set in the + environment and append what was passed on the command line. + + (cherry picked from commit 65bf7e0a1ca6386f17608e8afb84ac470c18d23f) + + build-aux/ci_build.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 752ba5ed99ec754bafbdc4d87a2876cb2566ecc4 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 15:17:47 +0100 + + ci: make automake's test runner verbose on failures + + This is a lot easier to work with than the save-logs thing the action + tries to do... + + (cherry picked from commit bc899f9e0700ad153bd65f4804c4de7515c8a847) + + build-aux/ci_build.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cc21af171599ffe0419fc32a30edd3ef7d479865 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 12:38:51 +0100 + + ci: make UBSAN abort on errors + + Unfortunately, UBSAN doesn't do this by default. See also the change + I made in Meson for this in October [0]. + + [0] https://github.com/mesonbuild/meson/commit/7b7d2e060b447de9c2642848847370a58711ac1c + + (cherry picked from commit b5e3470442531717b2457b40ab412740296af1bc) + + .github/workflows/ci.yml | 1 + + 1 file changed, 1 insertion(+) + +commit 2d2d5f14b392cd1aeddab7ce34fd50ba5422e5b5 +Author: Sam James <sam@gentoo.org> +Date: 2024-04-10 11:43:10 +0100 + + ci: test Valgrind + + Using `--trace-children=yes` has a trade-off here, as it makes + `test_scripts.sh` pretty slow when calling various non-xz utilities. + + But I also feel like it's not useless to have Valgrind used there and it's + not easy to exclude Valgrind just for that one test... + + I did consider using AX_VALGRIND_CHECK [0][1] but I couldn't get it working + immediately with some conditionally-built tests and I wondered if it was + worth spending time on at least while we're debating xz's future build + system situation. + + [0] https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html + [1] https://tecnocode.co.uk/2014/12/23/automatically-valgrinding-code-with-ax_valgrind_check/ + + (cherry picked from commit 6c095a98fbec70b790253a663173ecdb669108c4) + + .github/workflows/ci.yml | 11 ++++++++++- + build-aux/ci_build.sh | 8 +++++--- + 2 files changed, 15 insertions(+), 4 deletions(-) + +commit 5d20a612051fac3ca6d99abe3cd7e0e3370e5b67 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 23:20:02 +0300 + + liblzma: CRC: Simplify table omission macros + + A macro is useful to prevent a single #if directive from + getting too ugly but only one macro is needed for all archs. + + (cherry picked from commit 6286c1900c2d2ca33d9b1b397122c7bcdb9a4d59) + + src/liblzma/check/crc32_table.c | 10 ++++------ + src/liblzma/check/crc64_table.c | 4 ++-- + src/liblzma/check/crc_common.h | 5 +++-- + 3 files changed, 9 insertions(+), 10 deletions(-) + +commit 2a80827e23169c624560ac89714bf5084cbead43 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 23:09:40 +0300 + + liblzma: ARM64 CRC: Fix omission of CRC32 table + + The macro name had an odd typo so the table wasn't omitted + when it should have. + + Fixes: 1940f0ec28f08c0ac72c1413d9706fb82eabe6ad + (cherry picked from commit 45da936c879acf4f053a3055665bf1b10ded4462) + + src/liblzma/check/crc32_table.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a54117377151356c1e2494ba1febc245cb71b51c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 22:21:51 +0300 + + Build: If ARM64 feature detection func is found, stop looking for others + + This can speed up configure a tiny bit. + + Fixes: c5f6d79cc9515a7f22d7ea4860c6cc394b295732 + (cherry picked from commit 308a9af85400b0e2019f0f012c8354e831d06d65) + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9223ad6e78a666cc9f9aba135d1755fec184a24a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 22:04:27 +0300 + + liblzma: ARM64 CRC32: Change style of the macOS code to match FreeBSD + + I didn't test this but it shouldn't change any functionality. + + Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575 + (cherry picked from commit fc43cecd32bf9d5f8caa599206b15c9569af1eb6) + + src/liblzma/check/crc32_arm64.h | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 32ceb2c36a0e450037bbe906c2a1ea42607b9d21 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 21:59:27 +0300 + + liblzma: ARM64 CRC32: Add error checking to FreeBSD-specific code + + Also add parenthesis to the return statement. + + I didn't test this. + + Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575 + (cherry picked from commit 1024cd4cd966b998fedec51e385e9ee9a49b3c57) + + src/liblzma/check/crc32_arm64.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 42915101e914dba353c236925bc1d5e4826d3f7a +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 21:56:33 +0300 + + liblzma: ARM64 CRC32: Use negation instead of subtracting from 8 + + Subtracting from 0 is negation, this just keeps warnings away. + + Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575 + (cherry picked from commit 2337f7021c860b026e3e849e60a9ae8d09ec0ea0) + + src/liblzma/check/crc32_arm64.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 42a9482b48f0171852fbaddbdc729a56f2daa547 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-10 21:55:10 +0300 + + liblzma: ARM64 CRC32: Tweak coding style and comments + + (cherry picked from commit d8fffd01aa1a3c18e437a222abd34699e23ff5e7) + + src/liblzma/check/crc32_arm64.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 38a3ec5a7e2ddeee3686be64b037aa1377f31fd1 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-09 17:47:01 +0300 + + CI: Remove ifunc support. + + (cherry picked from commit 986865ea2f9d1f8dbef4a130926df106b0f6d41a) + + .github/workflows/ci.yml | 13 +++---------- + build-aux/ci_build.sh | 5 +---- + 2 files changed, 4 insertions(+), 14 deletions(-) + +commit 34d1252f093944ff350a88a6196539f95902ad41 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-09 17:43:16 +0300 + + liblzma: Remove ifunc support. + + This is *NOT* done for security reasons even though the backdoor + relied on the ifunc code. Instead, the reason is that in this + project ifunc provides little benefits but it's quite a bit of + extra code to support it. The only case where ifunc *might* matter + for performance is if the CRC functions are used directly by an + application. In normal compression use it's completely irrelevant. + + (cherry picked from commit 689ae2427342a2ea1206eb5ca08301baf410e7e0) + + CMakeLists.txt | 79 --------------------------------------- + INSTALL | 8 ---- + configure.ac | 79 --------------------------------------- + src/liblzma/check/crc32_fast.c | 48 +++--------------------- + src/liblzma/check/crc64_fast.c | 21 ----------- + src/liblzma/check/crc_common.h | 9 +---- + src/liblzma/check/crc_x86_clmul.h | 11 +----- + 7 files changed, 8 insertions(+), 247 deletions(-) + +commit a594b39685051cd1ec866360bc4dd6c22f301bb4 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 22:04:41 +0300 + + tests/files/README: Update the main heading. + + (cherry picked from commit 6b4c859059a7eb9b0547590c081668e14ecf8af6) + + tests/files/README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fa76e3ef597ee2e9d150461a42d270a386204042 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 22:02:45 +0300 + + tests/files/README: Explain how to recreate the ARM64 test files. + + (cherry picked from commit 2a851e06b891ce894f918faff32a6cca6fdecee6) + + tests/files/README | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +commit 112fa0aba6be30968811c9131f1b995cf9e92e75 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 21:51:55 +0300 + + debug: Add generator for the ARM64 test file data. + + (cherry picked from commit 3d09b721b94e18fe1f853a04799697f5de10b291) + + debug/Makefile.am | 3 +- + debug/testfilegen-arm64.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 118 insertions(+), 1 deletion(-) + +commit 1a1f3d0323d5991a3238566e8f517d5116358b5c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 21:19:38 +0300 + + xz man page: Use .ft CR instead of CW to silence warnings from groff. + + (cherry picked from commit 31ef676567c9d6fcc4ec9fc833c312f7a7c21c48) + + src/xz/xz.1 | 32 ++++++++++++++++---------------- + 1 file changed, 16 insertions(+), 16 deletions(-) + +commit 9f9203f574f895c40a86a83c45c6bb79c25bb5d2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 19:28:35 +0300 + + Fix NEWS for 5.6.0 and 5.6.1. + + (cherry picked from commit 780cbf29d5a88db2b546e9b7b019c4c33ca72685) + + NEWS | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 12876b33c79e36d7e51e8ba6ab7162bd2129cb5b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 19:22:26 +0300 + + Remove the XZ logo. + + (cherry picked from commit bfd0c7c478e93a1911b845459549ff94587b6ea2) + + COPYING | 5 - + COPYING.CC-BY-SA-4.0 | 427 --------------------------------------------------- + Makefile.am | 2 - + README | 2 - + doc/xz-logo.png | Bin 6771 -> 0 bytes + doxygen/Doxyfile | 6 +- + doxygen/footer.html | 13 -- + 7 files changed, 3 insertions(+), 452 deletions(-) + +commit 879295d91f06c241fd8a8fc1ca95776dbeb45f93 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 18:27:39 +0300 + + Update maintainer and author info. + + The other maintainer suddenly disappeared. + + (cherry picked from commit 77a294d98a9d2d48f7e4ac273711518bf689f5c4) + + AUTHORS | 9 +++++++-- + README | 10 +++------- + THANKS | 1 - + src/liblzma/api/lzma.h | 2 +- + 4 files changed, 11 insertions(+), 11 deletions(-) + +commit 859617d30d81317236e004b323fed0883f932dcf +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 18:05:32 +0300 + + Docs: Update .xz file format specification to 1.2.1. + + This only reverts the XZ URL changes. + + (cherry picked from commit 8dd03d4484ccf80022722a16d0ed9b37f2b58072) + + doc/xz-file-format.txt | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit eeb74fba1f6ea334a519015938b4a26c6ba5d4eb +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 17:33:56 +0300 + + Update website URLs back to tukaani.org. + + The XZ projects were moved back to their original URLs. + + (cherry picked from commit 17aa2e1a796d3f758802df29afc89dcf335db567) + + CMakeLists.txt | 2 +- + COPYING | 3 +-- + README | 4 ++-- + configure.ac | 2 +- + doc/faq.txt | 2 +- + doc/lzma-file-format.txt | 12 ++++++------ + dos/config.h | 2 +- + src/liblzma/api/lzma.h | 2 +- + src/xz/xz.1 | 6 +++--- + src/xzdec/xzdec.1 | 4 ++-- + windows/README-Windows.txt | 2 +- + 11 files changed, 20 insertions(+), 21 deletions(-) + +commit a7b9cd70004bfc1abadc7e865dfce765f7b8b59d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 17:07:08 +0300 + + xzdec: Tweak coding style and comments. + + (cherry picked from commit 2739db981023373a2ddabc7b456c7e658bb4f582) + + src/xzdec/xzdec.c | 32 +++++++++++++++++++++----------- + 1 file changed, 21 insertions(+), 11 deletions(-) + +commit ebe9d6d8cb27168706078009b3f64da8fde63833 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 15:53:46 +0300 + + tests/ossfuzz: Tiny fix to a comment. + + (cherry picked from commit 408b6adb2a07d07c6535f859571cca38837caaf3) + + tests/ossfuzz/fuzz_decode_stream.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 78ab47d65d916207233abbcdb0ccfd6efb946c05 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-30 14:36:28 +0200 + + CMake: Fix sabotaged Landlock sandbox check. + + It never enabled it. + + (cherry picked from commit f9cf4c05edd14dedfe63833f8ccbe41b55823b00) + + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5f178c364c3b5c6fe87099b7624d5c76995ff8e6 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-05-22 14:08:33 +0300 + + Delete SECURITY.md from v5.6 + + It's too easily out of date in the stable branches. + It's not included in the release packages anyway. + + .github/SECURITY.md | 29 ----------------------------- + 1 file changed, 29 deletions(-) + +commit b3a756188004a16de5956c368e3b0efd1a9bccb0 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-22 17:46:30 +0200 + + liblzma: memcmplen.h: Add a comment why subtraction is used. + + (cherry picked from commit 0b99783d63f27606936bb79a16c52d0d70c0b56f) + + src/liblzma/common/memcmplen.h | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 94939a145f362ff8b09fb37fc72901743f7f5cb2 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-15 17:43:39 +0200 + + INSTALL: Document arguments of --enable-symbol-versions. + + (cherry picked from commit 8a25ba024d55610c448c6e4f1400a00bae51b493) + + INSTALL | 43 +++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 39 insertions(+), 4 deletions(-) + +commit fa14c8aaf0d0266b7e0c3b7c766159299c1a0f18 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-15 17:15:50 +0200 + + Build: Use only the generic symbol versioning with NVIDIA HPC Compiler. + + This does the previous commit with CMake. + + AC_EGREP_CPP uses AC_REQUIRE so the outermost if-commands must + be changed to AS_IF to ensure that things wont break some day. + See 5a5bd7f871818029d5ccbe189f087f591258c294. + + (cherry picked from commit 49324b711f9d42b3543bf2f3ae598eaa03360bd5) + + configure.ac | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +commit 73baa8d99b51c7623ed95afe6411302d9ff56864 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-15 16:36:35 +0200 + + CMake: Use only the generic symbol versioning with NVIDIA HPC Compiler. + + It doesn't support the __symver__ attribute or __asm__(".symver ..."). + The generic symbol versioning can still be used since it only needs + linker support. + + (cherry picked from commit c273123ed0ebaebf49994057a7fe98aae7f42c40) + + CMakeLists.txt | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 886633f42376f4648d931917733c8a59fb2e1f6c +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-13 21:38:24 +0200 + + Update THANKS. + + (cherry picked from commit df7f487648d18a3992386a59b8a061edca862d17) + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 760f622f0d73632df2347aaca7ac7ff5761e98b6 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-13 21:30:18 +0200 + + liblzma: Minor comment edits. + + (cherry picked from commit 3217b82b3ec023bf8338249134a076bea0ea30ec) + + src/liblzma/common/string_conversion.c | 4 ++-- + src/liblzma/delta/delta_decoder.c | 2 ++ + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit 403b4c78b81f67bc3787542f55f555407253316c +Author: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> +Date: 2024-03-13 13:07:13 +0100 + + liblzma: Fix building with NVHPC (NVIDIA HPC SDK). + + NVHPC compiler has several issues that make it impossible to + build liblzma: + - the compiler cannot handle unions that contain pointers that + are not the first members; + - the compiler cannot handle the assembler code in range_decoder.h + (LZMA_RANGE_DECODER_CONFIG has to be set to zero); + - the compiler fails to produce valid code for delta_decode if the + vectorization is enabled, which results in failed tests. + + This introduces NVHPC-specific workarounds that address the issues. + + (cherry picked from commit 096bc0e3f8fb4bfc4d2f3f64a7f219401ffb4c31) + + src/liblzma/common/string_conversion.c | 6 ++++-- + src/liblzma/delta/delta_decoder.c | 3 +++ + src/liblzma/rangecoder/range_decoder.h | 1 + + 3 files changed, 8 insertions(+), 2 deletions(-) + +commit 1888fb49f629340758e98e69d5aa328f6f73c5e1 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-13 21:17:10 +0200 + + CMake: Disable symbol versioning on non-glibc Linux. + + This better matches what configure.ac does. For example, musl has + only basic symbol versioning support: + + https://wiki.musl-libc.org/functional-differences-from-glibc.html#Symbol_versioning + + configure.ac tries to enable symbol versioning only with glibc + so now CMake does the same. + + (cherry picked from commit 2ad7fad67080e88fa7fc191f9d613d8b7add9c62) + + CMakeLists.txt | 22 ++++++++++++++++++++-- + 1 file changed, 20 insertions(+), 2 deletions(-) + +commit 4b3c84e8eebbcf712fc2396dbb8117cce2d72464 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-13 20:32:46 +0200 + + CMake: Make symbol versioning configurable. + + (cherry picked from commit 82f0c0d39eb2c026b1d96ee706f70ace868d4ed4) + + CMakeLists.txt | 62 +++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 42 insertions(+), 20 deletions(-) + +commit 69d1e20208eb9bd1f4f1c8ee4e49cc82d681a877 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-13 19:47:36 +0200 + + Build: Style tweaks to configure.ac. + + The AC_MSG_ERROR line is overlong anyway as are a few other + AC_MSG_ERROR lines already. + + (cherry picked from commit 45d33bfc45e4295b8ad743bc2ae61cc724f98076) + + configure.ac | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 051d6b5c85a874c78249693865fd751088f403a2 +Author: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> +Date: 2024-03-12 20:03:49 +0100 + + Build: Let the users override the symbol versioning variant. + + There are cases when the users want to decide themselves whether + they want to have the generic (even on GNU/Linux) or the linux + (even if we do not recommend that) symbol versioning variant. + The former might be needed to circumvent compiler issues (i.e. + the compiler does not support all features that are required + for the linux versioning), the latter might help in overriding + the assumptions made in the configure script. + + (cherry picked from commit f56ed6fac6619b56b005878d3b5210e2f0d721c0) + + configure.ac | 91 +++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 50 insertions(+), 41 deletions(-) + +commit 95dcea4b5df0b180af461e4584d2bcf7725e3aef +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-09 18:22:16 +0300 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit 1107712e372f7593ad729764c0c2644d0e4aa675 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-04-08 15:32:58 +0300 + + Remove the backdoor found in 5.6.0 and 5.6.1 (CVE-2024-3094). + + While the backdoor was inactive (and thus harmless) without inserting + a small trigger code into the build system when the source package was + created, it's good to remove this anyway: + + - The executable payloads were embedded as binary blobs in + the test files. This was a blatant violation of the + Debian Free Software Guidelines. + + - On machines that see lots bots poking at the SSH port, the backdoor + noticeably increased CPU load, resulting in degraded user experience + and thus overwhelmingly negative user feedback. + + - The maintainer who added the backdoor has disappeared. + + - Backdoors are bad for security. + + This reverts the following without making any other changes: + + 6e636819 Tests: Update two test files. + a3a29bbd Tests: Test --single-stream can decompress bad-3-corrupt_lzma2.xz. + 0b4ccc91 Tests: Update RISC-V test files. + 8c9b8b20 liblzma: Fix typos in crc32_fast.c and crc64_fast.c. + 82ecc538 liblzma: Fix false Valgrind error report with GCC. + cf44e4b7 Tests: Add a few test files. + 3060e107 Tests: Use smaller dictionary size in RISC-V test files. + e2870db5 Tests: Add two RISC-V Filter test files. + + The RISC-V test files also have real content that tests the filter + but the real content would fit into much smaller files. A generator + program would need to be available as well. + + Thanks to Andres Freund for finding and reporting it and making + it public quickly so others could act without a delay. + See: https://www.openwall.com/lists/oss-security/2024/03/29/4 + + src/liblzma/check/crc32_fast.c | 7 +++++-- + src/liblzma/check/crc64_fast.c | 4 +++- + src/liblzma/check/crc_common.h | 25 ------------------------- + tests/files/README | 27 --------------------------- + tests/files/bad-3-corrupt_lzma2.xz | Bin 512 -> 0 bytes + tests/files/bad-dict_size.lzma | Bin 41 -> 0 bytes + tests/files/good-1-riscv-lzma2-1.xz | Bin 7424 -> 0 bytes + tests/files/good-1-riscv-lzma2-2.xz | Bin 7432 -> 0 bytes + tests/files/good-2cat.xz | Bin 136 -> 0 bytes + tests/files/good-large_compressed.lzma | Bin 35421 -> 0 bytes + tests/files/good-small_compressed.lzma | Bin 258 -> 0 bytes + tests/test_files.sh | 11 ----------- + 12 files changed, 8 insertions(+), 66 deletions(-) + +commit fd1b975b7851e081ed6e5cf63df946cd5cbdbb94 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 11:42:50 +0800 + + Bump version and soname for 5.6.1. + + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit a2cda572498e96163fe4e2bde096d5dd7b814668 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 11:27:27 +0800 + + Add NEWS for 5.6.1 + + NEWS | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +commit 8583c6021124e388bce044a09f00ebabfd6165a7 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 10:43:20 +0800 + + Translations: Add missing --riscv option to man page translations. + + po4a/de.po | 702 +++++++++++++++++++++++++++++----------------------------- + po4a/fr.po | 549 ++++++++++++++++++++++----------------------- + po4a/ko.po | 702 +++++++++++++++++++++++++++++----------------------------- + po4a/pt_BR.po | 641 +++++++++++++++++++++++++++-------------------------- + po4a/ro.po | 702 +++++++++++++++++++++++++++++----------------------------- + po4a/uk.po | 702 +++++++++++++++++++++++++++++----------------------------- + 6 files changed, 2024 insertions(+), 1974 deletions(-) + +commit 74b138d2a6529f2c07729d7c77b1725a8e8b16f1 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 10:18:29 +0800 + + Tests: Update two test files. + + The original files were generated with random local to my machine. + To better reproduce these files in the future, a constant seed was used + to recreate these files. + + tests/files/bad-3-corrupt_lzma2.xz | Bin 484 -> 512 bytes + tests/files/good-large_compressed.lzma | Bin 35430 -> 35421 bytes + 2 files changed, 0 insertions(+), 0 deletions(-) + +commit 3ec6dfd656bdd40ede2a5f11e6be338988e38be4 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 10:08:32 +0800 + + Tests: Test --single-stream can decompress bad-3-corrupt_lzma2.xz. + + The first stream in this file is valid, so this tests that xz properly + stops after decompressing it. + + tests/test_files.sh | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit a67dcce6109c2f932a0a86abb0d7a95d3c31fb3e +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 10:05:32 +0800 + + Tests: Update RISC-V test files. + + This increases code coverage and tests for possible shifting bugs. + + tests/files/good-1-riscv-lzma2-1.xz | Bin 7512 -> 7424 bytes + tests/files/good-1-riscv-lzma2-2.xz | Bin 7512 -> 7432 bytes + 2 files changed, 0 insertions(+), 0 deletions(-) + +commit 058337b0f1da9f166049ecc972fa5c499c1af08c +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 09:52:32 +0800 + + liblzma: Fix typos in crc32_fast.c and crc64_fast.c. + + src/liblzma/check/crc32_fast.c | 4 ++-- + src/liblzma/check/crc64_fast.c | 3 +-- + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit cd5de9c1bbab3dd41b34b37a89c193fb6ff51ca5 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 09:49:55 +0800 + + Tests: Replace HAVE_MICROLZMA usage in CMake and Autotools builds. + + This reverts commit adaacafde6661496ca2814b1e94a3ba5186428cb. + + CMakeLists.txt | 15 ++++++++++----- + configure.ac | 9 ++------- + tests/Makefile.am | 9 ++++++--- + tests/test_microlzma.c | 12 ++++-------- + 4 files changed, 22 insertions(+), 23 deletions(-) + +commit 651a1545c8b6150051a0b44857136efd419afc6f +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-09 09:20:57 +0800 + + liblzma: Fix false Valgrind error report with GCC. + + With GCC and a certain combination of flags, Valgrind will falsely + trigger an invalid write. This appears to be due to the omission of + instructions to properly save, set up, and restore the frame pointer. + + The IFUNC resolver is a leaf function since it only calls a function + that is inlined. So sometimes GCC omits the frame pointer instructions + in the resolver unless this optimization is explictly disabled. + + This fixes https://bugzilla.redhat.com/show_bug.cgi?id=2267598. + + src/liblzma/check/crc32_fast.c | 9 +++------ + src/liblzma/check/crc64_fast.c | 7 +++---- + src/liblzma/check/crc_common.h | 25 +++++++++++++++++++++++++ + 3 files changed, 31 insertions(+), 10 deletions(-) + +commit 6e97b299f1b22e366ec42ba5dc5b9d0746e87b84 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-05 23:21:26 +0200 + + liblzma: Fix a typo in a comment in the RISC-V filter. + + src/liblzma/simple/riscv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4e1c97052b5f14f4d6dda99d12cbbd01e66e3712 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-05 00:34:46 +0800 + + liblzma: Use attribute no_profile_instrument_function with ifunc. + + Thanks to Sam James for determining this was the attribute needed to + workaround the GCC bug and for his version of the patch in Gentoo. + + src/liblzma/check/crc32_fast.c | 5 +++++ + src/liblzma/check/crc64_fast.c | 3 +++ + 2 files changed, 8 insertions(+) + +commit ed957d39426695e948b06de0ed952a2fbbe84bd1 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-03-05 00:27:31 +0800 + + Build: Require attribute no_profile_instrument_function for ifunc usage. + + Using __attribute__((__no_profile_instrument_function__)) on the ifunc + resolver works around a bug in GCC -fprofile-generate: + it adds profiling code even to ifunc resolvers which can make + the ifunc resolver crash at program startup. This attribute + was not introduced until GCC 7 and Clang 13, so ifunc won't + be used with prior versions of these compilers. + + This bug was brought to our attention by: + + https://bugs.gentoo.org/925415 + + And was reported to upstream GCC by: + + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11411 + + CMakeLists.txt | 7 +++++++ + configure.ac | 7 +++++++ + 2 files changed, 14 insertions(+) + +commit e98ddaf85a1a8fb3cc863637f83356cc9db31e13 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-03-04 19:23:18 +0200 + + liblzma: Fix a comment in the RISC-V filter. + + src/liblzma/simple/riscv.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 319cec142f67fe294e0486402f1569f223d9a83d +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-02-29 16:35:52 +0200 + + CMake: Warn if translated man pages are missing. + + CMakeLists.txt | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 46c3e113d8eeb1a731a60829fa7f5d1b519f7f26 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-02-29 16:35:52 +0200 + + CMake: Warn if gettext tools and pre-created .gmo files are missing. + + It's only done with CMake >= 3.20 and if library support + for translation was already found. + + Sort of fixes: https://github.com/tukaani-project/xz/issues/82 + + CMakeLists.txt | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +commit 86bec8334bb1dcb6d9293a11cdccd895b17f364b +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-02-28 18:26:25 +0200 + + xz: Add comments. + + src/xz/coder.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 5c91b454c24e043ca8f2cc7d2b09bd091dafe655 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-27 23:42:41 +0800 + + xz: Change logging level for thread reduction to highest verbosity only. + + Now that multi threaded encoding is the default, users do not need to + see a warning message everytime the number of threads is reduced. On + some machines, this could happen very often. It is not unreasonable for + users to need to set double verbose mode to see this kind of + information. + + To see these warning messages -vv or --verbose --verbose must be passed + to set xz into the highest possible verbosity mode. + + These warnings had caused automated testing frameworks to fail when they + expected no output to stderr. + + Thanks to Sebastian Andrzej Siewior for reporting this and for the + initial version of the patch. + + src/xz/coder.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d0e57b2f159f8fd03a9a89f2f593a768d0487898 +Author: Lasse Collin <lasse.collin@tukaani.org> +Date: 2024-02-26 23:06:13 +0200 + + Fix sorting in THANKS. + + THANKS | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d416be55ac02af1144fed455fb18b710147bb490 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-26 23:39:29 +0800 + + Update THANKS. + + THANKS | 1 + + 1 file changed, 1 insertion(+) + +commit f06b33edd2aeabdb11836a2bf0b681768dad29d3 +Author: Chien Wong <m@xv97.com> +Date: 2024-02-25 21:38:13 +0800 + + xz: Add missing RISC-V on the filter list in the man page + + Signed-off-by: Chien Wong <m@xv97.com> + + src/xz/xz.1 | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit a100f9111c8cc7f5b5f0e4a5e8af3de7161c7975 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-26 23:02:06 +0800 + + Build: Fix Linux Landlock feature test in Autotools and CMake builds. + + The previous Linux Landlock feature test assumed that having the + linux/landlock.h header file was enough. The new feature tests also + requires that prctl() and the required Landlock system calls are + supported. + + CMakeLists.txt | 25 ++++++++++++++++++++++--- + configure.ac | 27 ++++++++++++++++++++++++++- + src/xz/sandbox.c | 2 +- + src/xz/sandbox.h | 2 +- + src/xzdec/xzdec.c | 8 ++++---- + 5 files changed, 54 insertions(+), 10 deletions(-) + +commit d85efdc8911e6e8964ec920af44c8a6fe0a4c3c2 +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-26 20:06:10 +0800 + + Tests: Add test_microlzma to .gitignore and CMakeLists.txt. + + .gitignore | 1 + + CMakeLists.txt | 1 + + 2 files changed, 2 insertions(+) + +commit 42ee4256739779005a7f921946c8a8e483d1f2ed +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-26 19:56:25 +0800 + + Tests: Correct license header in test_microlzma.c. + + tests/test_microlzma.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit c83349dfd9cf9c495005b6d30e2fd34a9cafc18a +Author: Jia Tan <jiat0218@gmail.com> +Date: 2024-02-25 21:41:55 +0800 + + Fix typos in NEWS and CMakeLists. + + CMakeLists.txt | 2 +- + NEWS | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + commit 2d7d862e3ffa8cec4fd3fdffcd84e984a17aa429 Author: Jia Tan <jiat0218@gmail.com> Date: 2024-02-24 15:55:08 +0800 @@ -79,8 +79,6 @@ XZ Utils COPYING.GPLv2 GNU General Public License version 2 COPYING.GPLv3 GNU General Public License version 3 COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1 - COPYING.CC-BY-SA-4.0 Creative Commons Attribution-ShareAlike 4.0 - International Public License AUTHORS The main authors of XZ Utils THANKS Incomplete list of people who have helped making @@ -97,9 +95,9 @@ XZ Utils The command-line tools are documented as man pages. In source code releases (and possibly also in some binary packages), the man pages - are also provided in plain text (ASCII only) and PDF formats in the - directory "doc/man" to make the man pages more accessible to those - whose operating system doesn't provide an easy way to view man pages. + are also provided in plain text (ASCII only) format in the directory + "doc/man" to make the man pages more accessible to those whose + operating system doesn't provide an easy way to view man pages. 1.3. Documentation for liblzma @@ -290,21 +288,23 @@ XZ Utils XZ Embedded is a limited implementation written for use in the Linux kernel, but it is also suitable for other embedded use. - https://xz.tukaani.org/xz-embedded/ + https://tukaani.org/xz/embedded.html XZ for Java is a complete implementation written in pure Java. - https://xz.tukaani.org/xz-for-java/ + https://tukaani.org/xz/java.html 6. Contact information ---------------------- - If you have questions, bug reports, patches etc. related to XZ Utils, - the project maintainers Lasse Collin and Jia Tan can be reached via - <xz@tukaani.org>. + XZ Utils in general: + - Home page: https://tukaani.org/xz/ + - Email to maintainer(s): xz@tukaani.org + - IRC: #tukaani on Libera Chat + - GitHub: https://github.com/tukaani-project/xz - 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. + Lead maintainer: + - Email: Lasse Collin <lasse.collin@tukaani.org> + - IRC: Larhzu on Libera Chat @@ -46,6 +46,7 @@ has been important. :-) In alphabetical order: - Vincent Fazio - Michael Felt - Michael Fox + - Andres Freund - Mike Frysinger - Daniel Richard G. - Tomasz Gajc @@ -76,6 +77,7 @@ has been important. :-) In alphabetical order: - Richard Koch - Anton Kochkov - Ville Koskinen + - Sergey Kosukhin - Marcin Kowalczyk - Jan Kratochvil - Christian Kujau @@ -150,11 +152,10 @@ has been important. :-) In alphabetical order: - Martin Storsjö - Jonathan Stott - Dan Stromberg - - Jia Tan - Vincent Torri + - Alexey Tourbin - Paul Townsend - Mohammed Adnène Trojette - - Alexey Tourbin - Taiki Tsunekawa - Maksym Vatsyk - Loganaden Velvindron @@ -171,6 +172,7 @@ has been important. :-) In alphabetical order: - Charles Wilson - Lars Wirzenius - Pilorz Wojciech + - Chien Wong - Ryan Young - Andreas Zieringer diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index b96ba5cab413..25428e925168 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -1,2687 +1,39 @@ -# Doxyfile 1.9.6 +# SPDX-License-Identifier: 0BSD -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. +# Run "doxygen" in this directory to generate the liblzma API documentation +# into ../doc/api. # -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. +# Use the "update-doxygen" script for more choices: +# - Include the liblzma version number in the generated documentation. +# - Instead of API docs, docs of XZ Utils internals may be built. +# - Change the output directory for out-of-tree builds. # -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). -# -# Note: -# -# Use doxygen to compare the used configuration file with the template -# configuration file: -# doxygen -x [configFile] -# Use doxygen to compare the used configuration file with the template -# configuration file without replacing the environment variables or CMake type -# replacement variables: -# doxygen -x_noenv [configFile] - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the configuration -# file that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# https://www.gnu.org/software/libiconv/ for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. +# These options were tested with Doxygen 1.10.0. PROJECT_NAME = "liblzma (XZ Utils)" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = ../doc/xz-logo.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - OUTPUT_DIRECTORY = ../doc - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 -# sub-directories (in 2 levels) under the output directory of each output format -# and will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to -# control the number of sub-directories. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# Controls the number of sub-directories that will be created when -# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every -# level increment doubles the number of directories, resulting in 4096 -# directories at level 8 which is the default and also the maximum value. The -# sub-directories are organized in 2 levels, the first level always has a fixed -# number of 16 directories. -# Minimum value: 0, maximum value: 8, default value: 8. -# This tag requires that the tag CREATE_SUBDIRS is set to YES. - -CREATE_SUBDIRS_LEVEL = 8 - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, -# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English -# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, -# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with -# English messages), Korean, Korean-en (Korean with English messages), Latvian, -# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, -# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, -# Swedish, Turkish, Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - STRIP_FROM_PATH = ../src/liblzma/api - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line -# such as -# /*************** -# as being the beginning of a Javadoc-style comment "banner". If set to NO, the -# Javadoc-style will behave just like regular comments and it will not be -# interpreted by doxygen. -# The default value is: NO. - -JAVADOC_BANNER = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# By default Python docstrings are displayed as preformatted text and doxygen's -# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the -# doxygen's special commands can be used and the contents of the docstring -# documentation blocks is shown as doxygen documentation. -# The default value is: YES. - -PYTHON_DOCSTRING = YES - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:^^" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". Note that you cannot put \n's in the value part of an alias -# to insert newlines (in the resulting output). You can put ^^ in the value part -# of an alias to insert a newline as if a physical newline was in the original -# file. When you need a literal { or } or , in the value part of an alias you -# have to escape them by means of a backslash (\), this can lead to conflicts -# with the commands \{ and \} for these it is advised to use the version @{ and -# @} or use a double escape (\\{ and \\}) - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice -# sources only. Doxygen will then generate output that is more tailored for that -# language. For instance, namespaces will be presented as modules, types will be -# separated into more groups, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_SLICE = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, -# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: -# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser -# tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files). For instance to make doxygen treat .inc files -# as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. When specifying no_extension you should add -# * to the FILE_PATTERNS. -# -# Note see also the list of default file extension mappings. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = NO - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 5 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use -# during processing. When set to 0 doxygen will based this on the number of -# cores available in the system. You can set it explicitly to a value larger -# than 0 to get more control over the balance between CPU load and processing -# speed. At this moment only the input processing can be done using multiple -# threads. Since this is still an experimental feature the default is set to 1, -# which effectively disables parallel processing. Please report any issues you -# encounter. Generating dot graphs in parallel is controlled by the -# DOT_NUM_THREADS setting. -# Minimum value: 0, maximum value: 32, default value: 1. - -NUM_PROC_THREADS = 1 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual -# methods of a class will be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIV_VIRTUAL = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If this flag is set to YES, the name of an unnamed parameter in a declaration -# will be determined by the corresponding definition. By default unnamed -# parameters remain unnamed in the output. -# The default value is: YES. - -RESOLVE_UNNAMED_PARAMS = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# will also hide undocumented C++ concepts if enabled. This option has no effect -# if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# declarations. If set to NO, these declarations will be included in the -# documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# With the correct setting of option CASE_SENSE_NAMES doxygen will better be -# able to match the capabilities of the underlying filesystem. In case the -# filesystem is case sensitive (i.e. it supports files in the same directory -# whose names only differ in casing), the option must be set to YES to properly -# deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be set to NO to properly deal with -# output files written for symbols that only differ in casing, such as for two -# classes, one named CLASS and the other named Class, and to also support -# references to files without having to specify the exact matching casing. On -# Windows (including Cygwin) and MacOS, users should typically set this option -# to NO, whereas on Linux or other Unix flavors it should typically be set to -# YES. -# Possible values are: SYSTEM, NO and YES. -# The default value is: SYSTEM. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class -# will show which file needs to be included to use the class. -# The default value is: YES. - -SHOW_HEADERFILE = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if <section_label> ... \endif and \cond <section_label> -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. See also section "Changing the -# layout of pages" for information. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as documenting some parameters in -# a documented function twice, or documenting parameters that don't exist or -# using markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete -# function parameter documentation. If set to NO, doxygen will accept that some -# parameters have no documentation without warning. -# The default value is: YES. - -WARN_IF_INCOMPLETE_DOC = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong parameter -# documentation, but not about the absence of documentation. If EXTRACT_ALL is -# set to YES then this flag will automatically be disabled. See also -# WARN_IF_INCOMPLETE_DOC -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about -# undocumented enumeration values. If set to NO, doxygen will accept -# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: NO. - -WARN_IF_UNDOC_ENUM_VAL = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS -# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but -# at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# See also: WARN_LINE_FORMAT -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# In the $text part of the WARN_FORMAT command it is possible that a reference -# to a more specific place is given. To make it easier to jump to this place -# (outside of doxygen) the user can define a custom "cut" / "paste" string. -# Example: -# WARN_LINE_FORMAT = "'vi $file +$line'" -# See also: WARN_FORMAT -# The default value is: at line $line of file $file. - -WARN_LINE_FORMAT = "at line $line of file $file" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). In case the file specified cannot be opened for writing the -# warning and error messages are written to standard error. When as file - is -# specified the warning and error messages are written to standard output -# (stdout). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - INPUT = ../src/liblzma/api - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: -# https://www.gnu.org/software/libiconv/) for the list of possible encodings. -# See also: INPUT_FILE_ENCODING -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify -# character encoding on a per file pattern basis. Doxygen will compare the file -# name with each pattern and apply the encoding instead of the default -# INPUT_ENCODING) if there is a match. The character encodings are a list of the -# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding -# "INPUT_ENCODING" for further information on supported encodings. - -INPUT_FILE_ENCODING = - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# Note the list of default checked file patterns might differ from the list of -# default file extension mappings. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. - -FILE_PATTERNS = *.c \ - *.h - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - +FILE_PATTERNS = *.c *.h RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = YES - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# ANamespace::AClass, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# <filter> <input-file> -# -# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that doxygen will use the data processed and written to standard output -# for further processing, therefore nothing else, like debug statements or used -# commands (so in case of a Windows batch file always use @echo OFF), should be -# written to standard output. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -# The Fortran standard specifies that for fixed formatted Fortran code all -# characters from position 72 are to be considered as comment. A common -# extension is to allow longer lines before the automatic comment starts. The -# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can -# be processed before the automatic comment starts. -# Minimum value: 7, maximum value: 10000, default value: 72. - -FORTRAN_COMMENT_AFTER = 72 - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# entity all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - +OPTIMIZE_OUTPUT_FOR_C = YES +EXTRACT_STATIC = YES +SORT_MEMBER_DOCS = NO SOURCE_TOOLTIPS = NO - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see https://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - ALPHABETICAL_INDEX = NO - -# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) -# that should be ignored while generating the index headers. The IGNORE_PREFIX -# tag works for classes, function and member names. The entity will be placed in -# the alphabetical list under the first letter of the entity name that remains -# after removing the prefix. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - HTML_OUTPUT = api - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). -# Note: Since the styling of scrollbars can currently not be overruled in -# Webkit/Chromium, the styling will be left out of the default doxygen.css if -# one or more extra stylesheets have been specified. So if scrollbar -# customization is desired it has to be added explicitly. For an example see the -# documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = ../COPYING.CC-BY-SA-4.0 - -# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output -# should be rendered with a dark or light theme. -# Possible values are: LIGHT always generate light mode output, DARK always -# generate dark mode output, AUTO_LIGHT automatically set the mode according to -# the user preference, use light mode if no preference is set (the default), -# AUTO_DARK automatically set the mode according to the user preference, use -# dark mode if no preference is set and TOGGLE allow to user to switch between -# light and dark mode via a button. -# The default value is: AUTO_LIGHT. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE = AUTO_LIGHT - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a color-wheel, see -# https://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - HTML_COLORSTYLE_HUE = 210 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use gray-scales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - HTML_COLORSTYLE_SAT = 180 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - HTML_COLORSTYLE_GAMMA = 110 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML -# documentation will contain a main index with vertical navigation menus that -# are dynamically created via JavaScript. If disabled, the navigation index will -# consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have JavaScript, -# like the Qt help browser. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - HTML_DYNAMIC_MENUS = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: -# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To -# create a documentation set, doxygen will generate a Makefile in the HTML -# output directory. Running make will produce the docset in that directory and -# running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy -# genXcode/_index.html for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag determines the URL of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDURL = - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# on Windows. In the beginning of 2021 Microsoft took the original page, with -# a.o. the download links, offline the HTML help workshop was already many years -# in maintenance mode). You can download the HTML help workshop from the web -# archives at Installation executable (see: -# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo -# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the main .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location (absolute path -# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to -# run qhelpgenerator on the generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine tune the look of the index (see "Fine-tuning the output"). As an -# example, the default style sheet generated by doxygen has an example that -# shows how to put an image at the root of the tree instead of the PROJECT_NAME. -# Since the tree basically has the same information as the tab index, you could -# consider setting DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the -# FULL_SIDEBAR option determines if the side bar is limited to only the treeview -# area (value NO) or if it should extend to the full height of the window (value -# YES). Setting this to YES gives a layout similar to -# https://docs.readthedocs.io with more room for contents, but less room for the -# project logo, title, and description. If either GENERATE_TREEVIEW or -# DISABLE_INDEX is set to NO, this option has no effect. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FULL_SIDEBAR = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email -# addresses. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -OBFUSCATE_EMAILS = YES - -# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg -# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see -# https://inkscape.org) to generate formulas as SVG images instead of PNGs for -# the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png (the default) and svg (looks nicer but requires the -# pdf2svg or inkscape tool). -# The default value is: png. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FORMULA_FORMAT = png - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands -# to create new LaTeX commands to be used in formulas as building blocks. See -# the section "Including formulas" for details. - -FORMULA_MACROFILE = - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side JavaScript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. -# Note that the different versions of MathJax have different requirements with -# regards to the different settings, so it is possible that also other MathJax -# settings have to be changed when switching between the different MathJax -# versions. -# Possible values are: MathJax_2 and MathJax_3. -# The default value is: MathJax_2. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_VERSION = MathJax_2 - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. For more details about the output format see MathJax -# version 2 (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 -# (see: -# http://docs.mathjax.org/en/latest/web/components/output.html). -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility. This is the name for Mathjax version 2, for MathJax version 3 -# this will be translated into chtml), NativeMML (i.e. MathML. Only supported -# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This -# is the name for Mathjax version 3, for MathJax version 2 this will be -# translated into HTML-CSS) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. The default value is: -# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 -# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see -# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# For example for MathJax version 3 (see -# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): -# MATHJAX_EXTENSIONS = ams -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use <access key> + S -# (what the <access key> is depends on the OS and browser, but it is typically -# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down -# key> to jump into the search results window, the results can be navigated -# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel -# the search. The filter options can be selected when the cursor is inside the -# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> -# to select a filter and <Enter> or <escape> to activate or cancel the filter -# option. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using JavaScript. There -# are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and -# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing -# and searching needs to be provided by external tools. See the section -# "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain the -# search results. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: -# https://xapian.org/). -# -# See the section "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will return the search results when EXTERNAL_SEARCH is enabled. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: -# https://xapian.org/). See the section "External Indexing and Searching" for -# details. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. -# The default file is: searchdata.xml. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of -# to a relative location where the documentation can be found. The format is: -# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# Configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. -# The default value is: YES. - GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. -# -# Note that when not enabling USE_PDFLATEX the default is latex when enabling -# USE_PDFLATEX the default is pdflatex and when in the later case latex is -# chosen this is overwritten by pdflatex. For specific output languages the -# default can have been set differently, this depends on the implementation of -# the output language. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate -# index for LaTeX. -# Note: This tag is used in the Makefile / make.bat. -# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file -# (.tex). -# The default file is: makeindex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -MAKEINDEX_CMD_NAME = makeindex - -# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to -# generate index for LaTeX. In case there is no backslash (\) as first character -# it will be automatically added in the LaTeX code. -# Note: This tag is used in the generated output file (.tex). -# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. -# The default value is: makeindex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_MAKEINDEX_CMD = makeindex - -# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used by the -# printer. -# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x -# 14 inches) and executive (7.25 x 10.5 inches). -# The default value is: a4. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. The package can be specified just -# by its name or with the correct syntax as to be used with the LaTeX -# \usepackage command. To get the times font for instance you can specify : -# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} -# To use the option intlimits with the amsmath package you can specify: -# EXTRA_PACKAGES=[intlimits]{amsmath} -# If left blank no extra packages will be included. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for -# the generated LaTeX document. The header should contain everything until the -# first chapter. If it is left blank doxygen will generate a standard header. It -# is highly recommended to start with a default header using -# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty -# and then modify the file new_header.tex. See also section "Doxygen usage" for -# information on how to generate the default header that doxygen normally uses. -# -# Note: Only use a user-defined header if you know what you are doing! -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. The following -# commands have a special meaning inside the header (and footer): For a -# description of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for -# the generated LaTeX document. The footer should contain everything after the -# last chapter. If it is left blank doxygen will generate a standard footer. See -# LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. See also section "Doxygen -# usage" for information on how to generate the default footer that doxygen -# normally uses. Note: Only use a user-defined footer if you know what you are -# doing! -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_FOOTER = - -# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# LaTeX style sheets that are included after the standard style sheets created -# by doxygen. Using this option one can overrule certain style aspects. Doxygen -# will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_STYLESHEET = - -# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the LATEX_OUTPUT output -# directory. Note that the files will be copied as-is; there are no commands or -# markers available. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_FILES = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is -# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will -# contain links (just like the HTML output) instead of page references. This -# makes the output suitable for online browsing using a PDF viewer. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as -# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX -# files. Set this option to YES, to get a higher quality PDF documentation. -# -# See also section LATEX_CMD_NAME for selecting the engine. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BATCHMODE = NO - -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the -# index chapters (such as File Index, Compound Index, etc.) in the output. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HIDE_INDICES = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. See -# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. -# The default value is: plain. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BIB_STYLE = plain - -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - -# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) -# path from which the emoji images will be read. If a relative path is entered, -# it will be relative to the LATEX_OUTPUT directory. If left blank the -# LATEX_OUTPUT directory will be used. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EMOJI_DIRECTORY = - -#--------------------------------------------------------------------------- -# Configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The -# RTF output is optimized for Word 97 and may not look too pretty with other RTF -# readers/editors. -# The default value is: NO. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: rtf. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will -# contain hyperlink fields. The RTF file will contain links (just like the HTML -# output) instead of page references. This makes the output suitable for online -# browsing using Word or some other Word compatible readers that support those -# fields. -# -# Note: WordPad (write) and others do not support links. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# configuration file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. -# -# See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's configuration file. A template extensions file can be -# generated using doxygen -e rtf extensionFile. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for -# classes and files. -# The default value is: NO. - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. A directory man3 will be created inside the directory specified by -# MAN_OUTPUT. -# The default directory is: man. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to the generated -# man pages. In case the manual section does not start with a number, the number -# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is -# optional. -# The default value is: .3. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_EXTENSION = .3 - -# The MAN_SUBDIR tag determines the name of the directory created within -# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by -# MAN_EXTENSION with the initial . removed. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_SUBDIR = - -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it -# will generate one additional man file for each entity documented in the real -# man page(s). These additional files only source the real man page, but without -# them the man command would be unable to find the correct page. -# The default value is: NO. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that -# captures the structure of the code including all documentation. -# The default value is: NO. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: xml. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_OUTPUT = xml - -# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program -# listings (including syntax highlighting and cross-referencing information) to -# the XML output. Note that enabling this will significantly increase the size -# of the XML output. -# The default value is: YES. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_PROGRAMLISTING = NO - -# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include -# namespace members in file scope as well, matching the HTML output. -# The default value is: NO. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_NS_MEMB_FILE_SCOPE = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- - -# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files -# that can be used to generate PDF. -# The default value is: NO. - -GENERATE_DOCBOOK = NO - -# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in -# front of it. -# The default directory is: docbook. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_OUTPUT = docbook - -#--------------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures -# the structure of the code including all documentation. Note that this feature -# is still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module -# file that captures the structure of the code including all documentation. -# -# Note that this feature is still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary -# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI -# output from the Perl module output. -# The default value is: NO. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely -# formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO, the -# size of the Perl module output will be much smaller and Perl will parse it -# just the same. -# The default value is: YES. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file are -# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful -# so different doxyrules.make files included by the same Makefile don't -# overwrite each other's variables. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all -# C-preprocessor directives found in the sources and include files. -# The default value is: YES. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names -# in the source code. If set to NO, only conditional compilation will be -# performed. Macro expansion can be done in a controlled way by setting -# EXPAND_ONLY_PREDEF to YES. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then -# the macro expansion is limited to the macros specified with the PREDEFINED and -# EXPAND_AS_DEFINED tags. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES, the include files in the -# INCLUDE_PATH will be searched if a #include is found. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by the -# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of -# RECURSIVE has no effect here. -# This tag requires that the tag SEARCH_INCLUDES is set to YES. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will be -# used. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that are -# defined before the preprocessor is started (similar to the -D option of e.g. -# gcc). The argument of the tag is a list of macros of the form: name or -# name=definition (no spaces). If the definition and the "=" are omitted, "=1" -# is assumed. To prevent a macro definition from being undefined via #undef or -# recursively expanded use the := operator instead of the = operator. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - PREDEFINED = LZMA_API(type)=type \ LZMA_API_IMPORT= \ LZMA_API_CALL= \ tuklib_attr_noreturn= \ lzma_attribute(attr)= \ lzma_attr_alloc_size(size)= - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this -# tag can be used to specify a list of macro names that should be expanded. The -# macro definition that is found in the sources will be used. Use the PREDEFINED -# tag if you want to use a different macro definition that overrules the -# definition found in the source code. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all references to function-like macros that are alone on a line, have -# an all uppercase name, and do not end with a semicolon. Such function macros -# are typically used for boiler-plate code, and will confuse the parser if not -# removed. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tag files. For each tag -# file the location of the external documentation should be added. The format of -# a tag file without this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where loc1 and loc2 can be relative or absolute paths or URLs. See the -# section "Linking to external documentation" for more information about the use -# of tag files. -# Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is -# run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a -# tag file that is based on the input files it reads. See section "Linking to -# external documentation" for more information about the usage of tag files. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. -# The default value is: NO. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be -# listed. -# The default value is: YES. - -EXTERNAL_GROUPS = YES - -# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in -# the related pages index. If set to NO, only the current project's pages will -# be listed. -# The default value is: YES. - -EXTERNAL_PAGES = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - -# If set to YES the inheritance and collaboration graphs will hide inheritance -# and usage relations if the target is undocumented or is not a class. -# The default value is: YES. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent -# Bell Labs. The other options in this section have no effect if this option is -# set to NO -# The default value is: NO. - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of -# processors available in the system. You can set it explicitly to a value -# larger than 0 to get control over the balance between CPU load and processing -# speed. -# Minimum value: 0, maximum value: 32, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NUM_THREADS = 0 - -# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of -# subgraphs. When you want a differently looking font in the dot files that -# doxygen generates you can specify fontname, fontcolor and fontsize attributes. -# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node, -# Edge and Graph Attributes specification</a> You need to make sure dot is able -# to find the font, which can be done by putting it in a standard location or by -# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. Default graphviz fontsize is 14. -# The default value is: fontname=Helvetica,fontsize=10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" - -# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can -# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a -# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about -# arrows shapes.</a> -# The default value is: labelfontname=Helvetica,labelfontsize=10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" - -# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes -# around nodes set 'shape=plain' or 'shape=plaintext' <a -# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a> -# The default value is: shape=box,height=0.2,width=0.4. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" - -# You can set the path where dot can find font specified with fontname in -# DOT_COMMON_ATTR and others dot attributes. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTPATH = - -# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a -# graph for each documented class showing the direct and indirect inheritance -# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, -# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set -# to TEXT the direct and indirect inheritance relations will be shown as texts / -# links. -# Possible values are: NO, YES, TEXT and GRAPH. -# The default value is: YES. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a -# graph for each documented class showing the direct and indirect implementation -# dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. See also the chapter Grouping -# in the manual. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside the -# class node. If there are many fields or methods and many nodes the graph may -# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the -# number of items for each type to make the size more manageable. Set this to 0 -# for no limit. Note that the threshold may be exceeded by 50% before the limit -# is enforced. So when you set the threshold to 10, up to 15 fields may appear, -# but if the number exceeds 15, the total amount of fields shown is limited to -# 10. -# Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag UML_LOOK is set to YES. - -UML_LIMIT_NUM_FIELDS = 10 - -# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and -# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS -# tag is set to YES, doxygen will add type and arguments for attributes and -# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen -# will not generate fields with class member information in the UML graphs. The -# class diagrams will look similar to the default class diagrams but using UML -# notation for the relationships. -# Possible values are: NO, YES and NONE. -# The default value is: NO. -# This tag requires that the tag UML_LOOK is set to YES. - -DOT_UML_DETAILS = NO - -# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters -# to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. -# Minimum value: 0, maximum value: 1000, default value: 17. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_WRAP_THRESHOLD = 17 - -# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and -# collaboration graphs will show the relations between templates and their -# instances. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -TEMPLATE_RELATIONS = NO - -# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the -# direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDE_GRAPH = YES - -# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing -# the direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. Disabling a call graph can be -# accomplished by means of the command \hidecallgraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. Disabling a caller graph can be -# accomplished by means of the command \hidecallergraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical -# hierarchy of all classes instead of a textual one. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the -# dependencies a directory has on other directories in a graphical way. The -# dependency relations are determined by the #include relations between the -# files in the directories. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DIRECTORY_GRAPH = YES - -# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels -# of child directories generated in directory dependency graphs by dot. -# Minimum value: 1, maximum value: 25, default value: 1. -# This tag requires that the tag DIRECTORY_GRAPH is set to YES. - -DIR_GRAPH_MAX_DEPTH = 1 - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. For an explanation of the image formats see the section -# output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). -# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order -# to make the SVG files visible in IE 9+ (other browsers do not have this -# requirement). -# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, -# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and -# png:gdiplus:gdiplus. -# The default value is: png. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# -# Note that this requires a modern browser other than Internet Explorer. Tested -# and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -INTERACTIVE_SVG = NO - -# The DOT_PATH tag can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the \dotfile -# command). -# This tag requires that the tag HAVE_DOT is set to YES. - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). - -MSCFILE_DIRS = - -# The DIAFILE_DIRS tag can be used to specify one or more directories that -# contain dia files that are included in the documentation (see the \diafile -# command). - -DIAFILE_DIRS = - -# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file or to the filename of jar file -# to be used. If left blank, it is assumed PlantUML is not used or called during -# a preprocessing step. Doxygen will generate a warning when it encounters a -# \startuml command in this case and will not generate output for the diagram. - -PLANTUML_JAR_PATH = - -# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a -# configuration file for plantuml. - -PLANTUML_CFG_FILE = - -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. - -PLANTUML_INCLUDE_PATH = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes -# that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct -# children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that -# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -# Minimum value: 0, maximum value: 10000, default value: 50. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs -# generated by dot. A depth value of 3 means that only nodes reachable from the -# root by following a path via at most 3 edges will be shown. Nodes that lay -# further from the root node will be omitted. Note that setting this option to 1 -# or 2 may greatly reduce the computation time needed for large code bases. Also -# note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -# Minimum value: 0, maximum value: 1000, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) support -# this, this feature is disabled by default. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page -# explaining the meaning of the various boxes and arrows in the dot generated -# graphs. -# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal -# graphical representation for inheritance and collaboration diagrams is used. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate -# files that are used to generate the various graphs. -# -# Note: This setting is not only used for dot files but also for msc temporary -# files. -# The default value is: YES. - -DOT_CLEANUP = YES diff --git a/doxygen/footer.html b/doxygen/footer.html deleted file mode 100644 index 38d6ea0f4364..000000000000 --- a/doxygen/footer.html +++ /dev/null @@ -1,13 +0,0 @@ -<hr class="footer"/> - -<p style="text-align: right;padding-right: 12px;"> - XZ logo © 2023 by Jia Tan is licensed under - <a href="COPYING.CC-BY-SA-4.0" - rel="license" - style="display:inline-block;"> - CC BY-SA 4.0 - </a> -</p> - -</body> -</html> diff --git a/doxygen/update-doxygen b/doxygen/update-doxygen index 87dfffb29e75..c5d6ad39f1b1 100755 --- a/doxygen/update-doxygen +++ b/doxygen/update-doxygen @@ -3,14 +3,13 @@ ############################################################################# # -# Updates the Doxygen generated documentation files in the source tree. -# If the doxygen command is not installed, it will exit with an error. -# This script can generate Doxygen documentation for all source files or for -# just liblzma API header files. +# While it's possible to use the Doxyfile as is to generate liblzma API +# documentation, it is recommended to use this script because this adds +# the XZ Utils version number to the generated HTML. # -# It is recommended to use this script to update the Doxygen-generated HTML -# files since this will include the package version in the output and, -# in case of liblzma API docs, strip JavaScript files from the output. +# Other features: +# - Generate documentation of the XZ Utils internals. +# - Set input and output paths for out-of-tree builds. # ############################################################################# # @@ -21,31 +20,67 @@ set -e +show_usage() +{ + echo "Usage: $0 <api|internal> [ABS_TOP_SRCDIR ABS_OUTDIR]" + echo + echo "Supported modes:" + echo " - 'api' (default): liblzma API docs into doc/api" + echo " - 'internal': internal docs into doc/internal" + echo + echo "Absolute source and output dirs may be set" \ + "to do an out-of-tree build." + echo "The output directory must already exist." + exit 1 +} + +case $1 in + api|internal) + ;; + *) + show_usage + ;; +esac + if type doxygen > /dev/null 2>&1; then : else - echo "doxygen/update-doxygen: 'doxygen' command not found." >&2 - echo "doxygen/update-doxygen: Skipping Doxygen docs generation." >&2 + echo "$0: 'doxygen' command not found" >&2 exit 1 fi -if test ! -f Doxyfile; then - cd `dirname "$0"` || exit 1 - if test ! -f Doxyfile; then - echo "doxygen/update-doxygen: Cannot find Doxyfile" >&2 - exit 1 - fi +case $# in + 1) + # One argument: Building inside the source tree + ABS_TOP_SRCDIR=`dirname "$0"`/.. + ABS_OUTDIR=$ABS_TOP_SRCDIR/doc + ;; + 3) + # Three arguments: Possibly an out of tree build + ABS_TOP_SRCDIR=$2 + ABS_OUTDIR=$3 + ;; + *) + show_usage + ;; +esac + +if test ! -f "$ABS_TOP_SRCDIR/doxygen/Doxyfile"; then + echo "$0: Source dir '$ABS_TOP_SRCDIR/doxygen/Doxyfile' not found" >&2 + exit 1 +fi +if test ! -d "$ABS_OUTDIR"; then + echo "$0: Output dir '$ABS_OUTDIR' not found" >&2 + exit 1 fi # Get the package version so that it can be included in the generated docs. -PACKAGE_VERSION=`cd .. && sh build-aux/version.sh` || exit 1 +PACKAGE_VERSION=`cd "$ABS_TOP_SRCDIR" && sh build-aux/version.sh` -# If no arguments are specified, default to generating liblzma API header -# documentation only. case $1 in - '' | api) + api) # Remove old documentation before re-generating the new. - rm -rf ../doc/api + rm -rf "$ABS_OUTDIR/api" # Generate the HTML documentation by preparing the Doxyfile # in stdin and piping the result to the doxygen command. @@ -53,57 +88,27 @@ case $1 in # override any earlier assignment. So, we can use this # feature to override the tags that need to change between # "api" and "internal" modes. + ABS_SRCDIR=$ABS_TOP_SRCDIR/src/liblzma/api ( - cat Doxyfile + cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile" echo "PROJECT_NUMBER = $PACKAGE_VERSION" - ) | doxygen - - - # As of Doxygen 1.8.0 - 1.9.6 and the Doxyfile options we use, - # the output is good without any JavaScript. Unfortunately - # Doxygen doesn't have an option to disable JavaScript usage - # completely so we strip it away with the hack below. - # - # Omitting the JavaScript code avoids some license hassle - # as jquery.js is fairly big, it contains more than jQuery - # itself, and doesn't include the actual license text (it - # only refers to the MIT license by name). - echo "Stripping JavaScript from Doxygen output..." - for F in ../doc/api/*.html - do - sed 's/<script [^>]*><\/script>//g - s/onclick="[^"]*"//g' \ - "$F" > ../doc/api/tmp - mv -f ../doc/api/tmp "$F" - done - rm -f ../doc/api/*.js + echo "OUTPUT_DIRECTORY = $ABS_OUTDIR" + echo "STRIP_FROM_PATH = $ABS_SRCDIR" + echo "INPUT = $ABS_SRCDIR" + ) | doxygen -q - ;; internal) - # The docs from internal aren't for distribution so - # the JavaScript files aren't an issue here. - rm -rf ../doc/internal + rm -rf "$ABS_OUTDIR/internal" ( - cat Doxyfile - echo "PROJECT_NUMBER = $PACKAGE_VERSION" + cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile" echo 'PROJECT_NAME = "XZ Utils"' - echo 'STRIP_FROM_PATH = ../src' - echo 'INPUT = ../src' + echo "PROJECT_NUMBER = $PACKAGE_VERSION" + echo "OUTPUT_DIRECTORY = $ABS_OUTDIR" + echo "STRIP_FROM_PATH = $ABS_TOP_SRCDIR" + echo "INPUT = $ABS_TOP_SRCDIR/src" echo 'HTML_OUTPUT = internal' - echo 'EXTRACT_PRIVATE = YES' - echo 'EXTRACT_STATIC = YES' - echo 'EXTRACT_LOCAL_CLASSES = YES' echo 'SEARCHENGINE = YES' - ) | doxygen - - ;; - - *) - echo "doxygen/update-doxygen: Error: mode argument '$1'" \ - "is not supported." >&2 - echo "doxygen/update-doxygen: Supported modes:" >&2 - echo "doxygen/update-doxygen: - 'api' (default):" \ - "liblzma API docs into doc/api" >&2 - echo "doxygen/update-doxygen: - 'internal':"\ - "internal docs into doc/internal" >&2 - exit 1 + ) | doxygen -q - ;; esac diff --git a/src/common/mythread.h b/src/common/mythread.h index 589901c7d3e1..10ea2d42c24d 100644 --- a/src/common/mythread.h +++ b/src/common/mythread.h @@ -200,7 +200,7 @@ mythread_join(mythread thread) } -// Initiatlizes a mutex. Returns zero on success and non-zero on error. +// Initializes a mutex. Returns zero on success and non-zero on error. static inline int mythread_mutex_init(mythread_mutex *mutex) { diff --git a/src/common/tuklib_integer.h b/src/common/tuklib_integer.h index c0004531a710..fbd5fb2369a2 100644 --- a/src/common/tuklib_integer.h +++ b/src/common/tuklib_integer.h @@ -16,7 +16,7 @@ /// /// Endianness-converting integer operations (these can be macros!) /// (XX = 16, 32, or 64; Y = b or l): -/// - Byte swapping: bswapXX(num) +/// - Byte swapping: byteswapXX(num) /// - Byte order conversions to/from native (byteswaps if Y isn't /// the native endianness): convXXYe(num) /// - Unaligned reads: readXXYe(ptr) @@ -66,38 +66,41 @@ #if defined(HAVE___BUILTIN_BSWAPXX) // GCC >= 4.8 and Clang -# define bswap16(n) __builtin_bswap16(n) -# define bswap32(n) __builtin_bswap32(n) -# define bswap64(n) __builtin_bswap64(n) +# define byteswap16(num) __builtin_bswap16(num) +# define byteswap32(num) __builtin_bswap32(num) +# define byteswap64(num) __builtin_bswap64(num) #elif defined(HAVE_BYTESWAP_H) // glibc, uClibc, dietlibc # include <byteswap.h> # ifdef HAVE_BSWAP_16 -# define bswap16(num) bswap_16(num) +# define byteswap16(num) bswap_16(num) # endif # ifdef HAVE_BSWAP_32 -# define bswap32(num) bswap_32(num) +# define byteswap32(num) bswap_32(num) # endif # ifdef HAVE_BSWAP_64 -# define bswap64(num) bswap_64(num) +# define byteswap64(num) bswap_64(num) # endif #elif defined(HAVE_SYS_ENDIAN_H) // *BSDs and Darwin # include <sys/endian.h> +# define byteswap16(num) bswap16(num) +# define byteswap32(num) bswap32(num) +# define byteswap64(num) bswap64(num) #elif defined(HAVE_SYS_BYTEORDER_H) // Solaris # include <sys/byteorder.h> # ifdef BSWAP_16 -# define bswap16(num) BSWAP_16(num) +# define byteswap16(num) BSWAP_16(num) # endif # ifdef BSWAP_32 -# define bswap32(num) BSWAP_32(num) +# define byteswap32(num) BSWAP_32(num) # endif # ifdef BSWAP_64 -# define bswap64(num) BSWAP_64(num) +# define byteswap64(num) BSWAP_64(num) # endif # ifdef BE_16 # define conv16be(num) BE_16(num) @@ -119,15 +122,15 @@ # endif #endif -#ifndef bswap16 -# define bswap16(n) (uint16_t)( \ +#ifndef byteswap16 +# define byteswap16(n) (uint16_t)( \ (((n) & 0x00FFU) << 8) \ | (((n) & 0xFF00U) >> 8) \ ) #endif -#ifndef bswap32 -# define bswap32(n) (uint32_t)( \ +#ifndef byteswap32 +# define byteswap32(n) (uint32_t)( \ (((n) & UINT32_C(0x000000FF)) << 24) \ | (((n) & UINT32_C(0x0000FF00)) << 8) \ | (((n) & UINT32_C(0x00FF0000)) >> 8) \ @@ -135,8 +138,8 @@ ) #endif -#ifndef bswap64 -# define bswap64(n) (uint64_t)( \ +#ifndef byteswap64 +# define byteswap64(n) (uint64_t)( \ (((n) & UINT64_C(0x00000000000000FF)) << 56) \ | (((n) & UINT64_C(0x000000000000FF00)) << 40) \ | (((n) & UINT64_C(0x0000000000FF0000)) << 24) \ @@ -160,23 +163,23 @@ # define conv64be(num) ((uint64_t)(num)) # endif # ifndef conv16le -# define conv16le(num) bswap16(num) +# define conv16le(num) byteswap16(num) # endif # ifndef conv32le -# define conv32le(num) bswap32(num) +# define conv32le(num) byteswap32(num) # endif # ifndef conv64le -# define conv64le(num) bswap64(num) +# define conv64le(num) byteswap64(num) # endif #else # ifndef conv16be -# define conv16be(num) bswap16(num) +# define conv16be(num) byteswap16(num) # endif # ifndef conv32be -# define conv32be(num) bswap32(num) +# define conv32be(num) byteswap32(num) # endif # ifndef conv64be -# define conv64be(num) bswap64(num) +# define conv64be(num) byteswap64(num) # endif # ifndef conv16le # define conv16le(num) ((uint16_t)(num)) @@ -624,7 +627,7 @@ write64le(uint8_t *buf, uint64_t num) // aligned but some compilers have language extensions to do that. With // such language extensions the memcpy() method gives excellent results. // -// What to do on a strict-align system when no known language extentensions +// What to do on a strict-align system when no known language extensions // are available? Falling back to byte-by-byte access would be safe but ruin // optimizations that have been made specifically with aligned access in mind. // As a compromise, aligned reads will fall back to non-compliant type punning diff --git a/src/liblzma/api/lzma.h b/src/liblzma/api/lzma.h index d55349f47ec9..6ca6e503d8a6 100644 --- a/src/liblzma/api/lzma.h +++ b/src/liblzma/api/lzma.h @@ -10,9 +10,9 @@ * headers) streams are supported. Multiple compression algorithms (filters) * are supported. Currently LZMA2 is the primary filter. * - * liblzma is part of XZ Utils <https://xz.tukaani.org/xz-utils/>. XZ Utils + * liblzma is part of XZ Utils <https://tukaani.org/xz/>. XZ Utils * includes a gzip-like command line tool named xz and some other tools. - * XZ Utils is developed and maintained by Lasse Collin and Jia Tan. + * XZ Utils is developed and maintained by Lasse Collin. * * Major parts of liblzma are based on code written by Igor Pavlov, * specifically the LZMA SDK <https://7-zip.org/sdk.html>. diff --git a/src/liblzma/api/lzma/base.h b/src/liblzma/api/lzma/base.h index 20d485b97bec..590e1d22bb0f 100644 --- a/src/liblzma/api/lzma/base.h +++ b/src/liblzma/api/lzma/base.h @@ -257,7 +257,7 @@ typedef enum { */ /* - * These eumerations may be used internally by liblzma + * These enumerations may be used internally by liblzma * but they will never be returned to applications. */ LZMA_RET_INTERNAL1 = 101, diff --git a/src/liblzma/api/lzma/container.h b/src/liblzma/api/lzma/container.h index ad3f99057a32..8e4af420389b 100644 --- a/src/liblzma/api/lzma/container.h +++ b/src/liblzma/api/lzma/container.h @@ -792,7 +792,7 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder_mt( * 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 + * \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 diff --git a/src/liblzma/api/lzma/index.h b/src/liblzma/api/lzma/index.h index 7d8a9950ceaf..b17025e3d901 100644 --- a/src/liblzma/api/lzma/index.h +++ b/src/liblzma/api/lzma/index.h @@ -233,7 +233,7 @@ typedef struct { } block; /** - * \private Internal struct. + * \private Internal data * * Internal data which is used to store the state of the iterator. * The exact format may vary between liblzma versions, so don't @@ -673,7 +673,7 @@ extern LZMA_API(lzma_bool) lzma_index_iter_locate( * 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 lzma_allocator for custom allocator functions. + * \param allocator lzma_allocator for custom allocator functions. * Set to NULL to use malloc() and free(). * * \return Possible lzma_ret values: @@ -793,7 +793,7 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i, * 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 lzma_allocator for custom allocator functions. + * \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]. diff --git a/src/liblzma/api/lzma/version.h b/src/liblzma/api/lzma/version.h index c13a82d5f3b5..53526b992c95 100644 --- a/src/liblzma/api/lzma/version.h +++ b/src/liblzma/api/lzma/version.h @@ -22,7 +22,7 @@ #define LZMA_VERSION_MINOR 6 /** \brief Patch version number of the liblzma release. */ -#define LZMA_VERSION_PATCH 0 +#define LZMA_VERSION_PATCH 2 /** * \brief Version stability marker diff --git a/src/liblzma/api/lzma/vli.h b/src/liblzma/api/lzma/vli.h index 7f3e398aae5b..6b049021b909 100644 --- a/src/liblzma/api/lzma/vli.h +++ b/src/liblzma/api/lzma/vli.h @@ -67,9 +67,8 @@ typedef uint64_t lzma_vli; * This is useful to test that application has given acceptable values * 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. False if the integer cannot be - * represented as VLI. + * \return True if the integer is representable as a VLI or if it + * indicates an unknown value. False otherwise. */ #define lzma_vli_is_valid(vli) \ ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) diff --git a/src/liblzma/check/crc32_arm64.h b/src/liblzma/check/crc32_arm64.h index 6cdb5dab32e6..39c1c63ec0ec 100644 --- a/src/liblzma/check/crc32_arm64.h +++ b/src/liblzma/check/crc32_arm64.h @@ -11,7 +11,6 @@ // /////////////////////////////////////////////////////////////////////////////// - #ifndef LZMA_CRC32_ARM64_H #define LZMA_CRC32_ARM64_H @@ -21,6 +20,8 @@ # include <arm_acle.h> #endif +// If both versions are going to be built, we need runtime detection +// to check if the instructions are supported. #if defined(CRC32_GENERIC) && defined(CRC32_ARCH_OPTIMIZED) # if defined(HAVE_GETAUXVAL) || defined(HAVE_ELF_AUX_INFO) # include <sys/auxv.h> @@ -36,8 +37,7 @@ // // NOTE: Build systems check for this too, keep them in sync with this. #if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__) -# define crc_attr_target \ - __attribute__((__target__("+crc"))) +# define crc_attr_target __attribute__((__target__("+crc"))) #else # define crc_attr_target #endif @@ -51,7 +51,7 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc) // Align the input buffer because this was shown to be // significantly faster than unaligned accesses. - const size_t align_amount = my_min(size, (8 - (uintptr_t)buf) & 7); + const size_t align_amount = my_min(size, (0U - (uintptr_t)buf) & 7); for (const uint8_t *limit = buf + align_amount; buf < limit; ++buf) crc = __crc32b(crc, *buf); @@ -62,7 +62,7 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc) // ignoring the least significant three bits of size to ensure // we do not process past the bounds of the buffer. This guarantees // that limit is a multiple of 8 and is strictly less than size. - for (const uint8_t *limit = buf + (size & ~((size_t)7)); + for (const uint8_t *limit = buf + (size & ~(size_t)7); buf < limit; buf += 8) crc = __crc32d(crc, aligned_read64le(buf)); @@ -84,8 +84,10 @@ is_arch_extension_supported(void) #elif defined(HAVE_ELF_AUX_INFO) unsigned long feature_flags; - elf_aux_info(AT_HWCAP, &feature_flags, sizeof(feature_flags)); - return feature_flags & HWCAP_CRC32 != 0; + if (elf_aux_info(AT_HWCAP, &feature_flags, sizeof(feature_flags)) != 0) + return false; + + return (feature_flags & HWCAP_CRC32) != 0; #elif defined(_WIN32) return IsProcessorFeaturePresent( @@ -98,11 +100,12 @@ is_arch_extension_supported(void) // The sysctlbyname() function requires a string identifier for the // CPU feature it tests. The Apple documentation lists the string // "hw.optional.armv8_crc32", which can be found here: - // (https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619) - int err = sysctlbyname("hw.optional.armv8_crc32", &has_crc32, - &size, NULL, 0); + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619 + if (sysctlbyname("hw.optional.armv8_crc32", &has_crc32, + &size, NULL, 0) != 0) + return false; - return !err && has_crc32; + return has_crc32; #else // If a runtime detection method cannot be found, then this must diff --git a/src/liblzma/check/crc32_fast.c b/src/liblzma/check/crc32_fast.c index 5e26914a4d1b..16dbb7467513 100644 --- a/src/liblzma/check/crc32_fast.c +++ b/src/liblzma/check/crc32_fast.c @@ -34,7 +34,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc) crc = ~crc; #ifdef WORDS_BIGENDIAN - crc = bswap32(crc); + crc = byteswap32(crc); #endif if (size > 8) { @@ -80,7 +80,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc) crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); #ifdef WORDS_BIGENDIAN - crc = bswap32(crc); + crc = byteswap32(crc); #endif return ~crc; @@ -97,24 +97,14 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc) // If both the generic and arch-optimized implementations are built, then // the function to use is selected at runtime because the system running // the binary might not have the arch-specific instruction set extension(s) -// available. The three dispatch methods in order of priority: +// available. The dispatch methods in order of priority: // -// 1. Indirect function (ifunc). This method is slightly more efficient -// than the constructor method because it will change the entry in the -// Procedure Linkage Table (PLT) for the function either at load time or -// at the first call. This avoids having to call the function through a -// function pointer and will treat the function call like a regular call -// through the PLT. ifuncs are created by using -// __attribute__((__ifunc__("resolver"))) on a function which has no -// body. The "resolver" is the name of the function that chooses at -// runtime which implementation to use. -// -// 2. Constructor. This method uses __attribute__((__constructor__)) to +// 1. Constructor. This method uses __attribute__((__constructor__)) to // set crc32_func at load time. This avoids extra computation (and any // unlikely threading bugs) on the first call to lzma_crc32() to decide // which implementation should be used. // -// 3. First Call Resolution. On the very first call to lzma_crc32(), the +// 2. First Call Resolution. On the very first call to lzma_crc32(), the // call will be directed to crc32_dispatch() instead. This will set the // appropriate implementation function and will not be called again. // This method does not use any kind of locking but is safe because if @@ -124,17 +114,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc) typedef uint32_t (*crc32_func_type)( const uint8_t *buf, size_t size, uint32_t crc); -// Clang 16.0.0 and older has a bug where it marks the ifunc resolver -// function as unused since it is static and never used outside of -// __attribute__((__ifunc__())). -#if defined(CRC_USE_IFUNC) && defined(__clang__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - -// This resolver is shared between all three dispatch methods. It serves as -// the ifunc resolver if ifunc is supported, otherwise it is called as a -// regular function by the constructor or first call resolution methods. +// This resolver is shared between all dispatch methods. static crc32_func_type crc32_resolve(void) { @@ -142,11 +122,6 @@ crc32_resolve(void) ? &crc32_arch_optimized : &crc32_generic; } -#if defined(CRC_USE_IFUNC) && defined(__clang__) -# pragma GCC diagnostic pop -#endif - -#ifndef CRC_USE_IFUNC #ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR // Constructor method. @@ -171,8 +146,7 @@ crc32_set_func(void) static uint32_t crc32_dispatch(const uint8_t *buf, size_t size, uint32_t crc) { - // When __attribute__((__ifunc__(...))) and - // __attribute__((__constructor__)) isn't supported, set the + // 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 @@ -184,14 +158,8 @@ crc32_dispatch(const uint8_t *buf, size_t size, uint32_t crc) #endif #endif -#endif -#ifdef CRC_USE_IFUNC -extern LZMA_API(uint32_t) -lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) - __attribute__((__ifunc__("crc32_resolve"))); -#else extern LZMA_API(uint32_t) lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) { @@ -234,4 +202,3 @@ lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) return crc32_generic(buf, size, crc); #endif } -#endif diff --git a/src/liblzma/check/crc32_table.c b/src/liblzma/check/crc32_table.c index fb1b6585422a..c141cefe5a40 100644 --- a/src/liblzma/check/crc32_table.c +++ b/src/liblzma/check/crc32_table.c @@ -17,18 +17,16 @@ #if defined(HAVE_USABLE_CLMUL) && ((defined(__x86_64__) && defined(__SSSE3__) \ && defined(__SSE4_1__) && defined(__PCLMUL__)) \ || (defined(__e2k__) && __iset__ >= 6)) -# define X86_CLMUL_NO_TABLE 1 -#endif +# define NO_CRC32_TABLE -#if defined(HAVE_ARM64_CRC32) \ +#elif defined(HAVE_ARM64_CRC32) \ && !defined(WORDS_BIGENDIAN) \ && defined(__ARM_FEATURE_CRC32) -# define ARM64_CRC32_NO_TABLE 1 +# define NO_CRC32_TABLE #endif -#if !defined(HAVE_ENCODERS) && (defined(X86_CLMUL_NO_TABLE) \ - || defined(ARM64_CRC32_NO_TABLE_)) +#if !defined(HAVE_ENCODERS) && defined(NO_CRC32_TABLE) // No table needed. Use a typedef to avoid an empty translation unit. typedef void lzma_crc32_dummy; diff --git a/src/liblzma/check/crc32_tablegen.c b/src/liblzma/check/crc32_tablegen.c index 01047d3eca47..b8cf459f8e76 100644 --- a/src/liblzma/check/crc32_tablegen.c +++ b/src/liblzma/check/crc32_tablegen.c @@ -43,7 +43,7 @@ init_crc32_table(void) #ifdef WORDS_BIGENDIAN for (size_t s = 0; s < 8; ++s) for (size_t b = 0; b < 256; ++b) - crc32_table[s][b] = bswap32(crc32_table[s][b]); + crc32_table[s][b] = byteswap32(crc32_table[s][b]); #endif return; diff --git a/src/liblzma/check/crc64_fast.c b/src/liblzma/check/crc64_fast.c index f29fe3d3c5e6..0ce83fe4ad36 100644 --- a/src/liblzma/check/crc64_fast.c +++ b/src/liblzma/check/crc64_fast.c @@ -39,7 +39,7 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc) crc = ~crc; #ifdef WORDS_BIGENDIAN - crc = bswap64(crc); + crc = byteswap64(crc); #endif if (size > 4) { @@ -73,7 +73,7 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc) crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); #ifdef WORDS_BIGENDIAN - crc = bswap64(crc); + crc = byteswap64(crc); #endif return ~crc; @@ -93,11 +93,6 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc) typedef uint64_t (*crc64_func_type)( const uint8_t *buf, size_t size, uint64_t crc); -#if defined(CRC_USE_IFUNC) && defined(__clang__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - static crc64_func_type crc64_resolve(void) { @@ -105,12 +100,6 @@ crc64_resolve(void) ? &crc64_arch_optimized : &crc64_generic; } -#if defined(CRC_USE_IFUNC) && defined(__clang__) -# pragma GCC diagnostic pop -#endif - -#ifndef CRC_USE_IFUNC - #ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR # define CRC64_SET_FUNC_ATTR __attribute__((__constructor__)) static crc64_func_type crc64_func; @@ -139,14 +128,8 @@ crc64_dispatch(const uint8_t *buf, size_t size, uint64_t crc) } #endif #endif -#endif -#ifdef CRC_USE_IFUNC -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) - __attribute__((__ifunc__("crc64_resolve"))); -#else extern LZMA_API(uint64_t) lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) { @@ -171,4 +154,3 @@ lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) return crc64_generic(buf, size, crc); #endif } -#endif diff --git a/src/liblzma/check/crc64_table.c b/src/liblzma/check/crc64_table.c index 6dee387a1fcf..78e427597ce6 100644 --- a/src/liblzma/check/crc64_table.c +++ b/src/liblzma/check/crc64_table.c @@ -17,11 +17,11 @@ #if defined(HAVE_USABLE_CLMUL) && ((defined(__x86_64__) && defined(__SSSE3__) \ && defined(__SSE4_1__) && defined(__PCLMUL__)) \ || (defined(__e2k__) && __iset__ >= 6)) -# define X86_CLMUL_NO_TABLE 1 +# define NO_CRC64_TABLE #endif -#ifdef X86_CLMUL_NO_TABLE +#ifdef NO_CRC64_TABLE // No table needed. Use a typedef to avoid an empty translation unit. typedef void lzma_crc64_dummy; diff --git a/src/liblzma/check/crc64_tablegen.c b/src/liblzma/check/crc64_tablegen.c index af93e011ca21..2035127a1123 100644 --- a/src/liblzma/check/crc64_tablegen.c +++ b/src/liblzma/check/crc64_tablegen.c @@ -42,7 +42,7 @@ init_crc64_table(void) #ifdef WORDS_BIGENDIAN for (size_t s = 0; s < 4; ++s) for (size_t b = 0; b < 256; ++b) - crc64_table[s][b] = bswap64(crc64_table[s][b]); + crc64_table[s][b] = byteswap64(crc64_table[s][b]); #endif return; diff --git a/src/liblzma/check/crc_common.h b/src/liblzma/check/crc_common.h index 856665db79a8..63a7b5cefebf 100644 --- a/src/liblzma/check/crc_common.h +++ b/src/liblzma/check/crc_common.h @@ -67,8 +67,6 @@ #undef CRC32_ARM64 #undef CRC64_ARM64_CLMUL -#undef CRC_USE_IFUNC - #undef CRC_USE_GENERIC_FOR_SMALL_INPUTS // ARM64 CRC32 instruction is only useful for CRC32. Currently, only @@ -76,7 +74,7 @@ // endian machine. // // NOTE: Keep this and the next check in sync with the macro -// ARM64_CRC32_NO_TABLE in crc32_table.c +// NO_CRC32_TABLE in crc32_table.c #if defined(HAVE_ARM64_CRC32) && !defined(WORDS_BIGENDIAN) // Allow ARM64 CRC32 instruction without a runtime check if // __ARM_FEATURE_CRC32 is defined. GCC and Clang only define this if the @@ -96,7 +94,8 @@ // 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 in sync with the CLMUL_NO_TABLE macro in crc32_table.c. +// NOTE: Keep this in sync with the NO_CRC32_TABLE macro in crc32_table.c +// and NO_CRC64_TABLE in crc64_table.c. # if (defined(__SSSE3__) && defined(__SSE4_1__) && defined(__PCLMUL__)) \ || (defined(__e2k__) && __iset__ >= 6) # define CRC32_ARCH_OPTIMIZED 1 @@ -109,9 +108,6 @@ # define CRC64_ARCH_OPTIMIZED 1 # define CRC_X86_CLMUL 1 -# ifdef HAVE_FUNC_ATTRIBUTE_IFUNC -# define CRC_USE_IFUNC 1 -# endif /* // The generic code is much faster with 1-8-byte inputs and // has similar performance up to 16 bytes at least in @@ -121,9 +117,7 @@ // 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. -# ifndef CRC_USE_IFUNC -# define CRC_USE_GENERIC_FOR_SMALL_INPUTS 1 -# endif +# define CRC_USE_GENERIC_FOR_SMALL_INPUTS 1 */ # endif #endif diff --git a/src/liblzma/check/crc_x86_clmul.h b/src/liblzma/check/crc_x86_clmul.h index ae66ca9f8c71..f1254ece18ed 100644 --- a/src/liblzma/check/crc_x86_clmul.h +++ b/src/liblzma/check/crc_x86_clmul.h @@ -385,15 +385,8 @@ crc64_arch_optimized(const uint8_t *buf, size_t size, uint64_t crc) #endif // BUILDING_CRC64_CLMUL -// is_arch_extension_supported() must be inlined in this header file because -// the ifunc resolver function may not support calling a function in another -// translation unit. Depending on compiler-toolchain and flags, a call to -// a function defined in another translation unit could result in a -// reference to the PLT, which is unsafe to do in an ifunc resolver. The -// ifunc resolver runs very early when loading a shared library, so the PLT -// entries may not be setup at that time. Inlining this function duplicates -// the function body in crc32_resolve() and crc64_resolve(), but this is -// acceptable because the function results in very few instructions. +// Inlining this function duplicates the function body in crc32_resolve() and +// crc64_resolve(), but this is acceptable because this is a tiny function. static inline bool is_arch_extension_supported(void) { diff --git a/src/liblzma/common/easy_preset.h b/src/liblzma/common/easy_preset.h index d0ca1a6234a1..4ef6d044ad57 100644 --- a/src/liblzma/common/easy_preset.h +++ b/src/liblzma/common/easy_preset.h @@ -9,6 +9,9 @@ // /////////////////////////////////////////////////////////////////////////////// +#ifndef LZMA_EASY_PRESET_H +#define LZMA_EASY_PRESET_H + #include "common.h" @@ -29,3 +32,5 @@ typedef struct { /// Set *easy to the settings given by the preset. Returns true on error, /// false on success. extern bool lzma_easy_preset(lzma_options_easy *easy, uint32_t preset); + +#endif diff --git a/src/liblzma/common/filter_buffer_decoder.c b/src/liblzma/common/filter_buffer_decoder.c index e80c582c916f..cc0d88cc71c1 100644 --- a/src/liblzma/common/filter_buffer_decoder.c +++ b/src/liblzma/common/filter_buffer_decoder.c @@ -23,7 +23,7 @@ lzma_raw_buffer_decode( || out_pos == NULL || *out_pos > out_size) return LZMA_PROG_ERROR; - // Initialize the decoer. + // Initialize the decoder. lzma_next_coder next = LZMA_NEXT_CODER_INIT; return_if_error(lzma_raw_decoder_init(&next, allocator, filters)); diff --git a/src/liblzma/common/filter_common.c b/src/liblzma/common/filter_common.c index 2da6bd9c7781..d15d9cc94f99 100644 --- a/src/liblzma/common/filter_common.c +++ b/src/liblzma/common/filter_common.c @@ -153,7 +153,7 @@ lzma_filters_copy(const lzma_filter *src, lzma_filter *real_dest, return LZMA_PROG_ERROR; // Use a temporary destination so that the real destination - // will never be modied if an error occurs. + // will never be modified if an error occurs. lzma_filter dest[LZMA_FILTERS_MAX + 1]; lzma_ret ret; diff --git a/src/liblzma/common/filter_decoder.c b/src/liblzma/common/filter_decoder.c index 77441e5449c3..cbdeb5858f66 100644 --- a/src/liblzma/common/filter_decoder.c +++ b/src/liblzma/common/filter_decoder.c @@ -150,6 +150,16 @@ decoder_find(lzma_vli id) } +// lzma_filter_coder begins with the same members as lzma_filter_decoder. +// This function is a wrapper with a type that is compatible with the +// typedef of lzma_filter_find in filter_common.h. +static const lzma_filter_coder * +coder_find(lzma_vli id) +{ + return (const lzma_filter_coder *)decoder_find(id); +} + + extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id) { @@ -162,7 +172,7 @@ lzma_raw_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter *options) { return lzma_raw_coder_init(next, allocator, - options, (lzma_filter_find)(&decoder_find), false); + options, &coder_find, false); } @@ -181,8 +191,7 @@ lzma_raw_decoder(lzma_stream *strm, const lzma_filter *options) extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) { - return lzma_raw_coder_memusage( - (lzma_filter_find)(&decoder_find), filters); + return lzma_raw_coder_memusage(&coder_find, filters); } diff --git a/src/liblzma/common/filter_encoder.c b/src/liblzma/common/filter_encoder.c index 523d37310010..bc394448985a 100644 --- a/src/liblzma/common/filter_encoder.c +++ b/src/liblzma/common/filter_encoder.c @@ -193,6 +193,16 @@ encoder_find(lzma_vli id) } +// lzma_filter_coder begins with the same members as lzma_filter_encoder. +// This function is a wrapper with a type that is compatible with the +// typedef of lzma_filter_find in filter_common.h. +static const lzma_filter_coder * +coder_find(lzma_vli id) +{ + return (const lzma_filter_coder *)encoder_find(id); +} + + extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) { @@ -232,7 +242,7 @@ lzma_raw_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter *filters) { return lzma_raw_coder_init(next, allocator, - filters, (lzma_filter_find)(&encoder_find), true); + filters, &coder_find, true); } @@ -240,7 +250,7 @@ extern LZMA_API(lzma_ret) lzma_raw_encoder(lzma_stream *strm, const lzma_filter *filters) { lzma_next_strm_init(lzma_raw_coder_init, strm, filters, - (lzma_filter_find)(&encoder_find), true); + &coder_find, true); strm->internal->supported_actions[LZMA_RUN] = true; strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; @@ -253,8 +263,7 @@ lzma_raw_encoder(lzma_stream *strm, const lzma_filter *filters) extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) { - return lzma_raw_coder_memusage( - (lzma_filter_find)(&encoder_find), filters); + return lzma_raw_coder_memusage(&coder_find, filters); } diff --git a/src/liblzma/common/index_decoder.c b/src/liblzma/common/index_decoder.c index f105ff04e8a1..4bcb30692115 100644 --- a/src/liblzma/common/index_decoder.c +++ b/src/liblzma/common/index_decoder.c @@ -305,6 +305,12 @@ lzma_index_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, extern LZMA_API(lzma_ret) lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) { + // If i isn't NULL, *i must always be initialized due to + // the wording in the API docs. This way it is initialized + // if we return LZMA_PROG_ERROR due to strm == NULL. + if (i != NULL) + *i = NULL; + lzma_next_strm_init(lzma_index_decoder_init, strm, i, memlimit); strm->internal->supported_actions[LZMA_RUN] = true; @@ -319,6 +325,11 @@ 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) { + // If i isn't NULL, *i must always be initialized due to + // the wording in the API docs. + if (i != NULL) + *i = NULL; + // Sanity checks if (i == NULL || memlimit == NULL || in == NULL || in_pos == NULL || *in_pos > in_size) diff --git a/src/liblzma/common/memcmplen.h b/src/liblzma/common/memcmplen.h index d8c42040d368..394a4856dd6a 100644 --- a/src/liblzma/common/memcmplen.h +++ b/src/liblzma/common/memcmplen.h @@ -67,6 +67,19 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2, // This is only for x86-64 and ARM64 for now. This might be fine on // other 64-bit processors too. On big endian one should use xor // instead of subtraction and switch to __builtin_clzll(). + // + // Reasons to use subtraction instead of xor: + // + // - On some x86-64 processors (Intel Sandy Bridge to Tiger Lake), + // sub+jz and sub+jnz can be fused but xor+jz or xor+jnz cannot. + // Thus using subtraction has potential to be a tiny amount faster + // since the code checks if the quotient is non-zero. + // + // - Some processors (Intel Pentium 4) used to have more ALU + // resources for add/sub instructions than and/or/xor. + // + // The processor info is based on Agner Fog's microarchitecture.pdf + // version 2023-05-26. https://www.agner.org/optimize/ #define LZMA_MEMCMPLEN_EXTRA 8 while (len < limit) { const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len); diff --git a/src/liblzma/common/outqueue.h b/src/liblzma/common/outqueue.h index ae56f636e8b1..25f071977a8f 100644 --- a/src/liblzma/common/outqueue.h +++ b/src/liblzma/common/outqueue.h @@ -9,6 +9,9 @@ // /////////////////////////////////////////////////////////////////////////////// +#ifndef LZMA_OUTQUEUE_H +#define LZMA_OUTQUEUE_H + #include "common.h" @@ -251,3 +254,5 @@ lzma_outq_outbuf_memusage(size_t buf_size) assert(buf_size <= SIZE_MAX - sizeof(lzma_outbuf)); return sizeof(lzma_outbuf) + buf_size; } + +#endif diff --git a/src/liblzma/common/string_conversion.c b/src/liblzma/common/string_conversion.c index 92d9032bdd18..c899783c642a 100644 --- a/src/liblzma/common/string_conversion.c +++ b/src/liblzma/common/string_conversion.c @@ -217,12 +217,14 @@ typedef struct { uint16_t offset; union { + // NVHPC has problems with unions that contain pointers that + // are not the first members, so keep "map" at the top. + const name_value_map *map; + struct { uint32_t min; uint32_t max; } range; - - const name_value_map *map; } u; } option_map; @@ -1000,6 +1002,12 @@ 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) { + // If error_pos isn't NULL, *error_pos must always be set. + // liblzma <= 5.4.6 and <= 5.6.1 have a bug and don't do this + // when str == NULL or filters == NULL or flags are unsupported. + if (error_pos != NULL) + *error_pos = 0; + if (str == NULL || filters == NULL) return "Unexpected NULL pointer argument(s) " "to lzma_str_to_filters()"; diff --git a/src/liblzma/delta/delta_decoder.c b/src/liblzma/delta/delta_decoder.c index 10d53687894e..9f0d49ca415a 100644 --- a/src/liblzma/delta/delta_decoder.c +++ b/src/liblzma/delta/delta_decoder.c @@ -25,6 +25,11 @@ decode_buffer(lzma_delta_coder *coder, uint8_t *buffer, size_t size) } +// For an unknown reason NVIDIA HPC Compiler needs this pragma +// to produce working code. +#ifdef __NVCOMPILER +# pragma routine novector +#endif static lzma_ret delta_decode(void *coder_ptr, const lzma_allocator *allocator, const uint8_t *restrict in, size_t *restrict in_pos, diff --git a/src/liblzma/lz/lz_encoder.h b/src/liblzma/lz/lz_encoder.h index 429836c8bc4e..eb197c6b6cd8 100644 --- a/src/liblzma/lz/lz_encoder.h +++ b/src/liblzma/lz/lz_encoder.h @@ -21,7 +21,7 @@ // changing this check. #define IS_ENC_DICT_SIZE_VALID(size) \ ((size) >= LZMA_DICT_SIZE_MIN \ - && (size) <= (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) + && (size) <= (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) /// A table of these is used by the LZ-based encoder to hold diff --git a/src/liblzma/rangecoder/range_decoder.h b/src/liblzma/rangecoder/range_decoder.h index b6422247f3c3..31a58d1ffbed 100644 --- a/src/liblzma/rangecoder/range_decoder.h +++ b/src/liblzma/rangecoder/range_decoder.h @@ -45,6 +45,7 @@ // and different processors. Overall 0x1F0 seems to be the best choice. #ifndef LZMA_RANGE_DECODER_CONFIG # if defined(__x86_64__) && !defined(__ILP32__) \ + && !defined(__NVCOMPILER) \ && (defined(__GNUC__) || defined(__clang__)) # define LZMA_RANGE_DECODER_CONFIG 0x1F0 # else diff --git a/src/liblzma/simple/riscv.c b/src/liblzma/simple/riscv.c index aabbb0520577..b18df8b637d0 100644 --- a/src/liblzma/simple/riscv.c +++ b/src/liblzma/simple/riscv.c @@ -116,7 +116,7 @@ AUIPC with rd != x0 Zfh, F, D, and Q: * RV32I: LB, LH, LW, LBU, LHU, SB, SH, SW * RV64I has also: LD, LWU, SD - * Zhf: FLH, FSH + * Zfh: FLH, FSH * F: FLW, FSW * D: FLD, FSD * Q: FLQ, FSQ @@ -320,11 +320,11 @@ AUIPC with rd == x0 // The left-hand side takes care of (1) and (2). // (a) The lowest 7 bits are already known to be AUIPC so subtracting 0x17 // makes those bits zeros. -// (b) If AUIPC rd equals x2, subtracting 0x10 makes bits [11:7] zeros. +// (b) If AUIPC rd equals x2, subtracting 0x100 makes bits [11:7] zeros. // If rd doesn't equal x2, then there will be at least one non-zero bit // and the next step (c) is irrelevant. // (c) If the lowest two opcode bits of the packed inst2 are set in [13:12], -// then subtracting 0x300 will make those bits zeros. Otherwise there +// then subtracting 0x3000 will make those bits zeros. Otherwise there // will be at least one non-zero bit. // // The shift by 18 removes the high bits from the final '>=' comparison and diff --git a/src/liblzma/simple/simple_coder.h b/src/liblzma/simple/simple_coder.h index c9ccc3f1e634..2b762d50071d 100644 --- a/src/liblzma/simple/simple_coder.h +++ b/src/liblzma/simple/simple_coder.h @@ -61,12 +61,12 @@ extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next, extern lzma_ret lzma_simple_arm64_encoder_init(lzma_next_coder *next, - const lzma_allocator *allocator, - const lzma_filter_info *filters); + 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); + const lzma_allocator *allocator, + const lzma_filter_info *filters); extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, diff --git a/src/liblzma/simple/x86.c b/src/liblzma/simple/x86.c index 10d70e91697b..f216231f2d12 100644 --- a/src/liblzma/simple/x86.c +++ b/src/liblzma/simple/x86.c @@ -26,11 +26,7 @@ static size_t x86_code(void *simple_ptr, uint32_t now_pos, bool is_encoder, uint8_t *buffer, size_t size) { - static const bool MASK_TO_ALLOWED_STATUS[8] - = { true, true, true, false, true, false, false, false }; - - static const uint32_t MASK_TO_BIT_NUMBER[8] - = { 0, 1, 2, 2, 3, 3, 3, 3 }; + static const uint32_t MASK_TO_BIT_NUMBER[5] = { 0, 1, 2, 2, 3 }; lzma_simple_x86 *simple = simple_ptr; uint32_t prev_mask = simple->prev_mask; @@ -67,9 +63,8 @@ x86_code(void *simple_ptr, uint32_t now_pos, bool is_encoder, b = buffer[buffer_pos + 4]; - if (Test86MSByte(b) - && MASK_TO_ALLOWED_STATUS[(prev_mask >> 1) & 0x7] - && (prev_mask >> 1) < 0x10) { + if (Test86MSByte(b) && (prev_mask >> 1) <= 4 + && (prev_mask >> 1) != 3) { uint32_t src = ((uint32_t)(b) << 24) | ((uint32_t)(buffer[buffer_pos + 3]) << 16) diff --git a/src/xz/args.c b/src/xz/args.c index de84950a2987..eba1b97dc464 100644 --- a/src/xz/args.c +++ b/src/xz/args.c @@ -92,6 +92,12 @@ parse_block_list(const char *str_const) free(opt_block_list); opt_block_list = xmalloc((count + 1) * sizeof(block_list_entry)); + // Clear the bitmask of filter chains in use. + block_list_chain_mask = 0; + + // Reset the largest Block size found in --block-list. + block_list_largest = 0; + for (size_t i = 0; i < count; ++i) { // Locate the next comma and replace it with \0. char *p = strchr(str, ','); @@ -99,7 +105,7 @@ parse_block_list(const char *str_const) *p = '\0'; // Use the default filter chain unless overridden. - opt_block_list[i].filters_index = 0; + opt_block_list[i].chain_num = 0; // To specify a filter chain, the block list entry may be // prepended with "[filter-chain-number]:". The size is @@ -126,10 +132,13 @@ parse_block_list(const char *str_const) "filter chain number '%c:'"), str[0]); - int filter_num = str[0] - '0'; - opt_block_list[i].filters_index = - (uint32_t)filter_num; + const unsigned chain_num = (unsigned)(str[0] - '0'); + opt_block_list[i].chain_num = chain_num; + block_list_chain_mask |= 1U << chain_num; str += 2; + } else { + // This Block uses the default filter chain. + block_list_chain_mask |= 1U << 0; } if (str[0] == '\0') { @@ -153,9 +162,23 @@ parse_block_list(const char *str_const) opt_block_list[i].size = UINT64_MAX; } + + // Remember the largest Block size in the list. + // + // NOTE: Do this after handling the special value 0 + // because when 0 is used, we don't want to reduce + // the Block size of the multithreaded encoder. + if (block_list_largest < opt_block_list[i].size) + block_list_largest = opt_block_list[i].size; } - str = p + 1; + // Be standards compliant: p + 1 is undefined behavior + // if p == NULL. That occurs on the last iteration of + // the loop when we won't care about the value of str + // anymore anyway. That is, this is done conditionally + // solely for standard conformance reasons. + if (p != NULL) + str = p + 1; } // Terminate the array. @@ -238,7 +261,7 @@ parse_real(args_info *args, int argc, char **argv) { "check", required_argument, NULL, 'C' }, { "ignore-check", no_argument, NULL, OPT_IGNORE_CHECK }, { "block-size", required_argument, NULL, OPT_BLOCK_SIZE }, - { "block-list", required_argument, NULL, OPT_BLOCK_LIST }, + { "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 }, diff --git a/src/xz/coder.c b/src/xz/coder.c index 4efaa802b9bb..5e41f0df6802 100644 --- a/src/xz/coder.c +++ b/src/xz/coder.c @@ -11,6 +11,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "private.h" +#include "tuklib_integer.h" /// Return value type for coder_init(). @@ -27,6 +28,8 @@ bool opt_auto_adjust = true; bool opt_single_stream = false; uint64_t opt_block_size = 0; block_list_entry *opt_block_list = NULL; +uint64_t block_list_largest; +uint32_t block_list_chain_mask; /// Stream used to communicate with liblzma static lzma_stream strm = LZMA_STREAM_INIT; @@ -35,25 +38,19 @@ static lzma_stream strm = LZMA_STREAM_INIT; /// and 9 other filter chains can be specified with --filtersX. #define NUM_FILTER_CHAIN_MAX 10 -/// The default filter chain is in filters[0]. It is used for encoding +/// The default filter chain is in chains[0]. It is used for encoding /// in all supported formats and also for decdoing raw streams. The other /// filter chains are set by --filtersX to support changing filters with /// the --block-list option. -static lzma_filter filters[NUM_FILTER_CHAIN_MAX][LZMA_FILTERS_MAX + 1]; +static lzma_filter chains[NUM_FILTER_CHAIN_MAX][LZMA_FILTERS_MAX + 1]; -/// Bit mask representing the filters that are actually used when encoding -/// in the xz format. This is needed since a filter chain could be -/// specified in --filtersX (or the default filter chain), but never used -/// in --block-list. The default filter chain is always assumed to be used, -/// unless --block-list is specified and does not have a block using the -/// default filter chain. -static uint32_t filters_used_mask = 1; - -#ifdef HAVE_ENCODERS -/// Track the memory usage for all filter chains (default or --filtersX). -/// The memory usage may need to be scaled down depending on the memory limit. -static uint64_t filter_memusages[ARRAY_SIZE(filters)]; -#endif +/// Bitmask indicating which filter chains are actually used when encoding +/// in the .xz format. This is needed since the filter chains specified using +/// --filtersX (or the default filter chain) might in reality be unneeded +/// if they are never used in --block-list. When --block-list isn't +/// specified, only the default filter chain is used, thus the initial +/// value of this variable is 1U << 0 (the number of the default chain is 0). +static uint32_t chains_used_mask = 1U << 0; /// Input and output buffers static io_buf in_buf; @@ -105,7 +102,7 @@ forget_filter_chain(void) // Setting a preset or using --filters makes us forget // the earlier custom filter chain (if any). if (filters_count > 0) { - lzma_filters_free(filters[0], NULL); + lzma_filters_free(chains[0], NULL); filters_count = 0; } @@ -142,11 +139,12 @@ coder_add_filter(lzma_vli id, void *options) if (string_to_filter_used) forget_filter_chain(); - filters[0][filters_count].id = id; - filters[0][filters_count].options = options; + chains[0][filters_count].id = id; + chains[0][filters_count].options = options; + // Terminate the filter chain with LZMA_VLI_UNKNOWN to simplify // implementation of forget_filter_chain(). - filters[0][++filters_count].id = LZMA_VLI_UNKNOWN; + chains[0][++filters_count].id = LZMA_VLI_UNKNOWN; // Setting a custom filter chain makes us forget the preset options. // This makes a difference if one specifies e.g. "xz -9 --lzma2 -e" @@ -163,7 +161,7 @@ str_to_filters(const char *str, uint32_t index, uint32_t flags) { int error_pos; const char *err = lzma_str_to_filters(str, &error_pos, - filters[index], flags, NULL); + chains[index], flags, NULL); if (err != NULL) { char filter_num[2] = ""; @@ -199,7 +197,7 @@ coder_add_filters_from_str(const char *filter_str) // Set the filters_count to be the number of filters converted from // the string. - for (filters_count = 0; filters[0][filters_count].id + for (filters_count = 0; chains[0][filters_count].id != LZMA_VLI_UNKNOWN; ++filters_count) ; @@ -212,12 +210,12 @@ extern void coder_add_block_filters(const char *str, size_t slot) { // Free old filters first, if they were previously allocated. - if (filters_used_mask & (1U << slot)) - lzma_filters_free(filters[slot], NULL); + if (chains_used_mask & (1U << slot)) + lzma_filters_free(chains[slot], NULL); str_to_filters(str, slot, 0); - filters_used_mask |= 1U << slot; + chains_used_mask |= 1U << slot; } @@ -233,29 +231,26 @@ memlimit_too_small(uint64_t memory_usage) #ifdef HAVE_ENCODERS -// For a given opt_block_list index, validate that the filter has been -// set. If it has not been set, we must exit with error to avoid using -// an uninitialized filter chain. -static void -validate_block_list_filter(const uint32_t filter_num) -{ - if (!(filters_used_mask & (1U << filter_num))) - message_fatal(_("filter chain %u used by --block-list but " - "not specified with --filters%u="), - (unsigned)filter_num, (unsigned)filter_num); -} - - -// Sets the memory usage for each filter chain. It will return the maximum -// memory usage of all of the filter chains. +/// \brief Calculate the memory usage of each filter chain. +/// +/// \param chains_memusages If non-NULL, the memusage of the encoder +/// or decoder for each chain is stored in +/// this array. +/// \param mt If non-NULL, calculate memory usage of +/// multithreaded encoder. +/// \param encode Whether to calculate encoder or decoder +/// memory usage. This must be true if +/// mt != NULL. +/// +/// \return Return the highest memory usage of all of the filter chains. static uint64_t -filters_memusage_max(const lzma_mt *mt, bool encode) +get_chains_memusage(uint64_t *chains_memusages, const lzma_mt *mt, bool encode) { uint64_t max_memusage = 0; #ifdef MYTHREAD_ENABLED - // Copy multithreaded options to a temporary struct since the - // filters member needs to be changed + // Copy multithreading options to a temporary struct since the + // "filters" member needs to be changed. lzma_mt mt_local; if (mt != NULL) mt_local = *mt; @@ -263,40 +258,39 @@ filters_memusage_max(const lzma_mt *mt, bool encode) (void)mt; #endif - for (uint32_t i = 0; i < ARRAY_SIZE(filters); i++) { - if (!(filters_used_mask & (1U << i))) + for (uint32_t i = 0; i < ARRAY_SIZE(chains); i++) { + if (!(chains_used_mask & (1U << i))) continue; uint64_t memusage = UINT64_MAX; #ifdef MYTHREAD_ENABLED if (mt != NULL) { - mt_local.filters = filters[i]; + assert(encode); + mt_local.filters = chains[i]; memusage = lzma_stream_encoder_mt_memusage(&mt_local); - filter_memusages[i] = memusage; - } - else + } else #endif - if (encode) { - memusage = lzma_raw_encoder_memusage(filters[i]); - filter_memusages[i] = memusage; + memusage = lzma_raw_encoder_memusage(chains[i]); } - #ifdef HAVE_DECODERS else { - memusage = lzma_raw_decoder_memusage(filters[i]); + memusage = lzma_raw_decoder_memusage(chains[i]); } #endif + if (chains_memusages != NULL) + chains_memusages[i] = memusage; + if (memusage > max_memusage) max_memusage = memusage; } return max_memusage; } - #endif + extern void coder_set_compression_settings(void) { @@ -305,65 +299,65 @@ coder_set_compression_settings(void) assert(opt_format != FORMAT_LZIP); #endif -#ifdef HAVE_ENCODERS -# ifdef MYTHREAD_ENABLED - // Represents the largest Block size specified with --block-list. This - // is needed to help reduce the Block size in the multithreaded encoder - // so memory is not wasted. - uint64_t max_block_list_size = 0; -# 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. + if (check_default) { + check = LZMA_CHECK_CRC64; + if (!lzma_check_is_supported(check)) + check = LZMA_CHECK_CRC32; + } +#ifdef HAVE_ENCODERS if (opt_block_list != NULL) { - // This mask tracks the filters actually referenced in - // --block-list. It is used to help remove bits from - // filters_used_mask when a filter chain was specified - // but never actually used. - uint32_t filters_ref_mask = 0; - - for (uint32_t i = 0; opt_block_list[i].size != 0; i++) { - validate_block_list_filter( - opt_block_list[i].filters_index); - - // Mark the current filter as referenced. - filters_ref_mask |= 1U << - opt_block_list[i].filters_index; - -# ifdef MYTHREAD_ENABLED - if (opt_block_list[i].size > max_block_list_size) - max_block_list_size = opt_block_list[i].size; -# endif + // args.c ensures these. + assert(opt_mode == MODE_COMPRESS); + assert(opt_format == FORMAT_XZ); + + // Find out if block_list_chain_mask has a bit set that + // isn't set in chains_used_mask. + const uint32_t missing_chains_mask + = (block_list_chain_mask ^ chains_used_mask) + & block_list_chain_mask; + + // If a filter chain was specified in --block-list but no + // matching --filtersX option was used, exit with an error. + if (missing_chains_mask != 0) { + // Get the number of the first missing filter chain + // and show it in the error message. + const unsigned first_missing + = (unsigned)ctz32(missing_chains_mask); + + message_fatal(_("filter chain %u used by " + "--block-list but not specified " + "with --filters%u="), + first_missing, first_missing); } - assert(filters_ref_mask != 0); - // Note: The filters that were initialized but not used do - // not free their options and do not have the filter - // IDs set to LZMA_VLI_UNKNOWN. Filter chains are not - // freed outside of debug mode and the default filter - // chain is never freed. - filters_used_mask = filters_ref_mask; + // Omit the unused filter chains from mask of used chains. + // + // (FIXME? When built with debugging, coder_free() will free() + // the filter chains (except the default chain) which makes + // Valgrind show fewer reachable allocations. But coder_free() + // uses this mask to determine which chains to free. Thus it + // won't free the ones that are cleared here from the mask. + // In practice this doesn't matter.) + chains_used_mask &= block_list_chain_mask; } else { // Reset filters used mask in case --block-list is not // used, but --filtersX is used. - filters_used_mask = 1; + chains_used_mask = 1U << 0; } #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. - if (check_default) { - check = LZMA_CHECK_CRC64; - if (!lzma_check_is_supported(check)) - check = LZMA_CHECK_CRC32; - } // Options for LZMA1 or LZMA2 in case we are using a preset. static lzma_options_lzma opt_lzma; - // The first filter in the filters[] array is for the default + // The first filter in the chains[] array is for the default // filter chain. - lzma_filter *default_filters = filters[0]; + lzma_filter *default_filters = chains[0]; - if (filters_count == 0 && filters_used_mask & 1) { + if (filters_count == 0 && chains_used_mask & 1) { // We are using a preset. This is not a good idea in raw mode // except when playing around with things. Different versions // of this software may use different options in presets, and @@ -403,14 +397,16 @@ coder_set_compression_settings(void) "the LZMA1 filter")); // If we are using the .xz format, make sure that there is no LZMA1 - // filter to prevent LZMA_PROG_ERROR. - if (opt_format == FORMAT_XZ && filters_used_mask & 1) + // filter to prevent LZMA_PROG_ERROR. With the chains from --filtersX + // we have already ensured this by calling lzma_str_to_filters() + // without setting the flags that would allow non-.xz filters. + if (opt_format == FORMAT_XZ && chains_used_mask & 1) for (size_t i = 0; i < filters_count; ++i) if (default_filters[i].id == LZMA_FILTER_LZMA1) message_fatal(_("LZMA1 cannot be used " "with the .xz format")); - if (filters_used_mask & 1) { + if (chains_used_mask & 1) { // Print the selected default filter chain. message_filters_show(V_DEBUG, default_filters); } @@ -419,11 +415,11 @@ coder_set_compression_settings(void) // from the filter chain. Currently the threaded encoder doesn't // support LZMA_SYNC_FLUSH so single-threaded mode must be used. if (opt_mode == MODE_COMPRESS && opt_flush_timeout != 0) { - for (uint32_t i = 0; i < ARRAY_SIZE(filters); ++i) { - if (!(filters_used_mask & (1U << i))) + for (unsigned i = 0; i < ARRAY_SIZE(chains); ++i) { + if (!(chains_used_mask & (1U << i))) continue; - const lzma_filter *fc = filters[i]; + const lzma_filter *fc = chains[i]; for (size_t j = 0; fc[j].id != LZMA_VLI_UNKNOWN; j++) { switch (fc[j].id) { case LZMA_FILTER_LZMA2: @@ -434,7 +430,7 @@ coder_set_compression_settings(void) message_fatal(_("Filter chain %u is " "incompatible with " "--flush-timeout"), - (unsigned)i); + i); } } } @@ -446,17 +442,22 @@ coder_set_compression_settings(void) } } - // Get the memory usage and memory limit. The memory usage is the - // maximum of the default filters[] and any filters specified by - // --filtersX. - // Note that if --format=raw was used, we can be decompressing and - // do not need to account for any filter chains created - // with --filtersX. + // Get memory limit and the memory usage of the used filter chains. + // Note that if --format=raw was used, we can be decompressing + // using the default filter chain. // // If multithreaded .xz compression is done, the memory limit // will be replaced. uint64_t memory_limit = hardware_memlimit_get(opt_mode); uint64_t memory_usage = UINT64_MAX; + +#ifdef HAVE_ENCODERS + // Memory usage for each encoder filter chain (default + // or --filtersX). The encoder options may need to be + // scaled down depending on the memory usage limit. + uint64_t encoder_memusages[ARRAY_SIZE(chains)]; +#endif + if (opt_mode == MODE_COMPRESS) { #ifdef HAVE_ENCODERS # ifdef MYTHREAD_ENABLED @@ -465,16 +466,17 @@ coder_set_compression_settings(void) mt_options.threads = hardware_threads_get(); uint64_t block_size = opt_block_size; + // If opt_block_size is not set, find the maximum // recommended Block size based on the filter chains if (block_size == 0) { - for (uint32_t i = 0; i < ARRAY_SIZE(filters); + for (unsigned i = 0; i < ARRAY_SIZE(chains); i++) { - if (!(filters_used_mask & (1U << i))) + if (!(chains_used_mask & (1U << i))) continue; uint64_t size = lzma_mt_block_size( - filters[i]); + chains[i]); // If this returns an error, then one // of the filter chains in use is @@ -483,33 +485,28 @@ coder_set_compression_settings(void) if (size == UINT64_MAX) message_fatal(_("Unsupported " "options in filter " - "chain %u"), - (unsigned)i); + "chain %u"), i); if (size > block_size) block_size = size; } - // If the largest block size specified - // with --block-list is less than the - // recommended Block size, then it is a waste - // of RAM to use a larger Block size. It may - // even allow more threads to be used in some - // situations. If the special 0 Block size is - // used (encode all remaining data in 1 Block) - // then max_block_list_size will be set to - // UINT64_MAX, so the recommended Block size - // will always be used in this case. - if (max_block_list_size > 0 - && max_block_list_size - < block_size) - block_size = max_block_list_size; + // If --block-list was used and our current + // Block size exceeds the largest size + // in --block-list, reduce the Block size of + // the multithreaded encoder. The extra size + // would only be a waste of RAM. With a + // smaller Block size we might even be able + // to use more threads in some cases. + if (block_list_largest > 0 && block_size + > block_list_largest) + block_size = block_list_largest; } mt_options.block_size = block_size; mt_options.check = check; - memory_usage = filters_memusage_max( + memory_usage = get_chains_memusage(encoder_memusages, &mt_options, true); if (memory_usage != UINT64_MAX) message(V_DEBUG, _("Using up to %" PRIu32 @@ -518,7 +515,8 @@ coder_set_compression_settings(void) } else # endif { - memory_usage = filters_memusage_max(NULL, true); + memory_usage = get_chains_memusage(encoder_memusages, + NULL, true); } #endif } else { @@ -533,21 +531,13 @@ coder_set_compression_settings(void) // Print memory usage info before possible dictionary // size auto-adjusting. // - // NOTE: If only encoder support was built, we cannot show the + // NOTE: If only encoder support was built, we cannot show // what the decoder memory usage will be. message_mem_needed(V_DEBUG, memory_usage); -#ifdef HAVE_DECODERS - if (opt_mode == MODE_COMPRESS) { -#ifdef HAVE_ENCODERS - const uint64_t decmem = - filters_memusage_max(NULL, false); -#else - // If encoders are not enabled, then --block-list is never - // usable, so the other filter chains 1-9 can never be used. - // So there is no need to find the maximum decoder memory - // required in this case. - const uint64_t decmem = lzma_raw_decoder_memusage(filters[0]); -#endif + +#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS) + if (opt_mode == MODE_COMPRESS && message_verbosity_get() >= V_DEBUG) { + const uint64_t decmem = get_chains_memusage(NULL, NULL, false); if (decmem != UINT64_MAX) message(V_DEBUG, _("Decompression will need " "%s MiB of memory."), uint64_to_str( @@ -574,14 +564,21 @@ coder_set_compression_settings(void) // Reduce the number of threads by one and check // the memory usage. --mt_options.threads; - memory_usage = filters_memusage_max( + memory_usage = get_chains_memusage(encoder_memusages, &mt_options, true); if (memory_usage == UINT64_MAX) message_bug(); if (memory_usage <= memory_limit) { // The memory usage is now low enough. - message(V_WARNING, _("Reduced the number of " + // + // Since 5.6.1: This is only shown at + // V_DEBUG instead of V_WARNING because + // changing the number of threads doesn't + // affect the output. On some systems this + // message would be too common now that + // multithreaded compression is the default. + message(V_DEBUG, _("Reduced the number of " "threads from %s to %s to not exceed " "the memory usage limit of %s MiB"), uint64_to_str( @@ -600,8 +597,11 @@ coder_set_compression_settings(void) // 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. + // + // Since 5.6.1: Like above, this is now shown at V_DEBUG + // instead of V_WARNING. if (hardware_memlimit_mtenc_is_default()) { - message(V_WARNING, _("Reduced the number of threads " + message(V_DEBUG, _("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. " @@ -627,7 +627,8 @@ coder_set_compression_settings(void) // the multithreaded mode but the output // is also different. hardware_threads_set(1); - memory_usage = filters_memusage_max(NULL, true); + memory_usage = get_chains_memusage(encoder_memusages, + NULL, true); 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)); @@ -642,137 +643,84 @@ coder_set_compression_settings(void) if (!opt_auto_adjust) memlimit_too_small(memory_usage); - // Decrease the dictionary size until we meet the memory usage limit. - // The struct is used to track data needed to correctly reduce the - // memory usage and report which filters were adjusted. - typedef struct { - // Pointer to the filter chain that needs to be reduced. - // NULL indicates that this filter chain was either never - // set or was never above the memory limit. - lzma_filter *filters; - - // Original dictionary sizes are used to show how each - // filter's dictionary was reduced. - uint64_t orig_dict_size; - - // Index of the LZMA filter in the filters member. We only - // adjust this filter's memusage because we don't know how - // to reduce the memory usage of the other filters. - uint32_t lzma_idx; - - // Indicates if the filter's dictionary size needs to be - // reduced to fit under the memory limit (true) or if the - // filter chain is unused or is already under the memory - // limit (false). - bool reduce_dict_size; - } memusage_reduction_data; - - memusage_reduction_data memusage_reduction[ARRAY_SIZE(filters)]; - - // Counter represents how many filter chains are above the memory - // limit. - size_t count = 0; - - for (uint32_t i = 0; i < ARRAY_SIZE(filters); i++) { - // The short var name "r" will reduce the number of lines - // of code needed since less lines will stretch past 80 - // characters. - memusage_reduction_data *r = &memusage_reduction[i]; - r->filters = NULL; - r->reduce_dict_size = false; - - if (!(filters_used_mask & (1U << i))) + // Adjust each filter chain that is exceeding the memory usage limit. + for (unsigned i = 0; i < ARRAY_SIZE(chains); i++) { + // Skip unused chains. + if (!(chains_used_mask & (1U << i))) continue; - for (uint32_t j = 0; filters[i][j].id != LZMA_VLI_UNKNOWN; - j++) - if ((filters[i][j].id == LZMA_FILTER_LZMA2 - || filters[i][j].id - == LZMA_FILTER_LZMA1) - && filter_memusages[i] - > memory_limit) { - count++; - r->filters = filters[i]; - r->lzma_idx = j; - r->reduce_dict_size = true; - - lzma_options_lzma *opt = r->filters - [r->lzma_idx].options; - r->orig_dict_size = opt->dict_size; - opt->dict_size &= ~((UINT32_C(1) << 20) - 1); - } - } - - // Loop until all filters use <= memory_limit, or exit. - while (count > 0) { - for (uint32_t i = 0; i < ARRAY_SIZE(memusage_reduction); i++) { - memusage_reduction_data *r = &memusage_reduction[i]; + // Skip chains that already meet the memory usage limit. + if (encoder_memusages[i] <= memory_limit) + continue; - if (!r->reduce_dict_size) - continue; + // Look for the last filter if it is LZMA2 or LZMA1, so we + // can make it use less RAM. We cannot adjust other filters. + unsigned j = 0; + while (chains[i][j].id != LZMA_FILTER_LZMA2 + && chains[i][j].id != LZMA_FILTER_LZMA1) { + // NOTE: This displays the too high limit of this + // particular filter chain. If multiple chains are + // specified and another one would need more then + // this message could be confusing. As long as LZMA2 + // is the only memory hungry filter in .xz this + // doesn't matter at all in practice. + // + // FIXME? However, it's sort of odd still if we had + // switched from multithreaded mode to single-threaded + // mode because single-threaded produces different + // output. So the messages could perhaps be clearer. + // Another case of this is a few lines below. + if (chains[i][j].id == LZMA_VLI_UNKNOWN) + memlimit_too_small(encoder_memusages[i]); + + ++j; + } - lzma_options_lzma *opt = - r->filters[r->lzma_idx].options; + // Decrease the dictionary size until we meet the memory + // usage limit. First round down to full mebibytes. + lzma_options_lzma *opt = chains[i][j].options; + const uint32_t orig_dict_size = opt->dict_size; + opt->dict_size &= ~((UINT32_C(1) << 20) - 1); + while (true) { // If it is below 1 MiB, auto-adjusting failed. - // We could be more sophisticated and scale it - // down even more, but nobody has complained so far. + // + // FIXME? See the FIXME a few lines above. if (opt->dict_size < (UINT32_C(1) << 20)) - memlimit_too_small(memory_usage); + memlimit_too_small(encoder_memusages[i]); - uint64_t filt_mem_usage = - lzma_raw_encoder_memusage(r->filters); - - if (filt_mem_usage == UINT64_MAX) + encoder_memusages[i] + = lzma_raw_encoder_memusage(chains[i]); + if (encoder_memusages[i] == UINT64_MAX) message_bug(); - if (filt_mem_usage < memory_limit) { - r->reduce_dict_size = false; - count--; - } - else { - opt->dict_size -= UINT32_C(1) << 20; - } - } - } - - // Tell the user that we decreased the dictionary size for - // each filter that was adjusted. - for (uint32_t i = 0; i < ARRAY_SIZE(memusage_reduction); i++) { - memusage_reduction_data *r = &memusage_reduction[i]; - - // If the filters were never set, then the memory usage - // was never adjusted. - if (r->filters == NULL) - continue; + // Accept it if it is low enough. + if (encoder_memusages[i] <= memory_limit) + break; - lzma_filter *filter_lzma = &(r->filters[r->lzma_idx]); - lzma_options_lzma *opt = filter_lzma->options; + // Otherwise adjust it 1 MiB down and try again. + opt->dict_size -= UINT32_C(1) << 20; + } - // The first index is the default filter chain. The message - // should be slightly different if the default filter chain - // or if --filtersX was adjusted. + // Tell the user that we decreased the dictionary size. + // The message is slightly different between the default + // filter chain (0) or and chains from --filtersX. + const char lzma_num = chains[i][j].id == LZMA_FILTER_LZMA2 + ? '2' : '1'; + const char *from_size = uint64_to_str(orig_dict_size >> 20, 0); + const char *to_size = uint64_to_str(opt->dict_size >> 20, 1); + const char *limit_size = uint64_to_str(round_up_to_mib( + memory_limit), 2); if (i == 0) message(V_WARNING, _("Adjusted LZMA%c dictionary " "size from %s MiB to %s MiB to not exceed the " "memory usage limit of %s MiB"), - filter_lzma->id == LZMA_FILTER_LZMA2 - ? '2' : '1', - uint64_to_str(r->orig_dict_size >> 20, 0), - uint64_to_str(opt->dict_size >> 20, 1), - uint64_to_str(round_up_to_mib( - memory_limit), 2)); + lzma_num, from_size, to_size, limit_size); else message(V_WARNING, _("Adjusted LZMA%c dictionary size " "for --filters%u from %s MiB to %s MiB to not " "exceed the memory usage limit of %s MiB"), - filter_lzma->id == LZMA_FILTER_LZMA2 - ? '2' : '1', - (unsigned)i, - uint64_to_str(r->orig_dict_size >> 20, 0), - uint64_to_str(opt->dict_size >> 20, 1), - uint64_to_str(round_up_to_mib( - memory_limit), 2)); + lzma_num, i, from_size, to_size, limit_size); } #endif @@ -870,11 +818,11 @@ coder_init(file_pair *pair) allow_trailing_input = false; // Set the first filter chain. If the --block-list option is not - // used then use the default filter chain (filters[0]). + // used then use the default filter chain (chains[0]). // Otherwise, use first filter chain from the block list. lzma_filter *active_filters = opt_block_list == NULL - ? filters[0] - : filters[opt_block_list[0].filters_index]; + ? chains[0] + : chains[opt_block_list[0].chain_num]; if (opt_mode == MODE_COMPRESS) { #ifdef HAVE_ENCODERS @@ -1119,11 +1067,11 @@ split_block(uint64_t *block_remaining, ++*list_pos; // Update the filters if needed. - if (opt_block_list[*list_pos - 1].filters_index - != opt_block_list[*list_pos].filters_index) { - const uint32_t filter_idx = opt_block_list - [*list_pos].filters_index; - const lzma_filter *next = filters[filter_idx]; + if (opt_block_list[*list_pos - 1].chain_num + != opt_block_list[*list_pos].chain_num) { + const unsigned chain_num + = opt_block_list[*list_pos].chain_num; + const lzma_filter *next = chains[chain_num]; const lzma_ret ret = lzma_filters_update( &strm, next); @@ -1139,7 +1087,7 @@ split_block(uint64_t *block_remaining, message_fatal( _("Error changing to " "filter chain %u: %s"), - (unsigned)filter_idx, + chain_num, message_strm(ret)); } } @@ -1278,9 +1226,10 @@ coder_normal(file_pair *pair) ret = lzma_code(&strm, action); // Write out if the output buffer became full. - if (strm.avail_out == 0) + if (strm.avail_out == 0) { if (coder_write_output(pair)) break; + } #ifdef HAVE_ENCODERS if (ret == LZMA_STREAM_END && (action == LZMA_SYNC_FLUSH @@ -1514,9 +1463,9 @@ coder_free(void) // in coder_set_compression_settings(). Since this is only run in // debug mode and will be freed when the process ends anyway, we // don't worry about freeing it. - for (uint32_t i = 1; i < ARRAY_SIZE(filters); i++) { - if (filters_used_mask & (1U << i)) - lzma_filters_free(filters[i], NULL); + for (uint32_t i = 1; i < ARRAY_SIZE(chains); i++) { + if (chains_used_mask & (1U << i)) + lzma_filters_free(chains[i], NULL); } lzma_end(&strm); diff --git a/src/xz/coder.h b/src/xz/coder.h index a7feeb9cadb1..96755f30d106 100644 --- a/src/xz/coder.h +++ b/src/xz/coder.h @@ -30,15 +30,13 @@ enum format_type { }; -/// Simple struct to track Block metadata specified through the -/// --block-list option. +/// Array of these hold the entries specified with --block-list. typedef struct { /// Uncompressed size of the Block uint64_t size; - /// Index into the filters[] representing the filter chain to use - /// for this Block. - uint32_t filters_index; + /// Filter chain to use for this Block (chains[chain_num]) + unsigned chain_num; } block_list_entry; @@ -65,6 +63,19 @@ extern uint64_t opt_block_size; /// List of block size and filter chain pointer pairs. extern block_list_entry *opt_block_list; +/// Size of the largest Block that was specified in --block-list. +/// This is used to limit the block_size option of multithreaded encoder. +/// It's waste of memory to specify a too large block_size and reducing +/// it might even allow using more threads in some cases. +/// +/// NOTE: If the last entry in --block-list is the special value of 0 +/// (which gets converted to UINT64_MAX), it counts here as UINT64_MAX too. +/// This way the multithreaded encoder's Block size won't be reduced. +extern uint64_t block_list_largest; + +/// Bitmask indicating which filter chains we specified in --block-list. +extern uint32_t block_list_chain_mask; + /// Set the integrity check type used when compressing extern void coder_set_check(lzma_check check); diff --git a/src/xz/message.h b/src/xz/message.h index 1734f0eaab68..3f6e183585f7 100644 --- a/src/xz/message.h +++ b/src/xz/message.h @@ -115,6 +115,7 @@ extern void message_help(bool long_help); /// Prints a help message specifically for using the --filters and /// --filtersX command line options. +tuklib_attr_noreturn extern void message_filters_help(void); diff --git a/src/xz/sandbox.c b/src/xz/sandbox.c index 3b3069c8b2c8..5bd227370751 100644 --- a/src/xz/sandbox.c +++ b/src/xz/sandbox.c @@ -109,7 +109,7 @@ sandbox_enable_strict_if_allowed(int src_fd lzma_attribute((__unused__)), } -#elif defined(HAVE_LINUX_LANDLOCK_H) +#elif defined(HAVE_LINUX_LANDLOCK) ////////////// // Landlock // diff --git a/src/xz/sandbox.h b/src/xz/sandbox.h index f41b4725ce3f..98b9862a1c0a 100644 --- a/src/xz/sandbox.h +++ b/src/xz/sandbox.h @@ -9,7 +9,7 @@ // /////////////////////////////////////////////////////////////////////////////// -#if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK_H) \ +#if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK) \ || defined(HAVE_CAP_RIGHTS_LIMIT) # define ENABLE_SANDBOX 1 #endif diff --git a/src/xz/signals.c b/src/xz/signals.c index 13cc4c2b0c2f..20f03beee8a5 100644 --- a/src/xz/signals.c +++ b/src/xz/signals.c @@ -49,6 +49,10 @@ signal_handler(int sig) } +#ifdef __APPLE__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wsign-conversion" +#endif extern void signals_init(void) { @@ -127,6 +131,9 @@ signals_init(void) return; } +#ifdef __APPLE__ +# pragma GCC diagnostic pop +#endif #ifndef __VMS diff --git a/src/xz/xz.1 b/src/xz/xz.1 index 6c8a52f5242e..5b880e81e8c2 100644 --- a/src/xz/xz.1 +++ b/src/xz/xz.1 @@ -4,7 +4,7 @@ .\" Authors: Lasse Collin .\" Jia Tan .\" -.TH XZ 1 "2024-02-13" "Tukaani" "XZ Utils" +.TH XZ 1 "2024-04-08" "Tukaani" "XZ Utils" . .SH NAME xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files @@ -1812,6 +1812,8 @@ and \fB\-\-ia64\fR[\fB=\fIoptions\fR] .TP \fB\-\-sparc\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-riscv\fR[\fB=\fIoptions\fR] .PD Add a branch/call/jump (BCJ) filter to the filter chain. These filters can be used only as a non-last filter @@ -2552,7 +2554,7 @@ is run by a script or tool, for example, GNU .RS .PP .nf -.ft CW +.ft CR XZ_OPT=\-2v tar caf foo.tar.xz foo .ft R .fi @@ -2572,7 +2574,7 @@ scripts one may use something like this: .RS .PP .nf -.ft CW +.ft CR XZ_OPT=${XZ_OPT\-"\-7e"} export XZ_OPT .ft R @@ -2830,7 +2832,7 @@ if compression is successful: .RS .PP .nf -.ft CW +.ft CR xz foo .ft R .fi @@ -2846,7 +2848,7 @@ even if decompression is successful: .RS .PP .nf -.ft CW +.ft CR xz \-dk bar.xz .ft R .fi @@ -2864,7 +2866,7 @@ and 5\ MiB, respectively): .RS .PP .nf -.ft CW +.ft CR tar cf \- baz | xz \-4e > baz.tar.xz .ft R .fi @@ -2875,7 +2877,7 @@ to standard output with a single command: .RS .PP .nf -.ft CW +.ft CR xz \-dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt .ft R .fi @@ -2890,7 +2892,7 @@ can be used to parallelize compression of many files: .RS .PP .nf -.ft CW +.ft CR find . \-type f \e! \-name '*.xz' \-print0 \e | xargs \-0r \-P4 \-n16 xz \-T1 .ft R @@ -2930,7 +2932,7 @@ after compressing multiple files: .RS .PP .nf -.ft CW +.ft CR xz \-\-robot \-\-list *.xz | awk '/^totals/{print $5\-$4}' .ft R .fi @@ -2950,7 +2952,7 @@ option: .RS .PP .nf -.ft CW +.ft CR if ! eval "$(xz \-\-robot \-\-version 2> /dev/null)" || [ "$XZ_VERSION" \-lt 50000002 ]; then echo "Your xz is too old." @@ -2966,7 +2968,7 @@ but if a limit has already been set, don't increase it: .RS .PP .nf -.ft CW +.ft CR NEWLIM=$((123 << 20))\ \ # 123 MiB OLDLIM=$(xz \-\-robot \-\-info\-memory | cut \-f3) if [ $OLDLIM \-eq 0 \-o $OLDLIM \-gt $NEWLIM ]; then @@ -3019,7 +3021,7 @@ can be modified to use a bigger dictionary: .RS .PP .nf -.ft CW +.ft CR xz \-\-lzma2=preset=1,dict=32MiB foo.tar .ft R .fi @@ -3047,7 +3049,7 @@ would use: .RS .PP .nf -.ft CW +.ft CR xz \-vv \-\-lzma2=dict=192MiB big_foo.tar .ft R .fi @@ -3077,7 +3079,7 @@ using about 100\ KiB of memory. .RS .PP .nf -.ft CW +.ft CR xz \-\-check=crc32 \-\-lzma2=preset=6e,dict=64KiB foo .ft R .fi @@ -3105,7 +3107,7 @@ slightly (like 0.1\ %) smaller file than .RS .PP .nf -.ft CW +.ft CR xz \-\-lzma2=preset=6e,pb=0,lc=4 source_code.tar .ft R .fi @@ -3118,7 +3120,7 @@ using the x86 BCJ filter: .RS .PP .nf -.ft CW +.ft CR xz \-\-x86 \-\-lzma2 libfoo.so .ft R .fi @@ -3153,7 +3155,7 @@ to LZMA2 to accommodate the three-byte alignment: .RS .PP .nf -.ft CW +.ft CR xz \-\-delta=dist=3 \-\-lzma2=pb=0 foo.tiff .ft R .fi @@ -3174,8 +3176,8 @@ have the same number of bytes per pixel. .BR bzip2 (1), .BR 7z (1) .PP -XZ Utils: <https://xz.tukaani.org/xz-utils/> +XZ Utils: <https://tukaani.org/xz/> .br -XZ Embedded: <https://xz.tukaani.org/xz-embedded/> +XZ Embedded: <https://tukaani.org/xz/embedded.html> .br LZMA SDK: <https://7-zip.org/sdk.html> diff --git a/src/xzdec/xzdec.1 b/src/xzdec/xzdec.1 index 0ae0fddda182..5198efb4612e 100644 --- a/src/xzdec/xzdec.1 +++ b/src/xzdec/xzdec.1 @@ -2,7 +2,7 @@ .\" .\" Author: Lasse Collin .\" -.TH XZDEC 1 "2024-01-19" "Tukaani" "XZ Utils" +.TH XZDEC 1 "2024-04-08" "Tukaani" "XZ Utils" .SH NAME xzdec, lzmadec \- Small .xz and .lzma decompressors .SH SYNOPSIS @@ -141,4 +141,4 @@ decompressor, consider using XZ Embedded. .SH "SEE ALSO" .BR xz (1) .PP -XZ Embedded: <https://xz.tukaani.org/xz-embedded/> +XZ Embedded: <https://tukaani.org/xz/embedded.html> diff --git a/src/xzdec/xzdec.c b/src/xzdec/xzdec.c index 6fd0be39e67f..4d881748b2e4 100644 --- a/src/xzdec/xzdec.c +++ b/src/xzdec/xzdec.c @@ -24,14 +24,19 @@ # include <sys/capsicum.h> #endif -#ifdef HAVE_LINUX_LANDLOCK_H +#ifdef HAVE_LINUX_LANDLOCK # include <linux/landlock.h> # include <sys/prctl.h> # include <sys/syscall.h> +# ifdef LANDLOCK_ACCESS_NET_BIND_TCP +# define LANDLOCK_ABI_MAX 4 +# else +# define LANDLOCK_ABI_MAX 3 +# endif #endif #if defined(HAVE_CAP_RIGHTS_LIMIT) || defined(HAVE_PLEDGE) \ - || defined(HAVE_LINUX_LANDLOCK_H) + || defined(HAVE_LINUX_LANDLOCK) # define ENABLE_SANDBOX 1 #endif @@ -313,10 +318,12 @@ sandbox_enter(int src_fd) STDIN_FILENO, cap_rights_clear(&rights))) goto error; - if (cap_rights_limit(STDOUT_FILENO, cap_rights_init(&rights, CAP_WRITE))) + if (cap_rights_limit(STDOUT_FILENO, cap_rights_init(&rights, + CAP_WRITE))) goto error; - if (cap_rights_limit(STDERR_FILENO, cap_rights_init(&rights, CAP_WRITE))) + if (cap_rights_limit(STDERR_FILENO, cap_rights_init(&rights, + CAP_WRITE))) goto error; #elif defined(HAVE_PLEDGE) @@ -325,17 +332,23 @@ sandbox_enter(int src_fd) goto error; (void)src_fd; -#elif defined(HAVE_LINUX_LANDLOCK_H) + +#elif defined(HAVE_LINUX_LANDLOCK) int landlock_abi = syscall(SYS_landlock_create_ruleset, (void *)NULL, 0, LANDLOCK_CREATE_RULESET_VERSION); if (landlock_abi > 0) { - // We support ABI versions 1-3. - if (landlock_abi > 3) - landlock_abi = 3; + if (landlock_abi > LANDLOCK_ABI_MAX) + landlock_abi = LANDLOCK_ABI_MAX; const struct landlock_ruleset_attr attr = { - .handled_access_fs = (1ULL << (12 + landlock_abi)) - 1 + .handled_access_fs = (1ULL + << (12 + my_min(3, landlock_abi))) - 1, +# if LANDLOCK_ABI_MAX >= 4 + .handled_access_net = landlock_abi < 4 ? 0 : + (LANDLOCK_ACCESS_NET_BIND_TCP + | LANDLOCK_ACCESS_NET_CONNECT_TCP), +# endif }; const int ruleset_fd = syscall(SYS_landlock_create_ruleset, @@ -351,6 +364,7 @@ sandbox_enter(int src_fd) } (void)src_fd; + #else # error ENABLE_SANDBOX is defined but no sandboxing method was found. #endif @@ -367,6 +381,7 @@ error: if (errno == ENOSYS) return; #endif + my_errorf("Failed to enable the sandbox"); exit(EXIT_FAILURE); } @@ -389,9 +404,15 @@ main(int argc, char **argv) } #endif -#ifdef HAVE_LINUX_LANDLOCK_H - // Prevent the process from gaining new privileges. The return - // is ignored to keep compatibility with old kernels. +#ifdef HAVE_LINUX_LANDLOCK + // Prevent the process from gaining new privileges. This must be done + // before landlock_restrict_self(2) but since we will never need new + // privileges, this call can be done here already. + // + // This is supported since Linux 3.5. Ignore the return value to + // keep compatibility with old kernels. landlock_restrict_self(2) + // will fail if the no_new_privs attribute isn't set, thus if prctl() + // fails here the error will still be detected when it matters. (void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); #endif @@ -438,19 +459,18 @@ main(int argc, char **argv) } } #ifdef ENABLE_SANDBOX - // Enable the sandbox for the last file. When the - // strict sandbox is enabled the process can no - // longer open additional files. It is likely that - // the most common way to use xzdec is to - // decompress a single file, so this fully protects - // most use cases. + // Enable the strict sandbox for the last file. + // Then the process can no longer open additional + // files. The typical xzdec use case is to decompress + // a single file so this way the strictest sandboxing + // is used in most cases. if (optind == argc - 1) sandbox_enter(fileno(src_file)); #endif uncompress(&strm, src_file, src_name); if (src_file != stdin) - fclose(src_file); + (void)fclose(src_file); } while (++optind < argc); } |