Compare commits
156 Commits
Author | SHA1 | Date |
---|---|---|
Adrien Nader | 265e5ffb70 | |
Adrien Nader | 3dfa915cd1 | |
Lasse Collin | 6b65e84bd4 | |
Lasse Collin | 4da8e1d833 | |
Lasse Collin | f6dc9996b0 | |
Lasse Collin | 67d62a375a | |
Lasse Collin | 283c03fe5b | |
Lasse Collin | 0c7fe9f227 | |
Lasse Collin | b46fe3ced9 | |
Lasse Collin | 6ed0554a15 | |
Lasse Collin | 0ab300ec52 | |
Lasse Collin | b274ad02c4 | |
Lasse Collin | 4fdcccd85e | |
Lasse Collin | f229fa32bf | |
Lasse Collin | 94a1a869ee | |
Andre Noll | 0e50ad7129 | |
Andre Noll | 9fd333d742 | |
Lasse Collin | 495aaf3a5b | |
Lasse Collin | ac6c8921d1 | |
Lasse Collin | d1b0276aaf | |
Lasse Collin | cac72956b1 | |
Lasse Collin | 2cdf0875de | |
Lasse Collin | 0168b6c8fb | |
Lasse Collin | 13337714e8 | |
Lasse Collin | ccc728d829 | |
Lasse Collin | 948f5865fe | |
Lasse Collin | 64228d0d5c | |
Lasse Collin | 98d3368ef4 | |
Lasse Collin | ba3b5dd082 | |
Lasse Collin | 3d4575f236 | |
Lasse Collin | b9f0584e3e | |
Lasse Collin | cc41bcaf77 | |
Lasse Collin | e34025d666 | |
Lasse Collin | 0b6168974f | |
Lasse Collin | 41e436076c | |
Lasse Collin | c33efefd4e | |
Lasse Collin | e560c82f1f | |
Lasse Collin | 05192b32e5 | |
Lasse Collin | 0f35eafe51 | |
Lasse Collin | fc9eaf81d7 | |
Lasse Collin | 090c69dda5 | |
Anders F Bjorklund | 1f35331332 | |
Anders F Bjorklund | 1415f1d946 | |
Anders F Bjorklund | 41913949b9 | |
Lasse Collin | 3dffda33f4 | |
Lasse Collin | b69900ed0b | |
Lasse Collin | cf4a1e1879 | |
Lasse Collin | cb94bb6d1f | |
Lasse Collin | b7dee202d5 | |
Lasse Collin | 265e7b44d8 | |
Lasse Collin | 78c2f8db90 | |
Lasse Collin | 91750dff8f | |
Lasse Collin | e11888a79a | |
Lasse Collin | f39ddd88f3 | |
Lasse Collin | cb84e27802 | |
Lasse Collin | f01780fce4 | |
Lasse Collin | d98ede7d70 | |
Lasse Collin | 19b447b64b | |
Lasse Collin | 45edf2966f | |
Lasse Collin | b065984e5a | |
Lasse Collin | 32be621f52 | |
Lasse Collin | efb07cfba6 | |
Lasse Collin | e3c8be1369 | |
Jeff Bastian | ad8282efe4 | |
Lasse Collin | 9271a3eb0e | |
Lasse Collin | 211b931cee | |
Jonathan Nieder | 9f62fd9605 | |
Lasse Collin | 1d05980f5b | |
Lasse Collin | fb68497333 | |
Lasse Collin | 75013db6d4 | |
Lasse Collin | e44b21839b | |
Lasse Collin | fd3dbb23ca | |
Lasse Collin | 05a735d279 | |
Lasse Collin | 4e6d62793b | |
Lasse Collin | dd95b5e761 | |
Lasse Collin | 20778053a0 | |
Lasse Collin | 2cefa84af6 | |
Lasse Collin | 433fec191a | |
Lasse Collin | 711fa680f5 | |
Lasse Collin | 3d7ab1dc61 | |
Lasse Collin | ef8b8e5f11 | |
Lasse Collin | 75c149bc80 | |
Lasse Collin | 456307ebf9 | |
Lasse Collin | 4c310b8a29 | |
Lasse Collin | ec32b79366 | |
Lasse Collin | dd06f40e4d | |
Lasse Collin | c66808d1f5 | |
Lasse Collin | 556c22dfed | |
Lasse Collin | dd13b66bf5 | |
Lasse Collin | a0223bf796 | |
Lasse Collin | 86e57e4bfe | |
Lasse Collin | 13e44a94da | |
Lasse Collin | 2f90345e13 | |
Lasse Collin | 8d4864f53f | |
Lasse Collin | 35e9c58abb | |
Benno Schulenberg | 532b3e4c56 | |
Lasse Collin | afb6ce8c82 | |
Lasse Collin | 7c3ba2ed5c | |
Lasse Collin | f55db9c187 | |
Lasse Collin | 203edff4c7 | |
Lasse Collin | f0a8f95c21 | |
Lasse Collin | b7ad23fa78 | |
Lasse Collin | 4e19fbb04a | |
Lasse Collin | c6fa03a427 | |
Lasse Collin | 7b6ffc9864 | |
Lasse Collin | bfac2be502 | |
Lasse Collin | df85e15671 | |
Lasse Collin | d06d32f108 | |
Lasse Collin | 636fdcfbf5 | |
Lasse Collin | 55fd02f83e | |
Lasse Collin | 4052f36053 | |
Lasse Collin | 0f25758459 | |
Lasse Collin | 70f03b51ff | |
Lasse Collin | f138bdf76a | |
Lasse Collin | 2c144a0365 | |
Anders F Bjorklund | edf339227a | |
Lasse Collin | 7fcc6334ea | |
Lasse Collin | 631f4d3ae6 | |
Lasse Collin | c89faf4c9e | |
Lasse Collin | 6fe2fc9b6a | |
Lasse Collin | 6c4d4db2bc | |
Lasse Collin | 844f84fcad | |
Lasse Collin | 240e8b9791 | |
Lasse Collin | e32cb264ea | |
Lasse Collin | 65cff45f8f | |
Lasse Collin | 316c67ffda | |
Lasse Collin | 1931175eea | |
Lasse Collin | 841dc1f891 | |
Lasse Collin | 0f7e2d3624 | |
Lasse Collin | 793d857e01 | |
Lasse Collin | afcff45cee | |
Lasse Collin | 22159c6ba2 | |
Martin Väth | 5e34990595 | |
Lasse Collin | 1125611b9b | |
Lasse Collin | 3f8fa53837 | |
Lasse Collin | 320d734c20 | |
Lasse Collin | 2ee4edeffc | |
Lasse Collin | 73f56fb87d | |
Lasse Collin | 4ce1cf97a8 | |
Lasse Collin | 972f05d7a4 | |
Lasse Collin | 28154eeaf6 | |
Lasse Collin | aa95516d3d | |
Lasse Collin | 58f52c72f4 | |
Lasse Collin | 162779682e | |
Lasse Collin | 45553f9b4b | |
Lasse Collin | af9d48d551 | |
Lasse Collin | d099ef9f51 | |
Lasse Collin | df87249b26 | |
Lasse Collin | 68c453e1c7 | |
Lasse Collin | b441d39855 | |
Lasse Collin | 82d5164839 | |
Lasse Collin | 6decc8b418 | |
Lasse Collin | ecda90061d | |
Lasse Collin | 0fda1ae5b1 | |
Lasse Collin | 00be32978f | |
Lasse Collin | 7232fcf96b |
24
.codespellrc
24
.codespellrc
|
@ -1,24 +0,0 @@
|
|||
[codespell]
|
||||
|
||||
# Skip all translation files and a few other autogenerated files.
|
||||
# The autotool files should have their typos fixed in the upstream, but
|
||||
# until then we will blacklist them here.
|
||||
skip = *.po,*.pot,./po4a/man,./doc/api,./configure,./autom4te.cache,./m4/libtool.m4,./build-aux/depcomp,./build-aux/ltmain.sh,./build-aux/config.guess,./build-aux/config.rpath,./m4/po.m4,./build-aux/config.sub
|
||||
|
||||
# Ignore false positive matching words. Ideally codespell would allow
|
||||
# ignoring words for specific files, but that does not appear to be
|
||||
# supported. Instead we need to hope we do not make these typos.
|
||||
# Additionally, the ignored words must be specified lower-case even though
|
||||
# some of the false positives only occurred upper-case.
|
||||
# ANS - used as a variable name in xzmore.in.
|
||||
# bu - groff syntax for creating a bullet list item, used in xz.1.
|
||||
# te - groff syntax, used in xz.1.
|
||||
# caf - command line options for tar example, used in xz.1.
|
||||
ignore-words-list = ans,bu,te,caf
|
||||
|
||||
# Add extra dictionaries to help improvement comments, docs, etc.
|
||||
builtin = clear,rare,informal,usage,names
|
||||
|
||||
# Always default to highest interactive level to avoid accidentally
|
||||
# changing a false positive or picking the wrong replacement.
|
||||
interactive = 3
|
|
@ -1,23 +0,0 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
We provide security updates to the development branch and the stable
|
||||
branches. Security patches for old releases are available on the
|
||||
[project website](https://xz.tukaani.org/xz-utils/).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you discover a security vulnerability in this project, please
|
||||
report it privately. **Do not disclose it as a public issue.** This gives
|
||||
us time to work with you to fix the issue before public exposure, reducing
|
||||
the chance that the exploit will be used before a patch is released.
|
||||
|
||||
You may submit a report by emailing us at
|
||||
[xz@tukaani.org](mailto:xz@tukaani.org), or through
|
||||
[Security Advisories](https://github.com/tukaani-project/xz/security/advisories/new).
|
||||
While both options are available, we prefer email.
|
||||
|
||||
This project is maintained by a team of volunteers on a reasonable-effort
|
||||
basis. As such, please give us 90 days to work on a fix before
|
||||
public exposure.
|
|
@ -1,160 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Author: Jia Tan
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the master branch
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
# Allows running workflow manually
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
POSIX:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
build_system: [autotools, cmake]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 #v4.1.0
|
||||
|
||||
########################
|
||||
# Install Dependencies #
|
||||
########################
|
||||
|
||||
# Install Autotools on Linux
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y autoconf automake build-essential po4a autopoint gcc-multilib doxygen musl-tools
|
||||
|
||||
# Install Autotools on Mac
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'autotools' }}
|
||||
run: brew install autoconf automake libtool po4a doxygen
|
||||
|
||||
# Install CMake on Linux
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'cmake' }}
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential cmake musl-tools
|
||||
|
||||
# Install CMake on Mac
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'cmake' }}
|
||||
run: brew install cmake
|
||||
|
||||
##################
|
||||
# Build and Test #
|
||||
##################
|
||||
|
||||
# -b specifies the build system to use.
|
||||
# -p specifies the phase (build or test) to help narrow down an error
|
||||
# if one occurs.
|
||||
#
|
||||
# The first two builds/tests are only run on Autotools Linux and
|
||||
# affect the CFLAGS. Resetting the CFLAGS requires clearing the
|
||||
# config cache between runs, so the tests that require CFLAGS are
|
||||
# done first.
|
||||
- name: Build 32-bit
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: ./build-aux/ci_build.sh -b autotools -p build -f "-m32"
|
||||
- name: Test 32-bit
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: |
|
||||
./build-aux/ci_build.sh -b autotools -p test -f "-m32" -n 32_bit
|
||||
cd ../xz_build && make distclean
|
||||
|
||||
# ifunc must be disabled for this test because __attribute__ ifunc is
|
||||
# incompatible with -fsanitize=address.
|
||||
#
|
||||
# The sandbox must also be disabled because it will prevent access to
|
||||
# the /proc/ filesystem on Linux, which is used by the sanitizer's
|
||||
# instrumentation.
|
||||
- name: Build with -fsanitize=address,undefined
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: ./build-aux/ci_build.sh -b autotools -p build -f "-fsanitize=address,undefined" -d ifunc,sandbox
|
||||
- name: Test with -fsanitize=address,undefined
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: |
|
||||
./build-aux/ci_build.sh -b autotools -p test -f "-fsanitize=address,undefined" -d ifunc,sandbox
|
||||
cd ../xz_build && make distclean
|
||||
|
||||
# musl libc has some slight differences compared to glibc, including
|
||||
# the lack of ifunc support. This tests if the ifunc detection
|
||||
# functions properly since musl-gcc can compile with ifunc support,
|
||||
# but will fail at runtime.
|
||||
- name: Build with musl libc
|
||||
if: ${{ matrix.os == 'ubuntu-latest'}}
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p build -m "/usr/bin/musl-gcc"
|
||||
- name: Test with musl libc
|
||||
if: ${{ matrix.os == 'ubuntu-latest'}}
|
||||
run: |
|
||||
./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p test -m "/usr/bin/musl-gcc"
|
||||
- name: Clean up musl libc run
|
||||
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
|
||||
run: cd ../xz_build && make distclean
|
||||
|
||||
- name: Build with full features
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p build
|
||||
- name: Test with full features
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p test -n full_features
|
||||
|
||||
- name: Build without encoders
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d encoders,shared -p build
|
||||
- name: Test without encoders
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d encoders,shared -p test -n no_encoders
|
||||
|
||||
- name: Build without decoders
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d decoders,shared -p build
|
||||
- name: Test without decoders
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d decoders,shared -p test -n no_decoders
|
||||
|
||||
- name: Build without threads
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d threads,shared -p build
|
||||
- name: Test without threads
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d threads,shared -p test -n no_threads
|
||||
|
||||
- name: Build without BCJ filters
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d bcj,shared,nls -p build
|
||||
- name: Test without BCJ filters
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d bcj,shared,nls -p test -n no_bcj
|
||||
|
||||
- name: Build without Delta filters
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d delta,shared,nls -p build
|
||||
- name: Test without Delta filters
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d delta,shared,nls -p test -n no_delta
|
||||
|
||||
- name: Build without sha256 check
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -c crc32,crc64 -d shared,nls -p build
|
||||
- name: Test without sha256 check
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -c crc32,crc64 -d shared,nls -p test -n no_sha256
|
||||
|
||||
- name: Build without crc64 check
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -c crc32,sha256 -d shared,nls -p build
|
||||
- name: Test without crc64 check
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -c crc32,sha256 -d shared,nls -p test -n no_crc64
|
||||
|
||||
- name: Build small
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d small -p build
|
||||
- name: Test small
|
||||
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d small -p test -n small
|
||||
|
||||
# Attempt to upload the test logs as artifacts if any step has failed
|
||||
- uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 #v4.0.0
|
||||
if: ${{ failure() }}
|
||||
with:
|
||||
name: ${{ matrix.os }} ${{ matrix.build_system }} Test Logs
|
||||
path: build-aux/artifacts
|
|
@ -1,124 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Author: Jia Tan
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
name: Windows-CI
|
||||
|
||||
# Only run the Windows CI manually since it takes much longer than the others.
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
POSIX:
|
||||
strategy:
|
||||
matrix:
|
||||
# Test different environments since the code may change between
|
||||
# them and we want to ensure that we support all potential users.
|
||||
# clang64 builds are currently broken when building static libraries
|
||||
# due to a bug in ldd search path:
|
||||
# https://github.com/llvm/llvm-project/issues/67779
|
||||
# TODO - re-enable clang64 when this is resolved.
|
||||
msys2_env: [mingw64, mingw32, ucrt64, msys]
|
||||
build_system: [autotools, cmake]
|
||||
|
||||
# Set the shell to be msys2 as a default to avoid setting it for
|
||||
# every individual run command.
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
#####################
|
||||
# Setup Environment #
|
||||
#####################
|
||||
|
||||
# Rely on the msys2 GitHub Action to set up the msys2 environment.
|
||||
- name: Setup MSYS2
|
||||
uses: msys2/setup-msys2@27b3aa77f672cb6b3054121cfd80c3d22ceebb1d #v2.20.1
|
||||
with:
|
||||
msystem: ${{ matrix.msys2_env }}
|
||||
update: true
|
||||
install: pactoys make
|
||||
|
||||
- name: Checkout code
|
||||
# Need to explicitly set the shell here since we set the default
|
||||
# shell as msys2 earlier. This avoids an extra msys2 dependency on
|
||||
# git.
|
||||
shell: powershell
|
||||
# Avoid Windows line endings. Otherwise test_scripts.sh will fail
|
||||
# because the expected output is stored in the test framework as a
|
||||
# text file and will not match the output from xzgrep.
|
||||
run: git config --global core.autocrlf false
|
||||
|
||||
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 #v4.1.0
|
||||
|
||||
|
||||
########################
|
||||
# Install Dependencies #
|
||||
########################
|
||||
|
||||
# The pacman repository has a different naming scheme for default
|
||||
# msys packages than the others. The pacboy tool allows installing
|
||||
# the packages possible in matrix setup without a burdensome amount
|
||||
# of ifs.
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.msys2_env == 'msys' && matrix.build_system == 'autotools' }}
|
||||
run: pacman --noconfirm -S --needed autotools base-devel doxygen gettext-devel gcc
|
||||
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.msys2_env != 'msys' && matrix.build_system == 'autotools' }}
|
||||
run: pacboy --noconfirm -S --needed autotools:p toolchain:p doxygen:p
|
||||
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.msys2_env == 'msys' && matrix.build_system == 'cmake' }}
|
||||
run: pacman --noconfirm -S --needed cmake base-devel gcc
|
||||
|
||||
- name: Install Dependencies
|
||||
if: ${{ matrix.msys2_env != 'msys' && matrix.build_system == 'cmake' }}
|
||||
run: pacboy --noconfirm -S --needed cmake:p toolchain:p
|
||||
|
||||
##################
|
||||
# Build and Test #
|
||||
##################
|
||||
|
||||
- name: Build with full features
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -p build
|
||||
- name: Test with full features
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -p test -n full_features
|
||||
|
||||
- name: Build without threads
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d threads,shared -p build
|
||||
- name: Test without threads
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d threads,shared -p test -n no_threads
|
||||
|
||||
- name: Build without encoders
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d encoders,shared -p build
|
||||
- name: Test without encoders
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d encoders,shared -p test -n no_encoders
|
||||
|
||||
- name: Build without decoders
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d decoders,shared -p build
|
||||
- name: Test without decoders
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -d decoders,shared -p test -n no_decoders
|
||||
|
||||
- name: Build with only crc32 check
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -c crc32 -d shared,nls -p build
|
||||
- name: Test with only crc32 check
|
||||
run: ./build-aux/ci_build.sh -a "--no-po4a" -b ${{ matrix.build_system }} -c crc32 -d shared,nls -p test -n crc32_only
|
||||
|
||||
|
||||
###############
|
||||
# Upload Logs #
|
||||
###############
|
||||
|
||||
# Upload the test logs as artifacts if any step has failed.
|
||||
- uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 #v4.0.0
|
||||
if: ${{ failure() }}
|
||||
with:
|
||||
name: ${{ matrix.msys2_env }} ${{ matrix.build_system }} Test Logs
|
||||
path: build-aux/artifacts
|
|
@ -1,13 +1,9 @@
|
|||
*~
|
||||
*.bak
|
||||
*.bak[0-9]
|
||||
.gdb_history
|
||||
|
||||
.deps
|
||||
.libs
|
||||
*.a
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.la
|
||||
*.lo
|
||||
*.o
|
||||
|
@ -25,7 +21,6 @@ Makefile.in
|
|||
/libtool
|
||||
/stamp-h1
|
||||
|
||||
build-aux/artifacts
|
||||
build-aux/compile
|
||||
build-aux/config.guess
|
||||
build-aux/config.rpath
|
||||
|
@ -34,12 +29,6 @@ build-aux/depcomp
|
|||
build-aux/install-sh
|
||||
build-aux/ltmain.sh
|
||||
build-aux/missing
|
||||
build-aux/test-driver
|
||||
|
||||
coverage
|
||||
|
||||
/doc/internal
|
||||
/doc/api
|
||||
|
||||
/src/liblzma/liblzma.pc
|
||||
/src/lzmainfo/lzmainfo
|
||||
|
@ -52,28 +41,15 @@ coverage
|
|||
/src/scripts/xzless
|
||||
/src/scripts/xzmore
|
||||
|
||||
/tests/*.log
|
||||
/tests/*.trs
|
||||
/tests/compress_generated_abc
|
||||
/tests/compress_generated_random
|
||||
/tests/compress_generated_text
|
||||
/tests/create_compress_files
|
||||
/tests/test_bcj_exact_size
|
||||
/tests/test_block_header
|
||||
/tests/test_check
|
||||
/tests/test_filter_flags
|
||||
/tests/test_filter_str
|
||||
/tests/test_hardware
|
||||
/tests/test_index
|
||||
/tests/test_index_hash
|
||||
/tests/test_lzip_decoder
|
||||
/tests/test_microlzma
|
||||
/tests/test_memlimit
|
||||
/tests/test_stream_flags
|
||||
/tests/test_vli
|
||||
/tests/xzgrep_test_1.xz
|
||||
/tests/xzgrep_test_2.xz
|
||||
/tests/xzgrep_test_output
|
||||
|
||||
/lib/Makefile
|
||||
/tests/Makefile
|
||||
|
@ -86,29 +62,3 @@ coverage
|
|||
/src/liblzma/api/Makefile
|
||||
/src/lzmainfo/Makefile
|
||||
/src/xzdec/Makefile
|
||||
|
||||
/CMakeCache.txt
|
||||
/CMakeFiles
|
||||
/CTestTestfile.cmake
|
||||
/cmake_install.cmake
|
||||
/DartConfiguration.tcl
|
||||
/liblzma-config-version.cmake
|
||||
/liblzma-config.cmake
|
||||
/lzcat
|
||||
/lzcat.1
|
||||
/lzma
|
||||
/lzma.1
|
||||
/Testing
|
||||
/tests_bin/
|
||||
/unlzma
|
||||
/unlzma.1
|
||||
/unxz
|
||||
/unxz.1
|
||||
/xz
|
||||
/xzcat
|
||||
/xzcat.1
|
||||
/xzdec
|
||||
|
||||
/windows/*/.vs
|
||||
/windows/*/liblzma.vcxproj.user
|
||||
/.vscode/
|
||||
|
|
54
AUTHORS
54
AUTHORS
|
@ -3,51 +3,25 @@ Authors of XZ Utils
|
|||
===================
|
||||
|
||||
XZ Utils is developed and maintained by Lasse Collin
|
||||
<lasse.collin@tukaani.org> and Jia Tan <jiat0218@gmail.com>.
|
||||
<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
|
||||
specifically the LZMA SDK <http://7-zip.org/sdk.html>. Without
|
||||
this code, XZ Utils wouldn't exist.
|
||||
|
||||
The SHA-256 implementation in liblzma is based on code written by
|
||||
Wei Dai in Crypto++ Library <https://www.cryptopp.com/>.
|
||||
The SHA-256 implementation in liblzma is based on the code found from
|
||||
7-Zip <http://7-zip.org/>, which has a modified version of the SHA-256
|
||||
code found from Crypto++ <http://www.cryptopp.com/>. The SHA-256 code
|
||||
in Crypto++ was written by Kevin Springle and Wei Dai.
|
||||
|
||||
A few scripts have been adapted from GNU gzip. The original
|
||||
versions were written by Jean-loup Gailly, Charles Levert, and
|
||||
Paul Eggert. Andrew Dudman helped adapting the scripts and their
|
||||
man pages for XZ Utils.
|
||||
Some scripts have been adapted from gzip. The original versions
|
||||
were written by Jean-loup Gailly, Charles Levert, and Paul Eggert.
|
||||
Andrew Dudman helped adapting the scripts and their man pages for
|
||||
XZ Utils.
|
||||
|
||||
The initial version of the threaded .xz decompressor was written
|
||||
by Sebastian Andrzej Siewior.
|
||||
The GNU Autotools-based build system contains files from many authors,
|
||||
which I'm not trying to list here.
|
||||
|
||||
The initial version of the .lz (lzip) decoder was written
|
||||
by Michał Górny.
|
||||
|
||||
Architecture-specific CRC optimizations were contributed by
|
||||
Ilya Kurdyukov, Hans Jansen, and Chenxi Mao.
|
||||
|
||||
Other authors:
|
||||
- Jonathan Nieder
|
||||
- Joachim Henke
|
||||
|
||||
Many people have contributed improvements or reported bugs.
|
||||
Most of these people are mentioned in the file THANKS.
|
||||
|
||||
The translations of the command line tools and man pages have been
|
||||
contributed by many people via the Translation Project:
|
||||
|
||||
- https://translationproject.org/domain/xz.html
|
||||
- https://translationproject.org/domain/xz-man.html
|
||||
|
||||
The authors of the translated man pages are in the header comments
|
||||
of the man page files. In the source package, the authors of the
|
||||
translations are in po/*.po and po4a/*.po files.
|
||||
|
||||
Third-party code whose authors aren't listed here:
|
||||
|
||||
- GNU getopt_long() in the 'lib' directory is included for
|
||||
platforms that don't have a usable getopt_long().
|
||||
|
||||
- The build system files from GNU Autoconf, GNU Automake,
|
||||
GNU Libtool, GNU Gettext, Autoconf Archive, and related files.
|
||||
Several people have contributed fixes or reported bugs. Most of them
|
||||
are mentioned in the file THANKS.
|
||||
|
||||
|
|
2146
CMakeLists.txt
2146
CMakeLists.txt
File diff suppressed because it is too large
Load Diff
105
COPYING
105
COPYING
|
@ -6,95 +6,60 @@ XZ Utils Licensing
|
|||
is a rough summary of which licenses apply to which parts of this
|
||||
package (but check the individual files to be sure!):
|
||||
|
||||
- liblzma is under the BSD Zero Clause License (0BSD).
|
||||
- liblzma is in the public domain.
|
||||
|
||||
- The command line tools xz, xzdec, lzmadec, and lzmainfo are
|
||||
under 0BSD except that, on systems that don't have a usable
|
||||
getopt_long, GNU getopt_long is compiled and linked in from the
|
||||
'lib' directory. The getopt_long code is under GNU LGPLv2.1+.
|
||||
- xz, xzdec, and lzmadec command line tools are in the public
|
||||
domain unless GNU getopt_long had to be compiled and linked
|
||||
in from the lib directory. The getopt_long code is under
|
||||
GNU LGPLv2.1+.
|
||||
|
||||
- The scripts to grep, diff, and view compressed files have been
|
||||
adapted from GNU gzip. These scripts (xzgrep, xzdiff, xzless,
|
||||
and xzmore) are under GNU GPLv2+. The man pages of the scripts
|
||||
are under 0BSD; they aren't based on the man pages of GNU gzip.
|
||||
adapted from gzip. These scripts and their documentation are
|
||||
under GNU GPLv2+.
|
||||
|
||||
- Most of the XZ Utils specific documentation that is in
|
||||
plain text files (like README, INSTALL, PACKAGERS, NEWS,
|
||||
and ChangeLog) are under 0BSD unless stated otherwise in
|
||||
the file itself. The files xz-file-format.txt and
|
||||
lzma-file-format.xt are in the public domain but may
|
||||
be distributed under the terms of 0BSD too.
|
||||
- All the documentation in the doc directory and most of the
|
||||
XZ Utils specific documentation files in other directories
|
||||
are in the public domain.
|
||||
|
||||
- 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:
|
||||
- Translated messages are in the public domain.
|
||||
|
||||
Documents produced by doxygen are derivative works
|
||||
derived from the input used in their production;
|
||||
they are not affected by this license.
|
||||
- The build system contains public domain files, and files that
|
||||
are under GNU GPLv2+ or GNU GPLv3+. None of these files end up
|
||||
in the binaries being built.
|
||||
|
||||
Note: The JavaScript files (under the MIT license) have
|
||||
been removed from the Doxygen output.
|
||||
- Test files and test code in the tests directory, and debugging
|
||||
utilities in the debug directory are in the public domain.
|
||||
|
||||
- The XZ logo (xz-logo.png) included in the Doxygen-generated
|
||||
documentation is under the Creative Commons BY-SA 4.0 license.
|
||||
- The extra directory may contain public domain files, and files
|
||||
that are under various free software licenses.
|
||||
|
||||
- Translated messages and man pages are under 0BSD except that
|
||||
some old translations are in the public domain.
|
||||
You can do whatever you want with the files that have been put into
|
||||
the public domain. If you find public domain legally problematic,
|
||||
take the previous sentence as a license grant. If you still find
|
||||
the lack of copyright legally problematic, you have too many
|
||||
lawyers.
|
||||
|
||||
- Test files and test code in the 'tests' directory, and
|
||||
debugging utilities in the 'debug' directory are under
|
||||
the BSD Zero Clause License (0BSD).
|
||||
As usual, this software is provided "as is", without any warranty.
|
||||
|
||||
- The GNU Autotools based build system contains files that are
|
||||
under GNU GPLv2+, GNU GPLv3+, and a few permissive licenses.
|
||||
These files don't affect the licensing of the binaries being
|
||||
built.
|
||||
|
||||
- The extra directory contain files that are under various
|
||||
free software licenses.
|
||||
|
||||
For the files under the BSD Zero Clause License (0BSD), if
|
||||
a copyright notice is needed, the following is sufficient:
|
||||
|
||||
Copyright (C) The XZ Utils authors and contributors
|
||||
|
||||
If you copy significant amounts of 0BSD-licensed code from XZ Utils
|
||||
If you copy significant amounts of public domain code from XZ Utils
|
||||
into your project, acknowledging this somewhere in your software is
|
||||
polite (especially if it is proprietary, non-free software), but
|
||||
it is not legally required by the license terms. Here is an example
|
||||
of a good notice to put into "about box" or into documentation:
|
||||
naturally it is not legally required. Here is an example of a good
|
||||
notice to put into "about box" or into documentation:
|
||||
|
||||
This software includes code from XZ Utils
|
||||
<https://xz.tukaani.org/xz-utils/>.
|
||||
This software includes code from XZ Utils <http://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:
|
||||
Note that the toolchain (compiler, linker etc.) may add some code
|
||||
pieces that are copyrighted. Thus, it is possible that e.g. liblzma
|
||||
binary wouldn't actually be in the public domain in its entirety
|
||||
even though it contains no copyrighted code from the XZ Utils source
|
||||
package.
|
||||
|
||||
XZ Utils releases 5.4.6 and older and 5.5.1alpha have a
|
||||
significant amount of code put into the public domain and
|
||||
that obviously remains so. The switch from public domain to
|
||||
0BSD for newer releases was made in Febrary 2024 because
|
||||
public domain has (real or perceived) legal ambiguities in
|
||||
some jurisdictions.
|
||||
|
||||
There is very little *practical* difference between public
|
||||
domain and 0BSD. The main difference likely is that one
|
||||
shouldn't claim that 0BSD-licensed code is in the public
|
||||
domain; 0BSD-licensed code is copyrighted but available under
|
||||
an extremely permissive license. Neither 0BSD nor public domain
|
||||
require retaining or reproducing author, copyright holder, or
|
||||
license notices when distributing the software. (Compare to,
|
||||
for example, BSD 2-Clause "Simplified" License which does have
|
||||
such requirements.)
|
||||
|
||||
If you have questions, don't hesitate to ask for more information.
|
||||
The contact information is in the README file.
|
||||
If you have questions, don't hesitate to ask the author(s) for more
|
||||
information.
|
||||
|
||||
|
|
11
COPYING.0BSD
11
COPYING.0BSD
|
@ -1,11 +0,0 @@
|
|||
Permission to use, copy, modify, and/or distribute this
|
||||
software for any purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
||||
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@ -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.
|
|
@ -1,7 +1,7 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
|
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
|
|||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
|
|
@ -500,3 +500,5 @@ necessary. Here is a sample; alter the names:
|
|||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
See the commit log in the git repository:
|
||||
|
||||
git clone https://github.com/tukaani-project/xz
|
||||
git clone http://git.tukaani.org/xz.git
|
||||
|
||||
Note that "make dist" doesn't put this tiny file into the package.
|
||||
Instead, the git commit log is used as ChangeLog. See dist-hook in
|
||||
|
|
File diff suppressed because it is too large
Load Diff
495
INSTALL
495
INSTALL
|
@ -14,7 +14,6 @@ XZ Utils Installation
|
|||
1.2.6. Tru64
|
||||
1.2.7. Windows
|
||||
1.2.8. DOS
|
||||
1.2.9. z/OS
|
||||
1.3. Adding support for new platforms
|
||||
2. configure options
|
||||
2.1. Static vs. dynamic linking of liblzma
|
||||
|
@ -22,16 +21,13 @@ XZ Utils Installation
|
|||
3. xzgrep and other scripts
|
||||
3.1. Dependencies
|
||||
3.2. PATH
|
||||
4. Tests
|
||||
4.1 Testing in parallel
|
||||
4.2 Cross compiling
|
||||
5. Troubleshooting
|
||||
5.1. "No C99 compiler was found."
|
||||
5.2. "No POSIX conforming shell (sh) was found."
|
||||
5.3. configure works but build fails at crc32_x86.S
|
||||
5.4. Lots of warnings about symbol visibility
|
||||
5.5. "make check" fails
|
||||
5.6. liblzma.so (or similar) not found when running xz
|
||||
4. Troubleshooting
|
||||
4.1. "No C99 compiler was found."
|
||||
4.2. "No POSIX conforming shell (sh) was found."
|
||||
4.3. configure works but build fails at crc32_x86.S
|
||||
4.4. Lots of warnings about symbol visibility
|
||||
4.5. "make check" fails
|
||||
4.6. liblzma.so (or similar) not found when running xz
|
||||
|
||||
|
||||
0. Preface
|
||||
|
@ -103,7 +99,7 @@ XZ Utils Installation
|
|||
XZ Utils doesn't have code to detect the amount of physical RAM and
|
||||
number of CPU cores on MINIX 3.
|
||||
|
||||
See section 5.4 in this file about symbol visibility warnings (you
|
||||
See section 4.4 in this file about symbol visibility warnings (you
|
||||
may want to pass gl_cv_cc_visibility=no to configure).
|
||||
|
||||
|
||||
|
@ -126,83 +122,42 @@ XZ Utils Installation
|
|||
This can be worked around by passing gl_cv_cc_visibility=no
|
||||
as an argument to the configure script.
|
||||
|
||||
test_scripts.sh in "make check" may fail if good enough tools are
|
||||
missing from PATH (/usr/xpg4/bin or /usr/xpg6/bin). Nowadays
|
||||
/usr/xpg4/bin is added to the script PATH by default on Solaris
|
||||
(see --enable-path-for-scripts=PREFIX in section 2), but old xz
|
||||
releases needed extra steps. See sections 5.5 and 3.2 for more
|
||||
information.
|
||||
|
||||
|
||||
1.2.6. Tru64
|
||||
|
||||
If you try to use the native C compiler on Tru64 (passing CC=cc to
|
||||
configure), you may need the workaround mention in section 5.1 in
|
||||
configure), you may need the workaround mention in section 4.1 in
|
||||
this file (pass also ac_cv_prog_cc_c99= to configure).
|
||||
|
||||
|
||||
1.2.7. Windows
|
||||
|
||||
The "windows" directory contains instructions for a few types
|
||||
of builds:
|
||||
Building XZ Utils on Windows is supported under MinGW + MSYS,
|
||||
MinGW-w64 + MSYS, and Cygwin. There is windows/build.bash to
|
||||
ease packaging XZ Utils with MinGW(-w64) + MSYS into a
|
||||
redistributable .zip or .7z file. See windows/INSTALL-Windows.txt
|
||||
for more information.
|
||||
|
||||
- INSTALL-MinGW-w64_with_CMake.txt
|
||||
Simple instructions how to build XZ Utils natively on
|
||||
Windows using only CMake and a prebuilt toolchain
|
||||
(GCC + MinGW-w64 or Clang/LLVM + MinGW-w64).
|
||||
It might be possible to build liblzma with a non-GNU toolchain too,
|
||||
but that will probably require writing a separate makefile. Building
|
||||
the command line tools with non-GNU toolchains will be harder than
|
||||
building only liblzma.
|
||||
|
||||
- INSTALL-MinGW-w64_with_Autotools.txt
|
||||
Native build under MSYS2 or cross-compilation from
|
||||
GNU/Linux using a bash script that creates a .zip
|
||||
and .7z archives of the binaries and documentation.
|
||||
The related file README-Windows.txt is for the
|
||||
resulting binary package.
|
||||
|
||||
- INSTALL-MSVC.txt
|
||||
Building with MSVC / Visual Studio and CMake.
|
||||
|
||||
- liblzma-crt-mixing.txt
|
||||
Documentation what to take into account as a programmer
|
||||
if liblzma.dll and the application don't use the same
|
||||
CRT (MSVCRT or UCRT).
|
||||
|
||||
Other choices:
|
||||
|
||||
- Cygwin: https://cygwin.com/
|
||||
Building on Cygwin can be done like on many POSIX operating
|
||||
systems. XZ Utils >= 5.2.0 isn't compatible with Cygwin older
|
||||
than 1.7.35 (data loss!). 1.7.35 was released on 2015-03-04.
|
||||
|
||||
- MSYS2: https://www.msys2.org/
|
||||
Even if liblzma is built with MinGW, the resulting DLL or static
|
||||
library can be used by other compilers and linkers, including MSVC.
|
||||
Thus, it shouldn't be a problem to use MinGW to build liblzma even
|
||||
if you cannot use MinGW to build the rest of your project. See
|
||||
windows/README-Windows.txt for details.
|
||||
|
||||
|
||||
1.2.8. DOS
|
||||
|
||||
There is a Makefile in the "dos" directory to build XZ Utils on
|
||||
DOS using DJGPP. Support for long file names (LFN) is needed at
|
||||
build time but the resulting xz.exe works without LFN support too.
|
||||
See dos/INSTALL.txt and dos/README.txt for more information.
|
||||
There is an experimental Makefile in the "dos" directory to build
|
||||
XZ Utils on DOS using DJGPP. Support for long file names (LFN) is
|
||||
needed. See dos/README for more information.
|
||||
|
||||
|
||||
1.2.9. z/OS
|
||||
|
||||
To build XZ Utils on z/OS UNIX System Services using xlc, pass
|
||||
these options to the configure script: CC='xlc -qhaltonmsg=CCN3296'
|
||||
CPPFLAS='-D_UNIX03_THREADS -D_XOPEN_SOURCE=600'. The first makes
|
||||
xlc throw an error if a header file is missing, which is required
|
||||
to make the tests in configure work. The CPPFLAGS are needed to
|
||||
get pthread support (some other CPPFLAGS may work too; if there
|
||||
are problems, try -D_UNIX95_THREADS instead of -D_UNIX03_THREADS).
|
||||
|
||||
test_scripts.sh in "make check" will fail even if the scripts
|
||||
actually work because the test data includes compressed files
|
||||
with US-ASCII text.
|
||||
|
||||
No other tests should fail. If test_files.sh fails, check that
|
||||
the included .xz test files weren't affected by EBCDIC conversion.
|
||||
|
||||
XZ Utils doesn't have code to detect the amount of physical RAM and
|
||||
number of CPU cores on z/OS.
|
||||
GNU Autotools based build hasn't been tried on DOS. If you try, I
|
||||
would like to hear if it worked.
|
||||
|
||||
|
||||
1.3. Adding support for new platforms
|
||||
|
@ -275,54 +230,6 @@ XZ Utils Installation
|
|||
the liblzma ABI, so this option should be used only when
|
||||
it is known to not cause problems.
|
||||
|
||||
--enable-external-sha256
|
||||
Try to use SHA-256 code from the operating system libc
|
||||
or similar base system libraries. This doesn't try to
|
||||
use OpenSSL or libgcrypt or such libraries.
|
||||
|
||||
The reasons to use this option:
|
||||
|
||||
- It makes liblzma slightly smaller.
|
||||
|
||||
- It might improve SHA-256 speed if the implementation
|
||||
in the operating is very good (but see below).
|
||||
|
||||
External SHA-256 is disabled by default for two reasons:
|
||||
|
||||
- On some operating systems the symbol names of the
|
||||
SHA-256 functions conflict with OpenSSL's libcrypto.
|
||||
This causes weird problems such as decompression
|
||||
errors if an application is linked against both
|
||||
liblzma and libcrypto. This problem affects at least
|
||||
FreeBSD 10 and older and MINIX 3.3.0 and older, but
|
||||
other OSes that provide a function "SHA256_Init" might
|
||||
also be affected. FreeBSD 11 has the problem fixed.
|
||||
NetBSD had the problem but it was fixed it in 2009
|
||||
already. OpenBSD uses "SHA256Init" and thus never had
|
||||
a conflict with libcrypto.
|
||||
|
||||
- The SHA-256 code in liblzma is faster than the SHA-256
|
||||
code provided by some operating systems. If you are
|
||||
curious, build two copies of xz (internal and external
|
||||
SHA-256) and compare the decompression (xz --test)
|
||||
times:
|
||||
|
||||
dd if=/dev/zero bs=1024k count=1024 \
|
||||
| xz -v -0 -Csha256 > foo.xz
|
||||
time xz --test foo.xz
|
||||
|
||||
--disable-microlzma
|
||||
Don't build MicroLZMA encoder and decoder. This omits
|
||||
lzma_microlzma_encoder() and lzma_microlzma_decoder()
|
||||
API functions from liblzma. These functions are needed
|
||||
by specific applications only. They were written for
|
||||
erofs-utils but they may be used by others too.
|
||||
|
||||
--disable-lzip-decoder
|
||||
Disable decompression support for .lz (lzip) files.
|
||||
This omits the API function lzma_lzip_decoder() from
|
||||
liblzma and .lz support from the xz tool.
|
||||
|
||||
--disable-xz
|
||||
--disable-xzdec
|
||||
--disable-lzmadec
|
||||
|
@ -353,102 +260,28 @@ XZ Utils Installation
|
|||
with --docdir=DIR.
|
||||
|
||||
--disable-assembler
|
||||
This disables CRC32 and CRC64 assembly code on
|
||||
32-bit x86. This option currently does nothing
|
||||
on other architectures (not even on x86-64).
|
||||
liblzma includes some assembler optimizations. Currently
|
||||
there is only assembler code for CRC32 and CRC64 for
|
||||
32-bit x86.
|
||||
|
||||
The 32-bit x86 assembly is position-independent code
|
||||
which is suitable for use in shared libraries and
|
||||
position-independent executables. It uses only i386
|
||||
instructions but the code is optimized for i686 class
|
||||
CPUs. If you are compiling liblzma exclusively for
|
||||
All the assembler code in liblzma is position-independent
|
||||
code, which is suitable for use in shared libraries and
|
||||
position-independent executables. So far only i386
|
||||
instructions are used, but the code is optimized for i686
|
||||
class CPUs. If you are compiling liblzma exclusively for
|
||||
pre-i686 systems, you may want to disable the assembler
|
||||
code.
|
||||
|
||||
--disable-clmul-crc
|
||||
Disable the use of carryless multiplication for CRC
|
||||
calculation even if compiler support for it is detected.
|
||||
The code uses runtime detection of SSSE3, SSE4.1, and
|
||||
CLMUL instructions on x86. On 32-bit x86 this currently
|
||||
is used only if --disable-assembler is used (this might
|
||||
be fixed in the future). The code works on E2K too.
|
||||
|
||||
If using compiler options that unconditionally allow the
|
||||
required extensions (-msse4.1 -mpclmul) then runtime
|
||||
detection isn't used and the generic code is omitted.
|
||||
|
||||
--disable-arm64-crc32
|
||||
Disable the use of the ARM64 CRC32 instruction extension
|
||||
even if compiler support for it is detected. The code will
|
||||
detect support for the instruction at runtime.
|
||||
|
||||
If using compiler options that unconditionally allow the
|
||||
required extensions (-march=armv8-a+crc or -march=armv8.1-a
|
||||
and later) then runtime detection isn't used and the
|
||||
generic code is omitted.
|
||||
|
||||
--enable-unaligned-access
|
||||
Allow liblzma to use unaligned memory access for 16-bit,
|
||||
32-bit, and 64-bit loads and stores. This should be
|
||||
enabled only when the hardware supports this, that is,
|
||||
when unaligned access is fast. Some operating system
|
||||
kernels emulate unaligned access, which is extremely
|
||||
slow. This option shouldn't be used on systems that
|
||||
rely on such emulation.
|
||||
Allow liblzma to use unaligned memory access for 16-bit
|
||||
and 32-bit loads and stores. This should be enabled only
|
||||
when the hardware supports this, i.e. when unaligned
|
||||
access is fast. Some operating system kernels emulate
|
||||
unaligned access, which is extremely slow. This option
|
||||
shouldn't be used on systems that rely on such emulation.
|
||||
|
||||
Unaligned access is enabled by default on these:
|
||||
- 32-bit x86
|
||||
- 64-bit x86-64
|
||||
- 32-bit big endian PowerPC
|
||||
- 64-bit big endian PowerPC
|
||||
- 64-bit little endian PowerPC
|
||||
- some RISC-V [1]
|
||||
- some 32-bit ARM [2]
|
||||
- some 64-bit ARM64 [2] (NOTE: Autodetection bug
|
||||
if using GCC -mstrict-align, see below.)
|
||||
|
||||
[1] Unaligned access is enabled by default if
|
||||
configure sees that the C compiler
|
||||
#defines __riscv_misaligned_fast.
|
||||
|
||||
[2] Unaligned access is enabled by default if
|
||||
configure sees that the C compiler
|
||||
#defines __ARM_FEATURE_UNALIGNED:
|
||||
|
||||
- ARMv7 + GCC or Clang: It works. The options
|
||||
-munaligned-access and -mno-unaligned-access
|
||||
affect this macro correctly.
|
||||
|
||||
- ARM64 + Clang: It works. The options
|
||||
-munaligned-access, -mno-unaligned-access,
|
||||
and -mstrict-align affect this macro correctly.
|
||||
Clang >= 17 supports -mno-strict-align too.
|
||||
|
||||
- ARM64 + GCC: It partially works. The macro
|
||||
is always #defined by GCC versions at least
|
||||
up to 13.2, even when using -mstrict-align.
|
||||
If building for strict-align ARM64, the
|
||||
configure option --disable-unaligned-access
|
||||
should be used if using a GCC version that has
|
||||
this issue because otherwise the performance
|
||||
may be degraded. It likely won't crash due to
|
||||
how unaligned access is done in the C code.
|
||||
|
||||
--enable-unsafe-type-punning
|
||||
This enables use of code like
|
||||
|
||||
uint8_t *buf8 = ...;
|
||||
*(uint32_t *)buf8 = ...;
|
||||
|
||||
which violates strict aliasing rules and may result
|
||||
in broken code. There should be no need to use this
|
||||
option with recent GCC or Clang versions on any
|
||||
arch as just as fast code can be generated in a safe
|
||||
way too (using __builtin_assume_aligned + memcpy).
|
||||
|
||||
However, this option might improve performance in some
|
||||
other cases, especially with old compilers (for example,
|
||||
GCC 3 and early 4.x on x86, GCC < 6 on ARMv6 and ARMv7).
|
||||
Unaligned access is enabled by default on x86, x86-64,
|
||||
and big endian PowerPC.
|
||||
|
||||
--enable-small
|
||||
Reduce the size of liblzma by selecting smaller but
|
||||
|
@ -482,124 +315,16 @@ XZ Utils Installation
|
|||
the amount of RAM on the operating system you use. See
|
||||
src/common/tuklib_physmem.c for details.
|
||||
|
||||
--enable-threads=METHOD
|
||||
Threading support is enabled by default so normally there
|
||||
is no need to specify this option.
|
||||
--disable-threads
|
||||
Disable threading support. This makes some things
|
||||
thread-unsafe, meaning that if multithreaded application
|
||||
calls liblzma functions from more than one thread,
|
||||
something bad may happen.
|
||||
|
||||
Supported values for METHOD:
|
||||
|
||||
yes Autodetect the threading method. If none
|
||||
is found, configure will give an error.
|
||||
|
||||
posix Use POSIX pthreads. This is the default
|
||||
except on Windows outside Cygwin.
|
||||
|
||||
win95 Use Windows 95 compatible threads. This
|
||||
is compatible with Windows XP and later
|
||||
too. This is the default for 32-bit x86
|
||||
Windows builds. Unless the compiler
|
||||
supports __attribute__((__constructor__)),
|
||||
the 'win95' threading is incompatible with
|
||||
--enable-small.
|
||||
|
||||
vista Use Windows Vista compatible threads. The
|
||||
resulting binaries won't run on Windows XP
|
||||
or older. This is the default for Windows
|
||||
excluding 32-bit x86 builds (that is, on
|
||||
x86-64 the default is 'vista').
|
||||
|
||||
no Disable threading support. This is the
|
||||
same as using --disable-threads.
|
||||
NOTE: If combined with --enable-small
|
||||
and the compiler doesn't support
|
||||
__attribute__((__constructor__)), the
|
||||
resulting liblzma won't be thread safe,
|
||||
that is, if a multi-threaded application
|
||||
calls any liblzma functions from more than
|
||||
one thread, something bad may happen.
|
||||
|
||||
--enable-ifunc
|
||||
Use __attribute__((__ifunc__())) in liblzma. This is
|
||||
enabled by default on GNU/Linux and FreeBSD.
|
||||
|
||||
The ifunc attribute is incompatible with
|
||||
-fsanitize=address. --disable-ifunc must be used
|
||||
if any -fsanitize= option is specified in CFLAGS.
|
||||
|
||||
--enable-sandbox=METHOD
|
||||
There is limited sandboxing support in the xz and xzdec
|
||||
tools. If built with sandbox support, xz uses it
|
||||
automatically when (de)compressing exactly one file to
|
||||
standard output when the options --files or --files0 aren't
|
||||
used. This is a common use case, for example,
|
||||
(de)compressing .tar.xz files via GNU tar. The sandbox is
|
||||
also used for single-file 'xz --test' or 'xz --list'.
|
||||
xzdec always uses the sandbox, except when more than one
|
||||
file are decompressed. In this case it will enable the
|
||||
sandbox for the last file that is decompressed.
|
||||
|
||||
Supported METHODs:
|
||||
|
||||
auto Look for a supported sandboxing method
|
||||
and use it if found. If no method is
|
||||
found, then sandboxing isn't used.
|
||||
This is the default.
|
||||
|
||||
no Disable sandboxing support.
|
||||
|
||||
capsicum
|
||||
Use Capsicum (FreeBSD >= 10.2) for
|
||||
sandboxing. If no Capsicum support
|
||||
is found, configure will give an error.
|
||||
|
||||
pledge Use pledge(2) (OpenBSD >= 5.9) for
|
||||
sandboxing. If pledge(2) isn't found,
|
||||
configure will give an error.
|
||||
|
||||
landlock
|
||||
Use Landlock (Linux >= 5.13) for
|
||||
sandboxing. If no Landlock support
|
||||
is found, configure will give an error.
|
||||
|
||||
--enable-symbol-versions[=VARIANT]
|
||||
Use symbol versioning for liblzma shared library.
|
||||
This is enabled by default on GNU/Linux (glibc only),
|
||||
other GNU-based systems, and FreeBSD.
|
||||
|
||||
Symbol versioning is never used for static liblzma. This
|
||||
option is ignored when not building a shared library.
|
||||
|
||||
Supported VARIANTs:
|
||||
|
||||
no Disable symbol versioning. This is the
|
||||
same as using --disable-symbol-versions.
|
||||
|
||||
auto Autodetect between "no", "linux",
|
||||
and "generic".
|
||||
|
||||
yes Autodetect between "linux" and
|
||||
"generic". This forces symbol
|
||||
versioning to be used when
|
||||
building a shared library.
|
||||
|
||||
generic Generic version is the default for
|
||||
FreeBSD and GNU/Linux on MicroBlaze.
|
||||
|
||||
This is also used on GNU/Linux when
|
||||
building with NVIDIA HPC Compiler
|
||||
because the compiler doesn't support
|
||||
the features required for the "linux"
|
||||
variant below.
|
||||
|
||||
linux Special version for GNU/Linux (glibc
|
||||
only). This adds a few extra symbol
|
||||
versions for compatibility with binaries
|
||||
that have been linked against a liblzma
|
||||
version that has been patched with
|
||||
"xz-5.2.2-compat-libs.patch" from
|
||||
RHEL/CentOS 7. That patch was used
|
||||
by some build tools outside of
|
||||
RHEL/CentOS 7 too.
|
||||
Use this option if threading support causes you trouble,
|
||||
or if you know that you will use liblzma only from
|
||||
single-threaded applications and want to avoid dependency
|
||||
on libpthread.
|
||||
|
||||
--enable-debug
|
||||
This enables the assert() macro and possibly some other
|
||||
|
@ -612,23 +337,6 @@ XZ Utils Installation
|
|||
and should work on most systems. This has no effect on the
|
||||
resulting binaries.
|
||||
|
||||
--enable-path-for-scripts=PREFIX
|
||||
If PREFIX isn't empty, PATH=PREFIX:$PATH will be set in
|
||||
the beginning of the scripts (xzgrep and others).
|
||||
The default is empty except on Solaris the default is
|
||||
/usr/xpg4/bin.
|
||||
|
||||
This can be useful if the default PATH doesn't contain
|
||||
modern POSIX tools (as can be the case on Solaris) or if
|
||||
one wants to ensure that the correct xz binary is in the
|
||||
PATH for the scripts. Note that the latter use can break
|
||||
"make check" if the prefixed PATH causes a wrong xz binary
|
||||
(other than the one that was just built) to be used.
|
||||
|
||||
Older xz releases support a different method for setting
|
||||
the PATH for the scripts. It is described in section 3.2
|
||||
and is supported in this xz version too.
|
||||
|
||||
|
||||
2.1. Static vs. dynamic linking of liblzma
|
||||
|
||||
|
@ -658,7 +366,7 @@ XZ Utils Installation
|
|||
liblzma, pass --enable-small to configure.
|
||||
|
||||
- Tell the compiler to optimize for size instead of speed.
|
||||
For example, with GCC, put -Os into CFLAGS.
|
||||
E.g. with GCC, put -Os into CFLAGS.
|
||||
|
||||
- xzdec and lzmadec will never use multithreading capabilities of
|
||||
liblzma. You can avoid dependency on libpthread by passing
|
||||
|
@ -687,31 +395,20 @@ XZ Utils Installation
|
|||
gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure
|
||||
script.
|
||||
|
||||
xzdiff (xzcmp/lzdiff/lzcmp) may use mktemp if it is available. As
|
||||
a fallback xzdiff will use mkdir to securely create a temporary
|
||||
directory. Having mktemp available is still recommended since the
|
||||
mkdir fallback method isn't as robust as mktemp is. The original
|
||||
mktemp can be found from <https://www.mktemp.org/>. On GNU, most will
|
||||
use the mktemp program from GNU coreutils instead of the original
|
||||
implementation. Both mktemp versions are fine.
|
||||
|
||||
In addition to using xz to decompress .xz files, xzgrep and xzdiff
|
||||
use gzip, bzip2, and lzop to support .gz, bz2, and .lzo files.
|
||||
Some of the scripts require also mktemp. The original mktemp can be
|
||||
found from <http://www.mktemp.org/>. On GNU, most will use the mktemp
|
||||
program from GNU coreutils instead of the original implementation.
|
||||
Both mktemp versions are fine for XZ Utils (and practically for
|
||||
everything else too).
|
||||
|
||||
|
||||
3.2. PATH
|
||||
|
||||
The method described below is supported by older xz releases.
|
||||
It is supported by the current version too, but the newer
|
||||
--enable-path-for-scripts=PREFIX described in section 2 may be
|
||||
more convenient.
|
||||
|
||||
The scripts assume that the required tools (standard POSIX utilities,
|
||||
mktemp, and xz) are in PATH; the scripts don't set the PATH themselves
|
||||
(except as described for --enable-path-for-scripts=PREFIX). Some
|
||||
people like this while some think this is a bug. Those in the latter
|
||||
group can easily patch the scripts before running the configure script
|
||||
by taking advantage of a placeholder line in the scripts.
|
||||
mktemp, and xz) are in PATH; the scripts don't set the PATH themselves.
|
||||
Some people like this while some think this is a bug. Those in the
|
||||
latter group can easily patch the scripts before running the configure
|
||||
script by taking advantage of a placeholder line in the scripts.
|
||||
|
||||
For example, to make the scripts prefix /usr/bin:/bin to PATH:
|
||||
|
||||
|
@ -719,54 +416,10 @@ XZ Utils Installation
|
|||
src/scripts/xz*.in
|
||||
|
||||
|
||||
4. Tests
|
||||
--------
|
||||
|
||||
The test framework can be built and run by executing "make check" in
|
||||
the build directory. The tests are a mix of executables and POSIX
|
||||
shell scripts (sh). All tests should pass if the default configuration
|
||||
is used. Disabling features through the configure options may cause
|
||||
some tests to be skipped. If any tests do not pass, see section 5.5.
|
||||
|
||||
|
||||
4.1. Testing in parallel
|
||||
|
||||
The tests can be run in parallel using the "-j" make option on systems
|
||||
that support it. For instance, "make -j4 check" will run up to four
|
||||
tests simultaneously.
|
||||
|
||||
|
||||
4.2. Cross compiling
|
||||
|
||||
The tests can be built without running them:
|
||||
|
||||
make check TESTS=
|
||||
|
||||
The TESTS variable is the list of tests you wish to run. Leaving it
|
||||
empty will compile the tests without running any.
|
||||
|
||||
If the tests are copied to a target machine to execute, the test data
|
||||
files in the directory tests/files must also be copied. The tests
|
||||
search for the data files using the environment variable $srcdir,
|
||||
expecting to find the data files under $srcdir/files/. If $srcdir
|
||||
isn't set then it defaults to the current directory.
|
||||
|
||||
The shell script tests can be copied from the source directory to the
|
||||
target machine to execute. In addition to the test files, these tests
|
||||
will expect the following relative file paths to execute properly:
|
||||
|
||||
./create_compress_files
|
||||
../config.h
|
||||
../src/xz/xz
|
||||
../src/xzdec/xzdec
|
||||
../src/scripts/xzdiff
|
||||
../src/scripts/xzgrep
|
||||
|
||||
|
||||
5. Troubleshooting
|
||||
4. Troubleshooting
|
||||
------------------
|
||||
|
||||
5.1. "No C99 compiler was found."
|
||||
4.1. "No C99 compiler was found."
|
||||
|
||||
You need a C99 compiler to build XZ Utils. If the configure script
|
||||
cannot find a C99 compiler and you think you have such a compiler
|
||||
|
@ -781,17 +434,16 @@ XZ Utils Installation
|
|||
support enough C99.
|
||||
|
||||
|
||||
5.2. "No POSIX conforming shell (sh) was found."
|
||||
4.2. "No POSIX conforming shell (sh) was found."
|
||||
|
||||
xzgrep and other scripts need a shell that (roughly) conforms
|
||||
to POSIX. The configure script tries to find such a shell. If
|
||||
it fails, you can force the shell to be used by passing
|
||||
gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure
|
||||
script. Alternatively you can omit the installation of scripts and
|
||||
this error by passing --disable-scripts to configure.
|
||||
script.
|
||||
|
||||
|
||||
5.3. configure works but build fails at crc32_x86.S
|
||||
4.3. configure works but build fails at crc32_x86.S
|
||||
|
||||
The easy fix is to pass --disable-assembler to the configure script.
|
||||
|
||||
|
@ -808,7 +460,7 @@ XZ Utils Installation
|
|||
(see INSTALL.generic).
|
||||
|
||||
|
||||
5.4. Lots of warnings about symbol visibility
|
||||
4.4. Lots of warnings about symbol visibility
|
||||
|
||||
On some systems where symbol visibility isn't supported, GCC may
|
||||
still accept the visibility options and attributes, which will make
|
||||
|
@ -820,7 +472,7 @@ XZ Utils Installation
|
|||
using --enable-werror.
|
||||
|
||||
|
||||
5.5. "make check" fails
|
||||
4.5. "make check" fails
|
||||
|
||||
If the other tests pass but test_scripts.sh fails, then the problem
|
||||
is in the scripts in src/scripts. Comparing the contents of
|
||||
|
@ -829,9 +481,8 @@ XZ Utils Installation
|
|||
some tools are missing from the current PATH or the tools lack
|
||||
support for some POSIX features. This can happen at least on
|
||||
Solaris where the tools in /bin may be ancient but good enough
|
||||
tools are available in /usr/xpg4/bin or /usr/xpg6/bin. For possible
|
||||
fixes, see --enable-path-for-scripts=PREFIX in section 2 and the
|
||||
older alternative method described in section 3.2 of this file.
|
||||
tools are available in /usr/xpg4/bin or /usr/xpg6/bin. One fix
|
||||
for this problem is described in section 3.2 of this file.
|
||||
|
||||
If tests other than test_scripts.sh fail, a likely reason is that
|
||||
libtool links the test programs against an installed version of
|
||||
|
@ -846,7 +497,7 @@ XZ Utils Installation
|
|||
information.
|
||||
|
||||
|
||||
5.6. liblzma.so (or similar) not found when running xz
|
||||
4.6. liblzma.so (or similar) not found when running xz
|
||||
|
||||
If you installed the package with "make install" and get an error
|
||||
about liblzma.so (or a similarly named file) being missing, try
|
||||
|
|
317
INSTALL.generic
317
INSTALL.generic
|
@ -1,8 +1,8 @@
|
|||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
|
||||
Foundation, Inc.
|
||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
|
||||
2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
|
@ -12,96 +12,97 @@ without warranty of any kind.
|
|||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell command './configure && make && make install'
|
||||
should configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the 'README' file for
|
||||
Briefly, the shell commands `./configure; make; make install' should
|
||||
configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the `README' file for
|
||||
instructions specific to this package. Some packages provide this
|
||||
'INSTALL' file but do not implement all of the features documented
|
||||
`INSTALL' file but do not implement all of the features documented
|
||||
below. The lack of an optional feature in a given package is not
|
||||
necessarily a bug. More recommendations for GNU packages can be found
|
||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||
|
||||
The 'configure' shell script attempts to guess correct values for
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a 'Makefile' in each directory of the package.
|
||||
It may also create one or more '.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script 'config.status' that
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file 'config.log' containing compiler output (useful mainly for
|
||||
debugging 'configure').
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called 'config.cache' and
|
||||
enabled with '--cache-file=config.cache' or simply '-C') that saves the
|
||||
results of its tests to speed up reconfiguring. Caching is disabled by
|
||||
default to prevent problems with accidental use of stale cache files.
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how 'configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the 'README' so they can
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point 'config.cache' contains results you don't want to keep, you
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file 'configure.ac' (or 'configure.in') is used to create
|
||||
'configure' by a program called 'autoconf'. You need 'configure.ac' if
|
||||
you want to change it or regenerate 'configure' using a newer version of
|
||||
'autoconf'.
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You need `configure.ac' if
|
||||
you want to change it or regenerate `configure' using a newer version
|
||||
of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. 'cd' to the directory containing the package's source code and type
|
||||
'./configure' to configure the package for your system.
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system.
|
||||
|
||||
Running 'configure' might take a while. While running, it prints
|
||||
Running `configure' might take a while. While running, it prints
|
||||
some messages telling which features it is checking for.
|
||||
|
||||
2. Type 'make' to compile the package.
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type 'make check' to run any self-tests that come with
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package, generally using the just-built uninstalled binaries.
|
||||
|
||||
4. Type 'make install' to install the programs and any data files and
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the 'make install' phase executed with root
|
||||
user, and only the `make install' phase executed with root
|
||||
privileges.
|
||||
|
||||
5. Optionally, type 'make installcheck' to repeat any self-tests, but
|
||||
5. Optionally, type `make installcheck' to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior 'make install' required
|
||||
regular user, particularly if the prior `make install' required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
6. You can remove the program binaries and object files from the
|
||||
source code directory by typing 'make clean'. To also remove the
|
||||
files that 'configure' created (so you can compile the package for
|
||||
a different kind of computer), type 'make distclean'. There is
|
||||
also a 'make maintainer-clean' target, but that is intended mainly
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
7. Often, you can also type 'make uninstall' to remove the installed
|
||||
7. Often, you can also type `make uninstall' to remove the installed
|
||||
files again. In practice, not all packages have tested that
|
||||
uninstallation works correctly, even though it is required by the
|
||||
GNU Coding Standards.
|
||||
|
||||
8. Some packages, particularly those that use Automake, provide 'make
|
||||
8. Some packages, particularly those that use Automake, provide `make
|
||||
distcheck', which can by used by developers to test that all other
|
||||
targets like 'make install' and 'make uninstall' work correctly.
|
||||
targets like `make install' and `make uninstall' work correctly.
|
||||
This target is generally not run by end users.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the 'configure' script does not know about. Run './configure --help'
|
||||
the `configure' script does not know about. Run `./configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give 'configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here is
|
||||
an example:
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||
|
||||
|
@ -112,21 +113,21 @@ Compiling For Multiple Architectures
|
|||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you can use GNU 'make'. 'cd' to the
|
||||
own directory. To do this, you can use GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the 'configure' script. 'configure' automatically checks for the source
|
||||
code in the directory that 'configure' is in and in '..'. This is known
|
||||
as a "VPATH" build.
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'. This
|
||||
is known as a "VPATH" build.
|
||||
|
||||
With a non-GNU 'make', it is safer to compile the package for one
|
||||
With a non-GNU `make', it is safer to compile the package for one
|
||||
architecture at a time in the source code directory. After you have
|
||||
installed the package for one architecture, use 'make distclean' before
|
||||
installed the package for one architecture, use `make distclean' before
|
||||
reconfiguring for another architecture.
|
||||
|
||||
On MacOS X 10.5 and later systems, you can create libraries and
|
||||
executables that work on multiple system types--known as "fat" or
|
||||
"universal" binaries--by specifying multiple '-arch' options to the
|
||||
compiler but only a single '-arch' option to the preprocessor. Like
|
||||
"universal" binaries--by specifying multiple `-arch' options to the
|
||||
compiler but only a single `-arch' option to the preprocessor. Like
|
||||
this:
|
||||
|
||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
|
@ -135,104 +136,100 @@ this:
|
|||
|
||||
This is not guaranteed to produce working output in all cases, you
|
||||
may have to build one architecture at a time and combine the results
|
||||
using the 'lipo' tool if you have problems.
|
||||
using the `lipo' tool if you have problems.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, 'make install' installs the package's commands under
|
||||
'/usr/local/bin', include files under '/usr/local/include', etc. You
|
||||
can specify an installation prefix other than '/usr/local' by giving
|
||||
'configure' the option '--prefix=PREFIX', where PREFIX must be an
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX', where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like '--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run 'configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the default
|
||||
for these options is expressed in terms of '${prefix}', so that
|
||||
specifying just '--prefix' will affect all of the other directory
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the
|
||||
default for these options is expressed in terms of `${prefix}', so that
|
||||
specifying just `--prefix' will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to 'configure'; however, many packages provide one or
|
||||
correct locations to `configure'; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
'make install' command line to change installation locations without
|
||||
`make install' command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, 'make install
|
||||
affected directory. For example, `make install
|
||||
prefix=/alternate/directory' will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
'${prefix}'. Any directories that were specified during 'configure',
|
||||
but not in terms of '${prefix}', must each be overridden at install time
|
||||
for the entire installation to be relocated. The approach of makefile
|
||||
variable overrides for each directory variable is required by the GNU
|
||||
Coding Standards, and ideally causes no recompilation. However, some
|
||||
platforms have known limitations with the semantics of shared libraries
|
||||
that end up requiring recompilation when using this method, particularly
|
||||
noticeable in packages that use GNU Libtool.
|
||||
`${prefix}'. Any directories that were specified during `configure',
|
||||
but not in terms of `${prefix}', must each be overridden at install
|
||||
time for the entire installation to be relocated. The approach of
|
||||
makefile variable overrides for each directory variable is required by
|
||||
the GNU Coding Standards, and ideally causes no recompilation.
|
||||
However, some platforms have known limitations with the semantics of
|
||||
shared libraries that end up requiring recompilation when using this
|
||||
method, particularly noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the 'DESTDIR' variable. For
|
||||
example, 'make install DESTDIR=/alternate/directory' will prepend
|
||||
'/alternate/directory' before all installation names. The approach of
|
||||
'DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
The second method involves providing the `DESTDIR' variable. For
|
||||
example, `make install DESTDIR=/alternate/directory' will prepend
|
||||
`/alternate/directory' before all installation names. The approach of
|
||||
`DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of '${prefix}'
|
||||
at 'configure' time.
|
||||
when some directory options were not specified in terms of `${prefix}'
|
||||
at `configure' time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving 'configure' the
|
||||
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Some packages pay attention to '--enable-FEATURE' options to
|
||||
'configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to '--with-PACKAGE' options, where PACKAGE
|
||||
is something like 'gnu-as' or 'x' (for the X Window System). The
|
||||
'README' should mention any '--enable-' and '--with-' options that the
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, 'configure' can usually
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the 'configure' options '--x-includes=DIR' and
|
||||
'--x-libraries=DIR' to specify their locations.
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of 'make' will be. For these packages, running './configure
|
||||
execution of `make' will be. For these packages, running `./configure
|
||||
--enable-silent-rules' sets the default to minimal output, which can be
|
||||
overridden with 'make V=1'; while running './configure
|
||||
overridden with `make V=1'; while running `./configure
|
||||
--disable-silent-rules' sets the default to verbose, which can be
|
||||
overridden with 'make V=0'.
|
||||
overridden with `make V=0'.
|
||||
|
||||
Particular systems
|
||||
==================
|
||||
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
|
||||
is not installed, it is recommended to use the following options in
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
||||
CC is not installed, it is recommended to use the following options in
|
||||
order to use an ANSI C compiler:
|
||||
|
||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||
|
||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||
|
||||
HP-UX 'make' updates targets which have the same time stamps as their
|
||||
prerequisites, which makes it generally unusable when shipped generated
|
||||
files such as 'configure' are involved. Use GNU 'make' instead.
|
||||
|
||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
|
||||
workaround. If GNU CC is not installed, it is therefore recommended to
|
||||
try
|
||||
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
||||
a workaround. If GNU CC is not installed, it is therefore recommended
|
||||
to try
|
||||
|
||||
./configure CC="cc"
|
||||
|
||||
|
@ -240,26 +237,26 @@ and if that doesn't work, try
|
|||
|
||||
./configure CC="cc -nodtk"
|
||||
|
||||
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
|
||||
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
|
||||
directory contains several dysfunctional programs; working variants of
|
||||
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
|
||||
in your 'PATH', put it _after_ '/usr/bin'.
|
||||
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
|
||||
in your `PATH', put it _after_ `/usr/bin'.
|
||||
|
||||
On Haiku, software installed for all users goes in '/boot/common',
|
||||
not '/usr/local'. It is recommended to use the following options:
|
||||
On Haiku, software installed for all users goes in `/boot/common',
|
||||
not `/usr/local'. It is recommended to use the following options:
|
||||
|
||||
./configure --prefix=/boot/common
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features 'configure' cannot figure out
|
||||
There may be some features `configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, 'configure' can figure that out, but if it prints
|
||||
_same_ architectures, `configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
'--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as 'sun4', or a canonical name which has the form:
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
|
@ -268,101 +265,101 @@ where SYSTEM can have one of these forms:
|
|||
OS
|
||||
KERNEL-OS
|
||||
|
||||
See the file 'config.sub' for the possible values of each field. If
|
||||
'config.sub' isn't included in this package, then this package doesn't
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option '--target=TYPE' to select the type of system they will
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with '--host=TYPE'.
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for 'configure' scripts to share,
|
||||
you can create a site shell script called 'config.site' that gives
|
||||
default values for variables like 'CC', 'cache_file', and 'prefix'.
|
||||
'configure' looks for 'PREFIX/share/config.site' if it exists, then
|
||||
'PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
'CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all 'configure' scripts look for a site script.
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to 'configure'. However, some packages may run
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the 'configure' command line, using 'VAR=value'. For example:
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified 'gcc' to be used as the C compiler (unless it is
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
|
||||
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||
workaround:
|
||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
||||
an Autoconf bug. Until the bug is fixed you can use this workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
'configure' Invocation
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
'configure' recognizes the following options to control how it
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
'--help'
|
||||
'-h'
|
||||
Print a summary of all of the options to 'configure', and exit.
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of all of the options to `configure', and exit.
|
||||
|
||||
'--help=short'
|
||||
'--help=recursive'
|
||||
`--help=short'
|
||||
`--help=recursive'
|
||||
Print a summary of the options unique to this package's
|
||||
'configure', and exit. The 'short' variant lists options used only
|
||||
in the top level, while the 'recursive' variant lists options also
|
||||
present in any nested packages.
|
||||
`configure', and exit. The `short' variant lists options used
|
||||
only in the top level, while the `recursive' variant lists options
|
||||
also present in any nested packages.
|
||||
|
||||
'--version'
|
||||
'-V'
|
||||
Print the version of Autoconf used to generate the 'configure'
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
'--cache-file=FILE'
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally 'config.cache'. FILE defaults to '/dev/null' to
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
'--config-cache'
|
||||
'-C'
|
||||
Alias for '--cache-file=config.cache'.
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
'--quiet'
|
||||
'--silent'
|
||||
'-q'
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to '/dev/null' (any error
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
'--srcdir=DIR'
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
'configure' can determine that directory automatically.
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
'--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names:: for
|
||||
more details, including other options available for fine-tuning the
|
||||
installation locations.
|
||||
`--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names::
|
||||
for more details, including other options available for fine-tuning
|
||||
the installation locations.
|
||||
|
||||
'--no-create'
|
||||
'-n'
|
||||
`--no-create'
|
||||
`-n'
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
'configure' also accepts some other, not widely useful, options. Run
|
||||
'configure --help' for more details.
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
||||
|
|
56
Makefile.am
56
Makefile.am
|
@ -1,5 +1,9 @@
|
|||
## SPDX-License-Identifier: 0BSD
|
||||
##
|
||||
## Author: Lasse Collin
|
||||
##
|
||||
## This file has been put into the public domain.
|
||||
## You can do whatever you want with this file.
|
||||
##
|
||||
|
||||
# Use -n to prevent gzip from adding a timestamp to the .gz headers.
|
||||
GZIP_ENV = -9n
|
||||
|
@ -17,11 +21,11 @@ if COND_DOC
|
|||
dist_doc_DATA = \
|
||||
AUTHORS \
|
||||
COPYING \
|
||||
COPYING.0BSD \
|
||||
COPYING.GPLv2 \
|
||||
NEWS \
|
||||
README \
|
||||
THANKS \
|
||||
TODO \
|
||||
doc/faq.txt \
|
||||
doc/history.txt \
|
||||
doc/xz-file-format.txt \
|
||||
|
@ -33,47 +37,32 @@ dist_examples_DATA = \
|
|||
doc/examples/01_compress_easy.c \
|
||||
doc/examples/02_decompress.c \
|
||||
doc/examples/03_compress_custom.c \
|
||||
doc/examples/04_compress_easy_mt.c \
|
||||
doc/examples/11_file_info.c \
|
||||
doc/examples/Makefile
|
||||
|
||||
# Install the Doxygen generated documentation if they were built.
|
||||
install-data-local:
|
||||
if test -d "$(srcdir)/doc/api" ; then \
|
||||
$(MKDIR_P) "$(DESTDIR)$(docdir)/api" && \
|
||||
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
|
||||
"$(DESTDIR)$(docdir)/api"; \
|
||||
fi
|
||||
|
||||
# Remove the Doxygen generated documentation when uninstalling.
|
||||
uninstall-local:
|
||||
rm -rf "$(DESTDIR)$(docdir)/api"
|
||||
examplesolddir = $(docdir)/examples_old
|
||||
dist_examplesold_DATA = \
|
||||
doc/examples_old/xz_pipe_comp.c \
|
||||
doc/examples_old/xz_pipe_decomp.c
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
cmake \
|
||||
dos \
|
||||
doxygen \
|
||||
extra \
|
||||
po4a \
|
||||
dos \
|
||||
windows \
|
||||
CMakeLists.txt \
|
||||
COPYING.CC-BY-SA-4.0 \
|
||||
macosx \
|
||||
autogen.sh \
|
||||
Doxyfile.in \
|
||||
COPYING.GPLv2 \
|
||||
COPYING.GPLv3 \
|
||||
COPYING.LGPLv2.1 \
|
||||
INSTALL.generic \
|
||||
PACKAGERS \
|
||||
TODO \
|
||||
autogen.sh \
|
||||
build-aux/manconv.sh \
|
||||
build-aux/version.sh \
|
||||
doc/xz-logo.png \
|
||||
po/xz.pot-header
|
||||
build-aux/version.sh
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
# List of man pages to convert to PDF and plain text in the dist-hook target.
|
||||
# List of man pages to conver to PDF and plain text in the dist-hook target.
|
||||
manfiles = \
|
||||
src/xz/xz.1 \
|
||||
src/xzdec/xzdec.1 \
|
||||
|
@ -87,8 +76,7 @@ manfiles = \
|
|||
# Convert the man pages to PDF and plain text (ASCII only) formats.
|
||||
dist-hook:
|
||||
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
|
||||
( cd "$(srcdir)" && git log --date=iso --stat \
|
||||
b69da6d4bb6bb11fc0cf066920791990d2b22a06^..HEAD ) \
|
||||
( cd "$(srcdir)" && git log --date=iso --stat ) \
|
||||
> "$(distdir)/ChangeLog"; \
|
||||
fi
|
||||
if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \
|
||||
|
@ -107,19 +95,9 @@ dist-hook:
|
|||
> "$$dest/txt/$$BASE.txt"; \
|
||||
done; \
|
||||
fi
|
||||
if test -d "$(srcdir)/doc/api" ; then \
|
||||
$(MKDIR_P) "$(distdir)/doc/api" && \
|
||||
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
|
||||
"$(distdir)/doc/api"; \
|
||||
fi
|
||||
|
||||
# This works with GNU tar and gives cleaner package than normal 'make dist'.
|
||||
# This also ensures that the man page translations are up to date (dist-hook
|
||||
# would be too late for that).
|
||||
mydist:
|
||||
sh "$(srcdir)/src/liblzma/validate_map.sh"
|
||||
cd "$(srcdir)/po4a" && sh update-po
|
||||
cd "$(srcdir)/doxygen" && sh update-doxygen
|
||||
VERSION=$(VERSION); \
|
||||
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
|
||||
SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \
|
||||
|
|
35
PACKAGERS
35
PACKAGERS
|
@ -44,8 +44,6 @@ Information to packagers of XZ Utils
|
|||
lzmadec binary for compatibility with LZMA Utils
|
||||
liblzma liblzma.so.*
|
||||
liblzma-devel liblzma.so, liblzma.a, API headers
|
||||
liblzma-doc Doxygen-generated liblzma API docs (HTML),
|
||||
example programs
|
||||
|
||||
|
||||
2. Package description
|
||||
|
@ -111,28 +109,20 @@ Information to packagers of XZ Utils
|
|||
This package includes the API headers, static library, and
|
||||
other development files related to liblzma.
|
||||
|
||||
liblzma-doc:
|
||||
|
||||
liblzma API documentation in HTML and example usage
|
||||
|
||||
This package includes the Doxygen-generated liblzma API
|
||||
HTML docs and example programs showing how to use liblzma.
|
||||
|
||||
|
||||
3. License
|
||||
----------
|
||||
|
||||
If the package manager supports a license field, you probably should
|
||||
put GPLv2+ there (GNU GPL v2 or later). The interesting parts of
|
||||
XZ Utils are under the BSD Zero Clause License (0BSD), but some less
|
||||
important files ending up into the binary package are under GPLv2+.
|
||||
So it is simplest to just say GPLv2+ if you cannot specify
|
||||
"BSD0 and GPLv2+".
|
||||
XZ Utils are in the public domain, but some less important files
|
||||
ending up into the binary package are under GPLv2+. So it is simplest
|
||||
to just say GPLv2+ if you cannot specify "public domain and GPLv2+".
|
||||
|
||||
If you split XZ Utils into multiple packages as described earlier
|
||||
in this file, liblzma and liblzma-dev packages will contain only
|
||||
0BSD-licensed code from XZ Utils (compiler or linker may add some
|
||||
third-party code which may have other licenses).
|
||||
public domain code (from XZ Utils at least; compiler or linker may
|
||||
add some third-party code, which may be copyrighted).
|
||||
|
||||
|
||||
4. configure options
|
||||
|
@ -148,8 +138,6 @@ Information to packagers of XZ Utils
|
|||
--enable-checks
|
||||
--enable-small (*)
|
||||
--disable-threads (*)
|
||||
--disable-microlzma (*)
|
||||
--disable-lzip-decoder (*)
|
||||
|
||||
(*) These are OK when building xzdec and lzmadec as described
|
||||
in INSTALL.
|
||||
|
@ -170,13 +158,12 @@ Information to packagers of XZ Utils
|
|||
can be replaced with a symlink if your distro ships with shared
|
||||
copies of the common license texts.
|
||||
|
||||
The Doxygen-generated documentation (HTML) for the liblzma API
|
||||
headers is included in the source release and will be installed by
|
||||
"make install" to $docdir/api. All JavaScript is removed to
|
||||
simplify license compliance and to reduce the install size. If the
|
||||
liblzma API documentation is not desired, either run configure with
|
||||
--disable-doc or remove the doc/api directory before running
|
||||
"make install".
|
||||
liblzma API is currently only documented using Doxygen tags in the
|
||||
API headers. It hasn't been tested much how good results Doxygen
|
||||
is able to make from the tags (e.g. Doxyfile might need tweaking,
|
||||
the tagging may need to be improved etc.), so it might be simpler
|
||||
to just let people read docs directly from the .h files for now,
|
||||
and also save quite a bit in package size at the same time.
|
||||
|
||||
|
||||
6. Extra files
|
||||
|
|
92
README
92
README
|
@ -9,7 +9,7 @@ XZ Utils
|
|||
1.3. Documentation for liblzma
|
||||
2. Version numbering
|
||||
3. Reporting bugs
|
||||
4. Translations
|
||||
4. Translating the xz tool
|
||||
5. Other implementations of the .xz format
|
||||
6. Contact information
|
||||
|
||||
|
@ -55,11 +55,9 @@ XZ Utils
|
|||
Similarly, it is possible that some day there is a filter that will
|
||||
compress better than LZMA2.
|
||||
|
||||
XZ Utils supports multithreaded compression. XZ Utils doesn't support
|
||||
multithreaded decompression yet. It has been planned though and taken
|
||||
into account when designing the .xz file format. In the future, files
|
||||
that were created in threaded mode can be decompressed in threaded
|
||||
mode too.
|
||||
XZ Utils doesn't support multithreaded compression or decompression
|
||||
yet. It has been planned though and taken into account when designing
|
||||
the .xz file format.
|
||||
|
||||
|
||||
1. Documentation
|
||||
|
@ -69,18 +67,15 @@ XZ Utils
|
|||
|
||||
README This file
|
||||
|
||||
INSTALL.generic Generic install instructions for those not
|
||||
familiar with packages using GNU Autotools
|
||||
INSTALL.generic Generic install instructions for those not familiar
|
||||
with packages using GNU Autotools
|
||||
INSTALL Installation instructions specific to XZ Utils
|
||||
PACKAGERS Information to packagers of XZ Utils
|
||||
|
||||
COPYING XZ Utils copyright and license information
|
||||
COPYING.0BSD BSD Zero Clause License
|
||||
COPYING.GPLv2 GNU General Public License version 2
|
||||
COPYING.GPLv3 GNU General Public License version 3
|
||||
COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1
|
||||
COPYING.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
|
||||
|
@ -108,16 +103,17 @@ XZ Utils
|
|||
and data type as Doxygen tags. These docs should be quite OK as
|
||||
a quick reference.
|
||||
|
||||
There are a few example/tutorial programs that should help in
|
||||
getting started with liblzma. In the source package the examples
|
||||
are in "doc/examples" and in binary packages they may be under
|
||||
"examples" in the same directory as this README.
|
||||
I have planned to write a bunch of very well documented example
|
||||
programs, which (due to comments) should work as a tutorial to
|
||||
various features of liblzma. No such example programs have been
|
||||
written yet.
|
||||
|
||||
Since the liblzma API has similarities to the zlib API, some people
|
||||
may find it useful to read the zlib docs and tutorial too:
|
||||
For now, if you have never used liblzma, libbzip2, or zlib, I
|
||||
recommend learning the *basics* of the zlib API. Once you know that,
|
||||
it should be easier to learn liblzma.
|
||||
|
||||
https://zlib.net/manual.html
|
||||
https://zlib.net/zlib_how.html
|
||||
http://zlib.net/manual.html
|
||||
http://zlib.net/zlib_how.html
|
||||
|
||||
|
||||
2. Version numbering
|
||||
|
@ -196,19 +192,19 @@ XZ Utils
|
|||
system.
|
||||
|
||||
|
||||
4. Translations
|
||||
---------------
|
||||
4. Translating the xz tool
|
||||
--------------------------
|
||||
|
||||
The xz command line tool and all man pages can be translated.
|
||||
The translations are handled via the Translation Project. If you
|
||||
wish to help translating xz, please join the Translation Project:
|
||||
The messages from the xz tool have been translated into a few
|
||||
languages. Before starting to translate into a new language, ask
|
||||
the author whether someone else hasn't already started working on it.
|
||||
|
||||
https://translationproject.org/html/translators.html
|
||||
Test your translation. Testing includes comparing the translated
|
||||
output to the original English version by running the same commands
|
||||
in both your target locale and with LC_ALL=C. Ask someone to
|
||||
proof-read and test the translation.
|
||||
|
||||
Below are notes and testing instructions specific to xz
|
||||
translations.
|
||||
|
||||
Testing can be done by installing xz into a temporary directory:
|
||||
Testing can be done e.g. by installing xz into a temporary directory:
|
||||
|
||||
./configure --disable-shared --prefix=/tmp/xz-test
|
||||
# <Edit the .po file in the po directory.>
|
||||
|
@ -261,11 +257,14 @@ XZ Utils
|
|||
at the beginning and end of the strings.
|
||||
|
||||
- Read the TRANSLATORS comments that have been extracted from the
|
||||
source code and included in xz.pot. Some comments suggest
|
||||
testing with a specific command which needs an .xz file. You
|
||||
may use e.g. any tests/files/good-*.xz. However, these test
|
||||
commands are included in translations.bash output, so reading
|
||||
translations.bash output carefully can be enough.
|
||||
source code and included in xz.pot. If they suggest testing the
|
||||
translation with some type of command, do it. If testing needs
|
||||
input files, use e.g. tests/files/good-*.xz.
|
||||
|
||||
- When updating the translation, read the fuzzy (modified) strings
|
||||
carefully, and don't mark them as updated before you actually
|
||||
have updated them. Reading through the unchanged messages can be
|
||||
good too; sometimes you may find a better wording for them.
|
||||
|
||||
- If you find language problems in the original English strings,
|
||||
feel free to suggest improvements. Ask if something is unclear.
|
||||
|
@ -275,7 +274,9 @@ XZ Utils
|
|||
make a direct word-by-word translation from English especially if
|
||||
the result doesn't sound good in your language.
|
||||
|
||||
Thanks for your help!
|
||||
In short, take your time and pay attention to the details. Making
|
||||
a good translation is not a quick and trivial thing to do. The
|
||||
translated xz should look as polished as the English version.
|
||||
|
||||
|
||||
5. Other implementations of the .xz format
|
||||
|
@ -284,27 +285,24 @@ XZ Utils
|
|||
7-Zip and the p7zip port of 7-Zip support the .xz format starting
|
||||
from the version 9.00alpha.
|
||||
|
||||
https://7-zip.org/
|
||||
https://p7zip.sourceforge.net/
|
||||
http://7-zip.org/
|
||||
http://p7zip.sourceforge.net/
|
||||
|
||||
XZ Embedded is a limited implementation written for use in the Linux
|
||||
kernel, but it is also suitable for other embedded use.
|
||||
|
||||
https://xz.tukaani.org/xz-embedded/
|
||||
|
||||
XZ for Java is a complete implementation written in pure Java.
|
||||
|
||||
https://xz.tukaani.org/xz-for-java/
|
||||
http://tukaani.org/xz/embedded.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>.
|
||||
contact Lasse Collin <lasse.collin@tukaani.org> (in Finnish or English).
|
||||
I'm sometimes slow at replying. If you haven't got a reply within two
|
||||
weeks, assume that your email has got lost and resend it or use IRC.
|
||||
|
||||
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.
|
||||
You can find me also from #tukaani on Freenode; my nick is Larhzu.
|
||||
The channel tends to be pretty quiet, so just ask your question and
|
||||
someone may wake up.
|
||||
|
||||
|
|
89
THANKS
89
THANKS
|
@ -5,174 +5,89 @@ Thanks
|
|||
Some people have helped more, some less, but nevertheless everyone's help
|
||||
has been important. :-) In alphabetical order:
|
||||
- Mark Adler
|
||||
- Kian-Meng Ang
|
||||
- H. Peter Anvin
|
||||
- Jeff Bastian
|
||||
- Nelson H. F. Beebe
|
||||
- Karl Beldan
|
||||
- Karl Berry
|
||||
- Anders F. Björklund
|
||||
- Emmanuel Blot
|
||||
- Melanie Blower
|
||||
- Alexander Bluhm
|
||||
- Martin Blumenstingl
|
||||
- Ben Boeckel
|
||||
- Jakub Bogusz
|
||||
- Adam Borowski
|
||||
- Maarten Bosmans
|
||||
- Lukas Braune
|
||||
- Benjamin Buch
|
||||
- Trent W. Buck
|
||||
- Kevin R. Bulgrien
|
||||
- James Buren
|
||||
- David Burklund
|
||||
- Frank Busse
|
||||
- Daniel Mealha Cabrita
|
||||
- Milo Casagrande
|
||||
- Marek Černocký
|
||||
- Tomer Chachamu
|
||||
- Vitaly Chikunov
|
||||
- Antoine Cœur
|
||||
- Gabi Davar
|
||||
- İhsan Doğan
|
||||
- Chris Donawa
|
||||
- Andrew Dudman
|
||||
- Markus Duft
|
||||
- İsmail Dönmez
|
||||
- Paul Eggert
|
||||
- Robert Elz
|
||||
- Gilles Espinasse
|
||||
- Denis Excoffier
|
||||
- Vincent Fazio
|
||||
- Michael Felt
|
||||
- Michael Fox
|
||||
- Mike Frysinger
|
||||
- Daniel Richard G.
|
||||
- Tomasz Gajc
|
||||
- Bjarni Ingi Gislason
|
||||
- John Paul Adrian Glaubitz
|
||||
- Bill Glessner
|
||||
- Matthew Good
|
||||
- Michał Górny
|
||||
- Jason Gorski
|
||||
- Juan Manuel Guerrero
|
||||
- Gabriela Gutierrez
|
||||
- Diederik de Haas
|
||||
- Joachim Henke
|
||||
- Christian Hesse
|
||||
- Vincenzo Innocente
|
||||
- Peter Ivanov
|
||||
- Nicholas Jackson
|
||||
- Sam James
|
||||
- Hajin Jang
|
||||
- Hans Jansen
|
||||
- Jouk Jansen
|
||||
- Jun I Jin
|
||||
- Kiyoshi Kanazawa
|
||||
- Joona Kannisto
|
||||
- Per Øyvind Karlsen
|
||||
- Iouri Kharon
|
||||
- Thomas Klausner
|
||||
- Richard Koch
|
||||
- Anton Kochkov
|
||||
- Ville Koskinen
|
||||
- Sergey Kosukhin
|
||||
- Marcin Kowalczyk
|
||||
- Jan Kratochvil
|
||||
- Christian Kujau
|
||||
- Stephan Kulow
|
||||
- Ilya Kurdyukov
|
||||
- Peter Lawler
|
||||
- James M Leddy
|
||||
- Kelvin Lee
|
||||
- Vincent Lefevre
|
||||
- Hin-Tak Leung
|
||||
- Andraž 'ruskie' Levstik
|
||||
- Cary Lewis
|
||||
- Wim Lewis
|
||||
- Xin Li
|
||||
- Eric Lindblad
|
||||
- Lorenzo De Liso
|
||||
- H.J. Lu
|
||||
- Bela Lubkin
|
||||
- Chenxi Mao
|
||||
- Gregory Margo
|
||||
- Julien Marrec
|
||||
- Ed Maste
|
||||
- Martin Matuška
|
||||
- Ivan A. Melnikov
|
||||
- Jim Meyering
|
||||
- Arkadiusz Miskiewicz
|
||||
- Nathan Moinvaziri
|
||||
- Étienne Mollier
|
||||
- Conley Moorhous
|
||||
- Rafał Mużyło
|
||||
- Adrien Nader
|
||||
- Evan Nemerson
|
||||
- Hongbo Ni
|
||||
- Jonathan Nieder
|
||||
- Andre Noll
|
||||
- Peter O'Gorman
|
||||
- Dimitri Papadopoulos Orfanos
|
||||
- Daniel Packard
|
||||
- Filip Palian
|
||||
- Peter Pallinger
|
||||
- Rui Paulo
|
||||
- Igor Pavlov
|
||||
- Diego Elio Pettenò
|
||||
- Elbert Pol
|
||||
- Mikko Pouru
|
||||
- Rich Prohaska
|
||||
- Trần Ngọc Quân
|
||||
- Pavel Raiskup
|
||||
- Ole André Vadla Ravnås
|
||||
- Eric S. Raymond
|
||||
- Robert Readman
|
||||
- Bernhard Reutner-Fischer
|
||||
- Markus Rickert
|
||||
- Eric S. Raymond
|
||||
- Cristian Rodríguez
|
||||
- Christian von Roques
|
||||
- Boud Roukema
|
||||
- Torsten Rupp
|
||||
- Stephen Sachs
|
||||
- Jukka Salmi
|
||||
- Agostino Sarubbo
|
||||
- Alexandre Sauvé
|
||||
- Benno Schulenberg
|
||||
- Andreas Schwab
|
||||
- Bhargava Shastry
|
||||
- Dan Shechter
|
||||
- Stuart Shelton
|
||||
- Sebastian Andrzej Siewior
|
||||
- Ville Skyttä
|
||||
- Brad Smith
|
||||
- Bruce Stark
|
||||
- Pippijn van Steenhoven
|
||||
- Martin Storsjö
|
||||
- Jonathan Stott
|
||||
- Dan Stromberg
|
||||
- Jia Tan
|
||||
- Vincent Torri
|
||||
- Alexey Tourbin
|
||||
- Paul Townsend
|
||||
- Mohammed Adnène Trojette
|
||||
- Taiki Tsunekawa
|
||||
- Maksym Vatsyk
|
||||
- Loganaden Velvindron
|
||||
- Alexey Tourbin
|
||||
- Patrick J. Volkerding
|
||||
- Martin Väth
|
||||
- Adam Walling
|
||||
- Jeffrey Walton
|
||||
- Christian Weisgerber
|
||||
- Dan Weiss
|
||||
- Bert Wesarg
|
||||
- Fredrik Wikstrom
|
||||
- Jim Wilcoxson
|
||||
- Ralf Wildenhues
|
||||
- Charles Wilson
|
||||
- Lars Wirzenius
|
||||
- Pilorz Wojciech
|
||||
- Chien Wong
|
||||
- Ryan Young
|
||||
- Andreas Zieringer
|
||||
|
||||
|
|
62
TODO
62
TODO
|
@ -24,36 +24,20 @@ Known bugs
|
|||
|
||||
tuklib_exit() doesn't block signals => EINTR is possible.
|
||||
|
||||
If liblzma has created threads and fork() gets called, liblzma
|
||||
code will break in the child process unless it calls exec() and
|
||||
doesn't touch liblzma.
|
||||
SIGTSTP is not handled. If xz is stopped, the estimated remaining
|
||||
time and calculated (de)compression speed won't make sense in the
|
||||
progress indicator (xz --verbose).
|
||||
|
||||
|
||||
Missing features
|
||||
----------------
|
||||
|
||||
Add support for storing metadata in .xz files. A preliminary
|
||||
idea is to create a new Stream type for metadata. When both
|
||||
metadata and data are wanted in the same .xz file, two or more
|
||||
Streams would be concatenated.
|
||||
|
||||
The state stored in lzma_stream should be cloneable, which would
|
||||
be mostly useful when using a preset dictionary in LZMA2, but
|
||||
it may have other uses too. Compare to deflateCopy() in zlib.
|
||||
|
||||
Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and
|
||||
other streams that don't have an end of payload marker.
|
||||
|
||||
Adjust dictionary size when the input file size is known.
|
||||
Maybe do this only if an option is given.
|
||||
|
||||
xz doesn't support copying extended attributes, access control
|
||||
lists etc. from source to target file.
|
||||
|
||||
Multithreaded compression:
|
||||
- Reduce memory usage of the current method.
|
||||
- Implement threaded match finders.
|
||||
- Implement pigz-style threading in LZMA2.
|
||||
Multithreaded compression
|
||||
|
||||
Multithreaded decompression
|
||||
|
||||
Buffer-to-buffer coding could use less RAM (especially when
|
||||
decompressing LZMA1 or LZMA2).
|
||||
|
@ -62,44 +46,18 @@ Missing features
|
|||
It will be a separate library that supports uncompressed, .gz,
|
||||
.bz2, .lzma, and .xz files.
|
||||
|
||||
Support changing lzma_options_lzma.mode with lzma_filters_update().
|
||||
|
||||
Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
|
||||
Block and Stream boundaries.
|
||||
|
||||
lzma_strerror() to convert lzma_ret to human readable form?
|
||||
This is tricky, because the same error codes are used with
|
||||
slightly different meanings, and this cannot be fixed anymore.
|
||||
|
||||
Make it possible to adjust LZMA2 options in the middle of a Block
|
||||
so that the encoding speed vs. compression ratio can be optimized
|
||||
when the compressed data is streamed over network.
|
||||
|
||||
Improved BCJ filters. The current filters are small but they aren't
|
||||
so great when compressing binary packages that contain various file
|
||||
types. Specifically, they make things worse if there are static
|
||||
libraries or Linux kernel modules. The filtering could also be
|
||||
more effective (without getting overly complex), for example,
|
||||
streamable variant BCJ2 from 7-Zip could be implemented.
|
||||
|
||||
Filter that autodetects specific data types in the input stream
|
||||
and applies appropriate filters for the corrects parts of the input.
|
||||
Perhaps combine this with the BCJ filter improvement point above.
|
||||
|
||||
Long-range LZ77 method as a separate filter or as a new LZMA2
|
||||
match finder.
|
||||
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
More tutorial programs are needed for liblzma.
|
||||
Some tutorial is needed for liblzma. I have planned to write some
|
||||
extremely well commented example programs, which would work as
|
||||
a tutorial. I suppose the Doxygen tags are quite OK as a quick
|
||||
reference once one is familiar with the liblzma API.
|
||||
|
||||
Document the LZMA1 and LZMA2 algorithms.
|
||||
|
||||
|
||||
Miscellaneous
|
||||
------------
|
||||
|
||||
Try to get the media type for .xz registered at IANA.
|
||||
|
||||
|
|
44
autogen.sh
44
autogen.sh
|
@ -1,54 +1,22 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
# The result of using "autoreconf -fi" should be identical to using this
|
||||
# script. I'm leaving this script here just in case someone finds it useful.
|
||||
|
||||
set -e -x
|
||||
|
||||
# The following six lines are almost identical to "autoreconf -fi" but faster.
|
||||
${AUTOPOINT:-autopoint} -f
|
||||
${LIBTOOLIZE:-libtoolize} -c -f || glibtoolize -c -f
|
||||
${ACLOCAL:-aclocal} -I m4
|
||||
${AUTOCONF:-autoconf}
|
||||
${AUTOHEADER:-autoheader}
|
||||
${AUTOMAKE:-automake} -acf --foreign
|
||||
|
||||
# Generate the translated man pages and the doxygen documentation if the
|
||||
# "po4a" and "doxygen" tools are available.
|
||||
# This is *NOT* done by "autoreconf -fi" or when "make" is run.
|
||||
# Pass --no-po4a or --no-doxygen to this script to skip these steps.
|
||||
# It can be useful when you know that po4a or doxygen aren't available and
|
||||
# don't want autogen.sh to exit with non-zero exit status.
|
||||
generate_po4a="y"
|
||||
generate_doxygen="y"
|
||||
|
||||
for arg in "$@"
|
||||
do
|
||||
case $arg in
|
||||
"--no-po4a")
|
||||
generate_po4a="n"
|
||||
;;
|
||||
|
||||
"--no-doxygen")
|
||||
generate_doxygen="n"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test "$generate_po4a" != "n"; then
|
||||
cd po4a
|
||||
sh update-po
|
||||
cd ..
|
||||
fi
|
||||
|
||||
if test "$generate_doxygen" != "n"; then
|
||||
cd doxygen
|
||||
sh update-doxygen
|
||||
cd ..
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -1,287 +0,0 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Script meant to be used for Continuous Integration automation for POSIX
|
||||
# systems. On GitHub, this is used by Ubuntu and MacOS builds.
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# Author: Jia Tan
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
set -e
|
||||
|
||||
USAGE="Usage: $0
|
||||
-a [autogen flags]
|
||||
-b [autotools|cmake]
|
||||
-c [crc32|crc64|sha256]
|
||||
-d [encoders|decoders|bcj|delta|threads|shared|nls|small|ifunc|clmul|sandbox]
|
||||
-f [CFLAGS]
|
||||
-l [destdir]
|
||||
-m [compiler]
|
||||
-n [ARTIFACTS_DIR_NAME]
|
||||
-p [all|build|test]
|
||||
-s [srcdir]"
|
||||
|
||||
# Absolute path of script directory
|
||||
ABS_DIR=$(cd -- "$(dirname -- "$0")" && pwd)
|
||||
|
||||
# Default CLI option values
|
||||
AUTOGEN_FLAGS=""
|
||||
BUILD_SYSTEM="autotools"
|
||||
CHECK_TYPE="crc32,crc64,sha256"
|
||||
BCJ="y"
|
||||
DELTA="y"
|
||||
ENCODERS="y"
|
||||
DECODERS="y"
|
||||
THREADS="y"
|
||||
SHARED="y"
|
||||
NATIVE_LANG_SUPPORT="y"
|
||||
SMALL="n"
|
||||
IFUNC="y"
|
||||
CLMUL="y"
|
||||
SANDBOX="y"
|
||||
SRC_DIR="$ABS_DIR/../"
|
||||
DEST_DIR="$SRC_DIR/../xz_build"
|
||||
PHASE="all"
|
||||
ARTIFACTS_DIR_NAME="output"
|
||||
|
||||
|
||||
###################
|
||||
# Parse arguments #
|
||||
###################
|
||||
|
||||
while getopts a:b:c:d:l:m:n:s:p:f:h opt; do
|
||||
# b option can have either value "autotools" OR "cmake"
|
||||
case ${opt} in
|
||||
h)
|
||||
echo "$USAGE"
|
||||
exit 0
|
||||
;;
|
||||
a)
|
||||
AUTOGEN_FLAGS="$OPTARG"
|
||||
;;
|
||||
b)
|
||||
case "$OPTARG" in
|
||||
autotools) ;;
|
||||
cmake) ;;
|
||||
*) echo "Invalid build system: $OPTARG"; exit 1;;
|
||||
esac
|
||||
BUILD_SYSTEM="$OPTARG"
|
||||
;;
|
||||
c) CHECK_TYPE="$OPTARG"
|
||||
;;
|
||||
# d options can be a comma separated list of things to disable at
|
||||
# configure time
|
||||
d)
|
||||
for disable_arg in $(echo "$OPTARG" | sed "s/,/ /g"); do
|
||||
case "$disable_arg" in
|
||||
encoders) ENCODERS="n" ;;
|
||||
decoders) DECODERS="n" ;;
|
||||
bcj) BCJ="n" ;;
|
||||
delta) DELTA="n" ;;
|
||||
threads) THREADS="n" ;;
|
||||
shared) SHARED="n";;
|
||||
nls) NATIVE_LANG_SUPPORT="n";;
|
||||
small) SMALL="y";;
|
||||
ifunc) IFUNC="n";;
|
||||
clmul) CLMUL="n";;
|
||||
sandbox) SANDBOX="n";;
|
||||
*) echo "Invalid disable value: $disable_arg"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
;;
|
||||
l) DEST_DIR="$OPTARG"
|
||||
;;
|
||||
m)
|
||||
CC="$OPTARG"
|
||||
export CC
|
||||
;;
|
||||
n) ARTIFACTS_DIR_NAME="$OPTARG"
|
||||
;;
|
||||
s) SRC_DIR="$OPTARG"
|
||||
;;
|
||||
p) PHASE="$OPTARG"
|
||||
;;
|
||||
f)
|
||||
CFLAGS="$OPTARG"
|
||||
export CFLAGS
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
####################
|
||||
# Helper Functions #
|
||||
####################
|
||||
|
||||
# These two functions essentially implement the ternary "?" operator.
|
||||
add_extra_option() {
|
||||
# First argument is option value ("y" or "n")
|
||||
# Second argument is option to set if "y"
|
||||
# Third argument is option to set if "n"
|
||||
if [ "$1" = "y" ]
|
||||
then
|
||||
EXTRA_OPTIONS="$EXTRA_OPTIONS $2"
|
||||
else
|
||||
EXTRA_OPTIONS="$EXTRA_OPTIONS $3"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
add_to_filter_list() {
|
||||
# First argument is option value ("y" or "n")
|
||||
# Second argument is option to set if "y"
|
||||
if [ "$1" = "y" ]
|
||||
then
|
||||
FILTER_LIST="$FILTER_LIST$2"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
###############
|
||||
# Build Phase #
|
||||
###############
|
||||
|
||||
if [ "$PHASE" = "all" ] || [ "$PHASE" = "build" ]
|
||||
then
|
||||
# Checksum options should be specified differently based on the
|
||||
# build system. It must be calculated here since we won't know
|
||||
# the build system used until all args have been parsed.
|
||||
# Autotools - comma separated
|
||||
# CMake - semi-colon separated
|
||||
if [ "$BUILD_SYSTEM" = "autotools" ]
|
||||
then
|
||||
SEP=","
|
||||
else
|
||||
SEP=";"
|
||||
fi
|
||||
|
||||
CHECK_TYPE_TEMP=""
|
||||
for crc in $(echo "$CHECK_TYPE" | sed "s/,/ /g"); do
|
||||
case "$crc" in
|
||||
# Remove "crc32" from cmake build, if specified.
|
||||
crc32)
|
||||
if [ "$BUILD_SYSTEM" = "cmake" ]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
crc64) ;;
|
||||
sha256) ;;
|
||||
*) echo "Invalid check type: $crc"; exit 1 ;;
|
||||
esac
|
||||
|
||||
CHECK_TYPE_TEMP="$CHECK_TYPE_TEMP$SEP$crc"
|
||||
done
|
||||
|
||||
# Remove the first character from $CHECK_TYPE_TEMP since it will
|
||||
# always be the delimiter.
|
||||
CHECK_TYPE="${CHECK_TYPE_TEMP:1}"
|
||||
|
||||
FILTER_LIST="lzma1$SEP"lzma2
|
||||
|
||||
# Build based on arguments
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
# Generate configure option values
|
||||
EXTRA_OPTIONS=""
|
||||
|
||||
case $BUILD_SYSTEM in
|
||||
autotools)
|
||||
cd "$SRC_DIR"
|
||||
|
||||
# Run autogen.sh script if not already run
|
||||
if [ ! -f configure ]
|
||||
then
|
||||
./autogen.sh "$AUTOGEN_FLAGS"
|
||||
fi
|
||||
|
||||
cd "$DEST_DIR"
|
||||
|
||||
add_to_filter_list "$BCJ" ",x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv"
|
||||
add_to_filter_list "$DELTA" ",delta"
|
||||
|
||||
add_extra_option "$ENCODERS" "--enable-encoders=$FILTER_LIST" "--disable-encoders"
|
||||
add_extra_option "$DECODERS" "--enable-decoders=$FILTER_LIST" "--disable-decoders"
|
||||
add_extra_option "$THREADS" "" "--disable-threads"
|
||||
add_extra_option "$SHARED" "" "--disable-shared"
|
||||
add_extra_option "$NATIVE_LANG_SUPPORT" "" "--disable-nls"
|
||||
add_extra_option "$SMALL" "--enable-small" ""
|
||||
add_extra_option "$IFUNC" "" "--disable-ifunc"
|
||||
add_extra_option "$CLMUL" "" "--disable-clmul-crc"
|
||||
add_extra_option "$SANDBOX" "" "--enable-sandbox=no"
|
||||
|
||||
# Run configure script
|
||||
"$SRC_DIR"/configure --enable-werror --enable-checks="$CHECK_TYPE" $EXTRA_OPTIONS --config-cache
|
||||
|
||||
# Build the project
|
||||
make
|
||||
;;
|
||||
cmake)
|
||||
cd "$DEST_DIR"
|
||||
|
||||
add_to_filter_list "$BCJ" ";x86;powerpc;ia64;arm;armthumb;arm64;sparc;riscv"
|
||||
add_to_filter_list "$DELTA" ";delta"
|
||||
|
||||
add_extra_option "$THREADS" "-DENABLE_THREADS=ON" "-DENABLE_THREADS=OFF"
|
||||
|
||||
# Disable MicroLZMA if encoders are not configured.
|
||||
add_extra_option "$ENCODERS" "-DENCODERS=$FILTER_LIST" "-DENCODERS= -DMICROLZMA_ENCODER=OFF"
|
||||
|
||||
# Disable MicroLZMA and lzip decoders if decoders are not configured.
|
||||
add_extra_option "$DECODERS" "-DDECODERS=$FILTER_LIST" "-DDECODERS= -DMICROLZMA_DECODER=OFF -DLZIP_DECODER=OFF"
|
||||
|
||||
# CMake disables the shared library by default.
|
||||
add_extra_option "$SHARED" "-DBUILD_SHARED_LIBS=ON" ""
|
||||
|
||||
add_extra_option "$SMALL" "-DHAVE_SMALL=ON" ""
|
||||
|
||||
if test -n "$CC" ; then
|
||||
EXTRA_OPTIONS="$EXTRA_OPTIONS -DCMAKE_C_COMPILER=$CC"
|
||||
fi
|
||||
|
||||
# Remove old cache file to clear previous settings.
|
||||
rm -f "CMakeCache.txt"
|
||||
cmake "$SRC_DIR/CMakeLists.txt" -B "$DEST_DIR" $EXTRA_OPTIONS -DADDITIONAL_CHECK_TYPES="$CHECK_TYPE" -G "Unix Makefiles"
|
||||
cmake --build "$DEST_DIR"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
##############
|
||||
# Test Phase #
|
||||
##############
|
||||
|
||||
if [ "$PHASE" = "all" ] || [ "$PHASE" = "test" ]
|
||||
then
|
||||
case $BUILD_SYSTEM in
|
||||
autotools)
|
||||
cd "$DEST_DIR"
|
||||
# If the tests fail, copy the test logs into the artifacts folder
|
||||
if make check
|
||||
then
|
||||
:
|
||||
else
|
||||
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
||||
cp ./tests/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
cmake)
|
||||
cd "$DEST_DIR"
|
||||
if make test
|
||||
then
|
||||
:
|
||||
else
|
||||
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
||||
cp ./Testing/Temporary/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#
|
||||
###############################################################################
|
||||
#
|
||||
# Wrapper for GNU groff to convert man pages to a few formats
|
||||
|
@ -18,6 +17,9 @@
|
|||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
FORMAT=$1
|
||||
|
@ -36,10 +38,10 @@ s/^\\.PD\$/.PD $PD/"
|
|||
|
||||
case $FORMAT in
|
||||
ascii)
|
||||
groff -t -mandoc -Tascii -P-c | col -bx
|
||||
groff -t -mandoc -Tascii | col -bx
|
||||
;;
|
||||
utf8)
|
||||
groff -t -mandoc -Tutf8 -P-c | col -bx
|
||||
groff -t -mandoc -Tutf8 | col -bx
|
||||
;;
|
||||
ps)
|
||||
sed "$SED_PD" | groff -dpaper=$PAPER -t -mandoc \
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# Get the version string from version.h and print it out without
|
||||
|
@ -10,6 +9,9 @@
|
|||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/
|
||||
|
@ -19,4 +21,4 @@ sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/
|
|||
src/liblzma/api/lzma/version.h \
|
||||
| tr '\n' '|' \
|
||||
| sed 's/|/./; s/|/./; s/|//g' \
|
||||
| tr -d '\r\n'
|
||||
| tr -d '\n'
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# remove-ordinals.cmake
|
||||
#
|
||||
# Removes the ordinal numbers from a DEF file that has been created by
|
||||
# GNU ld or LLVM lld option --output-def (when creating a Windows DLL).
|
||||
# This should be equivalent: sed 's/ \+@ *[0-9]\+//'
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# cmake -DINPUT_FILE=infile.def.in \
|
||||
# -DOUTPUT_FILE=outfile.def \
|
||||
# -P remove-ordinals.cmake
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
file(READ "${INPUT_FILE}" STR)
|
||||
string(REGEX REPLACE " +@ *[0-9]+" "" STR "${STR}")
|
||||
file(WRITE "${OUTPUT_FILE}" "${STR}")
|
|
@ -1,50 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_common.cmake - common functions and macros for tuklib_*.cmake files
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
function(tuklib_add_definitions TARGET_OR_ALL DEFINITIONS)
|
||||
# DEFINITIONS may be an empty string/list but it's fine here. There is
|
||||
# no need to quote ${DEFINITIONS} as empty arguments are fine here.
|
||||
if(TARGET_OR_ALL STREQUAL "ALL")
|
||||
add_compile_definitions(${DEFINITIONS})
|
||||
else()
|
||||
target_compile_definitions("${TARGET_OR_ALL}" PRIVATE ${DEFINITIONS})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(tuklib_add_definition_if TARGET_OR_ALL VAR)
|
||||
if(${VAR})
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}" "${VAR}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# This is an over-simplified version of AC_USE_SYSTEM_EXTENSIONS in Autoconf
|
||||
# or gl_USE_SYSTEM_EXTENSIONS in gnulib.
|
||||
macro(tuklib_use_system_extensions TARGET_OR_ALL)
|
||||
if(NOT WIN32)
|
||||
# FIXME? The Solaris-specific __EXTENSIONS__ should be conditional
|
||||
# even on Solaris. See gnulib: git log m4/extensions.m4.
|
||||
# FIXME? gnulib and autoconf.git has lots of new stuff.
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}"
|
||||
_GNU_SOURCE
|
||||
__EXTENSIONS__
|
||||
_POSIX_PTHREAD_SEMANTICS
|
||||
_TANDEM_SOURCE
|
||||
_ALL_SOURCE
|
||||
)
|
||||
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS
|
||||
-D_GNU_SOURCE
|
||||
-D__EXTENSIONS__
|
||||
-D_POSIX_PTHREAD_SEMANTICS
|
||||
-D_TANDEM_SOURCE
|
||||
-D_ALL_SOURCE
|
||||
)
|
||||
endif()
|
||||
endmacro()
|
|
@ -1,181 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_cpucores.cmake - see tuklib_cpucores.m4 for description and comments
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckIncludeFile)
|
||||
|
||||
function(tuklib_cpucores_internal_check)
|
||||
if(WIN32 OR CYGWIN)
|
||||
# Nothing to do, the tuklib_cpucores.c handles it.
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS "" CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# glibc-based systems (GNU/Linux and GNU/kFreeBSD) have
|
||||
# sched_getaffinity(). The CPU_COUNT() macro was added in glibc 2.9.
|
||||
# glibc 2.9 is old enough that if someone uses the code on older glibc,
|
||||
# the fallback to sysconf() should be good enough.
|
||||
#
|
||||
# NOTE: This required that _GNU_SOURCE is defined. We assume that whatever
|
||||
# feature test macros the caller wants to use are already set in
|
||||
# CMAKE_REQUIRED_DEFINES and in the target defines.
|
||||
check_c_source_compiles("
|
||||
#include <sched.h>
|
||||
int main(void)
|
||||
{
|
||||
cpu_set_t cpu_mask;
|
||||
sched_getaffinity(0, sizeof(cpu_mask), &cpu_mask);
|
||||
return CPU_COUNT(&cpu_mask);
|
||||
}
|
||||
"
|
||||
TUKLIB_CPUCORES_SCHED_GETAFFINITY)
|
||||
if(TUKLIB_CPUCORES_SCHED_GETAFFINITY)
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS
|
||||
"TUKLIB_CPUCORES_SCHED_GETAFFINITY"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# FreeBSD has both cpuset and sysctl. Look for cpuset first because
|
||||
# it's a better approach.
|
||||
#
|
||||
# This test would match on GNU/kFreeBSD too but it would require
|
||||
# -lfreebsd-glue when linking and thus in the current form this would
|
||||
# fail on GNU/kFreeBSD. The above test for sched_getaffinity() matches
|
||||
# on GNU/kFreeBSD so the test below should never run on that OS.
|
||||
check_c_source_compiles("
|
||||
#include <sys/param.h>
|
||||
#include <sys/cpuset.h>
|
||||
int main(void)
|
||||
{
|
||||
cpuset_t set;
|
||||
cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1,
|
||||
sizeof(set), &set);
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_CPUCORES_CPUSET)
|
||||
if(TUKLIB_CPUCORES_CPUSET)
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS "HAVE_PARAM_H;TUKLIB_CPUCORES_CPUSET"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# On OS/2, both sysconf() and sysctl() pass the tests in this file,
|
||||
# but only sysctl() works. On QNX it's the opposite: only sysconf() works
|
||||
# (although it assumes that _POSIX_SOURCE, _XOPEN_SOURCE, and
|
||||
# _POSIX_C_SOURCE are undefined or alternatively _QNX_SOURCE is defined).
|
||||
#
|
||||
# We test sysctl() first and intentionally break the sysctl() test on QNX
|
||||
# so that sysctl() is never used on QNX.
|
||||
check_include_file(sys/param.h HAVE_SYS_PARAM_H)
|
||||
if(HAVE_SYS_PARAM_H)
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_PARAM_H)
|
||||
endif()
|
||||
check_c_source_compiles("
|
||||
#ifdef __QNX__
|
||||
compile error
|
||||
#endif
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/sysctl.h>
|
||||
int main(void)
|
||||
{
|
||||
#ifdef HW_NCPUONLINE
|
||||
/* This is preferred on OpenBSD, see tuklib_cpucores.c. */
|
||||
int name[2] = { CTL_HW, HW_NCPUONLINE };
|
||||
#else
|
||||
int name[2] = { CTL_HW, HW_NCPU };
|
||||
#endif
|
||||
int cpus;
|
||||
size_t cpus_size = sizeof(cpus);
|
||||
sysctl(name, 2, &cpus, &cpus_size, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_CPUCORES_SYSCTL)
|
||||
if(TUKLIB_CPUCORES_SYSCTL)
|
||||
if(HAVE_SYS_PARAM_H)
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS
|
||||
"HAVE_PARAM_H;TUKLIB_CPUCORES_SYSCTL"
|
||||
CACHE INTERNAL "")
|
||||
else()
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS
|
||||
"TUKLIB_CPUCORES_SYSCTL"
|
||||
CACHE INTERNAL "")
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Many platforms support sysconf().
|
||||
check_c_source_compiles("
|
||||
#include <unistd.h>
|
||||
int main(void)
|
||||
{
|
||||
long i;
|
||||
#ifdef _SC_NPROCESSORS_ONLN
|
||||
/* Many systems using sysconf() */
|
||||
i = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
#else
|
||||
/* IRIX */
|
||||
i = sysconf(_SC_NPROC_ONLN);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_CPUCORES_SYSCONF)
|
||||
if(TUKLIB_CPUCORES_SYSCONF)
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS "TUKLIB_CPUCORES_SYSCONF"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# HP-UX
|
||||
check_c_source_compiles("
|
||||
#include <sys/param.h>
|
||||
#include <sys/pstat.h>
|
||||
int main(void)
|
||||
{
|
||||
struct pst_dynamic pst;
|
||||
pstat_getdynamic(&pst, sizeof(pst), 1, 0);
|
||||
(void)pst.psd_proc_cnt;
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_CPUCORES_PSTAT_GETDYNAMIC)
|
||||
if(TUKLIB_CPUCORES_PSTAT_GETDYNAMIC)
|
||||
set(TUKLIB_CPUCORES_DEFINITIONS "TUKLIB_CPUCORES_PSTAT_GETDYNAMIC"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(tuklib_cpucores TARGET_OR_ALL)
|
||||
if(NOT DEFINED TUKLIB_CPUCORES_FOUND)
|
||||
message(STATUS
|
||||
"Checking how to detect the number of available CPU cores")
|
||||
tuklib_cpucores_internal_check()
|
||||
|
||||
if(DEFINED TUKLIB_CPUCORES_DEFINITIONS)
|
||||
set(TUKLIB_CPUCORES_FOUND 1 CACHE INTERNAL "")
|
||||
else()
|
||||
set(TUKLIB_CPUCORES_FOUND 0 CACHE INTERNAL "")
|
||||
message(WARNING
|
||||
"No method to detect the number of CPU cores was found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(TUKLIB_CPUCORES_FOUND)
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}"
|
||||
"${TUKLIB_CPUCORES_DEFINITIONS}")
|
||||
endif()
|
||||
endfunction()
|
|
@ -1,141 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_integer.cmake - see tuklib_integer.m4 for description and comments
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(TestBigEndian)
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckIncludeFile)
|
||||
include(CheckSymbolExists)
|
||||
|
||||
function(tuklib_integer TARGET_OR_ALL)
|
||||
# Check for endianness. Unlike the Autoconf's AC_C_BIGENDIAN, this doesn't
|
||||
# support Apple universal binaries. The CMake module will leave the
|
||||
# variable unset so we can catch that situation here instead of continuing
|
||||
# as if we were little endian.
|
||||
test_big_endian(WORDS_BIGENDIAN)
|
||||
if(NOT DEFINED WORDS_BIGENDIAN)
|
||||
message(FATAL_ERROR "Cannot determine endianness")
|
||||
endif()
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" WORDS_BIGENDIAN)
|
||||
|
||||
# Look for a byteswapping method.
|
||||
check_c_source_compiles("
|
||||
int main(void)
|
||||
{
|
||||
__builtin_bswap16(1);
|
||||
__builtin_bswap32(1);
|
||||
__builtin_bswap64(1);
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
HAVE___BUILTIN_BSWAPXX)
|
||||
if(HAVE___BUILTIN_BSWAPXX)
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}" HAVE___BUILTIN_BSWAPXX)
|
||||
else()
|
||||
check_include_file(byteswap.h HAVE_BYTESWAP_H)
|
||||
if(HAVE_BYTESWAP_H)
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}" HAVE_BYTESWAP_H)
|
||||
check_symbol_exists(bswap_16 byteswap.h HAVE_BSWAP_16)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_BSWAP_16)
|
||||
check_symbol_exists(bswap_32 byteswap.h HAVE_BSWAP_32)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_BSWAP_32)
|
||||
check_symbol_exists(bswap_64 byteswap.h HAVE_BSWAP_64)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_BSWAP_64)
|
||||
else()
|
||||
check_include_file(sys/endian.h HAVE_SYS_ENDIAN_H)
|
||||
if(HAVE_SYS_ENDIAN_H)
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}" HAVE_SYS_ENDIAN_H)
|
||||
else()
|
||||
check_include_file(sys/byteorder.h HAVE_SYS_BYTEORDER_H)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}"
|
||||
HAVE_SYS_BYTEORDER_H)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Guess that unaligned access is fast on these archs:
|
||||
# - 32/64-bit x86 / x86-64
|
||||
# - 32/64-bit big endian PowerPC
|
||||
# - 64-bit little endian PowerPC
|
||||
# - Some 32-bit ARM
|
||||
# - Some 64-bit ARM64 (AArch64)
|
||||
# - Some 32/64-bit RISC-V
|
||||
#
|
||||
# CMake doesn't provide a standardized/normalized list of processor arch
|
||||
# names. For example, x86-64 may be "x86_64" (Linux), "AMD64" (Windows),
|
||||
# or even "EM64T" (64-bit WinXP).
|
||||
set(FAST_UNALIGNED_GUESS OFF)
|
||||
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PROCESSOR)
|
||||
|
||||
# There is no ^ in the first regex branch to allow "i" at the beginning
|
||||
# so it can match "i386" to "i786", and "x86_64".
|
||||
if(PROCESSOR MATCHES "[x34567]86|^x64|^amd64|^em64t")
|
||||
set(FAST_UNALIGNED_GUESS ON)
|
||||
|
||||
elseif(PROCESSOR MATCHES "^powerpc|^ppc")
|
||||
if(WORDS_BIGENDIAN OR PROCESSOR MATCHES "64")
|
||||
set(FAST_UNALIGNED_GUESS ON)
|
||||
endif()
|
||||
|
||||
elseif(PROCESSOR MATCHES "^arm|^aarch64|^riscv")
|
||||
# On 32-bit and 64-bit ARM, GCC and Clang
|
||||
# #define __ARM_FEATURE_UNALIGNED if
|
||||
# unaligned access is supported.
|
||||
#
|
||||
# Exception: GCC at least up to 13.2.0
|
||||
# defines it even when using -mstrict-align
|
||||
# so in that case this autodetection goes wrong.
|
||||
# Most of the time -mstrict-align isn't used so it
|
||||
# shouldn't be a common problem in practice. See:
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111555
|
||||
#
|
||||
# RISC-V C API Specification says that if
|
||||
# __riscv_misaligned_fast is defined then
|
||||
# unaligned access is known to be fast.
|
||||
#
|
||||
# MSVC is handled as a special case: We assume that
|
||||
# 32/64-bit ARM supports fast unaligned access.
|
||||
# If MSVC gets RISC-V support then this will assume
|
||||
# fast unaligned access on RISC-V too.
|
||||
check_c_source_compiles("
|
||||
#if !defined(__ARM_FEATURE_UNALIGNED) \
|
||||
&& !defined(__riscv_misaligned_fast) \
|
||||
&& !defined(_MSC_VER)
|
||||
compile error
|
||||
#endif
|
||||
int main(void) { return 0; }
|
||||
"
|
||||
TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
|
||||
if(TUKLIB_FAST_UNALIGNED_DEFINED_BY_PREPROCESSOR)
|
||||
set(FAST_UNALIGNED_GUESS ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(TUKLIB_FAST_UNALIGNED_ACCESS
|
||||
"Enable if the system supports *fast* unaligned memory access \
|
||||
with 16-bit, 32-bit, and 64-bit integers."
|
||||
"${FAST_UNALIGNED_GUESS}")
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" TUKLIB_FAST_UNALIGNED_ACCESS)
|
||||
|
||||
# Unsafe type punning:
|
||||
option(TUKLIB_USE_UNSAFE_TYPE_PUNNING
|
||||
"This introduces strict aliasing violations and \
|
||||
may result in broken code. However, this might improve performance \
|
||||
in some cases, especially with old compilers \
|
||||
(e.g. GCC 3 and early 4.x on x86, GCC < 6 on ARMv6 and ARMv7)."
|
||||
OFF)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" TUKLIB_USE_UNSAFE_TYPE_PUNNING)
|
||||
|
||||
# Check for GCC/Clang __builtin_assume_aligned().
|
||||
check_c_source_compiles(
|
||||
"int main(void) { __builtin_assume_aligned(\"\", 1); return 0; }"
|
||||
HAVE___BUILTIN_ASSUME_ALIGNED)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE___BUILTIN_ASSUME_ALIGNED)
|
||||
endfunction()
|
|
@ -1,53 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_large_file_support.cmake
|
||||
#
|
||||
# If off_t is less than 64 bits by default and -D_FILE_OFFSET_BITS=64
|
||||
# makes off_t become 64-bit, the CMake option LARGE_FILE_SUPPORT is
|
||||
# provided (ON by default) and -D_FILE_OFFSET_BITS=64 is added to
|
||||
# the compile definitions if LARGE_FILE_SUPPORT is ON.
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(CheckCSourceCompiles)
|
||||
|
||||
function(tuklib_large_file_support TARGET_OR_ALL)
|
||||
# MSVC must be handled specially in the C code.
|
||||
if(MSVC)
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(TUKLIB_LARGE_FILE_SUPPORT_TEST
|
||||
"#include <sys/types.h>
|
||||
int foo[sizeof(off_t) >= 8 ? 1 : -1];
|
||||
int main(void) { return 0; }")
|
||||
|
||||
check_c_source_compiles("${TUKLIB_LARGE_FILE_SUPPORT_TEST}"
|
||||
TUKLIB_LARGE_FILE_SUPPORT_BY_DEFAULT)
|
||||
|
||||
if(NOT TUKLIB_LARGE_FILE_SUPPORT_BY_DEFAULT)
|
||||
cmake_push_check_state()
|
||||
# This needs -D.
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_FILE_OFFSET_BITS=64")
|
||||
check_c_source_compiles("${TUKLIB_LARGE_FILE_SUPPORT_TEST}"
|
||||
TUKLIB_LARGE_FILE_SUPPORT_WITH_FOB64)
|
||||
cmake_pop_check_state()
|
||||
endif()
|
||||
|
||||
if(TUKLIB_LARGE_FILE_SUPPORT_WITH_FOB64)
|
||||
# Show the option only when _FILE_OFFSET_BITS=64 affects sizeof(off_t).
|
||||
option(LARGE_FILE_SUPPORT
|
||||
"Use -D_FILE_OFFSET_BITS=64 to support files larger than 2 GiB."
|
||||
ON)
|
||||
|
||||
if(LARGE_FILE_SUPPORT)
|
||||
# This must not use -D.
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}" "_FILE_OFFSET_BITS=64")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
|
@ -1,21 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_mbstr.cmake - see tuklib_mbstr.m4 for description and comments
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(CheckSymbolExists)
|
||||
|
||||
function(tuklib_mbstr TARGET_OR_ALL)
|
||||
check_symbol_exists(mbrtowc wchar.h HAVE_MBRTOWC)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_MBRTOWC)
|
||||
|
||||
# NOTE: wcwidth() requires _GNU_SOURCE or _XOPEN_SOURCE on GNU/Linux.
|
||||
check_symbol_exists(wcwidth wchar.h HAVE_WCWIDTH)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_WCWIDTH)
|
||||
endfunction()
|
|
@ -1,151 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_physmem.cmake - see tuklib_physmem.m4 for description and comments
|
||||
#
|
||||
# NOTE: Compared tuklib_physmem.m4, this lacks support for Tru64, IRIX, and
|
||||
# Linux sysinfo() (usually sysconf() is used on GNU/Linux).
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckIncludeFile)
|
||||
|
||||
function(tuklib_physmem_internal_check)
|
||||
# Shortcut on Windows:
|
||||
if(WIN32 OR CYGWIN)
|
||||
# Nothing to do, the tuklib_physmem.c handles it.
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS "" CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Full check for special cases:
|
||||
check_c_source_compiles("
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__OS2__) \
|
||||
|| defined(__DJGPP__) || defined(__VMS) \
|
||||
|| defined(AMIGA) || defined(__AROS__) || defined(__QNX__)
|
||||
int main(void) { return 0; }
|
||||
#else
|
||||
compile error
|
||||
#endif
|
||||
"
|
||||
TUKLIB_PHYSMEM_SPECIAL)
|
||||
if(TUKLIB_PHYSMEM_SPECIAL)
|
||||
# Nothing to do, the tuklib_physmem.c handles it.
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS "" CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Look for AIX-specific solution before sysconf(), because the test
|
||||
# for sysconf() will pass on AIX but won't actually work
|
||||
# (sysconf(_SC_PHYS_PAGES) compiles but always returns -1 on AIX).
|
||||
check_c_source_compiles("
|
||||
#include <sys/systemcfg.h>
|
||||
int main(void)
|
||||
{
|
||||
(void)_system_configuration.physmem;
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_PHYSMEM_AIX)
|
||||
if(TUKLIB_PHYSMEM_AIX)
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS "TUKLIB_PHYSMEM_AIX" CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# sysconf()
|
||||
check_c_source_compiles("
|
||||
#include <unistd.h>
|
||||
int main(void)
|
||||
{
|
||||
long i;
|
||||
i = sysconf(_SC_PAGESIZE);
|
||||
i = sysconf(_SC_PHYS_PAGES);
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_PHYSMEM_SYSCONF)
|
||||
if(TUKLIB_PHYSMEM_SYSCONF)
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS "TUKLIB_PHYSMEM_SYSCONF"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# sysctl()
|
||||
check_include_file(sys/param.h HAVE_SYS_PARAM_H)
|
||||
if(HAVE_SYS_PARAM_H)
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_PARAM_H)
|
||||
endif()
|
||||
|
||||
check_c_source_compiles("
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/sysctl.h>
|
||||
int main(void)
|
||||
{
|
||||
int name[2] = { CTL_HW, HW_PHYSMEM };
|
||||
unsigned long mem;
|
||||
size_t mem_ptr_size = sizeof(mem);
|
||||
sysctl(name, 2, &mem, &mem_ptr_size, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_PHYSMEM_SYSCTL)
|
||||
if(TUKLIB_PHYSMEM_SYSCTL)
|
||||
if(HAVE_SYS_PARAM_H)
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS
|
||||
"HAVE_PARAM_H;TUKLIB_PHYSMEM_SYSCTL"
|
||||
CACHE INTERNAL "")
|
||||
else()
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS
|
||||
"TUKLIB_PHYSMEM_SYSCTL"
|
||||
CACHE INTERNAL "")
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
|
||||
# HP-UX
|
||||
check_c_source_compiles("
|
||||
#include <sys/param.h>
|
||||
#include <sys/pstat.h>
|
||||
int main(void)
|
||||
{
|
||||
struct pst_static pst;
|
||||
pstat_getstatic(&pst, sizeof(pst), 1, 0);
|
||||
(void)pst.physical_memory;
|
||||
(void)pst.page_size;
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
TUKLIB_PHYSMEM_PSTAT_GETSTATIC)
|
||||
if(TUKLIB_PHYSMEM_PSTAT_GETSTATIC)
|
||||
set(TUKLIB_PHYSMEM_DEFINITIONS "TUKLIB_PHYSMEM_PSTAT_GETSTATIC"
|
||||
CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(tuklib_physmem TARGET_OR_ALL)
|
||||
if(NOT DEFINED TUKLIB_PHYSMEM_FOUND)
|
||||
message(STATUS "Checking how to detect the amount of physical memory")
|
||||
tuklib_physmem_internal_check()
|
||||
|
||||
if(DEFINED TUKLIB_PHYSMEM_DEFINITIONS)
|
||||
set(TUKLIB_PHYSMEM_FOUND 1 CACHE INTERNAL "")
|
||||
else()
|
||||
set(TUKLIB_PHYSMEM_FOUND 0 CACHE INTERNAL "")
|
||||
message(WARNING
|
||||
"No method to detect the amount of physical memory was found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(TUKLIB_PHYSMEM_FOUND)
|
||||
tuklib_add_definitions("${TARGET_OR_ALL}"
|
||||
"${TUKLIB_PHYSMEM_DEFINITIONS}")
|
||||
endif()
|
||||
endfunction()
|
|
@ -1,19 +0,0 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# tuklib_progname.cmake - see tuklib_progname.m4 for description and comments
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
|
||||
include(CheckSymbolExists)
|
||||
|
||||
function(tuklib_progname TARGET_OR_ALL)
|
||||
# NOTE: This glibc extension requires _GNU_SOURCE.
|
||||
check_symbol_exists(program_invocation_name errno.h
|
||||
HAVE_PROGRAM_INVOCATION_NAME)
|
||||
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_PROGRAM_INVOCATION_NAME)
|
||||
endfunction()
|
869
configure.ac
869
configure.ac
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,9 @@
|
|||
## SPDX-License-Identifier: 0BSD
|
||||
##
|
||||
## Author: Lasse Collin
|
||||
##
|
||||
## This file has been put into the public domain.
|
||||
## You can do whatever you want with this file.
|
||||
##
|
||||
|
||||
EXTRA_DIST = \
|
||||
translation.bash
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file crc32.c
|
||||
|
@ -7,6 +5,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file full_flush.c
|
||||
|
@ -7,14 +5,15 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
#include "lzma.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define CHUNK 64
|
||||
|
||||
|
||||
static lzma_stream strm = LZMA_STREAM_INIT;
|
||||
static FILE *file_in;
|
||||
|
@ -23,6 +22,7 @@ static FILE *file_in;
|
|||
static void
|
||||
encode(size_t size, lzma_action action)
|
||||
{
|
||||
static const size_t CHUNK = 64;
|
||||
uint8_t in[CHUNK];
|
||||
uint8_t out[CHUNK];
|
||||
lzma_ret ret;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file hex2bin.c
|
||||
|
@ -7,6 +5,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file known_sizes.c
|
||||
|
@ -11,6 +9,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file memusage.c
|
||||
|
@ -7,6 +5,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file repeat.c
|
||||
|
@ -11,6 +9,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file sync_flush.c
|
||||
|
@ -7,14 +5,15 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "sysdefs.h"
|
||||
#include "lzma.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define CHUNK 64
|
||||
|
||||
|
||||
static lzma_stream strm = LZMA_STREAM_INIT;
|
||||
static FILE *file_in;
|
||||
|
@ -23,6 +22,7 @@ static FILE *file_in;
|
|||
static void
|
||||
encode(size_t size, lzma_action action)
|
||||
{
|
||||
static const size_t CHUNK = 64;
|
||||
uint8_t in[CHUNK];
|
||||
uint8_t out[CHUNK];
|
||||
lzma_ret ret;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
@ -21,6 +20,9 @@
|
|||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
set -e
|
||||
|
|
|
@ -25,7 +25,3 @@ List of examples
|
|||
a custom filter chain
|
||||
(x86 BCJ + LZMA2)
|
||||
|
||||
04_compress_easy_mt.c Multi-threaded multi-call
|
||||
compression using a compression
|
||||
preset
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file 01_compress_easy.c
|
||||
|
@ -11,6 +9,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdbool.h>
|
||||
|
@ -26,7 +27,7 @@ show_usage_and_exit(const char *argv0)
|
|||
{
|
||||
fprintf(stderr, "Usage: %s PRESET < INFILE > OUTFILE\n"
|
||||
"PRESET is a number 0-9 and can optionally be "
|
||||
"followed by 'e' to indicate extreme preset\n",
|
||||
"followed by `e' to indicate extreme preset\n",
|
||||
argv0);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
@ -172,7 +173,7 @@ compress(lzma_stream *strm, FILE *infile, FILE *outfile)
|
|||
lzma_ret ret = lzma_code(strm, action);
|
||||
|
||||
// If the output buffer is full or if the compression finished
|
||||
// successfully, write the data from the output buffer to
|
||||
// successfully, write the data from the output bufffer to
|
||||
// the output file.
|
||||
if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
|
||||
// When lzma_code() has returned LZMA_STREAM_END,
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file 02_decompress.c
|
||||
|
@ -11,6 +9,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdbool.h>
|
||||
|
@ -137,7 +138,7 @@ decompress(lzma_stream *strm, const char *inname, FILE *infile, FILE *outfile)
|
|||
// Once the end of the input file has been reached,
|
||||
// we need to tell lzma_code() that no more input
|
||||
// will be coming. As said before, this isn't required
|
||||
// if the LZMA_CONCATENATED flag isn't used when
|
||||
// if the LZMA_CONATENATED flag isn't used when
|
||||
// initializing the decoder.
|
||||
if (feof(infile))
|
||||
action = LZMA_FINISH;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file 03_compress_custom.c
|
||||
|
@ -11,6 +9,9 @@
|
|||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
// This file has been put into the public domain.
|
||||
// You can do whatever you want with this file.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdbool.h>
|
||||
|
@ -27,8 +28,8 @@ init_encoder(lzma_stream *strm)
|
|||
// Use the default preset (6) for LZMA2.
|
||||
//
|
||||
// The lzma_options_lzma structure and the lzma_lzma_preset() function
|
||||
// are declared in lzma/lzma12.h (src/liblzma/api/lzma/lzma12.h in the
|
||||
// source package or e.g. /usr/include/lzma/lzma12.h depending on
|
||||
// are declared in lzma/lzma.h (src/liblzma/api/lzma/lzma.h in the
|
||||
// source package or e.g. /usr/include/lzma/lzma.h depending on
|
||||
// the install prefix).
|
||||
lzma_options_lzma opt_lzma2;
|
||||
if (lzma_lzma_preset(&opt_lzma2, LZMA_PRESET_DEFAULT)) {
|
||||
|
@ -47,7 +48,7 @@ init_encoder(lzma_stream *strm)
|
|||
// Now we could customize the LZMA2 options if we wanted. For example,
|
||||
// we could set the the dictionary size (opt_lzma2.dict_size) to
|
||||
// something else than the default (8 MiB) of the default preset.
|
||||
// See lzma/lzma12.h for details of all LZMA2 options.
|
||||
// See lzma/lzma.h for details of all LZMA2 options.
|
||||
//
|
||||
// The x86 BCJ filter will try to modify the x86 instruction stream so
|
||||
// that LZMA2 can compress it better. The x86 BCJ filter doesn't need
|
||||
|
|
|
@ -1,205 +0,0 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file 04_compress_easy_mt.c
|
||||
/// \brief Compress in multi-call mode using LZMA2 in multi-threaded mode
|
||||
///
|
||||
/// Usage: ./04_compress_easy_mt < INFILE > OUTFILE
|
||||
///
|
||||
/// Example: ./04_compress_easy_mt < foo > foo.xz
|
||||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <lzma.h>
|
||||
|
||||
|
||||
static bool
|
||||
init_encoder(lzma_stream *strm)
|
||||
{
|
||||
// The threaded encoder takes the options as pointer to
|
||||
// a lzma_mt structure.
|
||||
lzma_mt mt = {
|
||||
// No flags are needed.
|
||||
.flags = 0,
|
||||
|
||||
// Let liblzma determine a sane block size.
|
||||
.block_size = 0,
|
||||
|
||||
// Use no timeout for lzma_code() calls by setting timeout
|
||||
// to zero. That is, sometimes lzma_code() might block for
|
||||
// a long time (from several seconds to even minutes).
|
||||
// If this is not OK, for example due to progress indicator
|
||||
// needing updates, specify a timeout in milliseconds here.
|
||||
// See the documentation of lzma_mt in lzma/container.h for
|
||||
// information how to choose a reasonable timeout.
|
||||
.timeout = 0,
|
||||
|
||||
// Use the default preset (6) for LZMA2.
|
||||
// To use a preset, filters must be set to NULL.
|
||||
.preset = LZMA_PRESET_DEFAULT,
|
||||
.filters = NULL,
|
||||
|
||||
// Use CRC64 for integrity checking. See also
|
||||
// 01_compress_easy.c about choosing the integrity check.
|
||||
.check = LZMA_CHECK_CRC64,
|
||||
};
|
||||
|
||||
// Detect how many threads the CPU supports.
|
||||
mt.threads = lzma_cputhreads();
|
||||
|
||||
// If the number of CPU cores/threads cannot be detected,
|
||||
// use one thread. Note that this isn't the same as the normal
|
||||
// single-threaded mode as this will still split the data into
|
||||
// blocks and use more RAM than the normal single-threaded mode.
|
||||
// You may want to consider using lzma_easy_encoder() or
|
||||
// lzma_stream_encoder() instead of lzma_stream_encoder_mt() if
|
||||
// lzma_cputhreads() returns 0 or 1.
|
||||
if (mt.threads == 0)
|
||||
mt.threads = 1;
|
||||
|
||||
// If the number of CPU cores/threads exceeds threads_max,
|
||||
// limit the number of threads to keep memory usage lower.
|
||||
// The number 8 is arbitrarily chosen and may be too low or
|
||||
// high depending on the compression preset and the computer
|
||||
// being used.
|
||||
//
|
||||
// FIXME: A better way could be to check the amount of RAM
|
||||
// (or available RAM) and use lzma_stream_encoder_mt_memusage()
|
||||
// to determine if the number of threads should be reduced.
|
||||
const uint32_t threads_max = 8;
|
||||
if (mt.threads > threads_max)
|
||||
mt.threads = threads_max;
|
||||
|
||||
// Initialize the threaded encoder.
|
||||
lzma_ret ret = lzma_stream_encoder_mt(strm, &mt);
|
||||
|
||||
if (ret == LZMA_OK)
|
||||
return true;
|
||||
|
||||
const char *msg;
|
||||
switch (ret) {
|
||||
case LZMA_MEM_ERROR:
|
||||
msg = "Memory allocation failed";
|
||||
break;
|
||||
|
||||
case LZMA_OPTIONS_ERROR:
|
||||
// We are no longer using a plain preset so this error
|
||||
// message has been edited accordingly compared to
|
||||
// 01_compress_easy.c.
|
||||
msg = "Specified filter chain is not supported";
|
||||
break;
|
||||
|
||||
case LZMA_UNSUPPORTED_CHECK:
|
||||
msg = "Specified integrity check is not supported";
|
||||
break;
|
||||
|
||||
default:
|
||||
msg = "Unknown error, possibly a bug";
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Error initializing the encoder: %s (error code %u)\n",
|
||||
msg, ret);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// This function is identical to the one in 01_compress_easy.c.
|
||||
static bool
|
||||
compress(lzma_stream *strm, FILE *infile, FILE *outfile)
|
||||
{
|
||||
lzma_action action = LZMA_RUN;
|
||||
|
||||
uint8_t inbuf[BUFSIZ];
|
||||
uint8_t outbuf[BUFSIZ];
|
||||
|
||||
strm->next_in = NULL;
|
||||
strm->avail_in = 0;
|
||||
strm->next_out = outbuf;
|
||||
strm->avail_out = sizeof(outbuf);
|
||||
|
||||
while (true) {
|
||||
if (strm->avail_in == 0 && !feof(infile)) {
|
||||
strm->next_in = inbuf;
|
||||
strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
|
||||
infile);
|
||||
|
||||
if (ferror(infile)) {
|
||||
fprintf(stderr, "Read error: %s\n",
|
||||
strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (feof(infile))
|
||||
action = LZMA_FINISH;
|
||||
}
|
||||
|
||||
lzma_ret ret = lzma_code(strm, action);
|
||||
|
||||
if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
|
||||
size_t write_size = sizeof(outbuf) - strm->avail_out;
|
||||
|
||||
if (fwrite(outbuf, 1, write_size, outfile)
|
||||
!= write_size) {
|
||||
fprintf(stderr, "Write error: %s\n",
|
||||
strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
strm->next_out = outbuf;
|
||||
strm->avail_out = sizeof(outbuf);
|
||||
}
|
||||
|
||||
if (ret != LZMA_OK) {
|
||||
if (ret == LZMA_STREAM_END)
|
||||
return true;
|
||||
|
||||
const char *msg;
|
||||
switch (ret) {
|
||||
case LZMA_MEM_ERROR:
|
||||
msg = "Memory allocation failed";
|
||||
break;
|
||||
|
||||
case LZMA_DATA_ERROR:
|
||||
msg = "File size limits exceeded";
|
||||
break;
|
||||
|
||||
default:
|
||||
msg = "Unknown error, possibly a bug";
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Encoder error: %s (error code %u)\n",
|
||||
msg, ret);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern int
|
||||
main(void)
|
||||
{
|
||||
lzma_stream strm = LZMA_STREAM_INIT;
|
||||
|
||||
bool success = init_encoder(&strm);
|
||||
if (success)
|
||||
success = compress(&strm, stdin, stdout);
|
||||
|
||||
lzma_end(&strm);
|
||||
|
||||
if (fclose(stdout)) {
|
||||
fprintf(stderr, "Write error: %s\n", strerror(errno));
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
|
@ -1,205 +0,0 @@
|
|||
// SPDX-License-Identifier: 0BSD
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/// \file 11_file_info.c
|
||||
/// \brief Get uncompressed size of .xz file(s)
|
||||
///
|
||||
/// Usage: ./11_file_info INFILE1.xz [INFILEn.xz]...
|
||||
///
|
||||
/// Example: ./11_file_info foo.xz
|
||||
//
|
||||
// Author: Lasse Collin
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <lzma.h>
|
||||
|
||||
|
||||
static bool
|
||||
print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
|
||||
{
|
||||
// Get the file size. In standard C it can be done by seeking to
|
||||
// the end of the file and then getting the file position.
|
||||
// In POSIX one can use fstat() and then st_size from struct stat.
|
||||
// Also note that fseek() and ftell() use long and thus don't support
|
||||
// large files on 32-bit systems (POSIX versions fseeko() and
|
||||
// ftello() can support large files).
|
||||
if (fseek(infile, 0, SEEK_END)) {
|
||||
fprintf(stderr, "Error seeking the file '%s': %s\n",
|
||||
filename, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
const long file_size = ftell(infile);
|
||||
|
||||
// The decoder wants to start from the beginning of the .xz file.
|
||||
rewind(infile);
|
||||
|
||||
// Initialize the decoder.
|
||||
lzma_index *i;
|
||||
lzma_ret ret = lzma_file_info_decoder(strm, &i, UINT64_MAX,
|
||||
(uint64_t)file_size);
|
||||
switch (ret) {
|
||||
case LZMA_OK:
|
||||
// Initialization succeeded.
|
||||
break;
|
||||
|
||||
case LZMA_MEM_ERROR:
|
||||
fprintf(stderr, "Out of memory when initializing "
|
||||
"the .xz file info decoder\n");
|
||||
return false;
|
||||
|
||||
case LZMA_PROG_ERROR:
|
||||
default:
|
||||
fprintf(stderr, "Unknown error, possibly a bug\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// This example program reuses the same lzma_stream structure
|
||||
// for multiple files, so we need to reset this when starting
|
||||
// a new file.
|
||||
strm->avail_in = 0;
|
||||
|
||||
// Buffer for input data.
|
||||
uint8_t inbuf[BUFSIZ];
|
||||
|
||||
// Pass data to the decoder and seek when needed.
|
||||
while (true) {
|
||||
if (strm->avail_in == 0) {
|
||||
strm->next_in = inbuf;
|
||||
strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
|
||||
infile);
|
||||
|
||||
if (ferror(infile)) {
|
||||
fprintf(stderr,
|
||||
"Error reading from '%s': %s\n",
|
||||
filename, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
// We don't need to care about hitting the end of
|
||||
// the file so no need to check for feof().
|
||||
}
|
||||
|
||||
ret = lzma_code(strm, LZMA_RUN);
|
||||
|
||||
switch (ret) {
|
||||
case LZMA_OK:
|
||||
break;
|
||||
|
||||
case LZMA_SEEK_NEEDED:
|
||||
// The cast is safe because liblzma won't ask us to
|
||||
// seek past the known size of the input file which
|
||||
// did fit into a long.
|
||||
//
|
||||
// NOTE: Remember to change these to off_t if you
|
||||
// switch fseeko() or lseek().
|
||||
if (fseek(infile, (long)(strm->seek_pos), SEEK_SET)) {
|
||||
fprintf(stderr, "Error seeking the "
|
||||
"file '%s': %s\n",
|
||||
filename, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
// The old data in the inbuf is useless now. Set
|
||||
// avail_in to zero so that we will read new input
|
||||
// from the new file position on the next iteration
|
||||
// of this loop.
|
||||
strm->avail_in = 0;
|
||||
break;
|
||||
|
||||
case LZMA_STREAM_END:
|
||||
// File information was successfully decoded.
|
||||
// See <lzma/index.h> for functions that can be
|
||||
// used on it. In this example we just print
|
||||
// the uncompressed size (in bytes) of
|
||||
// the .xz file followed by its file name.
|
||||
printf("%10" PRIu64 " %s\n",
|
||||
lzma_index_uncompressed_size(i),
|
||||
filename);
|
||||
|
||||
// Free the memory of the lzma_index structure.
|
||||
lzma_index_end(i, NULL);
|
||||
|
||||
return true;
|
||||
|
||||
case LZMA_FORMAT_ERROR:
|
||||
// .xz magic bytes weren't found.
|
||||
fprintf(stderr, "The file '%s' is not "
|
||||
"in the .xz format\n", filename);
|
||||
return false;
|
||||
|
||||
case LZMA_OPTIONS_ERROR:
|
||||
fprintf(stderr, "The file '%s' has .xz headers that "
|
||||
"are not supported by this liblzma "
|
||||
"version\n", filename);
|
||||
return false;
|
||||
|
||||
case LZMA_DATA_ERROR:
|
||||
fprintf(stderr, "The file '%s' is corrupt\n",
|
||||
filename);
|
||||
return false;
|
||||
|
||||
case LZMA_MEM_ERROR:
|
||||
fprintf(stderr, "Memory allocation failed when "
|
||||
"decoding the file '%s'\n", filename);
|
||||
return false;
|
||||
|
||||
// LZMA_MEMLIMIT_ERROR shouldn't happen because we used
|
||||
// UINT64_MAX as the limit.
|
||||
//
|
||||
// LZMA_BUF_ERROR shouldn't happen because we always provide
|
||||
// new input when the input buffer is empty. The decoder
|
||||
// knows the input file size and thus won't try to read past
|
||||
// the end of the file.
|
||||
case LZMA_MEMLIMIT_ERROR:
|
||||
case LZMA_BUF_ERROR:
|
||||
case LZMA_PROG_ERROR:
|
||||
default:
|
||||
fprintf(stderr, "Unknown error, possibly a bug\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// This line is never reached.
|
||||
}
|
||||
|
||||
|
||||
extern int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
bool success = true;
|
||||
lzma_stream strm = LZMA_STREAM_INIT;
|
||||
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
FILE *infile = fopen(argv[i], "rb");
|
||||
|
||||
if (infile == NULL) {
|
||||
fprintf(stderr, "Cannot open the file '%s': %s\n",
|
||||
argv[i], strerror(errno));
|
||||
success = false;
|
||||
}
|
||||
|
||||
success &= print_file_size(&strm, infile, argv[i]);
|
||||
|
||||
(void)fclose(infile);
|
||||
}
|
||||
|
||||
lzma_end(&strm);
|
||||
|
||||
// Close stdout to catch possible write errors that can occur
|
||||
// when pending data is flushed from the stdio buffers.
|
||||
if (fclose(stdout)) {
|
||||
fprintf(stderr, "Write error: %s\n", strerror(errno));
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
CC = c99
|
||||
CFLAGS = -g
|
||||
|
@ -8,9 +12,7 @@ LDFLAGS = -llzma
|
|||
PROGS = \
|
||||
01_compress_easy \
|
||||
02_decompress \
|
||||
03_compress_custom \
|
||||
04_compress_easy_mt \
|
||||
11_file_info
|
||||
03_compress_custom
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
|
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* xz_pipe_comp.c
|
||||
* A simple example of pipe-only xz compressor implementation.
|
||||
* version: 2010-07-12 - by Daniel Mealha Cabrita
|
||||
* Not copyrighted -- provided to the public domain.
|
||||
*
|
||||
* Compiling:
|
||||
* Link with liblzma. GCC example:
|
||||
* $ gcc -llzma xz_pipe_comp.c -o xz_pipe_comp
|
||||
*
|
||||
* Usage example:
|
||||
* $ cat some_file | ./xz_pipe_comp > some_file.xz
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
#include <lzma.h>
|
||||
|
||||
|
||||
/* COMPRESSION SETTINGS */
|
||||
|
||||
/* analogous to xz CLI options: -0 to -9 */
|
||||
#define COMPRESSION_LEVEL 6
|
||||
|
||||
/* boolean setting, analogous to xz CLI option: -e */
|
||||
#define COMPRESSION_EXTREME true
|
||||
|
||||
/* see: /usr/include/lzma/check.h LZMA_CHECK_* */
|
||||
#define INTEGRITY_CHECK LZMA_CHECK_CRC64
|
||||
|
||||
|
||||
/* read/write buffer sizes */
|
||||
#define IN_BUF_MAX 4096
|
||||
#define OUT_BUF_MAX 4096
|
||||
|
||||
/* error codes */
|
||||
#define RET_OK 0
|
||||
#define RET_ERROR_INIT 1
|
||||
#define RET_ERROR_INPUT 2
|
||||
#define RET_ERROR_OUTPUT 3
|
||||
#define RET_ERROR_COMPRESSION 4
|
||||
|
||||
|
||||
/* note: in_file and out_file must be open already */
|
||||
int xz_compress (FILE *in_file, FILE *out_file)
|
||||
{
|
||||
uint32_t preset = COMPRESSION_LEVEL | (COMPRESSION_EXTREME ? LZMA_PRESET_EXTREME : 0);
|
||||
lzma_check check = INTEGRITY_CHECK;
|
||||
lzma_stream strm = LZMA_STREAM_INIT; /* alloc and init lzma_stream struct */
|
||||
uint8_t in_buf [IN_BUF_MAX];
|
||||
uint8_t out_buf [OUT_BUF_MAX];
|
||||
size_t in_len; /* length of useful data in in_buf */
|
||||
size_t out_len; /* length of useful data in out_buf */
|
||||
bool in_finished = false;
|
||||
bool out_finished = false;
|
||||
lzma_action action;
|
||||
lzma_ret ret_xz;
|
||||
int ret;
|
||||
|
||||
ret = RET_OK;
|
||||
|
||||
/* initialize xz encoder */
|
||||
ret_xz = lzma_easy_encoder (&strm, preset, check);
|
||||
if (ret_xz != LZMA_OK) {
|
||||
fprintf (stderr, "lzma_easy_encoder error: %d\n", (int) ret_xz);
|
||||
return RET_ERROR_INIT;
|
||||
}
|
||||
|
||||
while ((! in_finished) && (! out_finished)) {
|
||||
/* read incoming data */
|
||||
in_len = fread (in_buf, 1, IN_BUF_MAX, in_file);
|
||||
|
||||
if (feof (in_file)) {
|
||||
in_finished = true;
|
||||
}
|
||||
if (ferror (in_file)) {
|
||||
in_finished = true;
|
||||
ret = RET_ERROR_INPUT;
|
||||
}
|
||||
|
||||
strm.next_in = in_buf;
|
||||
strm.avail_in = in_len;
|
||||
|
||||
/* if no more data from in_buf, flushes the
|
||||
internal xz buffers and closes the xz data
|
||||
with LZMA_FINISH */
|
||||
action = in_finished ? LZMA_FINISH : LZMA_RUN;
|
||||
|
||||
/* loop until there's no pending compressed output */
|
||||
do {
|
||||
/* out_buf is clean at this point */
|
||||
strm.next_out = out_buf;
|
||||
strm.avail_out = OUT_BUF_MAX;
|
||||
|
||||
/* compress data */
|
||||
ret_xz = lzma_code (&strm, action);
|
||||
|
||||
if ((ret_xz != LZMA_OK) && (ret_xz != LZMA_STREAM_END)) {
|
||||
fprintf (stderr, "lzma_code error: %d\n", (int) ret_xz);
|
||||
out_finished = true;
|
||||
ret = RET_ERROR_COMPRESSION;
|
||||
} else {
|
||||
/* write compressed data */
|
||||
out_len = OUT_BUF_MAX - strm.avail_out;
|
||||
fwrite (out_buf, 1, out_len, out_file);
|
||||
if (ferror (out_file)) {
|
||||
out_finished = true;
|
||||
ret = RET_ERROR_OUTPUT;
|
||||
}
|
||||
}
|
||||
} while (strm.avail_out == 0);
|
||||
}
|
||||
|
||||
lzma_end (&strm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = xz_compress (stdin, stdout);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* xz_pipe_decomp.c
|
||||
* A simple example of pipe-only xz decompressor implementation.
|
||||
* version: 2012-06-14 - by Daniel Mealha Cabrita
|
||||
* Not copyrighted -- provided to the public domain.
|
||||
*
|
||||
* Compiling:
|
||||
* Link with liblzma. GCC example:
|
||||
* $ gcc -llzma xz_pipe_decomp.c -o xz_pipe_decomp
|
||||
*
|
||||
* Usage example:
|
||||
* $ cat some_file.xz | ./xz_pipe_decomp > some_file
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
#include <lzma.h>
|
||||
|
||||
|
||||
/* read/write buffer sizes */
|
||||
#define IN_BUF_MAX 4096
|
||||
#define OUT_BUF_MAX 4096
|
||||
|
||||
/* error codes */
|
||||
#define RET_OK 0
|
||||
#define RET_ERROR_INIT 1
|
||||
#define RET_ERROR_INPUT 2
|
||||
#define RET_ERROR_OUTPUT 3
|
||||
#define RET_ERROR_DECOMPRESSION 4
|
||||
|
||||
|
||||
/* note: in_file and out_file must be open already */
|
||||
int xz_decompress (FILE *in_file, FILE *out_file)
|
||||
{
|
||||
lzma_stream strm = LZMA_STREAM_INIT; /* alloc and init lzma_stream struct */
|
||||
const uint32_t flags = LZMA_TELL_UNSUPPORTED_CHECK | LZMA_CONCATENATED;
|
||||
const uint64_t memory_limit = UINT64_MAX; /* no memory limit */
|
||||
uint8_t in_buf [IN_BUF_MAX];
|
||||
uint8_t out_buf [OUT_BUF_MAX];
|
||||
size_t in_len; /* length of useful data in in_buf */
|
||||
size_t out_len; /* length of useful data in out_buf */
|
||||
bool in_finished = false;
|
||||
bool out_finished = false;
|
||||
lzma_action action;
|
||||
lzma_ret ret_xz;
|
||||
int ret;
|
||||
|
||||
ret = RET_OK;
|
||||
|
||||
/* initialize xz decoder */
|
||||
ret_xz = lzma_stream_decoder (&strm, memory_limit, flags);
|
||||
if (ret_xz != LZMA_OK) {
|
||||
fprintf (stderr, "lzma_stream_decoder error: %d\n", (int) ret_xz);
|
||||
return RET_ERROR_INIT;
|
||||
}
|
||||
|
||||
while ((! in_finished) && (! out_finished)) {
|
||||
/* read incoming data */
|
||||
in_len = fread (in_buf, 1, IN_BUF_MAX, in_file);
|
||||
|
||||
if (feof (in_file)) {
|
||||
in_finished = true;
|
||||
}
|
||||
if (ferror (in_file)) {
|
||||
in_finished = true;
|
||||
ret = RET_ERROR_INPUT;
|
||||
}
|
||||
|
||||
strm.next_in = in_buf;
|
||||
strm.avail_in = in_len;
|
||||
|
||||
/* if no more data from in_buf, flushes the
|
||||
internal xz buffers and closes the decompressed data
|
||||
with LZMA_FINISH */
|
||||
action = in_finished ? LZMA_FINISH : LZMA_RUN;
|
||||
|
||||
/* loop until there's no pending decompressed output */
|
||||
do {
|
||||
/* out_buf is clean at this point */
|
||||
strm.next_out = out_buf;
|
||||
strm.avail_out = OUT_BUF_MAX;
|
||||
|
||||
/* decompress data */
|
||||
ret_xz = lzma_code (&strm, action);
|
||||
|
||||
if ((ret_xz != LZMA_OK) && (ret_xz != LZMA_STREAM_END)) {
|
||||
fprintf (stderr, "lzma_code error: %d\n", (int) ret_xz);
|
||||
out_finished = true;
|
||||
ret = RET_ERROR_DECOMPRESSION;
|
||||
} else {
|
||||
/* write decompressed data */
|
||||
out_len = OUT_BUF_MAX - strm.avail_out;
|
||||
fwrite (out_buf, 1, out_len, out_file);
|
||||
if (ferror (out_file)) {
|
||||
out_finished = true;
|
||||
ret = RET_ERROR_OUTPUT;
|
||||
}
|
||||
}
|
||||
} while (strm.avail_out == 0);
|
||||
}
|
||||
|
||||
/* Bug fix (2012-06-14): If no errors were detected, check
|
||||
that the last lzma_code() call returned LZMA_STREAM_END.
|
||||
If not, the file is probably truncated. */
|
||||
if ((ret == RET_OK) && (ret_xz != LZMA_STREAM_END)) {
|
||||
fprintf (stderr, "Input truncated or corrupt\n");
|
||||
ret = RET_ERROR_DECOMPRESSION;
|
||||
}
|
||||
|
||||
lzma_end (&strm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = xz_decompress (stdin, stdout);
|
||||
return ret;
|
||||
}
|
||||
|
68
doc/faq.txt
68
doc/faq.txt
|
@ -33,7 +33,7 @@ A: 7-Zip and LZMA SDK are the original projects. LZMA SDK is roughly
|
|||
LZMA Utils.
|
||||
|
||||
There are several other projects using LZMA. Most are more or less
|
||||
based on LZMA SDK. See <https://7-zip.org/links.html>.
|
||||
based on LZMA SDK. See <http://7-zip.org/links.html>.
|
||||
|
||||
|
||||
Q: Why is liblzma named liblzma if its primary file format is .xz?
|
||||
|
@ -115,6 +115,7 @@ Q: I cannot find BCJ and BCJ2 filters. Don't they exist in liblzma?
|
|||
|
||||
A: BCJ filter is called "x86" in liblzma. BCJ2 is not included,
|
||||
because it requires using more than one encoded output stream.
|
||||
A streamable version of BCJ2-style filtering is planned.
|
||||
|
||||
|
||||
Q: I need to use a script that runs "xz -9". On a system with 256 MiB
|
||||
|
@ -153,15 +154,19 @@ A: See the documentation in XZ Embedded. In short, something like
|
|||
dictionary doesn't increase memory usage.
|
||||
|
||||
|
||||
Q: How is multi-threaded compression implemented in XZ Utils?
|
||||
Q: Will xz support threaded compression?
|
||||
|
||||
A: The simplest method is splitting the uncompressed data into blocks
|
||||
A: It is planned and has been taken into account when designing
|
||||
the .xz file format. Eventually there will probably be three types
|
||||
of threading, each method having its own advantages and disadvantages.
|
||||
|
||||
The simplest method is splitting the uncompressed data into blocks
|
||||
and compressing them in parallel independent from each other.
|
||||
This is currently the only threading method supported in XZ Utils.
|
||||
Since the blocks are compressed independently, they can also be
|
||||
decompressed independently. Together with the index feature in .xz,
|
||||
this allows using threads to create .xz files for random-access
|
||||
reading. This also makes threaded decompression possible.
|
||||
reading. This also makes threaded decompression possible, although
|
||||
it is not clear if threaded decompression will ever be implemented.
|
||||
|
||||
The independent blocks method has a couple of disadvantages too. It
|
||||
will compress worse than a single-block method. Often the difference
|
||||
|
@ -169,17 +174,15 @@ A: The simplest method is splitting the uncompressed data into blocks
|
|||
the memory usage of the compressor increases linearly when adding
|
||||
threads.
|
||||
|
||||
At least two other threading methods are possible but these haven't
|
||||
been implemented in XZ Utils:
|
||||
|
||||
Match finder parallelization has been in 7-Zip for ages. It doesn't
|
||||
affect compression ratio or memory usage significantly. Among the
|
||||
three threading methods, only this is useful when compressing small
|
||||
files (files that are not significantly bigger than the dictionary).
|
||||
Unfortunately this method scales only to about two CPU cores.
|
||||
Match finder parallelization is another threading method. It has
|
||||
been in 7-Zip for ages. It doesn't affect compression ratio or
|
||||
memory usage significantly. Among the three threading methods, only
|
||||
this is useful when compressing small files (files that are not
|
||||
significantly bigger than the dictionary). Unfortunately this method
|
||||
scales only to about two CPU cores.
|
||||
|
||||
The third method is pigz-style threading (I use that name, because
|
||||
pigz <https://www.zlib.net/pigz/> uses that method). It doesn't
|
||||
pigz <http://www.zlib.net/pigz/> uses that method). It doesn't
|
||||
affect compression ratio significantly and scales to many cores.
|
||||
The memory usage scales linearly when threads are added. This isn't
|
||||
significant with pigz, because Deflate uses only a 32 KiB dictionary,
|
||||
|
@ -190,35 +193,12 @@ A: The simplest method is splitting the uncompressed data into blocks
|
|||
cores the overhead is not a big deal anymore.
|
||||
|
||||
Combining the threading methods will be possible and also useful.
|
||||
For example, combining match finder parallelization with pigz-style
|
||||
threading or independent-blocks-threading can cut the memory usage
|
||||
by 50 %.
|
||||
E.g. combining match finder parallelization with pigz-style threading
|
||||
can cut the memory usage by 50 %.
|
||||
|
||||
|
||||
Q: I told xz to use many threads but it is using only one or two
|
||||
processor cores. What is wrong?
|
||||
|
||||
A: Since multi-threaded compression is done by splitting the data into
|
||||
blocks that are compressed individually, if the input file is too
|
||||
small for the block size, then many threads cannot be used. The
|
||||
default block size increases when the compression level is
|
||||
increased. For example, xz -6 uses 8 MiB LZMA2 dictionary and
|
||||
24 MiB blocks, and xz -9 uses 64 MiB LZMA dictionary and 192 MiB
|
||||
blocks. If the input file is 100 MiB, xz -6 can use five threads
|
||||
of which one will finish quickly as it has only 4 MiB to compress.
|
||||
However, for the same file, xz -9 can only use one thread.
|
||||
|
||||
One can adjust block size with --block-size=SIZE but making the
|
||||
block size smaller than LZMA2 dictionary is waste of RAM: using
|
||||
xz -9 with 6 MiB blocks isn't any better than using xz -6 with
|
||||
6 MiB blocks. The default settings use a block size bigger than
|
||||
the LZMA2 dictionary size because this was seen as a reasonable
|
||||
compromise between RAM usage and compression ratio.
|
||||
|
||||
When decompressing, the ability to use threads depends on how the
|
||||
file was created. If it was created in multi-threaded mode then
|
||||
it can be decompressed in multi-threaded mode too if there are
|
||||
multiple blocks in the file.
|
||||
It is possible that the single-threaded method will be modified to
|
||||
create files identical to the pigz-style method. We'll see once
|
||||
pigz-style threading has been implemented in liblzma.
|
||||
|
||||
|
||||
Q: How do I build a program that needs liblzmadec (lzmadec.h)?
|
||||
|
@ -226,7 +206,7 @@ Q: How do I build a program that needs liblzmadec (lzmadec.h)?
|
|||
A: liblzmadec is part of LZMA Utils. XZ Utils has liblzma, but no
|
||||
liblzmadec. The code using liblzmadec should be ported to use
|
||||
liblzma instead. If you cannot or don't want to do that, download
|
||||
LZMA Utils from <https://tukaani.org/lzma/>.
|
||||
LZMA Utils from <http://tukaani.org/lzma/>.
|
||||
|
||||
|
||||
Q: The default build of liblzma is too big. How can I make it smaller?
|
||||
|
@ -240,5 +220,5 @@ A: Give --enable-small to the configure script. Use also appropriate
|
|||
If the result is still too big, take a look at XZ Embedded. It is
|
||||
a separate project, which provides a limited but significantly
|
||||
smaller XZ decoder implementation than XZ Utils. You can find it
|
||||
at <https://xz.tukaani.org/xz-embedded/>.
|
||||
at <http://tukaani.org/xz/embedded.html>.
|
||||
|
||||
|
|
|
@ -40,11 +40,7 @@ The .lzma File Format
|
|||
|
||||
0.2. Changes
|
||||
|
||||
Last modified: 2024-01-16 18:00+0800
|
||||
|
||||
Compared to the previous version (2022-07-13 21:00+0300)
|
||||
the section 2 was modified to change links from http to
|
||||
https and to update XZ links.
|
||||
Last modified: 2011-04-12 11:55+0300
|
||||
|
||||
|
||||
1. File Format
|
||||
|
@ -133,10 +129,7 @@ The .lzma File Format
|
|||
Uncompressed Size is stored as unsigned 64-bit little endian
|
||||
integer. A special value of 0xFFFF_FFFF_FFFF_FFFF indicates
|
||||
that Uncompressed Size is unknown. End of Payload Marker (*)
|
||||
is used if Uncompressed Size is unknown. End of Payload Marker
|
||||
is allowed but rarely used if Uncompressed Size is known.
|
||||
XZ Utils 5.2.5 and older don't support .lzma files that have
|
||||
End of Payload Marker together with a known Uncompressed Size.
|
||||
is used if and only if Uncompressed Size is unknown.
|
||||
|
||||
XZ Utils rejects files whose Uncompressed Size field specifies
|
||||
a known size that is 256 GiB or more. This is to reject false
|
||||
|
@ -157,17 +150,17 @@ The .lzma File Format
|
|||
2. References
|
||||
|
||||
LZMA SDK - The original LZMA implementation
|
||||
https://7-zip.org/sdk.html
|
||||
http://7-zip.org/sdk.html
|
||||
|
||||
7-Zip
|
||||
https://7-zip.org/
|
||||
http://7-zip.org/
|
||||
|
||||
LZMA Utils - LZMA adapted to POSIX-like systems
|
||||
https://tukaani.org/lzma/
|
||||
http://tukaani.org/lzma/
|
||||
|
||||
XZ Utils - The next generation of LZMA Utils
|
||||
https://xz.tukaani.org/xz-utils/
|
||||
http://tukaani.org/xz/
|
||||
|
||||
The .xz file format - The successor of the .lzma format
|
||||
https://xz.tukaani.org/format/xz-file-format.txt
|
||||
http://tukaani.org/xz/xz-file-format.txt
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
The .xz File Format
|
||||
===================
|
||||
|
||||
Version 1.2.0 (2024-01-19)
|
||||
Version 1.0.4 (2009-08-27)
|
||||
|
||||
|
||||
0. Preface
|
||||
|
@ -81,26 +81,18 @@ Version 1.2.0 (2024-01-19)
|
|||
0.2. Getting the Latest Version
|
||||
|
||||
The latest official version of this document can be downloaded
|
||||
from <https://xz.tukaani.org/format/xz-file-format.txt>.
|
||||
from <http://tukaani.org/xz/xz-file-format.txt>.
|
||||
|
||||
Specific versions of this document have a filename
|
||||
xz-file-format-X.Y.Z.txt where X.Y.Z is the version number.
|
||||
For example, the version 1.0.0 of this document is available
|
||||
at <https://xz.tukaani.org/format/xz-file-format-1.0.0.txt>.
|
||||
at <http://tukaani.org/xz/xz-file-format-1.0.0.txt>.
|
||||
|
||||
|
||||
0.3. Version History
|
||||
|
||||
Version Date Description
|
||||
|
||||
1.2.0 2024-01-19 Added RISC-V filter and updated URLs in
|
||||
Sections 0.2 and 7. The URL of this
|
||||
specification was changed.
|
||||
|
||||
1.1.0 2022-12-11 Added ARM64 filter and clarified 32-bit
|
||||
ARM endianness in Section 5.3.2,
|
||||
language improvements in Section 5.4
|
||||
|
||||
1.0.4 2009-08-27 Language improvements in Sections 1.2,
|
||||
2.1.1.2, 3.1.1, 3.1.2, and 5.3.1
|
||||
|
||||
|
@ -923,21 +915,9 @@ Version 1.2.0 (2024-01-19)
|
|||
0x04 1 byte x86 filter (BCJ)
|
||||
0x05 4 bytes PowerPC (big endian) filter
|
||||
0x06 16 bytes IA64 filter
|
||||
0x07 4 bytes ARM filter [1]
|
||||
0x08 2 bytes ARM Thumb filter [1]
|
||||
0x07 4 bytes ARM (little endian) filter
|
||||
0x08 2 bytes ARM Thumb (little endian) filter
|
||||
0x09 4 bytes SPARC filter
|
||||
0x0A 4 bytes ARM64 filter [2]
|
||||
0x0B 2 bytes RISC-V filter
|
||||
|
||||
[1] These are for little endian instruction encoding.
|
||||
This must not be confused with data endianness.
|
||||
A processor configured for big endian data access
|
||||
may still use little endian instruction encoding.
|
||||
The filters don't care about the data endianness.
|
||||
|
||||
[2] 4096-byte alignment gives the best results
|
||||
because the address in the ADRP instruction
|
||||
is a multiple of 4096 bytes.
|
||||
|
||||
If the size of Filter Properties is four bytes, the Filter
|
||||
Properties field contains the start offset used for address
|
||||
|
@ -1007,12 +987,12 @@ Version 1.2.0 (2024-01-19)
|
|||
|
||||
5.4. Custom Filter IDs
|
||||
|
||||
If a developer wants to use custom Filter IDs, there are two
|
||||
If a developer wants to use custom Filter IDs, he has two
|
||||
choices. The first choice is to contact Lasse Collin and ask
|
||||
him to allocate a range of IDs for the developer.
|
||||
|
||||
The second choice is to generate a 40-bit random integer
|
||||
which the developer can use as a personal Developer ID.
|
||||
The second choice is to generate a 40-bit random integer,
|
||||
which the developer can use as his personal Developer ID.
|
||||
To minimize the risk of collisions, Developer ID has to be
|
||||
a randomly generated integer, not manually selected "hex word".
|
||||
The following command, which works on many free operating
|
||||
|
@ -1020,7 +1000,7 @@ Version 1.2.0 (2024-01-19)
|
|||
|
||||
dd if=/dev/urandom bs=5 count=1 | hexdump
|
||||
|
||||
The developer can then use the Developer ID to create unique
|
||||
The developer can then use his Developer ID to create unique
|
||||
(well, hopefully unique) Filter IDs.
|
||||
|
||||
Bits Mask Description
|
||||
|
@ -1141,30 +1121,30 @@ Version 1.2.0 (2024-01-19)
|
|||
7. References
|
||||
|
||||
LZMA SDK - The original LZMA implementation
|
||||
https://7-zip.org/sdk.html
|
||||
http://7-zip.org/sdk.html
|
||||
|
||||
LZMA Utils - LZMA adapted to POSIX-like systems
|
||||
https://tukaani.org/lzma/
|
||||
http://tukaani.org/lzma/
|
||||
|
||||
XZ Utils - The next generation of LZMA Utils
|
||||
https://xz.tukaani.org/xz-utils/
|
||||
http://tukaani.org/xz/
|
||||
|
||||
[RFC-1952]
|
||||
GZIP file format specification version 4.3
|
||||
https://www.ietf.org/rfc/rfc1952.txt
|
||||
http://www.ietf.org/rfc/rfc1952.txt
|
||||
- Notation of byte boxes in section "2.1. Overall conventions"
|
||||
|
||||
[RFC-2119]
|
||||
Key words for use in RFCs to Indicate Requirement Levels
|
||||
https://www.ietf.org/rfc/rfc2119.txt
|
||||
http://www.ietf.org/rfc/rfc2119.txt
|
||||
|
||||
[GNU-tar]
|
||||
GNU tar 1.35 manual
|
||||
https://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
|
||||
GNU tar 1.21 manual
|
||||
http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
|
||||
- Node 9.4.2 "Blocking Factor", paragraph that begins
|
||||
"gzip will complain about trailing garbage"
|
||||
- Note that this URL points to the latest version of the
|
||||
manual, and may some day not contain the note which is in
|
||||
1.35. For the exact version of the manual, download GNU
|
||||
tar 1.35: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.35.tar.gz
|
||||
1.21. For the exact version of the manual, download GNU
|
||||
tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz
|
||||
|
||||
|
|
BIN
doc/xz-logo.png
BIN
doc/xz-logo.png
Binary file not shown.
Before Width: | Height: | Size: 6.6 KiB |
|
@ -1,78 +0,0 @@
|
|||
|
||||
Building XZ Utils for DOS
|
||||
=========================
|
||||
|
||||
Introduction
|
||||
|
||||
This document explains how to build XZ Utils for DOS using DJGPP.
|
||||
The resulting binaries should run at least on various DOS versions
|
||||
and under Windows 95/98/98SE/ME.
|
||||
|
||||
This is somewhat experimental and has got very little testing.
|
||||
|
||||
Note: Makefile and config.h are updated only now and then. This
|
||||
means that if you checked out a development version, building for
|
||||
DOS might not work without updating Makefile and config.h first.
|
||||
|
||||
|
||||
Getting and Installing DJGPP
|
||||
|
||||
You may use <https://www.delorie.com/djgpp/zip-picker.html> to help
|
||||
deciding what to download. If you are only interested in building
|
||||
XZ Utils, the zip-picker may list files that you don't strictly
|
||||
need. However, using the zip-picker can still be worth it to get a
|
||||
nice short summary of installation instructions (they can be found
|
||||
from readme.1st too).
|
||||
|
||||
For a more manual method, first select a mirror from
|
||||
<https://www.delorie.com/djgpp/getting.html> and go the
|
||||
subdirectory named "current". You need the following files:
|
||||
|
||||
unzip32.exe (if you don't already have a LFN-capable unzipper)
|
||||
v2/djdev205.zip
|
||||
v2gnu/bnu234b.zip
|
||||
v2gnu/gcc920b.zip
|
||||
v2gnu/mak43b.zip
|
||||
v2misc/csdpmi7b.zip
|
||||
|
||||
If newer versions are available, probably you should try them first.
|
||||
Note that versions older than djdev205.zip aren't supported. Also
|
||||
note that you want csdpmi7b.zip even if you run under Windows or
|
||||
DOSEMU because the XZ Utils Makefile will embed cwsdstub.exe to
|
||||
the resulting xz.exe.
|
||||
|
||||
See the instructions in readme.1st found from djdev205.zip. Here's
|
||||
a short summary, but you should still read readme.1st.
|
||||
|
||||
C:\> mkdir DJGPP
|
||||
C:\> cd DJGPP
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\djdev205.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\bnu234b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\gcc920b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\mak43b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\csdpmi7b.zip
|
||||
|
||||
C:\DJGPP> set PATH=C:\DJGPP\BIN;%PATH%
|
||||
C:\DJGPP> set DJGPP=C:\DJGPP\DJGPP.ENV
|
||||
|
||||
You may want to add the last two lines into AUTOEXEC.BAT or have,
|
||||
for example, DJGPP.BAT which you can run before using DJGPP.
|
||||
|
||||
Make sure you use completely upper case path in the DJGPP environment
|
||||
variable. This is not required by DJGPP, but the XZ Utils Makefile is
|
||||
a bit stupid and expects that everything in DJGPP environment variable
|
||||
is uppercase.
|
||||
|
||||
|
||||
Building
|
||||
|
||||
You need to have an environment that supports long filenames (LFN).
|
||||
Once you have built XZ Utils, the resulting binaries can be run
|
||||
without long filename support.
|
||||
|
||||
Run "make" in this directory (the directory containing this
|
||||
INSTALL.txt). You should get xz.exe (and a bunch of temporary files).
|
||||
Other tools are not built. Having e.g. xzdec.exe doesn't save much
|
||||
space compared to xz.exe because the DJGPP runtime makes the .exe
|
||||
quite big anyway.
|
||||
|
14
dos/Makefile
14
dos/Makefile
|
@ -1,11 +1,12 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Makefile to build XZ Utils using DJGPP
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
# For debugging, set comment "#define NDEBUG 1" from config.h to enable
|
||||
|
@ -17,7 +18,9 @@ CPPFLAGS =
|
|||
CFLAGS = -g -Wall -Wextra -Wfatal-errors -march=i386 -mtune=i686 -O2
|
||||
LDFLAGS = -lemu
|
||||
|
||||
ALL_CFLAGS = -std=gnu99
|
||||
# NOTE: -fgnu89-inline is needed on DJGPP 2.04 beta and GCC >= 4.3.0
|
||||
# because time.h uses GNU-style "extern inline".
|
||||
ALL_CFLAGS = -std=gnu99 -fgnu89-inline
|
||||
|
||||
ALL_CPPFLAGS = \
|
||||
-I. \
|
||||
|
@ -61,7 +64,6 @@ SRCS_C = \
|
|||
../src/liblzma/common/block_header_encoder.c \
|
||||
../src/liblzma/common/block_util.c \
|
||||
../src/liblzma/common/common.c \
|
||||
../src/liblzma/common/file_info.c \
|
||||
../src/liblzma/common/filter_common.c \
|
||||
../src/liblzma/common/filter_decoder.c \
|
||||
../src/liblzma/common/filter_encoder.c \
|
||||
|
@ -72,13 +74,11 @@ SRCS_C = \
|
|||
../src/liblzma/common/index_decoder.c \
|
||||
../src/liblzma/common/index_encoder.c \
|
||||
../src/liblzma/common/index_hash.c \
|
||||
../src/liblzma/common/lzip_decoder.c \
|
||||
../src/liblzma/common/stream_decoder.c \
|
||||
../src/liblzma/common/stream_encoder.c \
|
||||
../src/liblzma/common/stream_flags_common.c \
|
||||
../src/liblzma/common/stream_flags_decoder.c \
|
||||
../src/liblzma/common/stream_flags_encoder.c \
|
||||
../src/liblzma/common/string_conversion.c \
|
||||
../src/liblzma/common/vli_decoder.c \
|
||||
../src/liblzma/common/vli_encoder.c \
|
||||
../src/liblzma/common/vli_size.c \
|
||||
|
@ -98,7 +98,6 @@ SRCS_C = \
|
|||
../src/liblzma/lzma/lzma_encoder_presets.c \
|
||||
../src/liblzma/rangecoder/price_table.c \
|
||||
../src/liblzma/simple/arm.c \
|
||||
../src/liblzma/simple/arm64.c \
|
||||
../src/liblzma/simple/armthumb.c \
|
||||
../src/liblzma/simple/ia64.c \
|
||||
../src/liblzma/simple/powerpc.c \
|
||||
|
@ -114,7 +113,6 @@ SRCS_C = \
|
|||
../src/xz/list.c \
|
||||
../src/xz/main.c \
|
||||
../src/xz/message.c \
|
||||
../src/xz/mytime.c \
|
||||
../src/xz/options.c \
|
||||
../src/xz/signals.c \
|
||||
../src/xz/suffix.c \
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
|
||||
XZ Utils on DOS
|
||||
===============
|
||||
|
||||
Introduction
|
||||
|
||||
This document explains how to build XZ Utils for DOS using DJGPP.
|
||||
The resulting binaries should run at least on various DOS versions
|
||||
and under Windows 95/98/98SE/ME, although the Windows version of
|
||||
XZ Utils is recommended under Windows 95 and later.
|
||||
|
||||
This is currently experimental and has got very little testing.
|
||||
|
||||
Note: Makefile and config.h are updated only now and then. This
|
||||
means that especially if you checked out a development version,
|
||||
building for DOS probably won't work without updating Makefile
|
||||
and config.h first.
|
||||
|
||||
|
||||
Getting and Installing DJGPP
|
||||
|
||||
You may use <http://www.delorie.com/djgpp/zip-picker.html> to help
|
||||
deciding what to download, but as of writing (2010-10-09) that may
|
||||
not be the most convenient way taking into account what components
|
||||
are actually required to build XZ Utils. However, using the
|
||||
zip-picker can still be worth doing to get nice short summary of
|
||||
installation instructions (they can be found from readme.1st too).
|
||||
|
||||
For a more manual method, first select a mirror from
|
||||
<http://www.delorie.com/djgpp/getting.html>. You need
|
||||
the following files:
|
||||
|
||||
unzip32.exe (if you don't already have a LFN-capable unzipper)
|
||||
beta/v2/djdev204.zip
|
||||
v2gnu/bnu219b.zip
|
||||
v2gnu/gcc444b.zip
|
||||
v2gnu/mak3791b.zip
|
||||
v2misc/csdpmi7b.zip
|
||||
|
||||
If newer versions are available, probably you should try them first.
|
||||
Note that djdev203.zip is too old to build XZ Utils; you need at
|
||||
least djdev204.zip. Also note that you want csdpmi7b.zip even if you
|
||||
run under Windows or DOSEMU, because the XZ Utils Makefile will embed
|
||||
cwsdstub.exe to the resulting binaries.
|
||||
|
||||
See the instructions in readme.1st found from djdev204.zip. Here's
|
||||
a short summary, but you should still read readme.1st.
|
||||
|
||||
C:\> mkdir DJGPP
|
||||
C:\> cd DJGPP
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\djdev204.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\bnu219b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\gcc444b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\mak3791b.zip
|
||||
C:\DJGPP> c:\download\unzip32 c:\download\csdpmi7b.zip
|
||||
|
||||
C:\DJGPP> set PATH=C:\DJGPP\BIN;%PATH%
|
||||
C:\DJGPP> set DJGPP=C:\DJGPP\DJGPP.ENV
|
||||
|
||||
You may want to add the last two lines into AUTOEXEC.BAT or have,
|
||||
for example, DJGPP.BAT which you can run before using DJGPP.
|
||||
|
||||
Make sure you use completely upper case path in the DJGPP environment
|
||||
variable. This is not required by DJGPP, but the XZ Utils Makefile is
|
||||
a bit stupid and expects that everything in DJGPP environment variable
|
||||
is uppercase.
|
||||
|
||||
|
||||
Building
|
||||
|
||||
You need to have an environment that supports long filenames (LFN).
|
||||
Once you have built XZ Utils, the resulting binaries can be run
|
||||
without long filename support.
|
||||
|
||||
Run "make" in this directory (the directory containing this README).
|
||||
You should get xz.exe (and a bunch of temporary files). Other tools
|
||||
are not built. Having e.g. xzdec.exe doesn't save much space compared
|
||||
to xz.exe, because the DJGPP runtime makes the .exe quite big anyway.
|
||||
|
||||
|
||||
Bugs
|
||||
|
||||
xz doesn't necessarily work in Dosbox. It should work in DOSEMU.
|
||||
|
||||
Pressing Ctrl-c or Ctrl-Break won't remove the incomplete target file
|
||||
when running under Windows XP Command Prompt (something goes wrong
|
||||
with SIGINT handling). It works correctly under Windows 95/98/98SE/ME.
|
||||
|
123
dos/README.txt
123
dos/README.txt
|
@ -1,123 +0,0 @@
|
|||
|
||||
XZ Utils on DOS
|
||||
===============
|
||||
|
||||
DOS-specific filename handling
|
||||
|
||||
xz detects at runtime if long filename (LFN) support is
|
||||
available and will use it by default. It can be disabled by
|
||||
setting an environment variable:
|
||||
|
||||
set lfn=n
|
||||
|
||||
When xz is in LFN mode, it behaves pretty much the same as it
|
||||
does on other operating systems. Examples:
|
||||
|
||||
xz foo.tar -> foo.tar.xz
|
||||
xz -d foo.tar.xz -> foo.tar
|
||||
|
||||
xz -F lzma foo.tar -> foo.tar.lzma
|
||||
xz -d foo.tar.lzma -> foo.tar
|
||||
|
||||
When LFN support isn't available or it is disabled with LFN=n
|
||||
environment setting, xz works in short filename (SFN) mode. This
|
||||
affects filename suffix handling when compressing.
|
||||
|
||||
When compressing to the .xz format in SFN mode:
|
||||
|
||||
- Files without an extension get .xz just like on LFN systems.
|
||||
|
||||
- *.tar files become *.txz (shorthand for *.tar.xz). *.txz
|
||||
is recognized by xz on all supported operating systems.
|
||||
(Try to avoid confusing this with gzipped .txt files.)
|
||||
|
||||
- Files with 1-3 character extension have their extension modified
|
||||
so that the last character is a dash ("-"). If the extension
|
||||
is already three characters, the last character is lost. The
|
||||
resulting *.?- or *.??- filename is recognized in LFN mode, but
|
||||
it isn't recognized by xz on other operating systems.
|
||||
|
||||
Examples:
|
||||
|
||||
xz foo -> foo.xz | xz -d foo.xz -> foo
|
||||
xz foo.tar -> foo.txz | xz -d foo.txz -> foo.tar
|
||||
xz foo.c -> foo.c- | xz -d foo.c- -> foo.c
|
||||
xz read.me -> read.me- | xz -d read.me- -> read.me
|
||||
xz foo.txt -> foo.tx- | xz -d foo.tx- -> foo.tx !
|
||||
|
||||
Note that in the last example above, the third character of the
|
||||
filename extension is lost.
|
||||
|
||||
When compressing to the legacy .lzma format in SFN mode:
|
||||
|
||||
- *.tar files become *.tlz (shorthand for *.tar.lzma). *.tlz
|
||||
is recognized by xz on all supported operating systems.
|
||||
|
||||
- Other files become *.lzm. The original filename extension
|
||||
is lost. *.lzm is recognized also in LFN mode, but it is not
|
||||
recognized by xz on other operating systems.
|
||||
|
||||
Examples:
|
||||
|
||||
xz -F lzma foo -> foo.lzm | xz -d foo.lzm -> foo
|
||||
xz -F lzma foo.tar -> foo.tlz | xz -d foo.tlz -> foo.tar
|
||||
xz -F lzma foo.c -> foo.lzm | xz -d foo.lzm -> foo !
|
||||
xz -F lzma read.me -> read.lzm | xz -d read.lzm -> read !
|
||||
xz -F lzma foo.txt -> foo.lzm | xz -d foo.lzm -> foo !
|
||||
|
||||
When compressing with a custom suffix (-S .SUF, --suffix=.SUF) to
|
||||
any file format:
|
||||
|
||||
- If the suffix begins with a dot, the filename extension is
|
||||
replaced with the new suffix. The original extension is lost.
|
||||
|
||||
- If the suffix doesn't begin with a dot and the filename has no
|
||||
extension and the filename given on the command line doesn't
|
||||
have a dot at the end, the custom suffix is appended just like
|
||||
on LFN systems.
|
||||
|
||||
- If the suffix doesn't begin with a dot and the filename has
|
||||
an extension (or an extension-less filename is given with a dot
|
||||
at the end), the last 1-3 characters of the filename extension
|
||||
may get overwritten to fit the given custom suffix.
|
||||
|
||||
Examples:
|
||||
|
||||
xz -S x foo -> foox | xz -dS x foox -> foo
|
||||
xz -S x foo. -> foo.x | xz -dS x foo.x -> foo
|
||||
xz -S .x foo -> foo.x | xz -dS .x foo.x -> foo
|
||||
xz -S .x foo. -> foo.x | xz -dS .x foo.x -> foo
|
||||
xz -S x.y foo -> foox.y | xz -dS x.y foox.y -> foo
|
||||
xz -S .a foo.c -> foo.a | xz -dS .a foo.a -> foo !
|
||||
xz -S a foo.c -> foo.ca | xz -dS a foo.ca -> foo.c
|
||||
xz -S ab foo.c -> foo.cab | xz -dS ab foo.cab -> foo.c
|
||||
xz -S ab read.me -> read.mab | xz -dS ab read.mab -> read.m !
|
||||
xz -S ab foo.txt -> foo.tab | xz -dS ab foo.tab -> foo.t !
|
||||
xz -S abc foo.txt -> foo.abc | xz -dS abc foo.abc -> foo !
|
||||
|
||||
When decompressing, the suffix handling in SFN mode is the same as
|
||||
in LFN mode. The DOS-specific filenames *.lzm, *.?-, and *.??- are
|
||||
recognized also in LFN mode.
|
||||
|
||||
xz handles certain uncommon situations safely:
|
||||
|
||||
- If the generated output filename refers to the same file as
|
||||
the input file, xz detects this and refuses to compress or
|
||||
decompress the input file even if --force is used. This can
|
||||
happen when giving an overlong filename in SFN mode. E.g.
|
||||
"xz -S x foo.texinfo" would try to write to foo.tex which on
|
||||
SFN system is the same file as foo.texinfo.
|
||||
|
||||
- If the generated output filename is a special file like "con"
|
||||
or "prn", xz detects this and refuses to compress or decompress
|
||||
the input file even if --force is used.
|
||||
|
||||
|
||||
Bugs
|
||||
|
||||
xz doesn't necessarily work in Dosbox. It should work in DOSEMU.
|
||||
|
||||
Pressing Ctrl-c or Ctrl-Break won't remove the incomplete target file
|
||||
when running under Windows XP Command Prompt (something goes wrong
|
||||
with SIGINT handling). It works correctly under Windows 95/98/98SE/ME.
|
||||
|
35
dos/config.h
35
dos/config.h
|
@ -1,5 +1,3 @@
|
|||
/* SPDX-License-Identifier: 0BSD */
|
||||
|
||||
/* How many MiB of RAM to assume if the real amount cannot be determined. */
|
||||
#define ASSUME_RAM 32
|
||||
|
||||
|
@ -12,15 +10,9 @@
|
|||
/* Define to 1 if sha256 integrity check is enabled. */
|
||||
#define HAVE_CHECK_SHA256 1
|
||||
|
||||
/* Define to 1 if any of HAVE_DECODER_foo have been defined. */
|
||||
#define HAVE_DECODERS 1
|
||||
|
||||
/* Define to 1 if arm decoder is enabled. */
|
||||
#define HAVE_DECODER_ARM 1
|
||||
|
||||
/* Define to 1 if arm64 decoder is enabled. */
|
||||
#define HAVE_DECODER_ARM64 1
|
||||
|
||||
/* Define to 1 if armthumb decoder is enabled. */
|
||||
#define HAVE_DECODER_ARMTHUMB 1
|
||||
|
||||
|
@ -45,15 +37,9 @@
|
|||
/* Define to 1 if x86 decoder is enabled. */
|
||||
#define HAVE_DECODER_X86 1
|
||||
|
||||
/* Define to 1 if any of HAVE_ENCODER_foo have been defined. */
|
||||
#define HAVE_ENCODERS 1
|
||||
|
||||
/* Define to 1 if arm encoder is enabled. */
|
||||
#define HAVE_ENCODER_ARM 1
|
||||
|
||||
/* Define to 1 if arm64 encoder is enabled. */
|
||||
#define HAVE_ENCODER_ARM64 1
|
||||
|
||||
/* Define to 1 if armthumb encoder is enabled. */
|
||||
#define HAVE_ENCODER_ARMTHUMB 1
|
||||
|
||||
|
@ -84,9 +70,6 @@
|
|||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#define HAVE_LIMITS_H 1
|
||||
|
||||
/* Define to 1 if .lz (lzip) decompression support is enabled. */
|
||||
#define HAVE_LZIP_DECODER 1
|
||||
|
||||
/* Define to 1 to enable bt2 match finder. */
|
||||
#define HAVE_MF_BT2 1
|
||||
|
||||
|
@ -117,37 +100,29 @@
|
|||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
|
||||
/* Define to 1 if you have the 'utimes' function. */
|
||||
/* Define to 1 if you have the `utimes' function. */
|
||||
#define HAVE_UTIMES 1
|
||||
|
||||
/* Define to 1 or 0, depending whether the compiler supports simple visibility
|
||||
declarations. */
|
||||
#define HAVE_VISIBILITY 0
|
||||
|
||||
/* Define to 1 if the system has the type '_Bool'. */
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#define HAVE__BOOL 1
|
||||
|
||||
/* Define to 1 if the GNU C extension __builtin_assume_aligned is supported.
|
||||
*/
|
||||
#define HAVE___BUILTIN_ASSUME_ALIGNED 1
|
||||
|
||||
/* Define to 1 if the GNU C extensions __builtin_bswap16/32/64 are supported.
|
||||
*/
|
||||
#define HAVE___BUILTIN_BSWAPXX 1
|
||||
|
||||
/* Define to 1 to disable debugging code. */
|
||||
#define NDEBUG 1
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "xz@tukaani.org"
|
||||
#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "XZ Utils"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL "https://xz.tukaani.org/xz-utils/"
|
||||
#define PACKAGE_URL "http://tukaani.org/xz/"
|
||||
|
||||
/* The size of 'size_t', as computed by sizeof. */
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#define SIZEOF_SIZE_T 4
|
||||
|
||||
/* Define to 1 if the system supports fast unaligned access to 16-bit and
|
||||
|
|
2687
doxygen/Doxyfile
2687
doxygen/Doxyfile
File diff suppressed because it is too large
Load Diff
|
@ -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>
|
|
@ -1,109 +0,0 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# It is recommended to use this script to update the Doxygen-generated HTML
|
||||
# files since this will include the package version in the output and,
|
||||
# in case of liblzma API docs, strip JavaScript files from the output.
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# Authors: Jia Tan
|
||||
# Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
set -e
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
# If no arguments are specified, default to generating liblzma API header
|
||||
# documentation only.
|
||||
case $1 in
|
||||
'' | api)
|
||||
# Remove old documentation before re-generating the new.
|
||||
rm -rf ../doc/api
|
||||
|
||||
# Generate the HTML documentation by preparing the Doxyfile
|
||||
# in stdin and piping the result to the doxygen command.
|
||||
# With Doxygen, the last assignment of a value to a tag will
|
||||
# override any earlier assignment. So, we can use this
|
||||
# feature to override the tags that need to change between
|
||||
# "api" and "internal" modes.
|
||||
(
|
||||
cat 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
|
||||
;;
|
||||
|
||||
internal)
|
||||
# The docs from internal aren't for distribution so
|
||||
# the JavaScript files aren't an issue here.
|
||||
rm -rf ../doc/internal
|
||||
(
|
||||
cat Doxyfile
|
||||
echo "PROJECT_NUMBER = $PACKAGE_VERSION"
|
||||
echo 'PROJECT_NAME = "XZ Utils"'
|
||||
echo 'STRIP_FROM_PATH = ../src'
|
||||
echo 'INPUT = ../src'
|
||||
echo 'HTML_OUTPUT = internal'
|
||||
echo 'EXTRACT_PRIVATE = YES'
|
||||
echo 'EXTRACT_STATIC = YES'
|
||||
echo 'EXTRACT_LOCAL_CLASSES = YES'
|
||||
echo 'SEARCHENGINE = YES'
|
||||
) | doxygen -
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "doxygen/update-doxygen: Error: mode argument '$1'" \
|
||||
"is not supported." >&2
|
||||
echo "doxygen/update-doxygen: Supported modes:" >&2
|
||||
echo "doxygen/update-doxygen: - 'api' (default):" \
|
||||
"liblzma API docs into doc/api" >&2
|
||||
echo "doxygen/update-doxygen: - 'internal':"\
|
||||
"internal docs into doc/internal" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# 7z2lzma.bash is very primitive .7z to .lzma converter. The input file must
|
||||
|
@ -18,6 +17,9 @@
|
|||
#
|
||||
# Author: Lasse Collin <lasse.collin@tukaani.org>
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
# You can use 7z or 7za, both will work.
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/*
|
||||
scanlzma, scan for lzma compressed data in stdin and echo it to stdout.
|
||||
Copyright (C) 2006 Timo Lindfors
|
||||
|
@ -39,10 +37,6 @@
|
|||
/* 5 8 Uncompressed size (little endian). -1 means unknown size */
|
||||
/* 13 Compressed data */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define BUFSIZE 4096
|
||||
|
||||
int find_lzma_header(unsigned char *buf) {
|
||||
|
@ -54,7 +48,7 @@ int find_lzma_header(unsigned char *buf) {
|
|||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
unsigned char buf[BUFSIZE];
|
||||
char buf[BUFSIZE];
|
||||
int ret, i, numlzma, blocks=0;
|
||||
|
||||
if (argc != 2) {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
## SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
##
|
||||
## Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
||||
##
|
||||
|
@ -23,17 +21,7 @@ libgnu_a_SOURCES =
|
|||
libgnu_a_DEPENDENCIES = $(LIBOBJS)
|
||||
libgnu_a_LIBADD = $(LIBOBJS)
|
||||
|
||||
EXTRA_DIST = \
|
||||
getopt.in.h \
|
||||
getopt.c \
|
||||
getopt1.c \
|
||||
getopt_int.h \
|
||||
getopt-cdefs.h \
|
||||
getopt-core.h \
|
||||
getopt-ext.h \
|
||||
getopt-pfx-core.h \
|
||||
getopt-pfx-ext.h
|
||||
|
||||
EXTRA_DIST = getopt.in.h getopt.c getopt1.c getopt_int.h
|
||||
BUILT_SOURCES = $(GETOPT_H)
|
||||
MOSTLYCLEANFILES = getopt.h getopt.h-t
|
||||
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* getopt-on-non-glibc compatibility macros.
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of gnulib.
|
||||
Unlike most of the getopt implementation, it is NOT shared
|
||||
with the GNU C Library.
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _GETOPT_CDEFS_H
|
||||
#define _GETOPT_CDEFS_H 1
|
||||
|
||||
/* This header should not be used directly; include getopt.h or
|
||||
unistd.h instead. It does not have a protective #error, because
|
||||
the guard macro for getopt.h in gnulib is not fixed. */
|
||||
|
||||
/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect
|
||||
a number of the internal macros supplied to GNU libc's headers by
|
||||
sys/cdefs.h. Provide fallback definitions for all of them. */
|
||||
#ifdef HAVE_SYS_CDEFS_H
|
||||
# include <sys/cdefs.h>
|
||||
#endif
|
||||
|
||||
#ifndef __BEGIN_DECLS
|
||||
# ifdef __cplusplus
|
||||
# define __BEGIN_DECLS extern "C" {
|
||||
# else
|
||||
# define __BEGIN_DECLS /* nothing */
|
||||
# endif
|
||||
#endif
|
||||
#ifndef __END_DECLS
|
||||
# ifdef __cplusplus
|
||||
# define __END_DECLS }
|
||||
# else
|
||||
# define __END_DECLS /* nothing */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC_PREREQ
|
||||
# if defined __GNUC__ && defined __GNUC_VERSION__
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
# else
|
||||
# define __GNUC_PREREQ(maj, min) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __THROW
|
||||
# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4)
|
||||
# if __cplusplus >= 201103L
|
||||
# define __THROW noexcept (true)
|
||||
# else
|
||||
# define __THROW throw ()
|
||||
# endif
|
||||
# else
|
||||
# define __THROW
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* _GETOPT_CDEFS_H */
|
|
@ -1,98 +0,0 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* Declarations for getopt (basic, portable features only).
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library and is also part of gnulib.
|
||||
Patches to this file should be submitted to both projects.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _GETOPT_CORE_H
|
||||
#define _GETOPT_CORE_H 1
|
||||
|
||||
/* This header should not be used directly; include getopt.h or
|
||||
unistd.h instead. Unlike most bits headers, it does not have
|
||||
a protective #error, because the guard macro for getopt.h in
|
||||
gnulib is not fixed. */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* For communication from 'getopt' to the caller.
|
||||
When 'getopt' finds an option that takes an argument,
|
||||
the argument value is returned here.
|
||||
Also, when 'ordering' is RETURN_IN_ORDER,
|
||||
each non-option ARGV-element is returned here. */
|
||||
|
||||
extern char *optarg;
|
||||
|
||||
/* Index in ARGV of the next element to be scanned.
|
||||
This is used for communication to and from the caller
|
||||
and for communication between successive calls to 'getopt'.
|
||||
|
||||
On entry to 'getopt', zero means this is the first call; initialize.
|
||||
|
||||
When 'getopt' returns -1, this is the index of the first of the
|
||||
non-option elements that the caller should itself scan.
|
||||
|
||||
Otherwise, 'optind' communicates from one call to the next
|
||||
how much of ARGV has been scanned so far. */
|
||||
|
||||
extern int optind;
|
||||
|
||||
/* Callers store zero here to inhibit the error message 'getopt' prints
|
||||
for unrecognized options. */
|
||||
|
||||
extern int opterr;
|
||||
|
||||
/* Set to an option character which was unrecognized. */
|
||||
|
||||
extern int optopt;
|
||||
|
||||
/* Get definitions and prototypes for functions to process the
|
||||
arguments in ARGV (ARGC of them, minus the program name) for
|
||||
options given in OPTS.
|
||||
|
||||
Return the option character from OPTS just read. Return -1 when
|
||||
there are no more options. For unrecognized options, or options
|
||||
missing arguments, 'optopt' is set to the option letter, and '?' is
|
||||
returned.
|
||||
|
||||
The OPTS string is a list of characters which are recognized option
|
||||
letters, optionally followed by colons, specifying that that letter
|
||||
takes an argument, to be placed in 'optarg'.
|
||||
|
||||
If a letter in OPTS is followed by two colons, its argument is
|
||||
optional. This behavior is specific to the GNU 'getopt'.
|
||||
|
||||
The argument '--' causes premature termination of argument
|
||||
scanning, explicitly telling 'getopt' that there are no more
|
||||
options.
|
||||
|
||||
If OPTS begins with '-', then non-option arguments are treated as
|
||||
arguments to the option '\1'. This behavior is specific to the GNU
|
||||
'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in
|
||||
the environment, then do not permute arguments.
|
||||
|
||||
For standards compliance, the 'argv' argument has the type
|
||||
char *const *, but this is inaccurate; if argument permutation is
|
||||
enabled, the argv array (not the strings it points to) must be
|
||||
writable. */
|
||||
|
||||
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
|
||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _GETOPT_CORE_H */
|
|
@ -1,79 +0,0 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* Declarations for getopt (GNU extensions).
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library and is also part of gnulib.
|
||||
Patches to this file should be submitted to both projects.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _GETOPT_EXT_H
|
||||
#define _GETOPT_EXT_H 1
|
||||
|
||||
/* This header should not be used directly; include getopt.h instead.
|
||||
Unlike most bits headers, it does not have a protective #error,
|
||||
because the guard macro for getopt.h in gnulib is not fixed. */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Describe the long-named options requested by the application.
|
||||
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
||||
of 'struct option' terminated by an element containing a name which is
|
||||
zero.
|
||||
|
||||
The field 'has_arg' is:
|
||||
no_argument (or 0) if the option does not take an argument,
|
||||
required_argument (or 1) if the option requires an argument,
|
||||
optional_argument (or 2) if the option takes an optional argument.
|
||||
|
||||
If the field 'flag' is not NULL, it points to a variable that is set
|
||||
to the value given in the field 'val' when the option is found, but
|
||||
left unchanged if the option is not found.
|
||||
|
||||
To have a long-named option do something other than set an 'int' to
|
||||
a compiled-in constant, such as set a value from 'optarg', set the
|
||||
option's 'flag' field to zero and its 'val' field to a nonzero
|
||||
value (the equivalent single-letter option character, if there is
|
||||
one). For long options that have a zero 'flag' field, 'getopt'
|
||||
returns the contents of the 'val' field. */
|
||||
|
||||
struct option
|
||||
{
|
||||
const char *name;
|
||||
/* has_arg can't be an enum because some compilers complain about
|
||||
type mismatches in all the code that assumes it is an int. */
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
};
|
||||
|
||||
/* Names for the values of the 'has_arg' field of 'struct option'. */
|
||||
|
||||
#define no_argument 0
|
||||
#define required_argument 1
|
||||
#define optional_argument 2
|
||||
|
||||
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind)
|
||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind)
|
||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _GETOPT_EXT_H */
|
|
@ -1,68 +0,0 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* getopt (basic, portable features) gnulib wrapper header.
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of gnulib.
|
||||
Unlike most of the getopt implementation, it is NOT shared
|
||||
with the GNU C Library.
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _GETOPT_PFX_CORE_H
|
||||
#define _GETOPT_PFX_CORE_H 1
|
||||
|
||||
/* This header should not be used directly; include getopt.h or
|
||||
unistd.h instead. It does not have a protective #error, because
|
||||
the guard macro for getopt.h in gnulib is not fixed. */
|
||||
|
||||
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||
identifier that prefixes the external functions and variables
|
||||
defined in getopt-core.h and getopt-ext.h. Systematically
|
||||
rename identifiers so that they do not collide with the system
|
||||
functions and variables. Renaming avoids problems with some
|
||||
compilers and linkers. */
|
||||
#ifdef __GETOPT_PREFIX
|
||||
# ifndef __GETOPT_ID
|
||||
# define __GETOPT_CONCAT(x, y) x ## y
|
||||
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
||||
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
||||
# endif
|
||||
# undef getopt
|
||||
# undef optarg
|
||||
# undef opterr
|
||||
# undef optind
|
||||
# undef optopt
|
||||
# define getopt __GETOPT_ID (getopt)
|
||||
# define optarg __GETOPT_ID (optarg)
|
||||
# define opterr __GETOPT_ID (opterr)
|
||||
# define optind __GETOPT_ID (optind)
|
||||
# define optopt __GETOPT_ID (optopt)
|
||||
|
||||
/* Work around a problem on macOS, which declares getopt with a
|
||||
trailing __DARWIN_ALIAS(getopt) that would expand to something like
|
||||
__asm("_" "rpl_getopt" "$UNIX2003") were it not for the following
|
||||
hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */
|
||||
# ifdef __APPLE__
|
||||
# define _GETOPT
|
||||
# endif
|
||||
|
||||
/* The system's getopt.h may have already included getopt-core.h to
|
||||
declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that
|
||||
getopt-core.h declares them with prefixes. */
|
||||
# undef _GETOPT_CORE_H
|
||||
#endif
|
||||
|
||||
#include <getopt-core.h>
|
||||
|
||||
#endif /* _GETOPT_PFX_CORE_H */
|
|
@ -1,72 +0,0 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* getopt (GNU extensions) gnulib wrapper header.
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of gnulib.
|
||||
Unlike most of the getopt implementation, it is NOT shared
|
||||
with the GNU C Library.
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _GETOPT_PFX_EXT_H
|
||||
#define _GETOPT_PFX_EXT_H 1
|
||||
|
||||
/* This header should not be used directly; include getopt.h instead.
|
||||
It does not have a protective #error, because the guard macro for
|
||||
getopt.h in gnulib is not fixed. */
|
||||
|
||||
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||
identifier that prefixes the external functions and variables
|
||||
defined in getopt-core.h and getopt-ext.h. Systematically
|
||||
rename identifiers so that they do not collide with the system
|
||||
functions and variables. Renaming avoids problems with some
|
||||
compilers and linkers. */
|
||||
#ifdef __GETOPT_PREFIX
|
||||
# ifndef __GETOPT_ID
|
||||
# define __GETOPT_CONCAT(x, y) x ## y
|
||||
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
||||
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
||||
# endif
|
||||
# undef getopt_long
|
||||
# undef getopt_long_only
|
||||
# undef option
|
||||
# undef _getopt_internal
|
||||
# define getopt_long __GETOPT_ID (getopt_long)
|
||||
# define getopt_long_only __GETOPT_ID (getopt_long_only)
|
||||
# define option __GETOPT_ID (option)
|
||||
# define _getopt_internal __GETOPT_ID (getopt_internal)
|
||||
|
||||
/* The system's getopt.h may have already included getopt-ext.h to
|
||||
declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that
|
||||
getopt-ext.h declares them with prefixes. */
|
||||
# undef _GETOPT_EXT_H
|
||||
#endif
|
||||
|
||||
/* Standalone applications get correct prototypes for getopt_long and
|
||||
getopt_long_only; they declare "char **argv". For backward
|
||||
compatibility with old applications, if __GETOPT_PREFIX is not
|
||||
defined, we supply GNU-libc-compatible, but incorrect, prototypes
|
||||
using "char *const *argv". (GNU libc is stuck with the incorrect
|
||||
prototypes, as they are baked into older versions of LSB.) */
|
||||
#ifndef __getopt_argv_const
|
||||
# if defined __GETOPT_PREFIX
|
||||
# define __getopt_argv_const /* empty */
|
||||
# else
|
||||
# define __getopt_argv_const const
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <getopt-ext.h>
|
||||
|
||||
#endif /* _GETOPT_PFX_EXT_H */
|
1132
lib/getopt.c
1132
lib/getopt.c
File diff suppressed because it is too large
Load Diff
228
lib/getopt.in.h
228
lib/getopt.in.h
|
@ -1,28 +1,27 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* Declarations for getopt.
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of gnulib.
|
||||
Unlike most of the getopt implementation, it is NOT shared
|
||||
with the GNU C Library, which supplies a different version of
|
||||
this file.
|
||||
Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1, or (at your option)
|
||||
any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
|
||||
#define _GETOPT_H 1
|
||||
#ifndef __need_getopt
|
||||
# define _GETOPT_H 1
|
||||
#endif
|
||||
|
||||
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||
identifier that prefixes the external functions and variables
|
||||
|
@ -32,29 +31,196 @@
|
|||
identifiers so that they do not collide with the system functions
|
||||
and variables. Renaming avoids problems with some compilers and
|
||||
linkers. */
|
||||
#if defined __GETOPT_PREFIX
|
||||
#if defined __GETOPT_PREFIX && !defined __need_getopt
|
||||
# include <stdlib.h>
|
||||
# include <stdio.h>
|
||||
|
||||
# ifndef _MSC_VER
|
||||
# include <unistd.h>
|
||||
# endif
|
||||
# undef __need_getopt
|
||||
# undef getopt
|
||||
# undef getopt_long
|
||||
# undef getopt_long_only
|
||||
# undef optarg
|
||||
# undef opterr
|
||||
# undef optind
|
||||
# undef optopt
|
||||
# define __GETOPT_CONCAT(x, y) x ## y
|
||||
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
||||
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
||||
# define getopt __GETOPT_ID (getopt)
|
||||
# define getopt_long __GETOPT_ID (getopt_long)
|
||||
# define getopt_long_only __GETOPT_ID (getopt_long_only)
|
||||
# define optarg __GETOPT_ID (optarg)
|
||||
# define opterr __GETOPT_ID (opterr)
|
||||
# define optind __GETOPT_ID (optind)
|
||||
# define optopt __GETOPT_ID (optopt)
|
||||
#endif
|
||||
|
||||
/* From Gnulib's lib/arg-nonnull.h: */
|
||||
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
|
||||
that the values passed as arguments n, ..., m must be non-NULL pointers.
|
||||
n = 1 stands for the first argument, n = 2 for the second argument etc. */
|
||||
#ifndef _GL_ARG_NONNULL
|
||||
# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__
|
||||
# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
|
||||
/* Standalone applications get correct prototypes for getopt_long and
|
||||
getopt_long_only; they declare "char **argv". libc uses prototypes
|
||||
with "char *const *argv" that are incorrect because getopt_long and
|
||||
getopt_long_only can permute argv; this is required for backward
|
||||
compatibility (e.g., for LSB 2.0.1).
|
||||
|
||||
This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
|
||||
but it caused redefinition warnings if both unistd.h and getopt.h were
|
||||
included, since unistd.h includes getopt.h having previously defined
|
||||
__need_getopt.
|
||||
|
||||
The only place where __getopt_argv_const is used is in definitions
|
||||
of getopt_long and getopt_long_only below, but these are visible
|
||||
only if __need_getopt is not defined, so it is quite safe to rewrite
|
||||
the conditional as follows:
|
||||
*/
|
||||
#if !defined __need_getopt
|
||||
# if defined __GETOPT_PREFIX
|
||||
# define __getopt_argv_const /* empty */
|
||||
# else
|
||||
# define _GL_ARG_NONNULL(params)
|
||||
# define __getopt_argv_const const
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <getopt-cdefs.h>
|
||||
#include <getopt-pfx-core.h>
|
||||
#include <getopt-pfx-ext.h>
|
||||
/* If __GNU_LIBRARY__ is not already defined, either we are being used
|
||||
standalone, or this is the first header included in the source file.
|
||||
If we are being used with glibc, we need to include <features.h>, but
|
||||
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
|
||||
not defined, include <ctype.h>, which will pull in <features.h> for us
|
||||
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
|
||||
doesn't flood the namespace with stuff the way some other headers do.) */
|
||||
#if !defined __GNU_LIBRARY__
|
||||
# include <ctype.h>
|
||||
#endif
|
||||
|
||||
#endif /* _GETOPT_H */
|
||||
#ifndef __THROW
|
||||
# ifndef __GNUC_PREREQ
|
||||
# define __GNUC_PREREQ(maj, min) (0)
|
||||
# endif
|
||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||
# define __THROW throw ()
|
||||
# else
|
||||
# define __THROW
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* For communication from `getopt' to the caller.
|
||||
When `getopt' finds an option that takes an argument,
|
||||
the argument value is returned here.
|
||||
Also, when `ordering' is RETURN_IN_ORDER,
|
||||
each non-option ARGV-element is returned here. */
|
||||
|
||||
extern char *optarg;
|
||||
|
||||
/* Index in ARGV of the next element to be scanned.
|
||||
This is used for communication to and from the caller
|
||||
and for communication between successive calls to `getopt'.
|
||||
|
||||
On entry to `getopt', zero means this is the first call; initialize.
|
||||
|
||||
When `getopt' returns -1, this is the index of the first of the
|
||||
non-option elements that the caller should itself scan.
|
||||
|
||||
Otherwise, `optind' communicates from one call to the next
|
||||
how much of ARGV has been scanned so far. */
|
||||
|
||||
extern int optind;
|
||||
|
||||
/* Callers store zero here to inhibit the error message `getopt' prints
|
||||
for unrecognized options. */
|
||||
|
||||
extern int opterr;
|
||||
|
||||
/* Set to an option character which was unrecognized. */
|
||||
|
||||
extern int optopt;
|
||||
|
||||
#ifndef __need_getopt
|
||||
/* Describe the long-named options requested by the application.
|
||||
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
||||
of `struct option' terminated by an element containing a name which is
|
||||
zero.
|
||||
|
||||
The field `has_arg' is:
|
||||
no_argument (or 0) if the option does not take an argument,
|
||||
required_argument (or 1) if the option requires an argument,
|
||||
optional_argument (or 2) if the option takes an optional argument.
|
||||
|
||||
If the field `flag' is not NULL, it points to a variable that is set
|
||||
to the value given in the field `val' when the option is found, but
|
||||
left unchanged if the option is not found.
|
||||
|
||||
To have a long-named option do something other than set an `int' to
|
||||
a compiled-in constant, such as set a value from `optarg', set the
|
||||
option's `flag' field to zero and its `val' field to a nonzero
|
||||
value (the equivalent single-letter option character, if there is
|
||||
one). For long options that have a zero `flag' field, `getopt'
|
||||
returns the contents of the `val' field. */
|
||||
|
||||
struct option
|
||||
{
|
||||
const char *name;
|
||||
/* has_arg can't be an enum because some compilers complain about
|
||||
type mismatches in all the code that assumes it is an int. */
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
};
|
||||
|
||||
/* Names for the values of the `has_arg' field of `struct option'. */
|
||||
|
||||
# define no_argument 0
|
||||
# define required_argument 1
|
||||
# define optional_argument 2
|
||||
#endif /* need getopt */
|
||||
|
||||
|
||||
/* Get definitions and prototypes for functions to process the
|
||||
arguments in ARGV (ARGC of them, minus the program name) for
|
||||
options given in OPTS.
|
||||
|
||||
Return the option character from OPTS just read. Return -1 when
|
||||
there are no more options. For unrecognized options, or options
|
||||
missing arguments, `optopt' is set to the option letter, and '?' is
|
||||
returned.
|
||||
|
||||
The OPTS string is a list of characters which are recognized option
|
||||
letters, optionally followed by colons, specifying that that letter
|
||||
takes an argument, to be placed in `optarg'.
|
||||
|
||||
If a letter in OPTS is followed by two colons, its argument is
|
||||
optional. This behavior is specific to the GNU `getopt'.
|
||||
|
||||
The argument `--' causes premature termination of argument
|
||||
scanning, explicitly telling `getopt' that there are no more
|
||||
options.
|
||||
|
||||
If OPTS begins with `-', then non-option arguments are treated as
|
||||
arguments to the option '\1'. This behavior is specific to the GNU
|
||||
`getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in
|
||||
the environment, then do not permute arguments. */
|
||||
|
||||
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
|
||||
__THROW;
|
||||
|
||||
#ifndef __need_getopt
|
||||
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind)
|
||||
__THROW;
|
||||
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind)
|
||||
__THROW;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Make sure we later can get all the definitions and declarations. */
|
||||
#undef __need_getopt
|
||||
|
||||
#endif /* getopt.h */
|
||||
|
|
|
@ -1,32 +1,41 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||
Copyright (C) 1987-2023 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library and is also part of gnulib.
|
||||
Patches to this file should be submitted to both projects.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1, or (at your option)
|
||||
any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _LIBC
|
||||
# ifdef HAVE_CONFIG_H
|
||||
#ifdef _LIBC
|
||||
# include <getopt.h>
|
||||
#else
|
||||
# include <config.h>
|
||||
# endif
|
||||
# include "getopt.h"
|
||||
#endif
|
||||
#include "getopt_int.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/* This needs to come after some library #include
|
||||
to get __GNU_LIBRARY__ defined. */
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include "getopt.h"
|
||||
#include "getopt_int.h"
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
int
|
||||
getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
|
||||
|
@ -42,7 +51,7 @@ _getopt_long_r (int argc, char **argv, const char *options,
|
|||
struct _getopt_data *d)
|
||||
{
|
||||
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
||||
0, d, 0);
|
||||
0, 0, d);
|
||||
}
|
||||
|
||||
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
|
||||
|
@ -65,14 +74,13 @@ _getopt_long_only_r (int argc, char **argv, const char *options,
|
|||
struct _getopt_data *d)
|
||||
{
|
||||
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
||||
1, d, 0);
|
||||
1, 0, d);
|
||||
}
|
||||
|
||||
|
||||
#ifdef TEST
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
|
@ -84,7 +92,7 @@ main (int argc, char **argv)
|
|||
{
|
||||
int this_option_optind = optind ? optind : 1;
|
||||
int option_index = 0;
|
||||
static const struct option long_options[] =
|
||||
static struct option long_options[] =
|
||||
{
|
||||
{"add", 1, 0, 0},
|
||||
{"append", 0, 0, 0},
|
||||
|
@ -134,11 +142,11 @@ main (int argc, char **argv)
|
|||
break;
|
||||
|
||||
case 'c':
|
||||
printf ("option c with value '%s'\n", optarg);
|
||||
printf ("option c with value `%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
printf ("option d with value '%s'\n", optarg);
|
||||
printf ("option d with value `%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
|
|
109
lib/getopt_int.h
109
lib/getopt_int.h
|
@ -1,29 +1,25 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/* Internal declarations for getopt.
|
||||
Copyright (C) 1989-2023 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library and is also part of gnulib.
|
||||
Patches to this file should be submitted to both projects.
|
||||
Copyright (C) 1989-1994,1996-1999,2001,2003,2004
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _GETOPT_INT_H
|
||||
#define _GETOPT_INT_H 1
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
extern int _getopt_internal (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
|
@ -33,32 +29,6 @@ extern int _getopt_internal (int ___argc, char **___argv,
|
|||
/* Reentrant versions which can handle parsing multiple argument
|
||||
vectors at the same time. */
|
||||
|
||||
/* Describe how to deal with options that follow non-option ARGV-elements.
|
||||
|
||||
REQUIRE_ORDER means don't recognize them as options; stop option
|
||||
processing when the first non-option is seen. This is what POSIX
|
||||
specifies should happen.
|
||||
|
||||
PERMUTE means permute the contents of ARGV as we scan, so that
|
||||
eventually all the non-options are at the end. This allows options
|
||||
to be given in any order, even with programs that were not written
|
||||
to expect this.
|
||||
|
||||
RETURN_IN_ORDER is an option available to programs that were
|
||||
written to expect options and other ARGV-elements in any order
|
||||
and that care about the ordering of the two. We describe each
|
||||
non-option ARGV-element as if it were the argument of an option
|
||||
with character code 1.
|
||||
|
||||
The special argument '--' forces an end of option-scanning regardless
|
||||
of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
|
||||
'--' can cause 'getopt' to return -1 with 'optind' != ARGC. */
|
||||
|
||||
enum __ord
|
||||
{
|
||||
REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
|
||||
};
|
||||
|
||||
/* Data type for reentrant functions. */
|
||||
struct _getopt_data
|
||||
{
|
||||
|
@ -83,17 +53,58 @@ struct _getopt_data
|
|||
by advancing to the next ARGV-element. */
|
||||
char *__nextchar;
|
||||
|
||||
/* See __ord above. */
|
||||
enum __ord __ordering;
|
||||
/* Describe how to deal with options that follow non-option ARGV-elements.
|
||||
|
||||
If the caller did not specify anything,
|
||||
the default is REQUIRE_ORDER if the environment variable
|
||||
POSIXLY_CORRECT is defined, PERMUTE otherwise.
|
||||
|
||||
REQUIRE_ORDER means don't recognize them as options;
|
||||
stop option processing when the first non-option is seen.
|
||||
This is what Unix does.
|
||||
This mode of operation is selected by either setting the environment
|
||||
variable POSIXLY_CORRECT, or using `+' as the first character
|
||||
of the list of option characters, or by calling getopt.
|
||||
|
||||
PERMUTE is the default. We permute the contents of ARGV as we
|
||||
scan, so that eventually all the non-options are at the end.
|
||||
This allows options to be given in any order, even with programs
|
||||
that were not written to expect this.
|
||||
|
||||
RETURN_IN_ORDER is an option available to programs that were
|
||||
written to expect options and other ARGV-elements in any order
|
||||
and that care about the ordering of the two. We describe each
|
||||
non-option ARGV-element as if it were the argument of an option
|
||||
with character code 1. Using `-' as the first character of the
|
||||
list of option characters selects this mode of operation.
|
||||
|
||||
The special argument `--' forces an end of option-scanning regardless
|
||||
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
|
||||
`--' can cause `getopt' to return -1 with `optind' != ARGC. */
|
||||
|
||||
enum
|
||||
{
|
||||
REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
|
||||
} __ordering;
|
||||
|
||||
/* If the POSIXLY_CORRECT environment variable is set
|
||||
or getopt was called. */
|
||||
int __posixly_correct;
|
||||
|
||||
|
||||
/* Handle permutation of arguments. */
|
||||
|
||||
/* Describe the part of ARGV that contains non-options that have
|
||||
been skipped. 'first_nonopt' is the index in ARGV of the first
|
||||
of them; 'last_nonopt' is the index after the last of them. */
|
||||
been skipped. `first_nonopt' is the index in ARGV of the first
|
||||
of them; `last_nonopt' is the index after the last of them. */
|
||||
|
||||
int __first_nonopt;
|
||||
int __last_nonopt;
|
||||
|
||||
#if defined _LIBC && defined USE_NONOPTION_FLAGS
|
||||
int __nonoption_flags_max_len;
|
||||
int __nonoption_flags_len;
|
||||
# endif
|
||||
};
|
||||
|
||||
/* The initializer is necessary to set OPTIND and OPTERR to their
|
||||
|
@ -103,8 +114,8 @@ struct _getopt_data
|
|||
extern int _getopt_internal_r (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only, struct _getopt_data *__data,
|
||||
int __posixly_correct);
|
||||
int __long_only, int __posixly_correct,
|
||||
struct _getopt_data *__data);
|
||||
|
||||
extern int _getopt_long_r (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
build-to-host.m4
|
||||
codeset.m4
|
||||
extern-inline.m4
|
||||
fcntl-o.m4
|
||||
gettext.m4
|
||||
glibc2.m4
|
||||
glibc21.m4
|
||||
host-cpu-c-abi.m4
|
||||
iconv.m4
|
||||
intdiv0.m4
|
||||
intl.m4
|
||||
intldir.m4
|
||||
intlmacosx.m4
|
||||
intmax.m4
|
||||
inttypes-pri.m4
|
||||
inttypes_h.m4
|
||||
|
@ -32,9 +27,9 @@ printf-posix.m4
|
|||
progtest.m4
|
||||
size_max.m4
|
||||
stdint_h.m4
|
||||
threadlib.m4
|
||||
uintmax_t.m4
|
||||
ulonglong.m4
|
||||
visibility.m4
|
||||
wchar_t.m4
|
||||
wint_t.m4
|
||||
xsize.m4
|
||||
|
|
414
m4/ax_pthread.m4
414
m4/ax_pthread.m4
|
@ -1,7 +1,5 @@
|
|||
dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
|
||||
|
||||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
|
@ -16,28 +14,24 @@ dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
|
|||
# flags that are needed. (The user can also force certain compiler
|
||||
# flags/libs to be tested by setting these environment variables.)
|
||||
#
|
||||
# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is
|
||||
# needed for multi-threaded programs (defaults to the value of CC
|
||||
# respectively CXX otherwise). (This is necessary on e.g. AIX to use the
|
||||
# special cc_r/CC_r compiler alias.)
|
||||
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||
#
|
||||
# NOTE: You are assumed to not only compile your program with these flags,
|
||||
# but also to link with them as well. For example, you might link with
|
||||
# but also link it with them as well. e.g. you should link with
|
||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
#
|
||||
# If you are only building threaded programs, you may wish to use these
|
||||
# If you are only building threads programs, you may wish to use these
|
||||
# variables in your default LIBS, CFLAGS, and CC:
|
||||
#
|
||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
|
||||
# CC="$PTHREAD_CC"
|
||||
# CXX="$PTHREAD_CXX"
|
||||
#
|
||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
|
||||
# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
#
|
||||
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
|
||||
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
|
||||
|
@ -61,7 +55,6 @@ dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
|
|||
#
|
||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
||||
# Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
|
@ -74,7 +67,7 @@ dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
|
|||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
|
@ -89,41 +82,35 @@ dnl SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-macro
|
|||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 31
|
||||
#serial 21
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
AC_REQUIRE([AC_PROG_SED])
|
||||
AC_LANG_PUSH([C])
|
||||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on Tru64 or Sequent).
|
||||
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
|
||||
ax_pthread_save_CC="$CC"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
|
||||
AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"])
|
||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
|
||||
AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
|
||||
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||
AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
CC="$ax_pthread_save_CC"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
|
@ -131,14 +118,12 @@ fi
|
|||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items with a "," contain both
|
||||
# C compiler flags (before ",") and linker flags (after ","). Other items
|
||||
# starting with a "-" are C compiler flags, and remaining items are
|
||||
# library names, except for "none" which indicates that we try without
|
||||
# any flags at all, and "pthread-config" which is a program returning
|
||||
# the flags for the Pth emulation library.
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
|
@ -147,163 +132,82 @@ ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --
|
|||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
|
||||
# (Note: HP C rejects this with "bad form for `-t' option")
|
||||
# -pthreads: Solaris/gcc (Note: HP C also rejects)
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads and
|
||||
# -D_REENTRANT too), HP C (must be checked before -lpthread, which
|
||||
# is present but should not be used directly; and before -mthreads,
|
||||
# because the compiler interprets this as "-mt" + "-hreads")
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
# -pthreads: Solaris/gcc
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||
# also defines -D_REENTRANT)
|
||||
# ... -mt is also the pthreads flag for HP/aCC
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case $host_os in
|
||||
|
||||
freebsd*)
|
||||
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
|
||||
ax_pthread_flags="-kthread lthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
|
||||
# From the cc(1) man page: "[-mt] Sets various -D flags to enable
|
||||
# multi-threading and also sets -lpthread."
|
||||
|
||||
ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
openedition*)
|
||||
|
||||
# IBM z/OS requires a feature-test macro to be defined in order to
|
||||
# enable POSIX threads at all, so give the user a hint if this is
|
||||
# not set. (We don't define these ourselves, as they can affect
|
||||
# other portions of the system API in unpredictable ways.)
|
||||
|
||||
AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
|
||||
[
|
||||
# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
|
||||
AX_PTHREAD_ZOS_MISSING
|
||||
# endif
|
||||
],
|
||||
[AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
|
||||
;;
|
||||
|
||||
case ${host_os} in
|
||||
solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (N.B.: The stubs are missing
|
||||
# pthread_cleanup_push, or rather a function called by this macro,
|
||||
# so we could check for that, but who knows whether they'll stub
|
||||
# that too in a future libc.) So we'll check first for the
|
||||
# standard Solaris way of linking pthreads (-mt -lpthread).
|
||||
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
# a function called by this macro, so we could check for that, but
|
||||
# who knows whether they'll stub that too in a future libc.) So,
|
||||
# we'll just look for -pthreads and -lpthread first:
|
||||
|
||||
ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
|
||||
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
darwin*)
|
||||
ax_pthread_flags="-pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Are we compiling with Clang?
|
||||
# Clang doesn't consider unrecognized options an error unless we specify
|
||||
# -Werror. We throw in some extra Clang-specific options to ensure that
|
||||
# this doesn't happen for GCC, which also accepts -Werror.
|
||||
|
||||
AC_CACHE_CHECK([whether $CC is Clang],
|
||||
[ax_cv_PTHREAD_CLANG],
|
||||
[ax_cv_PTHREAD_CLANG=no
|
||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
|
||||
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
||||
# if defined(__clang__) && defined(__llvm__)
|
||||
AX_PTHREAD_CC_IS_CLANG
|
||||
# endif
|
||||
],
|
||||
[ax_cv_PTHREAD_CLANG=yes])
|
||||
fi
|
||||
])
|
||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
||||
AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])
|
||||
save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_extra_flags="-Werror"
|
||||
CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[ax_pthread_extra_flags=
|
||||
AC_MSG_RESULT([no])])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
for flag in $ax_pthread_flags; do
|
||||
|
||||
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
|
||||
|
||||
# Note that for GCC and Clang -pthread generally implies -lpthread,
|
||||
# except when -nostdlib is passed.
|
||||
# This is problematic using libtool to build C++ shared libraries with pthread:
|
||||
# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
|
||||
# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
|
||||
# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
|
||||
# To solve this, first try -pthread together with -lpthread for GCC
|
||||
|
||||
AS_IF([test "x$GCC" = "xyes"],
|
||||
[ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
|
||||
|
||||
# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
|
||||
|
||||
AS_IF([test "x$ax_pthread_clang" = "xyes"],
|
||||
[ax_pthread_flags="-pthread,-lpthread -pthread"])
|
||||
|
||||
|
||||
# The presence of a feature test macro requesting re-entrant function
|
||||
# definitions is, on some systems, a strong hint that pthreads support is
|
||||
# correctly enabled
|
||||
|
||||
case $host_os in
|
||||
darwin* | hpux* | linux* | osf* | solaris*)
|
||||
ax_pthread_check_macro="_REENTRANT"
|
||||
;;
|
||||
|
||||
aix*)
|
||||
ax_pthread_check_macro="_THREAD_SAFE"
|
||||
;;
|
||||
|
||||
*)
|
||||
ax_pthread_check_macro="--"
|
||||
;;
|
||||
esac
|
||||
AS_IF([test "x$ax_pthread_check_macro" = "x--"],
|
||||
[ax_pthread_check_cond=0],
|
||||
[ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
|
||||
|
||||
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
||||
|
||||
case $ax_pthread_try_flag in
|
||||
case $flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
*,*)
|
||||
PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
|
||||
PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
|
||||
AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"])
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
|
||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
||||
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||
PTHREAD_CFLAGS="$flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
|
||||
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
|
||||
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
|
||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
||||
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||
PTHREAD_LIBS="-l$flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
|
@ -314,18 +218,8 @@ for ax_pthread_try_flag in $ax_pthread_flags; do
|
|||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
# if $ax_pthread_check_cond
|
||||
# error "$ax_pthread_check_macro must be defined"
|
||||
# endif
|
||||
static void *some_global = NULL;
|
||||
static void routine(void *a)
|
||||
{
|
||||
/* To avoid any unused-parameter or
|
||||
unused-but-set-parameter warning. */
|
||||
some_global = a;
|
||||
}
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
|
@ -336,152 +230,76 @@ for ax_pthread_try_flag in $ax_pthread_flags; do
|
|||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
break;
|
||||
fi
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Clang needs special handling, because older versions handle the -pthread
|
||||
# option in a rather... idiosyncratic way
|
||||
|
||||
if test "x$ax_pthread_clang" = "xyes"; then
|
||||
|
||||
# Clang takes -pthread; it has never supported any other flag
|
||||
|
||||
# (Note 1: This will need to be revisited if a system that Clang
|
||||
# supports has POSIX threads in a separate library. This tends not
|
||||
# to be the way of modern systems, but it's conceivable.)
|
||||
|
||||
# (Note 2: On some systems, notably Darwin, -pthread is not needed
|
||||
# to get POSIX threads support; the API is always present and
|
||||
# active. We could reasonably leave PTHREAD_CFLAGS empty. But
|
||||
# -pthread does define _REENTRANT, and while the Darwin headers
|
||||
# ignore this macro, third-party headers might not.)
|
||||
|
||||
# However, older versions of Clang make a point of warning the user
|
||||
# that, in an invocation where only linking and no compilation is
|
||||
# taking place, the -pthread option has no effect ("argument unused
|
||||
# during compilation"). They expect -pthread to be passed in only
|
||||
# when source code is being compiled.
|
||||
#
|
||||
# Problem is, this is at odds with the way Automake and most other
|
||||
# C build frameworks function, which is that the same flags used in
|
||||
# compilation (CFLAGS) are also used in linking. Many systems
|
||||
# supported by AX_PTHREAD require exactly this for POSIX threads
|
||||
# support, and in fact it is often not straightforward to specify a
|
||||
# flag that is used only in the compilation phase and not in
|
||||
# linking. Such a scenario is extremely rare in practice.
|
||||
#
|
||||
# Even though use of the -pthread flag in linking would only print
|
||||
# a warning, this can be a nuisance for well-run software projects
|
||||
# that build with -Werror. So if the active version of Clang has
|
||||
# this misfeature, we search for an option to squash it.
|
||||
|
||||
AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
|
||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
|
||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
|
||||
# Create an alternate version of $ac_link that compiles and
|
||||
# links in two steps (.c -> .o, .o -> exe) instead of one
|
||||
# (.c -> exe), because the warning occurs only in the second
|
||||
# step
|
||||
ax_pthread_save_ac_link="$ac_link"
|
||||
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
|
||||
ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"`
|
||||
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
|
||||
AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
|
||||
CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
||||
[ac_link="$ax_pthread_2step_ac_link"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
||||
[break])
|
||||
])
|
||||
done
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
|
||||
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
|
||||
])
|
||||
|
||||
case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
|
||||
no | unknown) ;;
|
||||
*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
|
||||
esac
|
||||
|
||||
fi # $ax_pthread_clang = yes
|
||||
|
||||
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
AC_CACHE_CHECK([for joinable pthread attribute],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR=unknown
|
||||
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||
attr_name=unknown
|
||||
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
|
||||
[int attr = $ax_pthread_attr; return attr /* ; */])],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
|
||||
[int attr = $attr; return attr /* ; */])],
|
||||
[attr_name=$attr; break],
|
||||
[])
|
||||
done
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
|
||||
test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
|
||||
test "x$ax_pthread_joinable_attr_defined" != "xyes"],
|
||||
[AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
|
||||
[$ax_cv_PTHREAD_JOINABLE_ATTR],
|
||||
AC_MSG_RESULT([$attr_name])
|
||||
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||
AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],
|
||||
[Define to necessary symbol if this constant
|
||||
uses a non-standard name on your system.])
|
||||
ax_pthread_joinable_attr_defined=yes
|
||||
])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([whether more special flags are required for pthreads],
|
||||
[ax_cv_PTHREAD_SPECIAL_FLAGS],
|
||||
[ax_cv_PTHREAD_SPECIAL_FLAGS=no
|
||||
case $host_os in
|
||||
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||
flag=no
|
||||
case ${host_os} in
|
||||
aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
|
||||
osf* | hpux*) flag="-D_REENTRANT";;
|
||||
solaris*)
|
||||
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
|
||||
if test "$GCC" = "yes"; then
|
||||
flag="-D_REENTRANT"
|
||||
else
|
||||
# TODO: What about Clang on Solaris?
|
||||
flag="-mt -D_REENTRANT"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
|
||||
test "x$ax_pthread_special_flags_added" != "xyes"],
|
||||
[PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
|
||||
ax_pthread_special_flags_added=yes])
|
||||
AC_MSG_RESULT([$flag])
|
||||
if test "x$flag" != xno; then
|
||||
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
|
||||
[[int i = PTHREAD_PRIO_INHERIT;
|
||||
return i;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT], [
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
|
||||
[[int i = PTHREAD_PRIO_INHERIT;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
|
||||
test "x$ax_pthread_prio_inherit_defined" != "xyes"],
|
||||
[AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
|
||||
ax_pthread_prio_inherit_defined=yes
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
|
||||
[AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
# More AIX lossage: compile with *_r variant
|
||||
if test "x$GCC" != "xyes"; then
|
||||
if test "x$GCC" != xyes; then
|
||||
case $host_os in
|
||||
aix*)
|
||||
AS_CASE(["x/$CC"],
|
||||
|
@ -489,31 +307,21 @@ if test "x$ax_pthread_ok" = "xyes"; then
|
|||
[#handle absolute path differently from PATH based program lookup
|
||||
AS_CASE(["x$CC"],
|
||||
[x/*],
|
||||
[
|
||||
AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])
|
||||
AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])])
|
||||
],
|
||||
[
|
||||
AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])
|
||||
AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])])
|
||||
]
|
||||
)
|
||||
])
|
||||
[AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
|
||||
[AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
||||
test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
|
||||
|
||||
AC_SUBST([PTHREAD_LIBS])
|
||||
AC_SUBST([PTHREAD_CFLAGS])
|
||||
AC_SUBST([PTHREAD_CC])
|
||||
AC_SUBST([PTHREAD_CXX])
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
if test x"$ax_pthread_ok" = xyes; then
|
||||
ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
|
||||
:
|
||||
else
|
||||
|
|
81
m4/getopt.m4
81
m4/getopt.m4
|
@ -1,72 +1,71 @@
|
|||
dnl SPDX-License-Identifier: FSFULLR
|
||||
|
||||
# getopt.m4 serial 49 (modified version)
|
||||
dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
|
||||
# getopt.m4 serial 14 (modified version)
|
||||
dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This version has been modified to reduce complexity since we only need
|
||||
# GNU getopt_long and do not care about replacing getopt.
|
||||
# The getopt module assume you want GNU getopt, with getopt_long etc,
|
||||
# rather than vanilla POSIX getopt. This means your code should
|
||||
# always include <getopt.h> for the getopt prototypes.
|
||||
|
||||
# Check for a POSIX compliant getopt function with GNU extensions (such as
|
||||
# options with optional arguments) and the functions getopt_long,
|
||||
# getopt_long_only.
|
||||
AC_DEFUN([gl_FUNC_GETOPT_GNU],
|
||||
AC_DEFUN([gl_GETOPT_SUBSTITUTE],
|
||||
[
|
||||
AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
|
||||
AC_LIBOBJ([getopt])
|
||||
AC_LIBOBJ([getopt1])
|
||||
gl_GETOPT_SUBSTITUTE_HEADER
|
||||
])
|
||||
|
||||
if test -n "$gl_replace_getopt"; then
|
||||
gl_GETOPT_SUBSTITUTE
|
||||
fi
|
||||
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
|
||||
[
|
||||
GETOPT_H=getopt.h
|
||||
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
|
||||
[Define to rpl_ if the getopt replacement functions and variables
|
||||
should be used.])
|
||||
AC_SUBST([GETOPT_H])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
|
||||
[
|
||||
gl_replace_getopt=
|
||||
|
||||
if test -z "$gl_replace_getopt"; then
|
||||
AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
|
||||
if test -z "$GETOPT_H"; then
|
||||
AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h])
|
||||
fi
|
||||
|
||||
if test -z "$gl_replace_getopt"; then
|
||||
AC_CHECK_FUNCS([getopt_long], [], [gl_replace_getopt=yes])
|
||||
if test -z "$GETOPT_H"; then
|
||||
AC_CHECK_FUNCS([getopt_long], [], [GETOPT_H=getopt.h])
|
||||
fi
|
||||
|
||||
dnl BSD getopt_long uses a way to reset option processing, that is different
|
||||
dnl from GNU and Solaris (which copied the GNU behavior). We support both
|
||||
dnl GNU and BSD style resetting of getopt_long(), so there's no need to use
|
||||
dnl GNU getopt_long() on BSD due to different resetting style.
|
||||
if test -z "$gl_replace_getopt"; then
|
||||
dnl
|
||||
dnl With getopt_long(), some BSD versions have a bug in handling optional
|
||||
dnl arguments. This bug appears only if the environment variable
|
||||
dnl POSIXLY_CORRECT has been set, so it shouldn't be too bad in most
|
||||
dnl cases; probably most don't have that variable set. But if we actually
|
||||
dnl hit this bug, it is a real problem due to our heavy use of optional
|
||||
dnl arguments.
|
||||
dnl
|
||||
dnl According to CVS logs, the bug was introduced in OpenBSD in 2003-09-22
|
||||
dnl and copied to FreeBSD in 2004-02-24. It was fixed in both in 2006-09-22,
|
||||
dnl so the affected versions shouldn't be popular anymore anyway. NetBSD
|
||||
dnl never had this bug. TODO: What about Darwin and others?
|
||||
if test -z "$GETOPT_H"; then
|
||||
AC_CHECK_DECL([optreset],
|
||||
[AC_DEFINE([HAVE_OPTRESET], 1,
|
||||
[Define to 1 if getopt.h declares extern int optreset.])],
|
||||
[], [#include <getopt.h>])
|
||||
fi
|
||||
|
||||
dnl POSIX 2008 does not specify leading '+' behavior, but see
|
||||
dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
|
||||
dnl the next version of POSIX. We don't use that feature, so this
|
||||
dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
|
||||
dnl option string (as of 2005-05-05). We don't use that feature, so this
|
||||
dnl is not a problem for us. Thus, the respective test was removed here.
|
||||
|
||||
dnl Checks for getopt handling '-' as a leading character in an option
|
||||
dnl string were removed, since we also don't use that feature.
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_GETOPT_SUBSTITUTE],
|
||||
AC_DEFUN([gl_GETOPT_IFELSE],
|
||||
[
|
||||
AC_LIBOBJ([getopt])
|
||||
AC_LIBOBJ([getopt1])
|
||||
|
||||
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
|
||||
|
||||
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
|
||||
[Define to rpl_ if the getopt replacement functions and variables
|
||||
should be used.])
|
||||
|
||||
GETOPT_H=getopt.h
|
||||
AC_SUBST([GETOPT_H])
|
||||
AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
|
||||
AS_IF([test -n "$GETOPT_H"], [$1], [$2])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_GETOPT], [gl_FUNC_GETOPT_GNU])
|
||||
AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])])
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
dnl SPDX-License-Identifier: FSFULLR
|
||||
|
||||
# Find a POSIX-conforming shell.
|
||||
|
||||
# Copyright (C) 2007-2008 Free Software Foundation, Inc.
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -10,11 +7,13 @@
|
|||
#
|
||||
# Common checks for tuklib.
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_COMMON], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -12,19 +9,17 @@
|
|||
# This information is used by tuklib_cpucores.c.
|
||||
#
|
||||
# Supported methods:
|
||||
# - GetSystemInfo(): Windows (including Cygwin)
|
||||
# - sched_getaffinity(): glibc (GNU/Linux, GNU/kFreeBSD)
|
||||
# - cpuset_getaffinity(): FreeBSD
|
||||
# - sysctl(): BSDs, OS/2
|
||||
# - sysconf(): GNU/Linux, Solaris, Tru64, IRIX, AIX, QNX, Cygwin (but
|
||||
# GetSystemInfo() is used on Cygwin)
|
||||
# - sysconf(): GNU/Linux, Solaris, Tru64, IRIX, AIX, Cygwin
|
||||
# - pstat_getdynamic(): HP-UX
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_CPUCORES], [
|
||||
AC_REQUIRE([TUKLIB_COMMON])
|
||||
|
@ -35,67 +30,11 @@ AC_CHECK_HEADERS([sys/param.h])
|
|||
AC_CACHE_CHECK([how to detect the number of available CPU cores],
|
||||
[tuklib_cv_cpucores_method], [
|
||||
|
||||
# Maybe checking $host_os would be enough but this matches what
|
||||
# tuklib_cpucores.c does.
|
||||
#
|
||||
# NOTE: IRIX has a compiler that doesn't error out with #error, so use
|
||||
# a non-compilable text instead of #error to generate an error.
|
||||
# Look for sysctl() solution first, because on OS/2, both sysconf()
|
||||
# and sysctl() pass the tests in this file, but only sysctl()
|
||||
# actually works.
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
int main(void) { return 0; }
|
||||
#else
|
||||
compile error
|
||||
#endif
|
||||
]])], [tuklib_cv_cpucores_method=special], [
|
||||
|
||||
# glibc-based systems (GNU/Linux and GNU/kFreeBSD) have sched_getaffinity().
|
||||
# The CPU_COUNT() macro was added in glibc 2.9 so we try to link the
|
||||
# test program instead of merely compiling it. glibc 2.9 is old enough that
|
||||
# if someone uses the code on older glibc, the fallback to sysconf() should
|
||||
# be good enough.
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <sched.h>
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
cpu_set_t cpu_mask;
|
||||
sched_getaffinity(0, sizeof(cpu_mask), &cpu_mask);
|
||||
return CPU_COUNT(&cpu_mask);
|
||||
}
|
||||
]])], [tuklib_cv_cpucores_method=sched_getaffinity], [
|
||||
|
||||
# FreeBSD has both cpuset and sysctl. Look for cpuset first because
|
||||
# it's a better approach.
|
||||
#
|
||||
# This test would match on GNU/kFreeBSD too but it would require
|
||||
# -lfreebsd-glue when linking and thus in the current form this would
|
||||
# fail on GNU/kFreeBSD. The above test for sched_getaffinity() matches
|
||||
# on GNU/kFreeBSD so the test below should never run on that OS.
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <sys/param.h>
|
||||
#include <sys/cpuset.h>
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
cpuset_t set;
|
||||
cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1,
|
||||
sizeof(set), &set);
|
||||
return 0;
|
||||
}
|
||||
]])], [tuklib_cv_cpucores_method=cpuset], [
|
||||
|
||||
# On OS/2, both sysconf() and sysctl() pass the tests in this file,
|
||||
# but only sysctl() works. On QNX it's the opposite: only sysconf() works
|
||||
# (although it assumes that _POSIX_SOURCE, _XOPEN_SOURCE, and _POSIX_C_SOURCE
|
||||
# are undefined or alternatively _QNX_SOURCE is defined).
|
||||
#
|
||||
# We test sysctl() first and intentionally break the sysctl() test on QNX
|
||||
# so that sysctl() is never used on QNX.
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#ifdef __QNX__
|
||||
compile error
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
@ -103,12 +42,7 @@ compile error
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
#ifdef HW_NCPUONLINE
|
||||
/* This is preferred on OpenBSD, see tuklib_cpucores.c. */
|
||||
int name[2] = { CTL_HW, HW_NCPUONLINE };
|
||||
#else
|
||||
int name[2] = { CTL_HW, HW_NCPU };
|
||||
#endif
|
||||
int cpus;
|
||||
size_t cpus_size = sizeof(cpus);
|
||||
sysctl(name, 2, &cpus, &cpus_size, NULL, 0);
|
||||
|
@ -148,19 +82,9 @@ main(void)
|
|||
]])], [tuklib_cv_cpucores_method=pstat_getdynamic], [
|
||||
|
||||
tuklib_cv_cpucores_method=unknown
|
||||
])])])])])])])
|
||||
])])])])
|
||||
|
||||
case $tuklib_cv_cpucores_method in
|
||||
sched_getaffinity)
|
||||
AC_DEFINE([TUKLIB_CPUCORES_SCHED_GETAFFINITY], [1],
|
||||
[Define to 1 if the number of available CPU cores
|
||||
can be detected with sched_getaffinity()])
|
||||
;;
|
||||
cpuset)
|
||||
AC_DEFINE([TUKLIB_CPUCORES_CPUSET], [1],
|
||||
[Define to 1 if the number of available CPU cores
|
||||
can be detected with cpuset(2).])
|
||||
;;
|
||||
sysctl)
|
||||
AC_DEFINE([TUKLIB_CPUCORES_SYSCTL], [1],
|
||||
[Define to 1 if the number of available CPU cores
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -10,38 +7,25 @@
|
|||
#
|
||||
# Checks for tuklib_integer.h:
|
||||
# - Endianness
|
||||
# - Does the compiler or the operating system provide byte swapping macros
|
||||
# - Does the hardware support fast unaligned access to 16-bit, 32-bit,
|
||||
# and 64-bit integers
|
||||
# - Does operating system provide byte swapping macros
|
||||
# - Does the hardware support fast unaligned access to 16-bit
|
||||
# and 32-bit integers
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_INTEGER], [
|
||||
AC_REQUIRE([TUKLIB_COMMON])
|
||||
AC_REQUIRE([AC_C_BIGENDIAN])
|
||||
AC_CHECK_HEADERS([byteswap.h sys/endian.h sys/byteorder.h], [break])
|
||||
|
||||
AC_MSG_CHECKING([if __builtin_bswap16/32/64 are supported])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||
[[__builtin_bswap16(1);
|
||||
__builtin_bswap32(1);
|
||||
__builtin_bswap64(1);]])],
|
||||
[
|
||||
AC_DEFINE([HAVE___BUILTIN_BSWAPXX], [1],
|
||||
[Define to 1 if the GNU C extensions
|
||||
__builtin_bswap16/32/64 are supported.])
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
AC_MSG_RESULT([no])
|
||||
|
||||
# Look for other byteswapping methods.
|
||||
AC_CHECK_HEADERS([byteswap.h sys/endian.h sys/byteorder.h], [break])
|
||||
|
||||
# Even if we have byteswap.h we may lack the specific macros/functions.
|
||||
if test x$ac_cv_header_byteswap_h = xyes ; then
|
||||
# Even if we have byteswap.h, we may lack the specific macros/functions.
|
||||
if test x$ac_cv_header_byteswap_h = xyes ; then
|
||||
m4_foreach([FUNC], [bswap_16,bswap_32,bswap_64], [
|
||||
AC_MSG_CHECKING([if FUNC is available])
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
|
@ -59,54 +43,21 @@ main(void)
|
|||
], [AC_MSG_RESULT([no])])
|
||||
|
||||
])dnl
|
||||
fi
|
||||
])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if unaligned memory access should be used])
|
||||
AC_ARG_ENABLE([unaligned-access], AS_HELP_STRING([--enable-unaligned-access],
|
||||
AC_ARG_ENABLE([unaligned-access], AC_HELP_STRING([--enable-unaligned-access],
|
||||
[Enable if the system supports *fast* unaligned memory access
|
||||
with 16-bit, 32-bit, and 64-bit integers. By default,
|
||||
this is enabled on x86, x86-64,
|
||||
32/64-bit big endian PowerPC,
|
||||
64-bit little endian PowerPC,
|
||||
and some ARM, ARM64, and RISC-V systems.]),
|
||||
with 16-bit and 32-bit integers. By default, this is enabled
|
||||
only on x86, x86_64, and big endian PowerPC.]),
|
||||
[], [enable_unaligned_access=auto])
|
||||
if test "x$enable_unaligned_access" = xauto ; then
|
||||
# NOTE: There might be other architectures on which unaligned access
|
||||
# is fast.
|
||||
# TODO: There may be other architectures, on which unaligned access
|
||||
# is OK.
|
||||
case $host_cpu in
|
||||
i?86|x86_64|powerpc|powerpc64|powerpc64le)
|
||||
i?86|x86_64|powerpc|powerpc64)
|
||||
enable_unaligned_access=yes
|
||||
;;
|
||||
arm*|aarch64*|riscv*)
|
||||
# On 32-bit and 64-bit ARM, GCC and Clang
|
||||
# #define __ARM_FEATURE_UNALIGNED if
|
||||
# unaligned access is supported.
|
||||
#
|
||||
# Exception: GCC at least up to 13.2.0
|
||||
# defines it even when using -mstrict-align
|
||||
# so in that case this autodetection goes wrong.
|
||||
# Most of the time -mstrict-align isn't used so it
|
||||
# shouldn't be a common problem in practice. See:
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111555
|
||||
#
|
||||
# RISC-V C API Specification says that if
|
||||
# __riscv_misaligned_fast is defined then
|
||||
# unaligned access is known to be fast.
|
||||
#
|
||||
# MSVC is handled as a special case: We assume that
|
||||
# 32/64-bit ARM supports fast unaligned access.
|
||||
# If MSVC gets RISC-V support then this will assume
|
||||
# fast unaligned access on RISC-V too.
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||
#if !defined(__ARM_FEATURE_UNALIGNED) \
|
||||
&& !defined(__riscv_misaligned_fast) \
|
||||
&& !defined(_MSC_VER)
|
||||
compile error
|
||||
#endif
|
||||
int main(void) { return 0; }
|
||||
])], [enable_unaligned_access=yes], [enable_unaligned_access=no])
|
||||
;;
|
||||
*)
|
||||
enable_unaligned_access=no
|
||||
;;
|
||||
|
@ -114,39 +65,10 @@ int main(void) { return 0; }
|
|||
fi
|
||||
if test "x$enable_unaligned_access" = xyes ; then
|
||||
AC_DEFINE([TUKLIB_FAST_UNALIGNED_ACCESS], [1], [Define to 1 if
|
||||
the system supports fast unaligned access to 16-bit,
|
||||
32-bit, and 64-bit integers.])
|
||||
the system supports fast unaligned access to 16-bit and
|
||||
32-bit integers.])
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if unsafe type punning should be used])
|
||||
AC_ARG_ENABLE([unsafe-type-punning],
|
||||
AS_HELP_STRING([--enable-unsafe-type-punning],
|
||||
[This introduces strict aliasing violations and may result
|
||||
in broken code. However, this might improve performance in
|
||||
some cases, especially with old compilers (e.g.
|
||||
GCC 3 and early 4.x on x86, GCC < 6 on ARMv6 and ARMv7).]),
|
||||
[], [enable_unsafe_type_punning=no])
|
||||
if test "x$enable_unsafe_type_punning" = xyes ; then
|
||||
AC_DEFINE([TUKLIB_USE_UNSAFE_TYPE_PUNNING], [1], [Define to 1 to use
|
||||
unsafe type punning, e.g. char *x = ...; *(int *)x = 123;
|
||||
which violates strict aliasing rules and thus is
|
||||
undefined behavior and might result in broken code.])
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if __builtin_assume_aligned is supported])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[__builtin_assume_aligned("", 1);]])],
|
||||
[
|
||||
AC_DEFINE([HAVE___BUILTIN_ASSUME_ALIGNED], [1],
|
||||
[Define to 1 if the GNU C extension
|
||||
__builtin_assume_aligned is supported.])
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
AC_MSG_RESULT([no])
|
||||
])
|
||||
])dnl
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -18,11 +15,13 @@
|
|||
# functions, but each function is put into a separate .c file so
|
||||
# that it is possible to pick only what is strictly needed.
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_MBSTR], [
|
||||
AC_REQUIRE([TUKLIB_COMMON])
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -13,8 +10,8 @@
|
|||
#
|
||||
# Supported methods:
|
||||
#
|
||||
# - Windows (including Cygwin), OS/2, DJGPP (DOS), OpenVMS, AROS,
|
||||
# and QNX have operating-system specific functions.
|
||||
# - Windows (including Cygwin), OS/2, DJGPP (DOS), and OpenVMS have
|
||||
# operating-system specific functions.
|
||||
#
|
||||
# - AIX has _system_configuration.physmem.
|
||||
#
|
||||
|
@ -32,11 +29,13 @@
|
|||
# - sysinfo() works on Linux/dietlibc and probably on other Linux
|
||||
# systems whose libc may lack sysconf().
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_PHYSMEM], [
|
||||
AC_REQUIRE([TUKLIB_COMMON])
|
||||
|
@ -55,7 +54,7 @@ AC_CACHE_CHECK([how to detect the amount of physical memory],
|
|||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__OS2__) \
|
||||
|| defined(__DJGPP__) || defined(__VMS) \
|
||||
|| defined(AMIGA) || defined(__AROS__) || defined(__QNX__)
|
||||
|| defined(AMIGA) || defined(__AROS__)
|
||||
int main(void) { return 0; }
|
||||
#else
|
||||
compile error
|
||||
|
@ -89,6 +88,7 @@ main(void)
|
|||
]])], [tuklib_cv_physmem_method=sysconf], [
|
||||
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
|
@ -14,16 +11,15 @@
|
|||
# This .m4 file is needed allow this module to use glibc's
|
||||
# program_invocation_name.
|
||||
#
|
||||
#############################################################################
|
||||
# COPYING
|
||||
#
|
||||
# Author: Lasse Collin
|
||||
#
|
||||
#############################################################################
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
#
|
||||
|
||||
AC_DEFUN_ONCE([TUKLIB_PROGNAME], [
|
||||
AC_REQUIRE([TUKLIB_COMMON])
|
||||
AC_CHECK_DECL([program_invocation_name], [AC_DEFINE(
|
||||
[HAVE_PROGRAM_INVOCATION_NAME], [1],
|
||||
[Define to 1 if 'program_invocation_name' is declared in <errno.h>.])],
|
||||
[], [#include <errno.h>])
|
||||
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
|
||||
])dnl
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
dnl SPDX-License-Identifier: FSFULLR
|
||||
|
||||
# visibility.m4 serial 8
|
||||
dnl Copyright (C) 2005, 2008, 2010-2023 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl From Bruno Haible.
|
||||
|
||||
dnl Tests whether the compiler supports the command-line option
|
||||
dnl -fvisibility=hidden and the function and variable attributes
|
||||
dnl __attribute__((__visibility__("hidden"))) and
|
||||
dnl __attribute__((__visibility__("default"))).
|
||||
dnl Does *not* test for __visibility__("protected") - which has tricky
|
||||
dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
|
||||
dnl Mac OS X.
|
||||
dnl Does *not* test for __visibility__("internal") - which has processor
|
||||
dnl dependent semantics.
|
||||
dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
|
||||
dnl "really only recommended for legacy code".
|
||||
dnl Set the variable CFLAG_VISIBILITY.
|
||||
dnl Defines and sets the variable HAVE_VISIBILITY.
|
||||
|
||||
AC_DEFUN([gl_VISIBILITY],
|
||||
[
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
CFLAG_VISIBILITY=
|
||||
HAVE_VISIBILITY=0
|
||||
if test -n "$GCC"; then
|
||||
dnl First, check whether -Werror can be added to the command line, or
|
||||
dnl whether it leads to an error because of some other option that the
|
||||
dnl user has put into $CC $CFLAGS $CPPFLAGS.
|
||||
AC_CACHE_CHECK([whether the -Werror option is usable],
|
||||
[gl_cv_cc_vis_werror],
|
||||
[gl_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -Werror"
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[]], [[]])],
|
||||
[gl_cv_cc_vis_werror=yes],
|
||||
[gl_cv_cc_vis_werror=no])
|
||||
CFLAGS="$gl_save_CFLAGS"
|
||||
])
|
||||
dnl Now check whether visibility declarations are supported.
|
||||
AC_CACHE_CHECK([for simple visibility declarations],
|
||||
[gl_cv_cc_visibility],
|
||||
[gl_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fvisibility=hidden"
|
||||
dnl We use the option -Werror and a function dummyfunc, because on some
|
||||
dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
|
||||
dnl "visibility attribute not supported in this configuration; ignored"
|
||||
dnl at the first function definition in every compilation unit, and we
|
||||
dnl don't want to use the option in this case.
|
||||
if test $gl_cv_cc_vis_werror = yes; then
|
||||
CFLAGS="$CFLAGS -Werror"
|
||||
fi
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[extern __attribute__((__visibility__("hidden"))) int hiddenvar;
|
||||
extern __attribute__((__visibility__("default"))) int exportedvar;
|
||||
extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
|
||||
extern __attribute__((__visibility__("default"))) int exportedfunc (void);
|
||||
void dummyfunc (void);
|
||||
int hiddenvar;
|
||||
int exportedvar;
|
||||
int hiddenfunc (void) { return 51; }
|
||||
int exportedfunc (void) { return 1225736919; }
|
||||
void dummyfunc (void) {}
|
||||
]],
|
||||
[[]])],
|
||||
[gl_cv_cc_visibility=yes],
|
||||
[gl_cv_cc_visibility=no])
|
||||
CFLAGS="$gl_save_CFLAGS"
|
||||
])
|
||||
if test $gl_cv_cc_visibility = yes; then
|
||||
CFLAG_VISIBILITY="-fvisibility=hidden"
|
||||
HAVE_VISIBILITY=1
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CFLAG_VISIBILITY])
|
||||
AC_SUBST([HAVE_VISIBILITY])
|
||||
AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
|
||||
[Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
|
||||
])
|
|
@ -0,0 +1,113 @@
|
|||
#!/bin/sh
|
||||
|
||||
###############################################################################
|
||||
# Author: Anders F Björklund <afb@users.sourceforge.net>
|
||||
#
|
||||
# This file has been put into the public domain.
|
||||
# You can do whatever you want with this file.
|
||||
###############################################################################
|
||||
|
||||
mkdir -p Root
|
||||
mkdir -p Resources
|
||||
|
||||
# Abort immediately if something goes wrong.
|
||||
set -e
|
||||
|
||||
GCC="gcc-4.2"
|
||||
SDK="/Developer/SDKs/MacOSX10.5.sdk"
|
||||
MDT="10.5"
|
||||
GTT=i686-apple-darwin9
|
||||
|
||||
ARCHES1="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
|
||||
ARCHES2="-arch ppc -arch i386"
|
||||
PKGFORMAT="10.5" # xar
|
||||
|
||||
# avoid "unknown required load command: 0x80000022" from linking on Snow Leopard
|
||||
uname -r | grep ^1 >/dev/null && LDFLAGS="$LDFLAGS -Wl,-no_compact_linkedit"
|
||||
|
||||
# Clean up if it was already configured.
|
||||
[ -f Makefile ] && make distclean
|
||||
|
||||
# Build the regular fat program
|
||||
|
||||
CC="$GCC" \
|
||||
CFLAGS="-O2 -g $ARCHES1 -isysroot $SDK -mmacosx-version-min=$MDT" \
|
||||
../configure --disable-dependency-tracking --disable-xzdec --disable-lzmadec $GTT
|
||||
|
||||
make
|
||||
|
||||
make check
|
||||
|
||||
make DESTDIR=`pwd`/Root install
|
||||
|
||||
make distclean
|
||||
|
||||
# Build the size-optimized program
|
||||
|
||||
CC="$GCC" \
|
||||
CFLAGS="-Os -g $ARCHES2 -isysroot $SDK -mmacosx-version-min=$MDT" \
|
||||
../configure --disable-dependency-tracking --disable-shared --disable-nls --disable-encoders --enable-small --disable-threads $GTT
|
||||
|
||||
make -C src/liblzma
|
||||
make -C src/xzdec
|
||||
make -C src/xzdec DESTDIR=`pwd`/Root install
|
||||
|
||||
cp -a ../extra Root/usr/local/share/doc/xz
|
||||
|
||||
make distclean
|
||||
|
||||
# Move development files to different package
|
||||
|
||||
test -d liblzma && rm -r liblzma
|
||||
mkdir -p liblzma/usr/local
|
||||
|
||||
mv Root/usr/local/include liblzma/usr/local
|
||||
mv Root/usr/local/lib liblzma/usr/local
|
||||
|
||||
mkdir -p Root/usr/local/lib
|
||||
cp -p liblzma/usr/local/lib/liblzma.5.dylib Root/usr/local/lib
|
||||
mkdir -p liblzma/usr/local/share/doc/xz
|
||||
mv Root/usr/local/share/doc/xz/examples* liblzma/usr/local/share/doc/xz
|
||||
|
||||
# Strip debugging symbols and make relocatable
|
||||
|
||||
for bin in xz lzmainfo xzdec lzmadec; do
|
||||
strip -S Root/usr/local/bin/$bin
|
||||
install_name_tool -change /usr/local/lib/liblzma.5.dylib @executable_path/../lib/liblzma.5.dylib Root/usr/local/bin/$bin
|
||||
done
|
||||
|
||||
for lib in liblzma.5.dylib; do
|
||||
strip -S Root/usr/local/lib/$lib
|
||||
install_name_tool -id @executable_path/../lib/liblzma.5.dylib Root/usr/local/lib/$lib
|
||||
done
|
||||
|
||||
# Create tarball, but without the HFS+ attrib
|
||||
|
||||
rmdir debug lib po src/liblzma/api src/liblzma src/lzmainfo src/scripts src/xz src/xzdec src tests
|
||||
|
||||
( cd Root/usr/local; COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar cvjf ../../../XZ.tbz * )
|
||||
( cd liblzma; COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar cvjf ../liblzma.tbz ./usr/local )
|
||||
|
||||
# Include documentation files for package
|
||||
|
||||
cp -p ../README Resources/ReadMe.txt
|
||||
cp -p ../COPYING Resources/License.txt
|
||||
|
||||
# Make an Installer.app package
|
||||
|
||||
ID="org.tukaani.xz"
|
||||
VERSION=`cd ..; sh build-aux/version.sh`
|
||||
PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
|
||||
$PACKAGEMAKER -r Root/usr/local -l /usr/local -e Resources -i $ID -n $VERSION -t XZ -o XZ.pkg -g $PKGFORMAT --verbose
|
||||
$PACKAGEMAKER -r liblzma -w -k -i $ID.liblzma -n $VERSION -o liblzma.pkg -g $PKGFORMAT --verbose
|
||||
|
||||
# Put the package in a disk image
|
||||
|
||||
if [ "$PKGFORMAT" != "10.5" ]; then
|
||||
hdiutil create -fs HFS+ -format UDZO -quiet -srcfolder XZ.pkg -ov XZ.dmg
|
||||
hdiutil internet-enable -yes -quiet XZ.dmg
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Build completed successfully."
|
||||
echo
|
18
po/LINGUAS
18
po/LINGUAS
|
@ -1,23 +1,5 @@
|
|||
ca
|
||||
cs
|
||||
da
|
||||
de
|
||||
eo
|
||||
es
|
||||
fi
|
||||
fr
|
||||
hr
|
||||
hu
|
||||
it
|
||||
ko
|
||||
pl
|
||||
pt
|
||||
pt_BR
|
||||
ro
|
||||
sr
|
||||
sv
|
||||
tr
|
||||
uk
|
||||
vi
|
||||
zh_CN
|
||||
zh_TW
|
||||
|
|
53
po/Makevars
53
po/Makevars
|
@ -1,10 +1,4 @@
|
|||
# SPDX-License-Identifier: FSFUL
|
||||
|
||||
# Makefile variables for PO directory in any package using GNU gettext.
|
||||
#
|
||||
# Copyright (C) 2003-2019 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to use, copy, distribute, and modify it.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
DOMAIN = $(PACKAGE)
|
||||
|
@ -14,7 +8,7 @@ subdir = po
|
|||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-wrap --package-name='XZ Utils'
|
||||
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
|
@ -24,14 +18,7 @@ XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-wrap --package-name='XZ Utils'
|
|||
# or entity, or to disclaim their copyright. The empty string stands for
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = The XZ Utils authors and contributors
|
||||
|
||||
# This tells whether or not to prepend "GNU " prefix to the package
|
||||
# name that gets inserted into the header of the $(DOMAIN).pot file.
|
||||
# Possible values are "yes", "no", or empty. If it is empty, try to
|
||||
# detect it automatically by scanning the files in $(top_srcdir) for
|
||||
# "GNU packagename" string.
|
||||
PACKAGE_GNU = no
|
||||
COPYRIGHT_HOLDER =
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
|
@ -53,35 +40,7 @@ MSGID_BUGS_ADDRESS =
|
|||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
||||
|
||||
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
|
||||
# context. Possible values are "yes" and "no". Set this to yes if the
|
||||
# package uses functions taking also a message context, like pgettext(), or
|
||||
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
|
||||
USE_MSGCTXT = no
|
||||
|
||||
# These options get passed to msgmerge.
|
||||
# Useful options are in particular:
|
||||
# --previous to keep previous msgids of translated messages,
|
||||
# --quiet to reduce the verbosity.
|
||||
MSGMERGE_OPTIONS = --no-wrap
|
||||
|
||||
# These options get passed to msginit.
|
||||
# If you want to disable line wrapping when writing PO files, add
|
||||
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
|
||||
# MSGINIT_OPTIONS.
|
||||
#
|
||||
# Although one may need slightly wider terminal than 80 chars, it is
|
||||
# much nicer to edit the output of --help when --no-wrap is set.
|
||||
MSGINIT_OPTIONS = --no-wrap
|
||||
|
||||
# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
|
||||
# has changed. Possible values are "yes" and "no". Set this to no if
|
||||
# the POT file is checked in the repository and the version control
|
||||
# program ignores timestamps.
|
||||
PO_DEPENDS_ON_POT = yes
|
||||
|
||||
# This tells whether or not to forcibly update $(DOMAIN).pot and
|
||||
# regenerate PO files on "make dist". Possible values are "yes" and
|
||||
# "no". Set this to no if the POT file and PO files are maintained
|
||||
# externally.
|
||||
DIST_DEPENDS_ON_UPDATE_PO = yes
|
||||
# Although you may need slightly wider terminal than 80 chars, it is
|
||||
# much nicer to edit the output of --help when this is set.
|
||||
XGETTEXT_OPTIONS += --no-wrap
|
||||
MSGMERGE += --no-wrap
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
# SPDX-License-Identifier: 0BSD
|
||||
|
||||
# List of source files which contain translatable strings.
|
||||
src/xz/args.c
|
||||
src/xz/coder.c
|
||||
|
@ -8,10 +6,8 @@ src/xz/hardware.c
|
|||
src/xz/list.c
|
||||
src/xz/main.c
|
||||
src/xz/message.c
|
||||
src/xz/mytime.c
|
||||
src/xz/options.c
|
||||
src/xz/signals.c
|
||||
src/xz/suffix.c
|
||||
src/xz/util.c
|
||||
src/lzmainfo/lzmainfo.c
|
||||
src/common/tuklib_exit.c
|
||||
|
|
896
po/da.po
896
po/da.po
|
@ -1,896 +0,0 @@
|
|||
# Danish translation xz.
|
||||
# This file is put in the public domain.
|
||||
# Joe Hansen <joedalton2@yahoo.dk>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: xz 5.2.4\n"
|
||||
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
|
||||
"POT-Creation-Date: 2018-04-29 18:19+0300\n"
|
||||
"PO-Revision-Date: 2019-03-04 23:08+0100\n"
|
||||
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
|
||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
||||
"Language: da\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/xz/args.c:63
|
||||
#, c-format
|
||||
msgid "%s: Invalid argument to --block-list"
|
||||
msgstr "%s: Ugyldigt parameter til --block-list"
|
||||
|
||||
#: src/xz/args.c:73
|
||||
#, c-format
|
||||
msgid "%s: Too many arguments to --block-list"
|
||||
msgstr "%s: For mange argumenter til --block-list"
|
||||
|
||||
#: src/xz/args.c:102
|
||||
msgid "0 can only be used as the last element in --block-list"
|
||||
msgstr "0 kan kun bruges som det sidste element i --block-list"
|
||||
|
||||
#: src/xz/args.c:406
|
||||
#, c-format
|
||||
msgid "%s: Unknown file format type"
|
||||
msgstr "%s: Ukendt filformattype"
|
||||
|
||||
#: src/xz/args.c:429 src/xz/args.c:437
|
||||
#, c-format
|
||||
msgid "%s: Unsupported integrity check type"
|
||||
msgstr "%s: Typen for integritetkontrol er ikke understøttet"
|
||||
|
||||
#: src/xz/args.c:473
|
||||
msgid "Only one file can be specified with `--files' or `--files0'."
|
||||
msgstr "Kun en fil kan angives med »--files« eller »--files0«."
|
||||
|
||||
#: src/xz/args.c:541
|
||||
#, c-format
|
||||
msgid "The environment variable %s contains too many arguments"
|
||||
msgstr "Miljøvariablen %s indeholder for mange argumenter"
|
||||
|
||||
#: src/xz/args.c:643
|
||||
msgid "Compression support was disabled at build time"
|
||||
msgstr "Komprimeringsunderstøttelse blev deaktiveret på byggetidspunktet"
|
||||
|
||||
#: src/xz/args.c:650
|
||||
msgid "Decompression support was disabled at build time"
|
||||
msgstr "Dekomprimeringsunderstøttelse blev deaktiveret på byggetidspunktet"
|
||||
|
||||
#: src/xz/coder.c:110
|
||||
msgid "Maximum number of filters is four"
|
||||
msgstr "Maksimalt antal filtre er fire"
|
||||
|
||||
#: src/xz/coder.c:129
|
||||
msgid "Memory usage limit is too low for the given filter setup."
|
||||
msgstr "Begræsningen for brug af hukommelse er for lav for den givne filteropsætning."
|
||||
|
||||
#: src/xz/coder.c:159
|
||||
msgid "Using a preset in raw mode is discouraged."
|
||||
msgstr "Det frarådes at bruge en forhåndskonfiguration i rå tilstand (raw mode)."
|
||||
|
||||
#: src/xz/coder.c:161
|
||||
msgid "The exact options of the presets may vary between software versions."
|
||||
msgstr "De præcise indstillinger for forhåndskonfigurationerne kan variere mellem programversioner."
|
||||
|
||||
#: src/xz/coder.c:184
|
||||
msgid "The .lzma format supports only the LZMA1 filter"
|
||||
msgstr "Formatet .lzma understøtter kun LZMA1-filteret"
|
||||
|
||||
#: src/xz/coder.c:192
|
||||
msgid "LZMA1 cannot be used with the .xz format"
|
||||
msgstr "LZMA1 kan ikke bruges med .xz-formatet"
|
||||
|
||||
#: src/xz/coder.c:209
|
||||
msgid "The filter chain is incompatible with --flush-timeout"
|
||||
msgstr "Filterkæden er ikke kompatibel med --flush-timeout"
|
||||
|
||||
#: src/xz/coder.c:215
|
||||
msgid "Switching to single-threaded mode due to --flush-timeout"
|
||||
msgstr "Skifter til enkelt trådet tilstand på grund af --flush-timeout"
|
||||
|
||||
#: src/xz/coder.c:235
|
||||
#, c-format
|
||||
msgid "Using up to %<PRIu32> threads."
|
||||
msgstr "Bruger op til %<PRIu32> tråde."
|
||||
|
||||
#: src/xz/coder.c:251
|
||||
msgid "Unsupported filter chain or filter options"
|
||||
msgstr "Filterkæde eller filterindstillinger er ikke understøttet"
|
||||
|
||||
#: src/xz/coder.c:263
|
||||
#, c-format
|
||||
msgid "Decompression will need %s MiB of memory."
|
||||
msgstr "Dekomprimering vil kræve %s MiB hukommelse."
|
||||
|
||||
#: src/xz/coder.c:300
|
||||
#, c-format
|
||||
msgid "Adjusted the number of threads from %s to %s to not exceed the memory usage limit of %s MiB"
|
||||
msgstr "Justerede antallet af tråde fra %s til %s for ikke at overskride begræsningen på brug af hukommelse på %s MiB"
|
||||
|
||||
#: src/xz/coder.c:354
|
||||
#, c-format
|
||||
msgid "Adjusted LZMA%c dictionary size from %s MiB to %s MiB to not exceed the memory usage limit of %s MiB"
|
||||
msgstr "Justerede LZMA%c-ordbogsstørrelsen fra %s MiB til %s MiB for ikke at overskride begrænsningen på brug af hukommelse på %s MiB"
|
||||
|
||||
#: src/xz/file_io.c:110 src/xz/file_io.c:118
|
||||
#, c-format
|
||||
msgid "Error creating a pipe: %s"
|
||||
msgstr "Det opstod en fejl under oprettelse af en datakanal: %s"
|
||||
|
||||
#: src/xz/file_io.c:173
|
||||
msgid "Sandbox is disabled due to incompatible command line arguments"
|
||||
msgstr "Sandkassen er deaktiveret på grund af inkompatible kommandolinjeargumenter"
|
||||
|
||||
#: src/xz/file_io.c:216
|
||||
msgid "Sandbox was successfully enabled"
|
||||
msgstr "Sandkassen blev aktiveret"
|
||||
|
||||
#: src/xz/file_io.c:220
|
||||
msgid "Failed to enable the sandbox"
|
||||
msgstr "Kunne ikke aktivere sandkassen"
|
||||
|
||||
#: src/xz/file_io.c:262
|
||||
#, c-format
|
||||
msgid "%s: poll() failed: %s"
|
||||
msgstr "%s: poll() mislykkedes: %s"
|
||||
|
||||
#. TRANSLATORS: When compression or decompression finishes,
|
||||
#. and xz is going to remove the source file, xz first checks
|
||||
#. if the source file still exists, and if it does, does its
|
||||
#. device and inode numbers match what xz saw when it opened
|
||||
#. the source file. If these checks fail, this message is
|
||||
#. shown, %s being the filename, and the file is not deleted.
|
||||
#. The check for device and inode numbers is there, because
|
||||
#. it is possible that the user has put a new file in place
|
||||
#. of the original file, and in that case it obviously
|
||||
#. shouldn't be removed.
|
||||
#: src/xz/file_io.c:332
|
||||
#, c-format
|
||||
msgid "%s: File seems to have been moved, not removing"
|
||||
msgstr "%s: Filen er vist blevet flyttet, sletter ikke"
|
||||
|
||||
#: src/xz/file_io.c:339 src/xz/file_io.c:878
|
||||
#, c-format
|
||||
msgid "%s: Cannot remove: %s"
|
||||
msgstr "%s: Kan ikke fjerne: %s"
|
||||
|
||||
#: src/xz/file_io.c:364
|
||||
#, c-format
|
||||
msgid "%s: Cannot set the file owner: %s"
|
||||
msgstr "%s: Kan ikke angive filejeren: %s"
|
||||
|
||||
#: src/xz/file_io.c:370
|
||||
#, c-format
|
||||
msgid "%s: Cannot set the file group: %s"
|
||||
msgstr "%s: Kan ikke angive filgruppen: %s"
|
||||
|
||||
#: src/xz/file_io.c:389
|
||||
#, c-format
|
||||
msgid "%s: Cannot set the file permissions: %s"
|
||||
msgstr "%s: Kan ikke angive filtilladelser: %s"
|
||||
|
||||
#: src/xz/file_io.c:515
|
||||
#, c-format
|
||||
msgid "Error getting the file status flags from standard input: %s"
|
||||
msgstr "Der opstod en fejl under indhentelse af filstatusflag fra standardind: %s"
|
||||
|
||||
#: src/xz/file_io.c:572 src/xz/file_io.c:634
|
||||
#, c-format
|
||||
msgid "%s: Is a symbolic link, skipping"
|
||||
msgstr "%s: Er en symbolsk henvisning, udelader"
|
||||
|
||||
#: src/xz/file_io.c:663
|
||||
#, c-format
|
||||
msgid "%s: Is a directory, skipping"
|
||||
msgstr "%s: Er en mappe, udelader"
|
||||
|
||||
#: src/xz/file_io.c:669
|
||||
#, c-format
|
||||
msgid "%s: Not a regular file, skipping"
|
||||
msgstr "%s: Er ikke en normal fil, udelader"
|
||||
|
||||
#: src/xz/file_io.c:686
|
||||
#, c-format
|
||||
msgid "%s: File has setuid or setgid bit set, skipping"
|
||||
msgstr "%s: Filen har setuid- eller setgid-bitsæt, udelader"
|
||||
|
||||
#: src/xz/file_io.c:693
|
||||
#, c-format
|
||||
msgid "%s: File has sticky bit set, skipping"
|
||||
msgstr "%s: Fil har klæbende bitsæt, udelader"
|
||||
|
||||
#: src/xz/file_io.c:700
|
||||
#, c-format
|
||||
msgid "%s: Input file has more than one hard link, skipping"
|
||||
msgstr "%s: Inddatafil har mere end en hård henvisning, udelader"
|
||||
|
||||
#: src/xz/file_io.c:788
|
||||
#, c-format
|
||||
msgid "Error restoring the status flags to standard input: %s"
|
||||
msgstr "Der opstod en fejl under gendannelse af statusflagene til standardind: %s"
|
||||
|
||||
#: src/xz/file_io.c:836
|
||||
#, c-format
|
||||
msgid "Error getting the file status flags from standard output: %s"
|
||||
msgstr "Der opstod en fejl under indhentelse af filstatusflag fra standardud: %s"
|
||||
|
||||
#: src/xz/file_io.c:1014
|
||||
#, c-format
|
||||
msgid "Error restoring the O_APPEND flag to standard output: %s"
|
||||
msgstr "Der opstod en fejl under gendannelse af flaget O_APPEND til standardud: %s"
|
||||
|
||||
#: src/xz/file_io.c:1026
|
||||
#, c-format
|
||||
msgid "%s: Closing the file failed: %s"
|
||||
msgstr "%s: Lukning af filen fejlede: %s"
|
||||
|
||||
#: src/xz/file_io.c:1062 src/xz/file_io.c:1288
|
||||
#, c-format
|
||||
msgid "%s: Seeking failed when trying to create a sparse file: %s"
|
||||
msgstr "%s: Søgning fejlede under forsøg på at oprette en tynd fil: %s"
|
||||
|
||||
#: src/xz/file_io.c:1157
|
||||
#, c-format
|
||||
msgid "%s: Read error: %s"
|
||||
msgstr "%s: Læsefejl: %s"
|
||||
|
||||
#: src/xz/file_io.c:1177
|
||||
#, c-format
|
||||
msgid "%s: Error seeking the file: %s"
|
||||
msgstr "%s: Der opstod en fejl under søgning efter filen: %s"
|
||||
|
||||
#: src/xz/file_io.c:1187
|
||||
#, c-format
|
||||
msgid "%s: Unexpected end of file"
|
||||
msgstr "%s: Uventet filafslutning"
|
||||
|
||||
#: src/xz/file_io.c:1246
|
||||
#, c-format
|
||||
msgid "%s: Write error: %s"
|
||||
msgstr "%s: Skrivefejl: %s"
|
||||
|
||||
#: src/xz/hardware.c:107
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktiveret"
|
||||
|
||||
#. TRANSLATORS: Test with "xz --info-memory" to see if
|
||||
#. the alignment looks nice.
|
||||
#: src/xz/hardware.c:126
|
||||
msgid "Total amount of physical memory (RAM): "
|
||||
msgstr "Samlet mængde fysisk hukommelse (RAM): "
|
||||
|
||||
#: src/xz/hardware.c:128
|
||||
msgid "Memory usage limit for compression: "
|
||||
msgstr "Grænse for hukommelsesforbrug til komprimering: "
|
||||
|
||||
#: src/xz/hardware.c:130
|
||||
msgid "Memory usage limit for decompression: "
|
||||
msgstr "Grænse for hukommelsesforbug til dekomprimering: "
|
||||
|
||||
#. TRANSLATORS: Indicates that there is no integrity check.
|
||||
#. This string is used in tables, so the width must not
|
||||
#. exceed ten columns with a fixed-width font.
|
||||
#: src/xz/list.c:65
|
||||
msgid "None"
|
||||
msgstr "Ingen"
|
||||
|
||||
#. TRANSLATORS: Indicates that integrity check name is not known,
|
||||
#. but the Check ID is known (here 2). This and other "Unknown-N"
|
||||
#. strings are used in tables, so the width must not exceed ten
|
||||
#. columns with a fixed-width font. It's OK to omit the dash if
|
||||
#. you need space for one extra letter, but don't use spaces.
|
||||
#: src/xz/list.c:72
|
||||
msgid "Unknown-2"
|
||||
msgstr "Ukendt-2"
|
||||
|
||||
#: src/xz/list.c:73
|
||||
msgid "Unknown-3"
|
||||
msgstr "Ukendt-3"
|
||||
|
||||
#: src/xz/list.c:75
|
||||
msgid "Unknown-5"
|
||||
msgstr "Ukendt-5"
|
||||
|
||||
#: src/xz/list.c:76
|
||||
msgid "Unknown-6"
|
||||
msgstr "Ukendt-6"
|
||||
|
||||
#: src/xz/list.c:77
|
||||
msgid "Unknown-7"
|
||||
msgstr "Ukendt-7"
|
||||
|
||||
#: src/xz/list.c:78
|
||||
msgid "Unknown-8"
|
||||
msgstr "Ukendt-8"
|
||||
|
||||
#: src/xz/list.c:79
|
||||
msgid "Unknown-9"
|
||||
msgstr "Ukendt-9"
|
||||
|
||||
#: src/xz/list.c:81
|
||||
msgid "Unknown-11"
|
||||
msgstr "Ukendt-11"
|
||||
|
||||
#: src/xz/list.c:82
|
||||
msgid "Unknown-12"
|
||||
msgstr "Ukendt-12"
|
||||
|
||||
#: src/xz/list.c:83
|
||||
msgid "Unknown-13"
|
||||
msgstr "Ukendt-13"
|
||||
|
||||
#: src/xz/list.c:84
|
||||
msgid "Unknown-14"
|
||||
msgstr "Ukendt-14"
|
||||
|
||||
#: src/xz/list.c:85
|
||||
msgid "Unknown-15"
|
||||
msgstr "Ukendt-15"
|
||||
|
||||
#: src/xz/list.c:153
|
||||
#, c-format
|
||||
msgid "%s: File is empty"
|
||||
msgstr "%s: Filen er tom"
|
||||
|
||||
#: src/xz/list.c:158
|
||||
#, c-format
|
||||
msgid "%s: Too small to be a valid .xz file"
|
||||
msgstr "%s: For lille til at være en gyldig .xz-fil"
|
||||
|
||||
#. TRANSLATORS: These are column headings. From Strms (Streams)
|
||||
#. to Ratio, the columns are right aligned. Check and Filename
|
||||
#. are left aligned. If you need longer words, it's OK to
|
||||
#. use two lines here. Test with "xz -l foo.xz".
|
||||
#: src/xz/list.c:677
|
||||
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/list.c:717
|
||||
#, c-format
|
||||
msgid " Streams: %s\n"
|
||||
msgstr " Strømme: %s\n"
|
||||
|
||||
#: src/xz/list.c:719
|
||||
#, c-format
|
||||
msgid " Blocks: %s\n"
|
||||
msgstr " Blokke: %s\n"
|
||||
|
||||
#: src/xz/list.c:721
|
||||
#, c-format
|
||||
msgid " Compressed size: %s\n"
|
||||
msgstr " Komprimeret str.: %s\n"
|
||||
|
||||
#: src/xz/list.c:724
|
||||
#, c-format
|
||||
msgid " Uncompressed size: %s\n"
|
||||
msgstr " Ukomprimeret str.: %s\n"
|
||||
|
||||
#: src/xz/list.c:727
|
||||
#, c-format
|
||||
msgid " Ratio: %s\n"
|
||||
msgstr " Pakkeforhold: %s\n"
|
||||
|
||||
#: src/xz/list.c:729
|
||||
#, c-format
|
||||
msgid " Check: %s\n"
|
||||
msgstr " Kontrol: %s\n"
|
||||
|
||||
#: src/xz/list.c:730
|
||||
#, c-format
|
||||
msgid " Stream padding: %s\n"
|
||||
msgstr " Strømfyld: %s\n"
|
||||
|
||||
#. TRANSLATORS: The second line is column headings. All except
|
||||
#. Check are right aligned; Check is left aligned. Test with
|
||||
#. "xz -lv foo.xz".
|
||||
#: src/xz/list.c:758
|
||||
msgid ""
|
||||
" Streams:\n"
|
||||
" Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding"
|
||||
msgstr ""
|
||||
" Strømme:\n"
|
||||
" Strøm Blokke KompForsk. DekompForsk. KompStr. DekompStr. Forh. Kontrol Fyld"
|
||||
|
||||
#. TRANSLATORS: The second line is column headings. All
|
||||
#. except Check are right aligned; Check is left aligned.
|
||||
#: src/xz/list.c:813
|
||||
#, c-format
|
||||
msgid ""
|
||||
" Blocks:\n"
|
||||
" Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check"
|
||||
msgstr ""
|
||||
" Blokke:\n"
|
||||
" Strøm Blok KompForsk. DekompForsk. Ialtstr. DekompStr. Forh. Kontrol"
|
||||
|
||||
#. TRANSLATORS: These are additional column headings
|
||||
#. for the most verbose listing mode. CheckVal
|
||||
#. (Check value), Flags, and Filters are left aligned.
|
||||
#. Header (Block Header Size), CompSize, and MemUsage
|
||||
#. are right aligned. %*s is replaced with 0-120
|
||||
#. spaces to make the CheckVal column wide enough.
|
||||
#. Test with "xz -lvv foo.xz".
|
||||
#: src/xz/list.c:825
|
||||
#, c-format
|
||||
msgid " CheckVal %*s Header Flags CompSize MemUsage Filters"
|
||||
msgstr " KontrolVær %*sTeksth Flag Kompstr. HukForb. Filtre"
|
||||
|
||||
#: src/xz/list.c:903 src/xz/list.c:1078
|
||||
#, c-format
|
||||
msgid " Memory needed: %s MiB\n"
|
||||
msgstr " Hukommelse krævet: %s MiB\n"
|
||||
|
||||
#: src/xz/list.c:905 src/xz/list.c:1080
|
||||
#, c-format
|
||||
msgid " Sizes in headers: %s\n"
|
||||
msgstr " Størrelser i teksthoveder: %s\n"
|
||||
|
||||
#: src/xz/list.c:906 src/xz/list.c:1081
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: src/xz/list.c:906 src/xz/list.c:1081
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
#: src/xz/list.c:907 src/xz/list.c:1082
|
||||
#, c-format
|
||||
msgid " Minimum XZ Utils version: %s\n"
|
||||
msgstr " Minimum for XZ Utils-version: %s\n"
|
||||
|
||||
#. TRANSLATORS: %s is an integer. Only the plural form of this
|
||||
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
|
||||
#: src/xz/list.c:1057
|
||||
#, c-format
|
||||
msgid "%s file\n"
|
||||
msgid_plural "%s files\n"
|
||||
msgstr[0] "%s fil\n"
|
||||
msgstr[1] "%s filer\n"
|
||||
|
||||
#: src/xz/list.c:1070
|
||||
msgid "Totals:"
|
||||
msgstr "I alt:"
|
||||
|
||||
#: src/xz/list.c:1071
|
||||
#, c-format
|
||||
msgid " Number of files: %s\n"
|
||||
msgstr " Antal filer: %s\n"
|
||||
|
||||
#: src/xz/list.c:1146
|
||||
msgid "--list works only on .xz files (--format=xz or --format=auto)"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/list.c:1152
|
||||
msgid "--list does not support reading from standard input"
|
||||
msgstr "--list understøtter ikke læsning fra standardind"
|
||||
|
||||
#: src/xz/main.c:89
|
||||
#, c-format
|
||||
msgid "%s: Error reading filenames: %s"
|
||||
msgstr "%s: Der opstod en fejl under forsøg på læsning af filnavne: %s"
|
||||
|
||||
#: src/xz/main.c:96
|
||||
#, c-format
|
||||
msgid "%s: Unexpected end of input when reading filenames"
|
||||
msgstr "%s: Uventet afslutning på inddata under forsøg på læsning af filnavne"
|
||||
|
||||
#: src/xz/main.c:120
|
||||
#, c-format
|
||||
msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/main.c:174
|
||||
msgid "Compression and decompression with --robot are not supported yet."
|
||||
msgstr "Komprimering og dekomprimering med --robot er endnu ikke understøttet."
|
||||
|
||||
#: src/xz/main.c:252
|
||||
msgid "Cannot read data from standard input when reading filenames from standard input"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: This is the program name in the beginning
|
||||
#. of the line in messages. Usually it becomes "xz: ".
|
||||
#. This is a translatable string because French needs
|
||||
#. a space before a colon.
|
||||
#: src/xz/message.c:714
|
||||
#, c-format
|
||||
msgid "%s: "
|
||||
msgstr "%s: "
|
||||
|
||||
#: src/xz/message.c:777 src/xz/message.c:827
|
||||
msgid "Internal error (bug)"
|
||||
msgstr "Intern fejl (fejl)"
|
||||
|
||||
#: src/xz/message.c:784
|
||||
msgid "Cannot establish signal handlers"
|
||||
msgstr "Kan ikke etbalere signalhåndteringer"
|
||||
|
||||
#: src/xz/message.c:793
|
||||
msgid "No integrity check; not verifying file integrity"
|
||||
msgstr "Ingen integritetkontrol; verificerer ikke filintegritet"
|
||||
|
||||
#: src/xz/message.c:796
|
||||
msgid "Unsupported type of integrity check; not verifying file integrity"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:803
|
||||
msgid "Memory usage limit reached"
|
||||
msgstr "Begrænsning på brug af hukommelse er nået"
|
||||
|
||||
#: src/xz/message.c:806
|
||||
msgid "File format not recognized"
|
||||
msgstr "Filformatet blev ikke genkendt"
|
||||
|
||||
#: src/xz/message.c:809
|
||||
msgid "Unsupported options"
|
||||
msgstr "Tilvalg er ikke understøttede"
|
||||
|
||||
#: src/xz/message.c:812
|
||||
msgid "Compressed data is corrupt"
|
||||
msgstr "Komprimerede data er ødelagte"
|
||||
|
||||
#: src/xz/message.c:815
|
||||
msgid "Unexpected end of input"
|
||||
msgstr "Uventet afslutning på inddata"
|
||||
|
||||
#: src/xz/message.c:848
|
||||
#, c-format
|
||||
msgid "%s MiB of memory is required. The limiter is disabled."
|
||||
msgstr "%s MiB hukommelse er krævet. Begrænseren er deaktiveret."
|
||||
|
||||
#: src/xz/message.c:876
|
||||
#, c-format
|
||||
msgid "%s MiB of memory is required. The limit is %s."
|
||||
msgstr "%s MiB hukommelse er krævet. Begrænsningen er %s."
|
||||
|
||||
#: src/xz/message.c:1043
|
||||
#, c-format
|
||||
msgid "%s: Filter chain: %s\n"
|
||||
msgstr "%s: Filterkæde: %s\n"
|
||||
|
||||
#: src/xz/message.c:1053
|
||||
#, c-format
|
||||
msgid "Try `%s --help' for more information."
|
||||
msgstr "Prøv »%s --help« for yderligere information."
|
||||
|
||||
#: src/xz/message.c:1079
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: %s [OPTION]... [FILE]...\n"
|
||||
"Compress or decompress FILEs in the .xz format.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1086
|
||||
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
|
||||
msgstr ""
|
||||
"Obligatoriske argumenter til lange tilvalg er også obligatoriske for korte\n"
|
||||
"tilvalg.\n"
|
||||
|
||||
#: src/xz/message.c:1090
|
||||
msgid " Operation mode:\n"
|
||||
msgstr " Operationstilstand:\n"
|
||||
|
||||
#: src/xz/message.c:1093
|
||||
msgid ""
|
||||
" -z, --compress force compression\n"
|
||||
" -d, --decompress force decompression\n"
|
||||
" -t, --test test compressed file integrity\n"
|
||||
" -l, --list list information about .xz files"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1099
|
||||
msgid ""
|
||||
"\n"
|
||||
" Operation modifiers:\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Operationsændrere:\n"
|
||||
|
||||
#: src/xz/message.c:1102
|
||||
msgid ""
|
||||
" -k, --keep keep (don't delete) input files\n"
|
||||
" -f, --force force overwrite of output file and (de)compress links\n"
|
||||
" -c, --stdout write to standard output and don't delete input files"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1108
|
||||
msgid ""
|
||||
" --single-stream decompress only the first stream, and silently\n"
|
||||
" ignore possible remaining input data"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1111
|
||||
msgid ""
|
||||
" --no-sparse do not create sparse files when decompressing\n"
|
||||
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
|
||||
" --files[=FILE] read filenames to process from FILE; if FILE is\n"
|
||||
" omitted, filenames are read from the standard input;\n"
|
||||
" filenames must be terminated with the newline character\n"
|
||||
" --files0[=FILE] like --files but use the null character as terminator"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1120
|
||||
msgid ""
|
||||
"\n"
|
||||
" Basic file format and compression options:\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1122
|
||||
msgid ""
|
||||
" -F, --format=FMT file format to encode or decode; possible values are\n"
|
||||
" `auto' (default), `xz', `lzma', and `raw'\n"
|
||||
" -C, --check=CHECK integrity check type: `none' (use with caution),\n"
|
||||
" `crc32', `crc64' (default), or `sha256'"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1127
|
||||
msgid " --ignore-check don't verify the integrity check when decompressing"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1131
|
||||
msgid ""
|
||||
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
|
||||
" decompressor memory usage into account before using 7-9!"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1135
|
||||
msgid ""
|
||||
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
|
||||
" does not affect decompressor memory requirements"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1139
|
||||
msgid ""
|
||||
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
|
||||
" to use as many threads as there are processor cores"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1144
|
||||
msgid ""
|
||||
" --block-size=SIZE\n"
|
||||
" start a new .xz block after every SIZE bytes of input;\n"
|
||||
" use this to set the block size for threaded compression"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1148
|
||||
msgid ""
|
||||
" --block-list=SIZES\n"
|
||||
" start a new .xz block after the given comma-separated\n"
|
||||
" intervals of uncompressed data"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1152
|
||||
msgid ""
|
||||
" --flush-timeout=TIMEOUT\n"
|
||||
" when compressing, if more than TIMEOUT milliseconds has\n"
|
||||
" passed since the previous flush and reading more input\n"
|
||||
" would block, all pending data is flushed out"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1158
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
" --memlimit-compress=LIMIT\n"
|
||||
" --memlimit-decompress=LIMIT\n"
|
||||
" -M, --memlimit=LIMIT\n"
|
||||
" set memory usage limit for compression, decompression,\n"
|
||||
" or both; LIMIT is in bytes, % of RAM, or 0 for defaults"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1165
|
||||
msgid ""
|
||||
" --no-adjust if compression settings exceed the memory usage limit,\n"
|
||||
" give an error instead of adjusting the settings downwards"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1171
|
||||
msgid ""
|
||||
"\n"
|
||||
" Custom filter chain for compression (alternative for using presets):"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1180
|
||||
msgid ""
|
||||
"\n"
|
||||
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
|
||||
" --lzma2[=OPTS] more of the following options (valid values; default):\n"
|
||||
" preset=PRE reset options to a preset (0-9[e])\n"
|
||||
" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n"
|
||||
" lc=NUM number of literal context bits (0-4; 3)\n"
|
||||
" lp=NUM number of literal position bits (0-4; 0)\n"
|
||||
" pb=NUM number of position bits (0-4; 2)\n"
|
||||
" mode=MODE compression mode (fast, normal; normal)\n"
|
||||
" nice=NUM nice length of a match (2-273; 64)\n"
|
||||
" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n"
|
||||
" depth=NUM maximum search depth; 0=automatic (default)"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1195
|
||||
msgid ""
|
||||
"\n"
|
||||
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
|
||||
" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n"
|
||||
" --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n"
|
||||
" --arm[=OPTS] ARM BCJ filter (little endian only)\n"
|
||||
" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n"
|
||||
" --sparc[=OPTS] SPARC BCJ filter\n"
|
||||
" Valid OPTS for all BCJ filters:\n"
|
||||
" start=NUM start offset for conversions (default=0)"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1207
|
||||
msgid ""
|
||||
"\n"
|
||||
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
|
||||
" dist=NUM distance between bytes being subtracted\n"
|
||||
" from each other (1-256; 1)"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1215
|
||||
msgid ""
|
||||
"\n"
|
||||
" Other options:\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Andre tilvalg:\n"
|
||||
|
||||
#: src/xz/message.c:1218
|
||||
msgid ""
|
||||
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
|
||||
" -v, --verbose be verbose; specify twice for even more verbose"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1223
|
||||
msgid " -Q, --no-warn make warnings not affect the exit status"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1225
|
||||
msgid " --robot use machine-parsable messages (useful for scripts)"
|
||||
msgstr ""
|
||||
" --robot brug beskeder der kan fortolkes maskinelt (nyttigt\n"
|
||||
" for skripter)"
|
||||
|
||||
#: src/xz/message.c:1228
|
||||
msgid ""
|
||||
" --info-memory display the total amount of RAM and the currently active\n"
|
||||
" memory usage limits, and exit"
|
||||
msgstr ""
|
||||
|
||||
#: src/xz/message.c:1231
|
||||
msgid ""
|
||||
" -h, --help display the short help (lists only the basic options)\n"
|
||||
" -H, --long-help display this long help and exit"
|
||||
msgstr ""
|
||||
" -h, --help vis den korte hjælpetekst (viser kun grundlæggende\n"
|
||||
" tilvalg)\n"
|
||||
" -H, --long-help vis den lange hjælpetekst og afslut"
|
||||
|
||||
#: src/xz/message.c:1235
|
||||
msgid ""
|
||||
" -h, --help display this short help and exit\n"
|
||||
" -H, --long-help display the long help (lists also the advanced options)"
|
||||
msgstr ""
|
||||
" -h, --help vis den korte hjælpetekst og afslut\n"
|
||||
" -H, --long-help vis den lange hjælpetekst (viser også de avancerede\n"
|
||||
" tilvalg)"
|
||||
|
||||
#: src/xz/message.c:1240
|
||||
msgid " -V, --version display the version number and exit"
|
||||
msgstr " -V, --version vis versionsnummer og afslut"
|
||||
|
||||
#: src/xz/message.c:1242
|
||||
msgid ""
|
||||
"\n"
|
||||
"With no FILE, or when FILE is -, read standard input.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Med ingen FIL, eller når FIL er -, læs standardind.\n"
|
||||
|
||||
#. TRANSLATORS: This message indicates the bug reporting address
|
||||
#. for this package. Please add _another line_ saying
|
||||
#. "Report translation bugs to <...>\n" with the email or WWW
|
||||
#. address for translation bugs. Thanks.
|
||||
#: src/xz/message.c:1248
|
||||
#, c-format
|
||||
msgid "Report bugs to <%s> (in English or Finnish).\n"
|
||||
msgstr ""
|
||||
"Rapporter fejl til <%s> (på engelsk eller finsk).\n"
|
||||
"Rapporter oversættelsesfejl til <dansk@dansk-gruppen.dk>.\n"
|
||||
|
||||
#: src/xz/message.c:1250
|
||||
#, c-format
|
||||
msgid "%s home page: <%s>\n"
|
||||
msgstr "%s hjemmeside: <%s>\n"
|
||||
|
||||
#: src/xz/message.c:1254
|
||||
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
|
||||
msgstr "DETTE ER EN UDVIKLINGSVERSION - BRUG IKKE I PRODUKTION."
|
||||
|
||||
#: src/xz/options.c:86
|
||||
#, c-format
|
||||
msgid "%s: Options must be `name=value' pairs separated with commas"
|
||||
msgstr "%s: Tilvalg skal være »navne=værdi«-par adskilt med kommaer"
|
||||
|
||||
#: src/xz/options.c:93
|
||||
#, c-format
|
||||
msgid "%s: Invalid option name"
|
||||
msgstr "%s: Ugyldigt tilvalgsnavn"
|
||||
|
||||
#: src/xz/options.c:113
|
||||
#, c-format
|
||||
msgid "%s: Invalid option value"
|
||||
msgstr "%s: Ugyldigt tilvalgsværdi"
|
||||
|
||||
#: src/xz/options.c:247
|
||||
#, c-format
|
||||
msgid "Unsupported LZMA1/LZMA2 preset: %s"
|
||||
msgstr "LZMA1/LZMA2-forhåndskonfiguration er ikke understøttet: %s"
|
||||
|
||||
#: src/xz/options.c:355
|
||||
msgid "The sum of lc and lp must not exceed 4"
|
||||
msgstr "Summen af lc og lp må ikke være højere end 4"
|
||||
|
||||
#: src/xz/options.c:359
|
||||
#, c-format
|
||||
msgid "The selected match finder requires at least nice=%<PRIu32>"
|
||||
msgstr "Den valgte matchfinder kræver mindst nice=%<PRIu32>"
|
||||
|
||||
#: src/xz/suffix.c:133 src/xz/suffix.c:258
|
||||
#, c-format
|
||||
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
|
||||
msgstr "%s: med --format=raw, --suffix=.SUF er krævet med mindre der skrives til standardud"
|
||||
|
||||
#: src/xz/suffix.c:164
|
||||
#, c-format
|
||||
msgid "%s: Filename has an unknown suffix, skipping"
|
||||
msgstr "%s: Filnavn har ukendt endelse, udelader"
|
||||
|
||||
#: src/xz/suffix.c:185
|
||||
#, c-format
|
||||
msgid "%s: File already has `%s' suffix, skipping"
|
||||
msgstr "%s: Filen har allrede endelsen »%s«, udelader."
|
||||
|
||||
#: src/xz/suffix.c:393
|
||||
#, c-format
|
||||
msgid "%s: Invalid filename suffix"
|
||||
msgstr "%s: Ugyldig filnavnendelse"
|
||||
|
||||
#: src/xz/util.c:71
|
||||
#, c-format
|
||||
msgid "%s: Value is not a non-negative decimal integer"
|
||||
msgstr "%s: Værdi er ikke et positivt decimalheltal"
|
||||
|
||||
#: src/xz/util.c:113
|
||||
#, c-format
|
||||
msgid "%s: Invalid multiplier suffix"
|
||||
msgstr "%s: Ugyldig multiplikatorendelse"
|
||||
|
||||
#: src/xz/util.c:115
|
||||
msgid "Valid suffixes are `KiB' (2^10), `MiB' (2^20), and `GiB' (2^30)."
|
||||
msgstr "Gyldige endelser er »KiB« (2^10), »MiB« (2^20) og »GiB« (2^30)."
|
||||
|
||||
#: src/xz/util.c:132
|
||||
#, c-format
|
||||
msgid "Value of the option `%s' must be in the range [%<PRIu64>, %<PRIu64>]"
|
||||
msgstr "Værdien for tilvalget »%s« skal være i intervallet [%<PRIu64>, %<PRIu64>]"
|
||||
|
||||
#: src/xz/util.c:257
|
||||
msgid "Empty filename, skipping"
|
||||
msgstr "Tomt filnavn, udelader"
|
||||
|
||||
#: src/xz/util.c:271
|
||||
msgid "Compressed data cannot be read from a terminal"
|
||||
msgstr "Komprimerede data kan ikke læses fra en terminal"
|
||||
|
||||
#: src/xz/util.c:284
|
||||
msgid "Compressed data cannot be written to a terminal"
|
||||
msgstr "Komprimerede data kan ikke skrives til en terminal"
|
||||
|
||||
#: src/common/tuklib_exit.c:39
|
||||
msgid "Writing to standard output failed"
|
||||
msgstr "Skrivning til standardud mislykkedes"
|
||||
|
||||
#: src/common/tuklib_exit.c:42
|
||||
msgid "Unknown error"
|
||||
msgstr "Ukendt fejl"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue