Same --dist redirect (output to <repo>/dist/<config> instead of
plugins/<config>) applied to every per-version Windows script so the
flag works regardless of --7zip-version/--toolset the dispatcher
selects. Mirrors build_plugin_2601_vs2026.py + the Linux path.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
When --dist is passed (forwarded by build_plugin.py to the per-version
script), built nsis7z.dll files are copied to <repo>/dist/<config>
instead of <repo>/plugins/<config>. Lets CI collect a clean dist/
tree without touching the committed plugins/ dir. Windows
(2601_vs2026) and Linux build paths both supported.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
All 6 case-sensitivity shim headers in tools/linux/overlay/include/
now use #include_next instead of #include to forward to the real
MinGW system header, avoiding infinite preprocessor recursion on
Linux (Debian/WSL) where overlay/include is first in the search path.
Fixes build failures on Debian WSL (GCC 12) for all configurations.
Also update nsis7z.dll binaries built with the fixed overlay.
The script was used once (commit 2207fbf) to rewrite vcxproj paths from
symlink-dependent relative paths to direct vendor submodule paths.
All bundle vcxproj files are already updated; the script has no further use.
Aligns the zstd NSIS wrapper directory with the naming convention used by
all other bundle directories (versions/25.01-bundle, 26.00-bundle, etc.).
Changes:
- git mv versions/zstd -> versions/zstd-bundle (20 project-owned files)
- Fix UI/NSIS/StdAfx.h: use relative include ../../Bundles/Nsis7z/pluginapi.h
instead of absolute-style 7zip/Bundles/Nsis7z/pluginapi.h (portable across
both Linux and Windows builds without extra include path)
Build tool updates:
- tools/legacy/build_plugin_zstd_vs2026.py: updated project_dir path
- tools/linux/build_plugin_linux.py:
* VERSION_LAYOUT zstd: zstd -> zstd-bundle
* VERSION_EXTRA_FLAGS zstd: -Wno-sign-compare -Wno-cast-function-type
(fast-lzma2 C vendor code)
* VERSION_EXTRA_CXXFLAGS zstd: -Wno-unused-parameter (NSIS wrapper)
* EXTRA_SYS_OBJS: inject MyWindows.o for zstd (LocalFileTimeToFileTime2)
* Remove 'zip_version != zstd' exception; auto-recreate symlinks for all
bundle versions including zstd
- tools/linux/setup_bundle_symlinks.py: add VENDOR_DIR mapping so 'zstd'
points to versions/7-zip-zstd (not versions/zstd which no longer exists)
- tools/linux/overlay/makefile.gcc: add EXTRA_SYS_OBJS ?= variable so
callers can inject additional objects without modifying the file
Linux build status after this commit:
python3 build_plugin.py --7zip-version zstd -> Build completed (all 3 configs)
After the previous commit removed symlinks from git (they break Windows
clones), a fresh Linux clone or git checkout would leave the bundle
directories without the POSIX symlinks that the GNU make build needs.
Add _ensure_bundle_symlinks() to build_plugin_linux.py: before the first
make invocation for a bundle-based version it checks whether the bundle
root symlink (bundle/C -> ../VER/C) exists and, if not, runs
setup_bundle_symlinks.py automatically so the developer never has to
run the setup script manually.
Windows builds now use direct relative paths to the vendor submodules
(same pattern as versions/zstd bundle) instead of relying on POSIX
symlinks that git cannot materialise correctly on Windows without
Developer Mode / core.symlinks=true.
Changes:
- Remove all 66 symlinks from each of 25.01-bundle, 26.00-bundle,
26.01-bundle (198 total). POSIX symlinks are still created on Linux
by setup_bundle_symlinks.py for the GNU make builds.
- Update Nsis7z.vcxproj / Nsis7z_vs2026.vcxproj in all three bundles:
depth-4 ..\..\..\..\C\ -> ..\..\..\..\..\VER\C depth-3 ..\..\..\{Common,Windows}\ -> ..\..\..\..\..\VER\CPP\{...} depth-2 (non-NSIS) -> ..\..\..\..\..\VER\CPP\7zip\...
UI\NSIS paths unchanged (real bundle files)
AdditionalIncludeDirectories patched to point at vendor CPP/
- Add tools/fix_bundle_vcxproj_paths.py (idempotent helper used to
perform the rewrite; kept for future reference / re-runs)
The three per-version setup_*_bundle_symlinks.py scripts were logically
identical, differing only in the version string. Replace the duplicated
logic with a single parameterised script:
tools/linux/setup_bundle_symlinks.py <version>
The three named scripts are kept as one-liner thin wrappers that forward
to the unified script, preserving backwards compatibility.
- tools/linux/build_plugin_linux.py: point VERSION_LAYOUT['25.01'].bundle_dir
to versions/25.01-bundle/; update comment (all versions now use bundle dirs).
- tools/legacy/build_plugin_2501_vs2026.py: point project_dir to 25.01-bundle/.
- tools/legacy/build_plugin_2501_vs2022.py: point project_dir to 25.01-bundle/.
- tools/linux/build_plugin_linux.py: point VERSION_LAYOUT['26.00'].bundle_dir
to versions/26.00-bundle/ (was versions/26.00/); update module docstring.
- tools/legacy/build_plugin_2600_vs2026.py: point project_dir to
versions/26.00-bundle/ (was versions/26.00/).
- tools/linux/setup_26_01_bundle_symlinks.py: refactor to use bundle_root /
vendor_root variables and add C/Asm root-level symlink creation, matching
the new setup_26_00_bundle_symlinks.py convention.
Mirror the 26.01-bundle approach for 26.00:
- versions/26.00-bundle/CPP/7zip/Bundles/Nsis7z/: project-owned NSIS plugin
wrapper sources (api.h, nsis7z.cpp, pluginapi.*, resource.*, StdAfx*,
Nsis7z.sln, Nsis7z.vcxproj, Nsis7z.vcxproj.filters, Nsis7z_vs2026.vcxproj).
- versions/26.00-bundle/CPP/7zip/UI/NSIS/: NSIS UI sources (Main.cpp,
ExtractCallbackConsole.*, NSISBreak.*, UserInputUtils2.*, StdAfx.h).
- versions/26.00-bundle/CPP/7zip/LzmaDec_gcc.mak: forwarding stub so that
the CWD-relative `include ../../LzmaDec_gcc.mak` in Arc_gcc.mak resolves
correctly when make runs from the Nsis7z bundle dir.
- versions/26.00-bundle/{C,Asm} and CPP sub-trees: symlinks into versions/26.00/
so the vendor headers and sources are visible without modifying the submodule.
- tools/linux/setup_26_00_bundle_symlinks.py: idempotent script to recreate
all symlinks after a fresh clone + submodule initialisation.
- Add tools/legacy/build_plugin_2601_vs2026.py: Windows build script for
7-zip 26.01 using VS2026 toolset (v145), adapted from the zstd equivalent.
Points to versions/26.01-bundle/ as the project root.
- Update build_plugin.py:
- Add LINUX_SCRIPT reference to tools/linux/build_plugin_linux.py.
- Add '26.01' to WINDOWS_SCRIPTS with v2026 entry pointing to the new
script (v2022 remains None; 26.01 requires v145 minimum).
- Add '26.01' to LINUX_SUPPORTED_7ZIP set.
- Add '26.01' to argparse choices.
7-Zip 26.01 (ip7z/7zip) never shipped NSIS plugin sources, so they live in
a separate bundle directory (versions/26.01-bundle/) that mirrors the layout
expected by the shared overlay makefile and by MSBuild.
Bundle contents:
- CPP/7zip/Bundles/Nsis7z/: NSIS plugin wrapper sources (nsis7z.cpp,
pluginapi.cpp, api.h, resource.rc, StdAfx.h, …) and the Windows build
project file (Nsis7z_vs2026.vcxproj, adapted from versions/26.00/).
The vcxproj references the vendor submodule tree via relative paths
(../../../../../26.01/…), keeping the submodule pristine.
- CPP/7zip/UI/NSIS/: NSIS UI adapter sources (Main.cpp, MainAr.cpp,
NSISBreak.cpp, ExtractCallbackConsole.cpp, UserInputUtils2.cpp and
corresponding headers), copied from versions/26.00/.
- CPP/7zip/LzmaDec_gcc.mak: forwarding stub; GNU make resolves relative
`include` paths against the CWD, so when make runs from Bundles/Nsis7z
the upstream Arc_gcc.mak's `include ../../LzmaDec_gcc.mak` lands here.
The stub re-includes the real file via $(VENDOR_7ZIP).
- Symlinks (C, Asm, CPP/7zip/*, CPP/Common, CPP/Windows, …) pointing into
the versions/26.01 submodule. These are required because the vendor
makefile uses CWD-relative source paths (../../../../C/…, ../../Common/…).
tools/linux/setup_26_01_bundle_symlinks.py recreates them if needed.
Replaces the per-version in-tree build files with a shared overlay that
keeps all project-owned build infrastructure outside the vendor source trees,
making it safe to use vendor directories as pristine git submodules.
Changes:
- Add tools/linux/overlay/makefile.gcc: parameterised makefile that drives
MinGW cross-compilation; VENDOR_7ZIP, DEF_FILE and NSIS_DIR are all
overridable from the command line so no files are written into the vendor
tree at build time.
- Add tools/linux/overlay/include/: case-sensitivity shim headers
(Windows.h, CommCtrl.h, MAPI.h, NTSecAPI.h, Psapi.h, ShlObj.h) that
redirect to the lowercase MinGW system headers; also adds
z7_idecl_noexcept_strip.h which resolves the noexcept-specifier mismatch
in 7-zip 25.01 NSIS UI code.
- Move Nsis7z.def from versions/26.00/…/Bundles/Nsis7z/ to overlay/ (git
rename; content unchanged).
- Delete versions/26.00/…/Bundles/Nsis7z/makefile.gcc (superseded by the
overlay).
- Rewrite tools/linux/build_plugin_linux.py to drive the overlay makefile,
support multiple 7-zip versions (25.01, 26.00, 26.01, zstd) with a
VERSION_LAYOUT table, and add NSIS_DIR auto-detection for bundle-based
builds.
- Add _linux_build/ to .gitignore.
One-shot script to backfill Gitea release bodies for existing releases
using the Gitea API. Reads per-version Markdown files from
tools/release-notes/ and PATCHes each release body.
Includes README.md in tools/release-notes/ explaining usage.
- Implemented plugin API in `pluginapi.cpp` and `pluginapi.h` for NSIS integration.
- Added resource files `resource.h` and `resource.rc` for versioning and resource management.
- Created `ExtractCallbackConsole` class to handle extraction progress and user input.
- Developed main extraction logic in `Main.cpp` and `MainAr.cpp` for handling archives.
- Introduced user input utilities in `UserInputUtils2.cpp` and `UserInputUtils2.h` for password handling and user prompts.
- Added break signal handling in `NSISBreak.cpp` and `NSISBreak.h` for graceful interruption of extraction processes.
- Included standard header `StdAfx.h` for precompiled headers and common includes.