Browse Source

Add 7z package (#525)

* Add 7zip package

* Fix package folder

* Rework 7z

* Switch to binary package on Windows

* Fix Linux/macosx url

* Update xmake.lua

* Update xmake.lua

* Remove -Werror to fix compilation using Clang
Jérôme Leclercq 4 years ago
parent
commit
14c2205243

+ 19 - 0
packages/7/7z/patches/21.02/backport-21.03-fix-for-GCC-10.patch

@@ -0,0 +1,19 @@
+diff --git a/CPP/7zip/Common/OffsetStream.cpp b/CPP/7zip/Common/OffsetStream.cpp
+index b3e710f..b16124c 100644
+--- a/CPP/7zip/Common/OffsetStream.cpp
++++ b/CPP/7zip/Common/OffsetStream.cpp
+@@ -20,13 +20,13 @@ STDMETHODIMP COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *proc
+ 
+ STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+ {
+-  UInt64 absoluteNewPosition;
+   if (seekOrigin == STREAM_SEEK_SET)
+   {
+     if (offset < 0)
+       return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
+     offset += _offset;
+   }
++  UInt64 absoluteNewPosition = 0; // =0 for gcc-10
+   HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition);
+   if (newPosition)
+     *newPosition = absoluteNewPosition - _offset;

+ 57 - 0
packages/7/7z/xmake.lua

@@ -0,0 +1,57 @@
+package("7z")
+
+    set_kind("binary")
+    set_homepage("https://www.7-zip.org/")
+    set_description("A file archiver with a high compression ratio.")
+
+    if is_host("windows") then
+        if is_arch("x64", "x86_64") then
+            set_urls("https://github.com/xmake-mirror/7zip/releases/download/$(version)/7z$(version)-x64.zip",
+                     "https://gitlab.com/xmake-mirror/7zip-releases/raw/master/7z$(version)-x64.zip")
+            add_versions("19.00", "fc21cf510d70a69bfa8e5b0449fe0a054fb76e2f8bd568364821f319c8b1d86d")
+            add_versions("18.05", "e6e2d21e2c482f1b1c5a6d21ed80800ce1273b902cf4b9afa68621545540ee2f")
+        else
+            set_urls("https://github.com/xmake-mirror/7zip/releases/download/$(version)/7z$(version)-x86.zip",
+                     "https://gitlab.com/xmake-mirror/7zip-releases/raw/master/7z$(version)-x86.zip")
+            add_versions("19.00", "f84fab081a2d8a6b5868a2eaf01cd56017363fb24560259cea80567f8062334f")
+            add_versions("18.05", "544c37bebee30437aba405071484e0ac6310332b4bdabe4ca7420a800d4b4b5e")
+        end
+    else
+        set_urls("https://github.com/xmake-mirror/7zip/archive/refs/tags/$(version).tar.gz",
+                 "https://github.com/xmake-mirror/7zip.git")
+        add_versions("21.02", "b2a4c5bec8207508b26f94507f62f5a79c57ae9ab77dbf393f3b2fc8eef2e382")
+        add_patches("21.02", path.join(os.scriptdir(), "patches", "21.02", "backport-21.03-fix-for-GCC-10.patch"), "f1d8fa0bbb25123b28e9b2842da07604238b77e51b918260a369f97c2f694c89")
+    end
+
+    on_install("macosx", "linux", function (package)
+        -- Clang has some indentation warnings that fails compilation using -Werror, remove it
+        io.replace("CPP/7zip/7zip_gcc.mak", "CFLAGS_WARN_WALL = -Wall -Werror -Wextra", "CFLAGS_WARN_WALL = -Wall -Wextra", {plain = true})
+
+        os.cd("CPP/7zip/Bundles/Alone2")
+        os.vrun("make -j -f makefile.gcc")
+
+        local bin = package:installdir("bin")
+        os.cp("_o/7zz", bin)
+        os.ln(bin .. "/7zz", bin .. "/7z")
+    end)
+
+    on_install("windows", function (package)
+        os.cp("*", package:installdir("bin"))
+
+        --[[
+        Build code for windows
+
+        local archdir = package:is_arch("x64", "x86_64") and "x64" or "x86"
+        os.cd("CPP/7zip/Bundles/Alone2")
+        local configs = {"-f", "makefile"}
+        table.insert(configs, "PLATFORM=" .. archdir)
+        import("package.tools.nmake").build(package, configs)
+
+        local bin = package:installdir("bin")
+        os.cp(archdir .. "/7zz.exe", bin .. "/7z.exe")
+        ]]
+    end)
+
+    on_test(function (package)
+        os.vrun("7z --help")
+    end)