blob: 6b782d8b5191b4c0a61c65f5937cee78c24e6d08 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# C++ Third-Party Dependencies
Keeping third-party source code in the repository is an exception. Such source
must be small and stable, have a license that permits redistribution, and be
accepted through community review. Build-managed dependencies should instead
use pinned upstream source archives with cryptographic digest verification.
When a dependency is added or updated, this file and the root `LICENSE` file
must be updated together.
The build provides explicit `SYSTEM`, `BUNDLED`, and `AUTO` dependency source
modes. ANTLR4, Snappy, LZ4, lzokay, SIMDe, zlib, Zstandard, and liblzma have
migrated to these modes. In `BUNDLED` mode, source is downloaded into the build
cache rather than kept in this repository.
LZMA2 support is disabled by default so this optional codec does not raise the
CMake 3.11 baseline for long-lived industrial and legacy toolchains. Set
`ENABLE_LZMA2=ON` to opt in: CMake 3.11 through 3.19 requires a compatible
system liblzma, while the verified bundled XZ Utils build is available with
CMake 3.20 or newer.
CI validates the modes at two levels. The cross-platform C++ unit-test
workflows explicitly use `BUNDLED` so their dependency versions do not depend
on packages preinstalled on the runner, and explicitly enable LZMA2 on their
modern CMake hosts. Their CMake tests exercise `AUTO` with controlled
compatible, missing, too-old, and incompatible package fixtures. The dedicated
`Cpp-Dependency-Source` workflow verifies the dependency-free legacy core with
CMake 3.11, verifies LZMA2 against an external system liblzma with CMake 3.11,
and confirms that bundled LZMA2 is rejected clearly there. It also builds every
dependency from a fresh `BUNDLED` archive cache, repeats the build with that
cache in offline mode, and builds against an independently installed `SYSTEM`
prefix. Each dedicated job checks the reported source for every enabled
dependency before compiling and linking TsFile.
## Dependency Inventory
| Dependency | Source management | Upstream version | License |
| --- | --- | --- | --- |
| ANTLR4 C++ Runtime | Verified tag archive downloaded during configuration | [`4.9.3`](https://github.com/antlr/antlr4/tree/4.9.3/runtime/Cpp) | BSD-3-Clause, with MIT notices; included in the downloaded archive and reproduced in the root `LICENSE` |
| Snappy | Verified tag archive downloaded during configuration | [`1.2.2`](https://github.com/google/snappy/tree/1.2.2) | BSD-3-Clause; included in the downloaded archive and reproduced in the root `LICENSE` |
| LZ4 | Verified tag archive downloaded during configuration | [`v1.9.4`](https://github.com/lz4/lz4/tree/v1.9.4/lib) | BSD-2-Clause; included in the downloaded archive and reproduced in the root `LICENSE` |
| lzokay | Verified commit archive downloaded during configuration | [`5cb18da`](https://github.com/AxioDL/lzokay/commit/5cb18da508cc4d3ec41bc04dccdeef9c5ffedfb2) | MIT; included in the downloaded archive and reproduced in the root `LICENSE` |
| SIMDe | Verified tag archive downloaded during configuration | [`v0.8.4-rc3`](https://github.com/simd-everywhere/simde/tree/v0.8.4-rc3) | MIT; included in the downloaded archive and reproduced in the root `LICENSE` |
| zlib | Verified tag archive downloaded during configuration | [`v1.3.1`](https://github.com/madler/zlib/tree/v1.3.1) | zlib License; included in the downloaded archive and reproduced in the root `LICENSE` |
| Zstandard | Verified tag archive downloaded during configuration | [`v1.5.7`](https://github.com/facebook/zstd/tree/v1.5.7) | BSD-3-Clause option selected from the upstream dual license; included in the downloaded archive and reproduced in the root `LICENSE` |
| liblzma (XZ Utils) | Verified release archive downloaded during configuration | [`v5.8.3`](https://github.com/tukaani-project/xz/tree/v5.8.3/src/liblzma) | 0BSD for `liblzma`; the mixed-license archive's GPL/LGPL tools and scripts are excluded from the build and distribution |
## Dependency Details
### ANTLR4 C++ Runtime
- Origin and scope: the upstream `4.9.3` tag archive. The build compiles the
C++ runtime sources under `runtime/Cpp/runtime/src` into a PIC static library;
upstream demos, tests, packaging, and installation rules are not configured.
- Archive URL:
`https://github.com/antlr/antlr4/archive/refs/tags/4.9.3.tar.gz`.
- Archive SHA-256:
`efe4057d75ab48145d4683100fec7f77d7f87fa258707330cadd1f8e6f7eecae`.
- UTF-8 support: bundled ANTLR4 uses the utf8cpp `v3.1.1` tag archive from
`https://github.com/nemtrif/utfcpp/archive/refs/tags/v3.1.1.tar.gz`, with
SHA-256
`33496a4c3cc2de80e9809c4997052331af5fb32079f43ab4d667cd48c3a36e88`.
- Repository scope and local modifications: no ANTLR4 or utf8cpp source is
committed. During extraction, `ANTLR4Patch.cmake` applies and verifies the
existing TsFile portability and compiler fixes to `RuleContext.h`, `Token.h`,
`Vocabulary.cpp`, `ATN.cpp`, `LL1Analyzer.cpp`, `LL1Analyzer.h`,
`LexerATNSimulator.cpp`, `LexerATNSimulator.h`, `IntervalSet.cpp`, `Any.h`,
and `CPPUtils.cpp`. utf8cpp is not modified.
- Resolution: `SYSTEM` accepts ANTLR4 4.9.3 or newer and earlier than 5.0.0
through an `antlr4_static` or `antlr4_shared` target; `BUNDLED` downloads or
reuses both verified archives; and `AUTO` prefers a compatible system
package before falling back to the verified archives.
### Snappy
- Origin and scope: the upstream `1.2.2` tag archive. The build uses the
upstream CMake target with tests, benchmarks, and installation disabled.
- Archive URL:
`https://github.com/google/snappy/archive/refs/tags/1.2.2.tar.gz`.
- Archive SHA-256:
`90f74bc1fbf78a6c56b3c4a082a05103b3a56bb17bca1a27e052ea11723292dc`.
- Repository scope and local modifications: no Snappy source is committed and
no upstream source is modified. TsFile's CMake integration enables PIC and
disables upstream tests, benchmarks, and installation.
- Resolution: `SYSTEM` accepts Snappy 1.2.1 or newer in the 1.x release series
through the `Snappy::snappy` target; `BUNDLED` downloads or reuses the
verified archive; and `AUTO` prefers a compatible system package before
falling back to the verified archive.
### LZ4
- Origin and scope: the upstream `v1.9.4` tag archive. The build
compiles `lib/lz4.c` and exposes `lib/lz4.h` from the extracted archive.
- Archive URL:
`https://github.com/lz4/lz4/archive/refs/tags/v1.9.4.tar.gz`.
- Archive SHA-256:
`0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b`.
- Repository scope and local modifications: no LZ4 source is committed and no
upstream source is modified. The TsFile-owned CMake integration selects and
compiles the required files after verification.
- Resolution: `SYSTEM` accepts LZ4 1.9.4 or newer in the 1.x release series;
`BUNDLED` downloads or reuses the verified archive; and `AUTO` prefers a
compatible system LZ4 before falling back to the verified archive.
### lzokay
- Origin and scope: the upstream archive at commit
`5cb18da508cc4d3ec41bc04dccdeef9c5ffedfb2`. The build compiles
`lzokay.cpp` and exposes `lzokay.hpp` from the extracted archive.
- Archive URL:
`https://github.com/AxioDL/lzokay/archive/5cb18da508cc4d3ec41bc04dccdeef9c5ffedfb2.tar.gz`.
- Archive SHA-256:
`eb518bf793da0b4420a3ffdf1511851575bc62ef350b303f14ff7355f370da6a`.
- Repository scope and local modifications: no lzokay source is committed and
no upstream source is modified. The earlier repository copy's warning-only
changes and defensive initialization are no longer carried.
- Resolution: `SYSTEM` accepts an upstream-compatible CMake package version
0.1 or newer and earlier than 1.0; `BUNDLED` downloads or reuses the verified
archive; and `AUTO` prefers a compatible system package before falling back
to the verified archive.
### SIMDe
- Origin and scope: the upstream `v0.8.4-rc3` tag archive. SIMDe is
header-only; the build exposes the extracted header root without configuring
its upstream tests or installation rules.
- Archive URL:
`https://github.com/simd-everywhere/simde/archive/refs/tags/v0.8.4-rc3.tar.gz`.
- Archive SHA-256:
`a5407985439fef1435ac1f091a4d2e6c71981faed213e1be156aca575ce7052c`.
- Repository scope and local modifications: no SIMDe source is committed and
no upstream source is modified.
- Resolution: `SYSTEM` accepts SIMDe 0.8.4 or newer and earlier than 1.0.0,
either through the `simde::simde` CMake target or installed headers;
`BUNDLED` downloads or reuses the verified archive; and `AUTO` prefers a
compatible system installation before falling back to the verified archive.
### zlib
- Origin and scope: the upstream `v1.3.1` tag archive. The upstream CMake build
produces the static library used by TsFile.
- Archive URL:
`https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz`.
- Archive SHA-256:
`17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c`.
- Repository scope and local modifications: no zlib source is committed and no
upstream source is modified. The TsFile-owned CMake integration disables
upstream examples and enables position-independent code on `zlibstatic`.
- Resolution: `SYSTEM` accepts zlib 1.3.1 or newer and earlier than 2.0.0;
`BUNDLED` downloads or reuses the verified archive; and `AUTO` prefers a
compatible system zlib before falling back to the verified archive.
### Zstandard
- Origin and scope: the upstream `v1.5.7` tag archive. The upstream CMake build
produces a PIC static compression/decompression library; programs, tests,
contrib code, dictionary-builder code, deprecated APIs, legacy frame support,
and Zstandard-internal threading are disabled.
- Archive URL:
`https://github.com/facebook/zstd/archive/refs/tags/v1.5.7.tar.gz`.
- Archive SHA-256:
`37d7284556b20954e56e1ca85b80226768902e2edabd3b649e9e72c0c9012ee3`.
- License choice: upstream offers BSD-3-Clause or GPLv2. TsFile selects only
the BSD-3-Clause option. BSD-3-Clause is an ASF Category A license.
- Repository scope and local modifications: no Zstandard source is committed
and no upstream source is modified. The TsFile Zstandard compressor consumes
only the `TsFile::ZSTD` target.
- Resolution: `SYSTEM` accepts Zstandard 1.5.7 or newer and earlier than 2.0.0
through an upstream CMake target; `BUNDLED` downloads or reuses the verified
archive; and `AUTO` prefers a compatible system package before falling back
to the verified archive.
### liblzma (XZ Utils)
- Origin and scope: the `liblzma` component of the upstream XZ Utils `v5.8.3`
release. The build enables the LZMA1/LZMA2 encoders and decoders with CRC32
and CRC64 checks in a PIC static library. It disables threading, MicroLZMA,
lzip, optional Delta/BCJ filters, tools, scripts, tests, translations,
examples, and documentation.
- Archive URL:
`https://github.com/tukaani-project/xz/releases/download/v5.8.3/xz-5.8.3.tar.gz`.
- Archive SHA-256:
`3d3a1b973af218114f4f889bbaa2f4c037deaae0c8e815eec381c3d546b974a0`.
- License boundary: XZ Utils is a mixed-license source distribution. The
`liblzma` source and the CMake files used to build it are 0BSD, an ASF
Category A license. GPL-licensed scripts and LGPL-licensed GNU getopt code
exist elsewhere in the downloaded upstream archive but are not compiled,
linked, installed, committed, or redistributed by TsFile. The integration
verifies that every source in the configured `liblzma` target is marked
0BSD and rejects any configuration that links `libgnu` into `liblzma`.
- Repository scope and local modifications: no XZ or liblzma source is
committed and no upstream source is modified. The TsFile LZMA2 compressor
consumes only the `TsFile::LibLZMA` target. The upstream bundled build
requires CMake 3.20 or
newer; SYSTEM mode remains available with TsFile's CMake 3.11 baseline.
- Resolution: `SYSTEM` accepts liblzma 5.8.3 or newer and earlier than 6.0.0;
`BUNDLED` downloads or reuses the verified XZ archive; and `AUTO` prefers a
compatible system package before falling back to the verified archive.
## Other Build Dependencies
| Dependency | Purpose | Upstream version | License | Current resolution |
| --- | --- | --- | --- | --- |
| GoogleTest | C++ tests | [`release-1.12.1`](https://github.com/google/googletest/tree/release-1.12.1) | BSD-3-Clause | Download the release archive during test configuration |
GoogleTest is not committed to this repository and TsFile does not carry local
source modifications for it. Its archive is verified with SHA-256 digest
`24564e3b712d3eb30ac9a85d92f7d720f60cc0173730ac166f27dda7fed76cb2`
before extraction. A previously downloaded local archive is subject to the same
verification.