Files
nsis-plugin-ns7zip/tools/linux/overlay/include/z7_idecl_noexcept_strip.h
T
Simone 6a961306c9 build(linux): introduce overlay makefile infrastructure
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.
2026-05-03 01:19:13 +02:00

34 lines
1.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma GCC system_header
/*
* Linux/MinGW cross-build shim for 7-zip 25.01 UI/NSIS sources.
*
* In 25.01, IDecl.h defines Z7_COM7F_E as throw(). Under GCC/C++17,
* throw() is treated as noexcept, causing a hard "different exception
* specifier" error when STDMETHODIMP out-of-class definitions (which carry
* no exception spec) are compiled against class declarations that used the
* noexcept-bearing Z7_COM7F_IMF macro.
*
* Strategy (no vendor files modified):
* 1. Include IDecl.h now so its include guard (ZIP7_INC_IDECL_H) is set.
* Subsequent indirect includes of IDecl.h from the source file will be
* no-ops.
* 2. Immediately undefine Z7_COM7F_E and redefine it as empty.
* Because the preprocessor expands macros lazily (at use site, not at
* definition site), all Z7_COM7F_IMF / Z7_COM7F_EO usages that follow
* will pick up the empty definition, producing declarations with no
* exception specifier — matching the STDMETHODIMP definitions.
*/
#include "7zip/IDecl.h" /* searched via -I$(CPP_ROOT); resolves to versions/<ver>/CPP/7zip/IDecl.h */
#undef Z7_COM7F_E
#define Z7_COM7F_E /* empty no exception specifier */
/* Cascade: Z7_COM7F_EO and Z7_COM7F_EOF reference Z7_COM7F_E by name,
* so they pick it up automatically. Redefine them explicitly to avoid
* "macro redefined" warnings if they were already expanded anywhere. */
#undef Z7_COM7F_EO
#define Z7_COM7F_EO Z7_COM7F_E Z7_override
#undef Z7_COM7F_EOF
#define Z7_COM7F_EOF Z7_COM7F_EO Z7_final