summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorj-k <dev@j-k.io>2022-03-18 04:47:19 +0000
committerGitHub <noreply@github.com>2022-03-18 12:47:19 +0800
commitc12cec8bc39c3c1153a42032a03a83d149d1e2ac (patch)
tree6241538b3e93cc8c6a2d2dd4f9a137a9f741d93b
parent056ce434a2a5eff5dceff22083cdbcb1b07e5244 (diff)
_7zz: correct license (#163999)
* _7zz: correct license and remove p7zip dependency The code under Compress/Rar* is licensed under a specific unRAR license Also Compress/LzfseDecoder.cpp is covered by BSD3 The unRAR code is removed from the `.tar.xz` since the license posits you agree or remove the code from your hard drive This adds some complexity to updating 7zz so there is also an update script Meta has been updated and tweaked Source is now downloaded from sourceforge in the `.tar.xz` version to avoid depending on p7zip * _7zz: add notice of the license updates and optional unRAR licenced code
-rw-r--r--nixos/doc/manual/from_md/release-notes/rl-2205.section.xml6
-rw-r--r--nixos/doc/manual/release-notes/rl-2205.section.md2
-rw-r--r--pkgs/tools/archivers/7zz/default.nix58
-rwxr-xr-xpkgs/tools/archivers/7zz/update.sh50
4 files changed, 109 insertions, 7 deletions
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index 7ef03b1f5e1c..ee0f94bfce31 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -762,6 +762,12 @@
</listitem>
<listitem>
<para>
+ <literal>pkgs._7zz</literal> is now correctly licensed as
+ LGPL3+ and BSD3 with optional unfree unRAR licensed code
+ </para>
+ </listitem>
+ <listitem>
+ <para>
<literal>tilp2</literal> was removed together with its module
</para>
</listitem>
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index d592d6896116..148543802d00 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -304,6 +304,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- `pkgs.docbookrx` was removed since it's unmaintained
+- `pkgs._7zz` is now correctly licensed as LGPL3+ and BSD3 with optional unfree unRAR licensed code
+
- `tilp2` was removed together with its module
- The F-PROT antivirus (`fprot` package) and its service module were removed because it
diff --git a/pkgs/tools/archivers/7zz/default.nix b/pkgs/tools/archivers/7zz/default.nix
index c93a750e48f0..c4ccae0272eb 100644
--- a/pkgs/tools/archivers/7zz/default.nix
+++ b/pkgs/tools/archivers/7zz/default.nix
@@ -1,4 +1,14 @@
-{ stdenv, lib, fetchurl, p7zip, uasm, useUasm ? stdenv.isx86_64 }:
+{ stdenv
+, lib
+, fetchurl
+
+, uasm
+, useUasm ? stdenv.isx86_64
+
+ # RAR code is under non-free unRAR license
+ # see the meta.license section below for more details
+, enableUnfree ? false
+}:
let
inherit (stdenv.hostPlatform) system;
@@ -14,17 +24,38 @@ stdenv.mkDerivation rec {
version = "21.07";
src = fetchurl {
- url = "https://7-zip.org/a/7z${lib.replaceStrings [ "." ] [ "" ] version}-src.7z";
- sha256 = "sha256-0QdNVvQVqrmdmeWXp7ZtxFXbpjSa6KTInfdkdbahKEw=";
+ url = "https://7-zip.org/a/7z${lib.replaceStrings [ "." ] [ "" ] version}-src.tar.xz";
+ sha256 = {
+ free = "sha256-SMM6kQ6AZ05s4miJjMoE4NnsXQ0tlkdWx0q2HKjhaM8=";
+ unfree = "sha256-IT1ZRAfLjvy6NmELFSykkh7aFBYzELQ5A9E+aDE+Hjk=";
+ }.${if enableUnfree then "unfree" else "free"};
+ downloadToTemp = (!enableUnfree);
+ # remove the unRAR related code from the src drv
+ # > the license requires that you agree to these use restrictions,
+ # > or you must remove the software (source and binary) from your hard disks
+ # https://fedoraproject.org/wiki/Licensing:Unrar
+ postFetch = lib.optionalString (!enableUnfree) ''
+ mkdir tmp
+ tar xf $downloadedFile -C ./tmp
+ rm -r ./tmp/CPP/7zip/Compress/Rar*
+ tar cfJ $out -C ./tmp . \
+ --sort=name \
+ --mtime="@$SOURCE_DATE_EPOCH" \
+ --owner=0 --group=0 --numeric-owner \
+ --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime
+ '';
};
sourceRoot = "CPP/7zip/Bundles/Alone2";
- makeFlags = lib.optionals useUasm [ "MY_ASM=uasm" ];
+ makeFlags =
+ lib.optionals useUasm [ "MY_ASM=uasm" ] ++
+ # it's the compression code with the restriction, see DOC/License.txt
+ lib.optionals (!enableUnfree) [ "DISABLE_RAR_COMPRESS=true" ];
makefile = "../../cmpl_gcc${platformSuffix}.mak";
- nativeBuildInputs = [ p7zip ] ++ lib.optionals useUasm [ uasm ];
+ nativeBuildInputs = lib.optionals useUasm [ uasm ];
enableParallelBuilding = true;
@@ -40,14 +71,27 @@ stdenv.mkDerivation rec {
doInstallCheck = true;
installCheckPhase = ''
+ runHook preInstallCheck
+
$out/bin/7zz --help | grep ${version}
+
+ runHook postInstallCheck
'';
+ passthru.updateScript = ./update.sh;
+
meta = with lib; {
description = "Command line archiver utility";
homepage = "https://7-zip.org";
- license = licenses.lgpl21Plus;
- maintainers = with maintainers; [ anna328p peterhoeg ];
+ license = with licenses;
+ # 7zip code is largely lgpl2Plus
+ # CPP/7zip/Compress/LzfseDecoder.cpp is bsd3
+ [ lgpl2Plus /* and */ bsd3 ] ++
+ # and CPP/7zip/Compress/Rar* are unfree with the unRAR license restriction
+ # the unRAR compression code is disabled by default
+ lib.optionals enableUnfree [ unfree ];
+ maintainers = with maintainers; [ anna328p peterhoeg jk ];
platforms = platforms.linux;
+ mainProgram = "7zz";
};
}
diff --git a/pkgs/tools/archivers/7zz/update.sh b/pkgs/tools/archivers/7zz/update.sh
new file mode 100755
index 000000000000..bbc9804799ab
--- /dev/null
+++ b/pkgs/tools/archivers/7zz/update.sh
@@ -0,0 +1,50 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils gnused curl jq
+set -euo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+DRV_DIR="$PWD"
+
+OLD_VERSION="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+NEW_VERSION="$(curl "https://sourceforge.net/projects/sevenzip/best_release.json" | jq '.platform_releases.linux.filename' -r | cut -d/ -f3)"
+
+echo "comparing versions $OLD_VERSION => $NEW_VERSION"
+if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
+ echo "Already up to date! Doing nothing"
+ exit 0
+fi
+
+NIXPKGS_ROOT="$(realpath "$DRV_DIR/../../../..")"
+
+echo "getting free source hash"
+OLD_FREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; _7zz.src.drvAttrs.outputHash" | tr -d '"')"
+echo "getting unfree source hash"
+OLD_UNFREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; (_7zz.override { enableUnfree = true; }).src.drvAttrs.outputHash" | tr -d '"')"
+
+NEW_VERSION_FORMATTED="$(echo "$NEW_VERSION" | tr -d '.')"
+URL="https://7-zip.org/a/7z${NEW_VERSION_FORMATTED}-src.tar.xz"
+
+
+NEW_FREE_HASH=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "_7zz.src" --url "$URL")
+
+NEW_UNFREE_OUT=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "(_7zz.override { enableUnfree = true; }).src" --url "$URL" --output raw --print-path)
+# first line of raw output is the hash
+NEW_UNFREE_HASH="$(echo "$NEW_UNFREE_OUT" | sed -n 1p)"
+# second line of raw output is the src path
+NEW_UNFREE_SRC="$(echo "$NEW_UNFREE_OUT" | sed -n 2p)"
+# make sure to nuke the unfree src from the updater's machine
+# > the license requires that you agree to these use restrictions, or you must remove the software (source and binary) from your hard disks
+# https://fedoraproject.org/wiki/Licensing:Unrar
+nix-store --delete "$NEW_UNFREE_SRC"
+
+
+echo "updating version"
+sed -i "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" "$DRV_DIR/default.nix"
+
+echo "updating free hash"
+sed -i "s@free = \"$OLD_FREE_HASH\";@free = \"$NEW_FREE_HASH\";@" "$DRV_DIR/default.nix"
+echo "updating unfree hash"
+sed -i "s@unfree = \"$OLD_UNFREE_HASH\";@unfree = \"$NEW_UNFREE_HASH\";@" "$DRV_DIR/default.nix"
+
+echo "done"