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.
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: CommCtrl.h → commctrl.h */
|
||||
#pragma GCC system_header
|
||||
#include <commctrl.h>
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: MAPI.h → mapi.h */
|
||||
#pragma GCC system_header
|
||||
#include <mapi.h>
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: NTSecAPI.h → ntsecapi.h */
|
||||
#pragma GCC system_header
|
||||
#include <ntsecapi.h>
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: Psapi.h → psapi.h */
|
||||
#pragma GCC system_header
|
||||
#include <psapi.h>
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: ShlObj.h → shlobj.h */
|
||||
#pragma GCC system_header
|
||||
#include <shlobj.h>
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Linux/MinGW cross-build shim: Windows.h → windows.h */
|
||||
#pragma GCC system_header
|
||||
#include <windows.h>
|
||||
@@ -0,0 +1,33 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user