Simone 870e5ba5b2 chore: ignore auto-generated bundle symlinks in .gitignore
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/.
2026-05-03 02:32:33 +02:00
2026-05-02 21:54:01 +02:00
2026-05-02 21:54:01 +02:00

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-* and i686-w64-mingw32-*) and make.

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_TOKEN secret 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/h
  • Archive\Nsis\NsisIn.cpp/h
  • Archive\Nsis\NsisDecode.cpp/h
  • Archive\Nsis\NsisRegister.cpp
  • Compress\BZip2Decoder.cpp/h (required by NsisDecode)
  • Compress\BZip2Crc.cpp

Bug Fixes (25.01, 26.00)

  • Divide-by-zero: added guard if (totalSize == 0) return 0 in GetPercentComplete
  • ExtractWithFileCallback: NSIS callback triggered only on filename change (avoids crash with totalSize = UINT64_MAX on first SetTotal call)

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.

S
Description
NSIS plugin for 7z, ZIP, NSIS archive extraction
Readme MIT 20 MiB
v2.3.1 Latest
2026-05-04 22:12:28 +00:00
Languages
C++ 79.7%
C 14.6%
Python 3.9%
Makefile 0.9%
Assembly 0.6%
Other 0.2%