274 lines
9.7 KiB
Plaintext
274 lines
9.7 KiB
Plaintext
7-Zip 23.01 Sources
|
|
-------------------
|
|
|
|
7-Zip is a file archiver for Windows.
|
|
|
|
7-Zip Copyright (C) 1999-2023 Igor Pavlov.
|
|
|
|
|
|
License Info
|
|
------------
|
|
|
|
7-Zip is free software distributed under the GNU LGPL
|
|
(except for unRar code). Also some code
|
|
is licensed under the "BSD 3-clause License".
|
|
Read "License.txt" for more infomation about license.
|
|
|
|
Notes about unRAR license:
|
|
|
|
Please check main restriction from unRar license:
|
|
|
|
2. The unRAR sources may be used in any software to handle RAR
|
|
archives without limitations free of charge, but cannot be used
|
|
to re-create the RAR compression algorithm, which is proprietary.
|
|
Distribution of modified unRAR sources in separate form or as a
|
|
part of other software is permitted, provided that it is clearly
|
|
stated in the documentation and source comments that the code may
|
|
not be used to develop a RAR (WinRAR) compatible archiver.
|
|
|
|
In brief it means:
|
|
1) You can compile and use compiled files under GNU LGPL rules, since
|
|
unRAR license almost has no restrictions for compiled files.
|
|
You can link these compiled files to LGPL programs.
|
|
2) You can fix bugs in source code and use compiled fixed version.
|
|
3) You can not use unRAR sources to re-create the RAR compression algorithm.
|
|
|
|
|
|
LZMA SDK
|
|
--------
|
|
|
|
This package also contains some files from LZMA SDK
|
|
You can download LZMA SDK from:
|
|
http://www.7-zip.org/sdk.html
|
|
LZMA SDK is written and placed in the public domain by Igor Pavlov.
|
|
|
|
|
|
How to compile in Windows
|
|
-------------------------
|
|
|
|
To compile the sources to Windows binaries you need Visual Studio compiler and/or Windows SDK.
|
|
You can use latest Windows Studio 2017/2019/2022 to compile binaries for x86, x64, arm64 and arm platforms.
|
|
Also you can use old compilers for some platforms:
|
|
x86 : Visual C++ 6.0 with Platform SDK
|
|
x64 : Windows Server 2003 R2 Platform SDK
|
|
ia64 (itanium) : Windows Server 2003 R2 Platform SDK
|
|
arm for Windows CE : Standard SDK for Windows CE 5.0
|
|
|
|
If you use MSVC6, specify also Platform SDK directories at top of directories lists:
|
|
Tools / Options / Directories
|
|
- Include files
|
|
- Library files
|
|
|
|
Also you need Microsoft Macro Assembler:
|
|
- ml.exe for x86
|
|
- ml64.exe for x64
|
|
You can use ml.exe from Windows SDK for Windows Vista or some later versions.
|
|
|
|
There are two ways to compile 7-Zip binaries:
|
|
1) via makefile in command line.
|
|
2) via dsp file in Visual Studio.
|
|
|
|
The dsp file compiling can be used for development and debug purposes.
|
|
All final 7-Zip binaries are compiled via makefiles, that provide best
|
|
optimization options.
|
|
|
|
|
|
How to compile with makefile
|
|
----------------------------
|
|
|
|
Some macronames can be defined for compiling with makefile:
|
|
|
|
PLATFORM
|
|
with possible values: x64, x86, arm64, arm, ia64
|
|
|
|
OLD_COMPILER
|
|
for old VC compiler, like MSCV 6.0.
|
|
|
|
MY_DYNAMIC_LINK
|
|
for dynamic linking to the run-time library (msvcrt.dll).
|
|
The default makefile option is static linking to the run-time library.
|
|
|
|
|
|
|
|
Compiling 7-Zip for Unix/Linux
|
|
------------------------------
|
|
|
|
There are several options to compile 7-Zip with different compilers: gcc and clang.
|
|
Also 7-Zip code contains two versions for some parts of code: in C and in Assembeler.
|
|
So if you compile the version with Assembeler code, you will get faster 7-Zip binary.
|
|
|
|
7-Zip's assembler code uses the following syntax for different platforms:
|
|
|
|
1) x86 and x86-64 (AMD64): MASM syntax.
|
|
There are 2 programs that supports MASM syntax in Linux.
|
|
' 'Asmc Macro Assembler and JWasm. But JWasm now doesn't support some
|
|
cpu instructions used in 7-Zip.
|
|
So you must install Asmc Macro Assembler in Linux, if you want to compile fastest version
|
|
of 7-Zip x86 and x86-64:
|
|
https://github.com/nidud/asmc
|
|
|
|
2) arm64: GNU assembler for ARM64 with preprocessor.
|
|
That systax is supported by GCC and CLANG for ARM64.
|
|
|
|
There are different binaries that can be compiled from 7-Zip source.
|
|
There are 2 main files in folder for compiling:
|
|
makefile - that can be used for compiling Windows version of 7-Zip with nmake command
|
|
makefile.gcc - that can be used for compiling Linux/macOS versions of 7-Zip or Windows version
|
|
with MINGW (GCC) with make command.
|
|
|
|
At first you must change the current folder to folder that contains `makefile.gcc`:
|
|
|
|
cd CPP/7zip/Bundles/Alone2
|
|
|
|
Then you can compile `makefile.gcc` with the command:
|
|
|
|
make -j -f makefile.gcc
|
|
|
|
Also there are additional "*.mak" files in folder "CPP/7zip/" that can be used to compile
|
|
7-Zip binaries with optimized code and optimzing options.
|
|
|
|
To compile with GCC without assembler:
|
|
cd CPP/7zip/Bundles/Alone2
|
|
make -j -f ../../cmpl_gcc.mak
|
|
|
|
To compile with CLANG without assembler:
|
|
make -j -f ../../cmpl_clang.mak
|
|
|
|
To compile 7-Zip for x86-64 with asmc assembler:
|
|
make -j -f ../../cmpl_gcc_x64.mak
|
|
|
|
To compile 7-Zip for arm64 with assembler:
|
|
make -j -f ../../cmpl_gcc_arm64.mak
|
|
|
|
To compile 7-Zip for arm64 for macOS:
|
|
make -j -f ../../cmpl_mac_arm64.mak
|
|
|
|
Also you can change some compiler options in the "mak" files:
|
|
cmpl_gcc.mak
|
|
var_gcc.mak
|
|
warn_gcc.mak
|
|
|
|
makefile.gcc supports some variables that can change compile options
|
|
|
|
USE_JWASM=1
|
|
use JWasm assembler instead of Asmc.
|
|
Note that JWasm doesn't support AES instructions. So AES code from C version AesOpt.c
|
|
will be used instead of assembler code from AesOpt.asm.
|
|
|
|
DISABLE_RAR=1
|
|
removes whole RAR related code from compilation.
|
|
|
|
DISABLE_RAR_COMPRESS=1
|
|
removes "not fully free" code of RAR decompression codecs from compilation.
|
|
|
|
RAR decompression codecs in 7-Zip code has some additional license restrictions,
|
|
that can be treated as not fully compatible with free-software licenses.
|
|
DISABLE_RAR_COMPRESS=1 allows to exclude such "not-fully-free" RAR code from compilation.
|
|
if DISABLE_RAR_COMPRESS=1 is specified, 7-zip will not be able to decompress files
|
|
from rar archives, but 7-zip still will be able to open rar archives to get list of
|
|
files or to extract files that are stored without compression.
|
|
if DISABLE_RAR=1 is specified, 7-zip will not be able to work with RAR archives.
|
|
|
|
|
|
|
|
7-Zip and p7zip
|
|
===============
|
|
Now there are two different ports of 7-Zip for Linux/macOS:
|
|
|
|
1) p7zip - another port of 7-Zip for Linux, made by an independent developer.
|
|
The latest version of p7zip now is 16.02, and that p7zip 16.02 is outdated now.
|
|
http://sourceforge.net/projects/p7zip/
|
|
|
|
2) 7-Zip for Linux/macOS - this package - it's new code with all changes from latest 7-Zip for Windows.
|
|
|
|
These two ports are not identical.
|
|
Note also that some Linux specific things can be implemented better in p7zip than in new 7-Zip for Linux.
|
|
|
|
|
|
|
|
|
|
Notes:
|
|
------
|
|
7-Zip consists of COM modules (DLL files).
|
|
But 7-Zip doesn't use standard COM interfaces for creating objects.
|
|
Look at
|
|
7zip\UI\Client7z folder for example of using DLL files of 7-Zip.
|
|
Some DLL files can use other DLL files from 7-Zip.
|
|
If you don't like it, you must use standalone version of DLL.
|
|
To compile standalone version of DLL you must include all used parts
|
|
to project and define some defs.
|
|
For example, 7zip\Bundles\Format7z is a standalone version of 7z.dll
|
|
that works with 7z format. So you can use such DLL in your project
|
|
without additional DLL files.
|
|
|
|
|
|
Description of 7-Zip sources package
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
DOC Documentation
|
|
---
|
|
readme.txt - Readme file
|
|
src-history.txt - Sources history
|
|
7zC.txt - 7z ANSI-C Decoder description
|
|
7zFormat.txt - 7z format description
|
|
Methods.txt - Compression method IDs
|
|
lzma.txt - LZMA compression description
|
|
License.txt - license information
|
|
copying.txt - GNU LGPL license
|
|
unRarLicense.txt - License for unRAR part of source code
|
|
7zip.wxs - installer script for WIX
|
|
7zip.hhp - html help project file
|
|
|
|
Asm - Source code in Assembler : optimized code for CRC, SHA, AES, LZMA decoding.
|
|
|
|
C - Source code in C
|
|
|
|
CPP - Source code in C++
|
|
|
|
Common common files for C++ projects
|
|
|
|
Windows common files for Windows related code
|
|
|
|
7zip
|
|
|
|
Common Common modules for 7-zip
|
|
|
|
Archive files related to archiving
|
|
|
|
Bundle Modules that are bundles of other modules (files)
|
|
|
|
Alone 7za.exe: Standalone version of 7-Zip console that supports only 7z/xz/cab/zip/gzip/bzip2/tar.
|
|
Alone2 7zz.exe: Standalone version of 7-Zip console that supports all formats.
|
|
Alone7z 7zr.exe: Standalone version of 7-Zip console that supports only 7z (reduced version)
|
|
Fm Standalone version of 7-Zip File Manager
|
|
Format7z 7za.dll: .7z support
|
|
Format7zExtract 7zxa.dll: .7z support, extracting only
|
|
Format7zR 7zr.dll: .7z support, reduced version
|
|
Format7zExtractR 7zxr.dll: .7z support, reduced version, extracting only
|
|
Format7zF 7z.dll: all formats
|
|
LzmaCon lzma.exe: LZMA compression/decompression
|
|
SFXCon 7zCon.sfx: Console 7z SFX module
|
|
SFXWin 7z.sfx: Windows 7z SFX module
|
|
SFXSetup 7zS.sfx: Windows 7z SFX module for Installers
|
|
|
|
Compress files for compression / decompression
|
|
|
|
Crypto files for encryption / decryption
|
|
|
|
UI
|
|
|
|
Agent Intermediary modules for FAR plugin and Explorer plugin
|
|
Client7z Test application for 7za.dll
|
|
Common Common UI files
|
|
Console 7z.exe : Console version
|
|
Explorer 7-zip.dll: 7-Zip Shell extension
|
|
Far plugin for Far Manager
|
|
FileManager 7zFM.exe: 7-Zip File Manager
|
|
GUI 7zG.exe: 7-Zip GUI version
|
|
|
|
|
|
|
|
---
|
|
Igor Pavlov
|
|
http://www.7-zip.org
|