mirror of
https://github.com/SimoneN64/Kaizen.git
synced 2025-04-02 10:41:53 -04:00
128 lines
3.8 KiB
Markdown
128 lines
3.8 KiB
Markdown
|Build|Status|
|
|
|---|------|
|
|
|Linux|[](https://dev.azure.com/licorn0647/licorn/_build/latest?definitionId=2&branchName=master)|
|
|
|MacOS|[](https://dev.azure.com/licorn0647/licorn/_build/latest?definitionId=2&branchName=master)|
|
|
|Windows|[](https://dev.azure.com/licorn0647/licorn/_build/latest?definitionId=2&branchName=master)|
|
|
|
|
# (lib)unarr
|
|
|
|
**(lib)unarr** is a decompression library for RAR, TAR, ZIP and 7z* archives.
|
|
|
|
It was forked from **unarr**, which originated as a port of the RAR extraction
|
|
features from The Unarchiver project required for extracting images from comic
|
|
book archives. [Zeniko](https://github.com/zeniko/) wrote unarr as an
|
|
alternative to libarchive which didn't have support for parsing filters or
|
|
solid compression at the time.
|
|
|
|
While (lib)unarr was started with the intent of providing unarr with a proper
|
|
cmake based build system suitable for packaging and cross-platform development,
|
|
it's focus has now been extended to provide code maintenance and to continue the
|
|
development of unarr, which no longer is maintained.
|
|
|
|
## Getting started
|
|
|
|
### Prebuilt packages
|
|
[](https://repology.org/metapackage/unarr)
|
|
|
|
#### From OBS
|
|
[.deb package](https://software.opensuse.org//download.html?project=home%3Aselmf&package=libunarr)
|
|
[.rpm package](https://software.opensuse.org//download.html?project=home%3Aselmf%3Ayacreader-rpm&package=libunarr)
|
|
|
|
### Building from source
|
|
|
|
#### Dependencies
|
|
|
|
(lib)unarr can take advantage of the following libraries if they are present:
|
|
|
|
* bzip2
|
|
* xz / libLZMA
|
|
* zlib
|
|
|
|
#### CMake
|
|
|
|
```bash
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
... as a static library
|
|
|
|
```bash
|
|
cmake .. -DBUILD_SHARED_LIBS=OFF
|
|
```
|
|
|
|
By default, (lib)unarr will try to detect and use system libraries like bzip2,
|
|
xz/LibLZMA and zlib. If this is undesirable, you can override this behavior by
|
|
specifying:
|
|
|
|
```bash
|
|
cmake .. -DUSE_SYSTEM_BZ2=OFF -DUSE_SYSTEM_LZMA=OFF -DUSE_SYSTEM_ZLIB=OFF
|
|
```
|
|
|
|
Install
|
|
|
|
```bash
|
|
make install
|
|
```
|
|
|
|
#### Testing
|
|
|
|
Unarr supports unit tests, integration tests and fuzzing.
|
|
|
|
|
|
```bash
|
|
cmake .. -DBUILD_UNIT_TESTS=ON -DBUILD_INTEGRATION_TESTS=ON
|
|
```
|
|
|
|
To build the unit tests, the *cmocka* unit testing framework is required.
|
|
|
|
Building the integration tests also enables the *unarr-test* executable
|
|
which can be used to run additional tests on user-provided archive files.
|
|
|
|
Building the fuzzer target will provide a coverage-guided fuzzer based
|
|
on llvm libfuzzer. It should be treated as a stand-alone target.
|
|
|
|
```bash
|
|
cmake .. -DBUILD_FUZZER=ON
|
|
```
|
|
|
|
All tests can be run using ctest or their respective executables.
|
|
|
|
## Usage
|
|
|
|
### Examples
|
|
|
|
Check [unarr.h](unarr.h) and [unarr-test](test/main.c) to get a general feel
|
|
for the api and usage.
|
|
|
|
The unarr-test sample application can be used to test archives.
|
|
|
|
To build it, use:
|
|
|
|
```bash
|
|
cmake .. -DBUILD_INTEGRATION_TESTS=ON
|
|
```
|
|
|
|
## Limitations
|
|
|
|
Unarr was written for comic book archives, so it currently doesn't support:
|
|
|
|
* password protected archives
|
|
* self extracting archives
|
|
* split archives
|
|
|
|
### 7z support
|
|
|
|
7z support for large files with solid compression is currently limited by a
|
|
known performance problem in the ANSI-C based LZMA SDK
|
|
(see https://github.com/zeniko/unarr/issues/4).
|
|
|
|
Fixing this problem will require modification or replacement of the LZMA SDK
|
|
code used.
|
|
|
|
### Rar support
|
|
|
|
RAR5 is currently not supported. There are plans to add this in a future version,
|
|
but as of now this is still work in progress.
|