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
 | 
