diff --git a/7zip.changes b/7zip.changes new file mode 100644 index 0000000..1f3f477 --- /dev/null +++ b/7zip.changes @@ -0,0 +1,68 @@ +------------------------------------------------------------------- +Wed Jan 26 03:16:03 UTC 2022 - Dario Faggioli + +- Fix an incompatibility with p7zip which was breaking some downstreams + (e.g., GNOME's File-Roller). See bsc#1195041 + * Add fix-compatib-with-p7zip.patch + +------------------------------------------------------------------- +Wed Jan 12 16:45:41 UTC 2022 - Danilo Spinella + +- Replace p7zip with 7zip + * Add p7zip and p7zip.1 + +------------------------------------------------------------------- +Mon Jan 3 11:31:10 UTC 2022 - Danilo Spinella + +- Update to version 21.07: + * The sorting order of files in archives was slightly changed to be more + consistent for cases where the name of some directory is the same as the + prefix part of the name of another directory or file. + * TAR archives created by 7-Zip now are more consistent with archives + created by GNU TAR program. +- Remove unneeded pach remove-rar-handler.patch +- Use the tarball in place of the 7zip archive as Source + +------------------------------------------------------------------- +Wed Dec 22 20:48:46 UTC 2021 - Arjen de Korte + +- Extract source archive with bsdtar instead of p7zip +- Fixup line breaks of documentation files + +------------------------------------------------------------------- +Tue Dec 21 21:13:09 UTC 2021 - Arjen de Korte + +- update to version 21.06 + * Bug in LZMA encoder in file LzmaEnc.c was fixed: + - LzmaEnc_MemEncode(), LzmaEncode() and LzmaCompress() could work + incorrectly, if size value for output buffer is smaller than size + required for all compressed data. + - LzmaEnc_Encode() could work incorrectly, if callback + ISeqOutStream::Write() doesn't write all compressed data. + - NCompress::NLzma::CEncoder::Code() could work incorrectly, + if callback ISequentialOutStream::Write() returns error code. + * Bug in versions 21.00-21.05 was fixed: + 7-Zip didn't set attributes of directories during archive extracting. + +- update to version 21.04 + * 7-Zip now reduces the number of working CPU threads for compression, + if RAM size is not enough for compression with big LZMA2 dictionary. + * 7-Zip now can create and check "file.sha256" and "file.sha1" text + files that contain the list of file names and SHA-1 / SHA-256 + checksums in format compatible with sha1sum/sha256sum programs. + +- update to version 21.03 + * The maximum dictionary size for LZMA/LZMA2 compressing was increased + to 4 GB (3840 MiB). + * Minor speed optimizations in LZMA/LZMA2 compressing. + +------------------------------------------------------------------- +Tue Dec 21 00:07:36 UTC 2021 - Jan Engelhardt + +- Remove more -W flags for the Leap 15.x build to succeed + +------------------------------------------------------------------- +Tue Jul 6 14:36:25 UTC 2021 danilo.spinella@suse.com + +- Create initial version +- Add remove-rar-handler.patch diff --git a/7zip.spec b/7zip.spec new file mode 100644 index 0000000..06350dd --- /dev/null +++ b/7zip.spec @@ -0,0 +1,91 @@ +# +# spec file for package 7zip +# +# Copyright (c) 2022 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define stripped_version 2107 +Name: 7zip +Version: 21.07 +Release: 0 +Summary: File Archivier +# CPP/7zip/Compress/LzfseDecoder.cpp is under the BSD-3-Clause +# C/Sha1.c and C/Sha256.c are in the public domain +License: BSD-3-Clause AND LGPL-2.1-or-later AND SUSE-Public-Domain +Group: Productivity/Archiving/Compression +URL: https://www.7-zip.org/ +#!RemoteAsset: sha256:213d594407cb8efcba36610b152ca4921eda14163310b43903d13e68313e1e39 +Source: https://www.7-zip.org/a/7z%{stripped_version}-src.tar.xz +Source1: p7zip +Source2: p7zip.1 +Patch0: fix-compatib-with-p7zip.patch +BuildRequires: dos2unix +BuildRequires: gcc +BuildRequires: gcc-c++ +Conflicts: p7zip +Conflicts: p7zip-full +Provides: p7zip = %{version} +Provides: p7zip-full = %{version} +Obsoletes: p7zip < %{version} +Obsoletes: p7zip-full < %{version} + +%description +This package contains the 7z command line utility for archiving and +extracting various formats. + +%prep +tar xaf %{SOURCE0} +%patch0 -p1 +dos2unix DOC/*.txt +# Remove executable perms from docs +chmod -x DOC/*.txt + +# Remove -Werror to make build succeed +sed -i 's/-Werror//' CPP/7zip/7zip_gcc.mak +%if 0%{?suse_version} < 1550 +# (gcc 7.x) Remove -Waddress-of-packed-member to make build succeed +sed -i -e 's/-Waddress-of-packed-member//' -e 's/-Wcast-align=strict//' C/warn_gcc.mak CPP/7zip/warn_gcc.mak +%endif +# Inject CFLAGS +sed -i 's/^ -fPIC/ -fPIC %{optflags}/' CPP/7zip/7zip_gcc.mak + +%build +cd CPP/7zip//Bundles/Alone2 +%make_build -f ../../cmpl_gcc.mak DISABLE_RAR_COMPRESS=1 + +%install +install -d -m 755 %{buildroot}%{_bindir} +install -Dt %{buildroot}%{_bindir} CPP/7zip/Bundles/Alone2/b/g/7zz +# Create links the executables provided by p7zip +ln -s %{_bindir}/7zz %{buildroot}%{_bindir}/7z +ln -s %{_bindir}/7z %{buildroot}%{_bindir}/7za +ln -s %{_bindir}/7z %{buildroot}%{_bindir}/7zr +# Install p7zip wrapper and its manpage +install -m755 %{SOURCE1} %{buildroot}%{_bindir}/p7zip +install -m644 -Dt %{buildroot}%{_mandir}/man1 %{SOURCE2} +# Remove a mention of the p7zip-rar package that we don't have +sed -i 's/RAR (if the non-free p7zip-rar package is installed)//g' %{buildroot}%{_mandir}/man1/p7zip.1 + +%files +%license DOC/copying.txt DOC/License.txt +%doc DOC/readme.txt DOC/7zC.txt DOC/Methods.txt DOC/src-history.txt +%{_bindir}/7z +%{_bindir}/7za +%{_bindir}/7zr +%{_bindir}/7zz +%{_bindir}/p7zip +%{_mandir}/man1/p7zip.1%{?ext_man} + +%changelog diff --git a/fix-compatib-with-p7zip.patch b/fix-compatib-with-p7zip.patch new file mode 100644 index 0000000..a2c6766 --- /dev/null +++ b/fix-compatib-with-p7zip.patch @@ -0,0 +1,40 @@ +From: Dario Faggioli +Date: Wed Jan 26 04:01:09 AM CET 2022 +Subject: [PATCH] Console: Avoid terminating on failed password check + +File-roller (i.e., GNOME's Archive Manager), which was working fine +with p7zip and p7zip-full, does not work well with 7zip. More specifically, +it is not possible to open or extract a password protected archive, for +which also the list of the files in the archive itself has been hidden. + +This seems to happen because now GetPassword_HRESULT() does some kind of +error checking, and depending on the results, cause its calling function +to return with an error, which in turns terminates the 7zz program in +a way that file-roller interpretes as a critical error, and everything +stops. + +On the other hand, in p7zip-full, the GetPassword() function wasn't +doing this. There's still a failure, but one that triggers File-roller +to ask the password of the archive, and once that is provided everything +works. + +From a CLI perspecvive, nothing changes, and things still work fine and +in the exact same way, no matter whether or not this patch is applied. + +Signed-off-by: Dario Faggioli +--- + OpenCallbackConsole.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff -Nru 7zip/CPP/7zip/UI/Console/OpenCallbackConsole.cpp 7zip_2/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +--- 7zip/CPP/7zip/UI/Console/OpenCallbackConsole.cpp 2017-02-18 00:42:14.000000000 +0100 ++++ 7zip_2/CPP/7zip/UI/Console/OpenCallbackConsole.cpp 2022-01-26 08:40:15.616512459 +0100 +@@ -87,7 +87,7 @@ + if (!PasswordIsDefined) + { + ClosePercents(); +- RINOK(GetPassword_HRESULT(_so, Password)); ++ GetPassword_HRESULT(_so, Password); + PasswordIsDefined = true; + } + return StringToBstr(Password, password); diff --git a/p7zip b/p7zip new file mode 100644 index 0000000..de33914 --- /dev/null +++ b/p7zip @@ -0,0 +1,225 @@ +#!/bin/sh +# gzip-like CLI wrapper for p7zip +# version 3.0 +# +# History +# 2.0 : +# - support for -filename, "file name" +# - p7zip file1 file2 ... +# 3.0 : (robert@debian.org, March 2016) +# - use 7za or 7zr, whichever one is available +# - refactor the script for better readability +# - remove `"$?" != 0 ' checks that do not work with `set -e' +# - use stderr for error reporting +# - add support for -c, -f, -k options + +set -e + +# detect 7z program to use +prg7z="`which 7za 2>/dev/null`" || \ + prg7z="`which 7zr 2>/dev/null`" || \ + { echo "$0: cannot find neither 7za nor 7zr command" >&2; exit 1; } + +# global options +f_compress=true +f_keep=false +f_force=false +f_tostdout=false + +usage() +{ + echo "Usage: $0 [options] [--] [ name ... ]" + echo "" + echo "Options:" + echo " -c --stdout --to-stdout output data to stdout" + echo " -d --decompress --uncompress decompress file" + echo " -f --force do not ask questions" + echo " -k --keep keep original file" + echo " -h --help print this help" + echo " -- treat subsequent arguments as file" + echo " names, even if they start with a dash" + echo "" + exit 0 +} + +has_7z_suffix() +{ + case "$1" in + *.7z) + return 0 + ;; + *) + return 1 + ;; + esac; +} + +make_tmp_file() +{ + P7ZIPTMP="${TMP:-/tmp}" + mktemp "${P7ZIPTMP}/p7zip.XXXXXXXX" +} + +check_not_a_tty() +{ + if ! ${f_force} && ${f_compress} && tty <&1 >/dev/null ; then + echo "$0: compressed data not written to a terminal." >&2 + echo "For help, type: $0 -h" >&2 + exit 1 + fi +} + +compress_file() +{ + file="$1" + + if ! ${f_force} && has_7z_suffix "${file}"; then + echo "$0: $file already has the 7z suffix" >&2 + exit 1 + fi + + # compress to stdout via temporary file + if ${f_tostdout}; then + check_not_a_tty + tmp="`make_tmp_file`" + trap "rm -f -- ${tmp}" 0 + rm -f -- "${tmp}" + "${prg7z}" a -si -- "${tmp}" < "${file}" >/dev/null && cat "${tmp}" || \ + { echo "$0: failed to compress data to temporary file" >&2; exit 1; } + rm -f -- "${tmp}" + return 0 + fi + + # compress to a file + if ! ${f_force} && [ -e "${file}.7z" ]; then + echo "$0: destination file ${file}.7z already exists" >&2 + exit 1 + fi + + rm -f -- "${file}.7z" + flags="" + ${f_keep} || flags="$flags -sdel" + ! ${f_force} || flags="$flags -y" + "${prg7z}" a $flags -- "${file}.7z" "${file}" || { rm -f -- "${file}.7z"; exit 1; } +} + + +decompress_file() +{ + file="$1" + + has_7z_suffix "${file}" || { echo "$0: ${file}: unknown suffix" >&2; exit 1; } + + # decompress to stdout + if ${f_tostdout}; then + # The following `| cat' pipe shouldn't be needed, however it is here to + # trick 7z not to complain about writing data to terminal. + "${prg7z}" x -so -- "${file}" | cat || exit 1 + return 0; + fi + + flags="" + ! ${f_force} || flags="$flags -y" + "${prg7z}" x $flags -- "${file}" || exit 1 + + # remove original file unless the archive contains more than one file + if ! ${f_keep} && "${prg7z}" l -- "${file}" 2>/dev/null | grep -q '^1 file,' 2>/dev/null; then + rm -f -- "${file}" + fi +} + +process_file() +{ + file="$1" + + # check if file exists and is readable + [ -r "${file}" ] || { echo "$0: cannot read ${file}" >&2; exit 1; } + + if ${f_compress}; then + compress_file "${file}" + else + decompress_file "${file}" + fi +} + +process_stdin() +{ + check_not_a_tty + + tmp="`make_tmp_file`" + trap "rm -f -- ${tmp}" 0 + + if ${f_compress}; then + + rm -f -- "${tmp}" + "${prg7z}" a -si -- "${tmp}" >/dev/null && cat -- "${tmp}" || exit 1 + + else # decompress + + cat > "${tmp}" + # The following `| cat' pipe shouldn't be needed, however it is here to + # trick 7z not to complain about writing data to terminal. + "${prg7z}" x -so -- "${tmp}" | cat || exit 1 + fi + + rm -f -- "${tmp}" +} + + +## MAIN + + +# files and flags +while [ "$#" != "0" ] ; do + case "$1" in + -c|--stdout|--to-stdout) + f_tostdout=true + ;; + -d|--decompress|--uncompress) + f_compress=false # decompressing + ;; + -f|--force) + f_force=true + ;; + -h|--help) + usage + ;; + -k|--keep) + f_keep=true + ;; + --) + shift + break + ;; + -*) + echo "$0: ignoring unknown option $1" >&2 + ;; + *) + break + ;; + esac + shift +done + + +# make sure they're present, before we screw up +for i in mktemp rm cat tty grep; do + if ! which $i >/dev/null ; then + echo "$0: $i: command not found" >&2 + exit 1 + fi +done + +if [ "$#" = 0 ]; then + # compressing/decompressing using standard I/O + process_stdin + exit 0 +fi + +# only files now +while [ "$#" != "0" ] ; do + process_file "$1" + shift +done + +exit 0 diff --git a/p7zip.1 b/p7zip.1 new file mode 100644 index 0000000..12d7057 --- /dev/null +++ b/p7zip.1 @@ -0,0 +1,79 @@ +.TH p7zip 1 "March 6th, 2016" "7-Zip" +.SH NAME +p7zip \- Wrapper on 7-Zip file archiver with high compression ratio +.SH SYNOPSIS +.B p7zip +.RB [ \-c | \-\-stdout | \-\-to\-stdout ] +.RB [ \-d | \-\-decompress | \-\-uncompress ] +.RB [ \-f | \-\-force ] +.RB [ \-h | \-\-help ] +.RB [ \-k | \-\-keep ] +.RB [ \-\- ] +.RI [ "file ..." ] +.SH DESCRIPTION +7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm +featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, +RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, +most filesystem images and DEB formats. +Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. +.PP +.B p7zip +is a gzip-like CLI wrapper script for 7-Zip, and handles only the 7z format (the native +format of 7-Zip), internally executing either +.BR 7za (1) +or +.BR 7zr (1) +command. +.PP +With no switches passed in the command line, each given +.I file +argument is compressed into +.IR file.7z , +and then removed. +.PP +With the +.B \-d +switch each passed +.I file +needs to end with the +.I .7z +extension and is decompressed. After the +decompression the original +.I file +is removed unless it contained more than one archived file. +.PP +When used without any +.I file +argument, +.BR p7zip +reads data from the standard input and compresses (or decompresses in case of +.BR \-d ) +it into the standard output. +.SH SWITCHES +.TP +.BR \-c ", " \-\-stdout ", " \-\-to\-stdout +Write output on standard output. +.TP +.BR \-d ", " \-\-decompress ", " \-\-uncompress +Decompress file. +.TP +.BR \-f ", " \-\-force +Skip some checks and force compression or decompression. +.TP +.BR \-h ", " \--help +Print usage. +.TP +.BR \-k ", " \-\-keep +Do not delete input file. +.TP +.B \-\- +Treat all subsequent arguments as file names, even if they start with a dash. +.SH "SEE ALSO" +.BR 7z (1), +.BR 7za (1), +.BR 7zr (1), +.BR bzip2 (1), +.BR gzip (1), +.BR zip (1) +.SH AUTHOR +Written for Debian by Mohammed Adnene Trojette. Updated by Robert Luberda.