p7zip: clarify license and remove unRAR code from src drv
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 source drv since the license posits you agree or remove the code from your hard drive This adds some complexity to updating p7zip so there is also an update script Meta has been updated and tweaked
This commit is contained in:
parent
dab246af15
commit
4a7586cda1
2 changed files with 71 additions and 11 deletions
|
@ -8,7 +8,18 @@ stdenv.mkDerivation rec {
|
|||
owner = "jinfeihan57";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-19F4hPV0nKVuFZNbOcXrcA1uW6Y3HQolaHVIYXGmh18=";
|
||||
sha256 = {
|
||||
free = "sha256-DrBuf2VPdcprHI6pMSmL7psm2ofOrUf0Oj0qwMjXzkk=";
|
||||
unfree = "sha256-19F4hPV0nKVuFZNbOcXrcA1uW6Y3HQolaHVIYXGmh18=";
|
||||
}.${if enableUnfree then "unfree" else "free"};
|
||||
# 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
|
||||
extraPostFetch = lib.optionalString (!enableUnfree) ''
|
||||
rm -r $out/CPP/7zip/Compress/Rar*
|
||||
find $out -name makefile'*' -exec sed -i '/Rar/d' {} +
|
||||
'';
|
||||
};
|
||||
|
||||
# Default makefile is full of impurities on Darwin. The patch doesn't hurt Linux so I'm leaving it unconditional
|
||||
|
@ -25,11 +36,6 @@ stdenv.mkDerivation rec {
|
|||
substituteInPlace makefile.machine \
|
||||
--replace 'CC=gcc' 'CC=${stdenv.cc.targetPrefix}gcc' \
|
||||
--replace 'CXX=g++' 'CXX=${stdenv.cc.targetPrefix}g++'
|
||||
'' + lib.optionalString (!enableUnfree) ''
|
||||
# Remove non-free RAR source code
|
||||
# (see DOC/License.txt, https://fedoraproject.org/wiki/Licensing:Unrar)
|
||||
rm -r CPP/7zip/Compress/Rar*
|
||||
find . -name makefile'*' -exec sed -i '/Rar/d' {} +
|
||||
'';
|
||||
|
||||
makeFlags = [ "DEST_HOME=${placeholder "out"}" ];
|
||||
|
@ -46,13 +52,20 @@ stdenv.mkDerivation rec {
|
|||
|
||||
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
|
||||
|
||||
meta = {
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/jinfeihan57/p7zip";
|
||||
description = "A new p7zip fork with additional codecs and improvements (forked from https://sourceforge.net/projects/p7zip/)";
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = [ lib.maintainers.raskin ];
|
||||
license = with licenses;
|
||||
# p7zip 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; [ raskin jk ];
|
||||
platforms = platforms.unix;
|
||||
mainProgram = "7z";
|
||||
# RAR code is under non-free UnRAR license, but we remove it
|
||||
license = if enableUnfree then lib.licenses.unfree else lib.licenses.lgpl2Plus;
|
||||
};
|
||||
}
|
||||
|
|
47
pkgs/tools/archivers/p7zip/update.sh
Executable file
47
pkgs/tools/archivers/p7zip/update.sh
Executable file
|
@ -0,0 +1,47 @@
|
|||
#! /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://api.github.com/repos/jinfeihan57/p7zip/releases/latest | jq .tag_name -r | tr -d 'v')"
|
||||
|
||||
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 {}; p7zip.src.drvAttrs.outputHash" | tr -d '"')"
|
||||
echo "getting unfree source hash"
|
||||
OLD_UNFREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; (p7zip.override { enableUnfree = true; }).src.drvAttrs.outputHash" | tr -d '"')"
|
||||
|
||||
|
||||
NEW_FREE_HASH=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "p7zip.src" --rev "v$NEW_VERSION")
|
||||
|
||||
NEW_UNFREE_OUT=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "(p7zip.override { enableUnfree = true; }).src" --rev "v$NEW_VERSION" --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"
|
Loading…
Reference in a new issue