870e5ba5b29592dd1d55eb657673fdd475a18238
setup_bundle_symlinks.py creates POSIX symlinks inside versions/*-bundle/ at build time on Linux. These must not be committed to git (they break Windows clones) but were appearing as untracked (??) entries in git status. Add precise gitignore patterns that cover all generated symlink paths (C, Asm, CPP/*.mak, CPP/7zip/*.mak|.h|.rc, CPP/7zip/Archive|Common|..., CPP/7zip/UI/Agent|Console|...) without hiding the tracked project-owned sources in Bundles/Nsis7z/ and UI/NSIS/.
Nsis7z NSIS Plugin
NSIS plugin for extracting 7z, ZIP and NSIS archives.
Available Versions
| Version | 7-Zip | Formats | Notes |
|---|---|---|---|
| 19.00 | 7-Zip 19.00 | 7z, LZMA, XZ, Split | Original updated version |
| 25.01 | 7-Zip 25.01 | 7z, ZIP, LZMA, XZ, Split, NSIS | With NSIS archive support |
| 26.00 | 7-Zip 26.00 | 7z, ZIP, LZMA, XZ, Split, NSIS | Recommended |
Supported Architectures
| Architecture | Description |
|---|---|
| x86-ansi | 32-bit ANSI (legacy) |
| x86-unicode | 32-bit Unicode |
| amd64-unicode | 64-bit Unicode |
Quick Start
!addplugindir "plugins\x86-unicode"
Section
; Simple extraction (7z, ZIP, NSIS)
Nsis7z::Extract "$EXEDIR\data.7z"
; With progress text in label
Nsis7z::ExtractWithDetails "$EXEDIR\data.7z" "Installing %s..."
; With callback to show files in listbox
GetFunctionAddress $0 MyExtractCallback
Nsis7z::ExtractWithFileCallback "$EXEDIR\data.7z" $0
SectionEnd
Function MyExtractCallback
Pop $0 ; completedSize
Pop $1 ; totalSize
Pop $2 ; fileName
DetailPrint "$2"
FunctionEnd
Build Scripts
The repo includes a single unified build_plugin.py script that replaces the previous per-version scripts.
Build
# Recommended: 7-Zip 26.00 with auto-detected toolset
python build_plugin.py
# Select 7-Zip version (19.00 | 25.01 | 26.00)
python build_plugin.py --7zip-version 25.01
# Specific toolset (2022|2026|auto)
python build_plugin.py --toolset 2022
# Linux host path (cross-build with MinGW-w64, 26.00)
python build_plugin.py --host linux
# Print version and exit
python build_plugin.py --version
Linux notes:
- Local Linux path currently supports
--7zip-version 26.00. - Requires MinGW-w64 toolchains (
x86_64-w64-mingw32-*andi686-w64-mingw32-*) andmake.
Repository Structure
nsis-plugin-ns7zip/
├── build_plugin.py # Unified build script (all versions)
├── build_zstd.cmd # Build script for 7-zip-zstd variant
├── rebuild_nsis7z1900-src.ps1 # Rebuilds 19.00 sources
├── versions/
│ ├── 19.00/ # 7-Zip 19.00 modified
│ ├── 25.01/ # 7-Zip 25.01 modified (ZIP + NSIS handler)
│ ├── 26.00/ # 7-Zip 26.00 modified (ZIP + NSIS handler)
│ └── 7-zip-zstd/ # 7-Zip zstd fork (submodule)
├── plugins/ # Compiled DLLs output
├── tools/
│ ├── fix_vcxproj.py # Project file patcher
│ ├── update_gitea_releases.py # Backfill Gitea release bodies (one-shot)
│ ├── release-notes/ # Per-version Markdown snippets
│ ├── linux/ # Linux-specific build helpers
│ └── legacy/ # Old per-version build scripts
└── .github/workflows/
├── build.yml # CI: Windows + Linux matrix build
└── release.yml # Release: build artifacts + publish to GitHub & Gitea
CI / Release Workflow
- build.yml — runs on every push/PR; builds all three configs on Windows (MSBuild) and Linux (MinGW-w64) in parallel.
- release.yml — triggered by a
v*tag push; builds and packages artifacts, creates a GitHub Release with the relevant CHANGELOG section as body, and updates the corresponding Gitea release body via API (GITEA_TOKENsecret required).
Changes from Original
NSIS Archive Handler (25.01, 26.00)
Added support for extracting .exe archives created with NSIS (not present in the original plugin):
Archive\Nsis\NsisHandler.cpp/hArchive\Nsis\NsisIn.cpp/hArchive\Nsis\NsisDecode.cpp/hArchive\Nsis\NsisRegister.cppCompress\BZip2Decoder.cpp/h(required by NsisDecode)Compress\BZip2Crc.cpp
Bug Fixes (25.01, 26.00)
- Divide-by-zero: added guard
if (totalSize == 0) return 0inGetPercentComplete - ExtractWithFileCallback: NSIS callback triggered only on filename change (avoids crash with
totalSize = UINT64_MAXon firstSetTotalcall)
License
- 7-Zip: LGPL 2.1 + BSD 3-clause
- NSIS Plugin: Afrow UK
Credits
- Igor Pavlov (7-Zip)
- Afrow UK (Original plugin)
- Simone (x64 support, VS2022/VS2026, ZIP, NSIS handler, ExtractWithFileCallback)
See README_IT.md for the Italian version.