www.makemkv.com now returns HTTP 403 for plain-http download requests and serves the tarballs only over https. Every mirror URL in the derivation used http://, so the fixed-output derivation failed to fetch its sources and the build broke for everyone. The tarballs and their content hashes are unchanged over https, so only the URL scheme needs updating. Assisted-by: Claude Code (Claude Opus 4.8)
140 lines
4.7 KiB
Nix
140 lines
4.7 KiB
Nix
{
|
|
autoPatchelfHook,
|
|
common-updater-scripts,
|
|
curl,
|
|
expat,
|
|
fetchurl,
|
|
ffmpeg,
|
|
lib,
|
|
stdenv,
|
|
qt5,
|
|
openssl,
|
|
pkg-config,
|
|
rubyPackages,
|
|
writeShellApplication,
|
|
zlib,
|
|
|
|
withJava ? true,
|
|
jre_headless,
|
|
}:
|
|
stdenv.mkDerivation (
|
|
finalAttrs:
|
|
let
|
|
inherit (finalAttrs) version;
|
|
# Using two URLs as the first one will break as soon as a new version is released
|
|
srcs.bin = fetchurl {
|
|
urls = [
|
|
"https://www.makemkv.com/download/makemkv-bin-${version}.tar.gz"
|
|
"https://www.makemkv.com/download/old/makemkv-bin-${version}.tar.gz"
|
|
];
|
|
hash = "sha256-zuVt4LqlUxq+0WvYYnQtMI13K0q02uFu6GW/dPBKFgg=";
|
|
};
|
|
srcs.oss = fetchurl {
|
|
urls = [
|
|
"https://www.makemkv.com/download/makemkv-oss-${version}.tar.gz"
|
|
"https://www.makemkv.com/download/old/makemkv-oss-${version}.tar.gz"
|
|
];
|
|
hash = "sha256-hZAGNkjULsKpWLdFc9cCLw9MM05OT+fdU7cMbnSLpFM=";
|
|
};
|
|
in
|
|
{
|
|
pname = "makemkv";
|
|
version = "1.18.4";
|
|
|
|
srcs = lib.attrValues finalAttrs.passthru.srcs;
|
|
sourceRoot = "makemkv-oss-${version}";
|
|
patches = [
|
|
./r13y.patch
|
|
# This patch is sourced from NonGuix, licensed GPLv3:
|
|
# https://gitlab.com/nonguix/nonguix/-/blob/2d1f3691546f007c7cd96ae87e4e970fed789182/nongnu/packages/patches/makemkv-app-id.patch
|
|
./app-id.patch
|
|
];
|
|
|
|
enableParallelBuilding = true;
|
|
nativeBuildInputs = [
|
|
autoPatchelfHook
|
|
pkg-config
|
|
qt5.wrapQtAppsHook
|
|
];
|
|
buildInputs = [
|
|
expat
|
|
ffmpeg
|
|
openssl
|
|
qt5.qtbase
|
|
zlib
|
|
];
|
|
runtimeDependencies = [ (lib.getLib curl) ];
|
|
|
|
qtWrapperArgs =
|
|
let
|
|
binPath = lib.makeBinPath [ jre_headless ];
|
|
in
|
|
lib.optionals withJava [ "--prefix PATH : ${binPath}" ];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
install -Dm555 -t "$out"/bin out/{makemkv,mmccextr,mmgplsrv} \
|
|
../makemkv-bin-"$version"/bin/amd64/makemkvcon
|
|
install -D -t "$out"/lib out/lib{driveio,makemkv,mmbd}.so.*
|
|
install -D -t "$out"/share/MakeMKV ../makemkv-bin-"$version"/src/share/*
|
|
install -Dm444 -t "$out"/share/applications ../makemkv-oss-"$version"/makemkvgui/share/makemkv.desktop
|
|
install -Dm444 -t "$out"/share/icons/hicolor/16x16/apps ../makemkv-oss-"$version"/makemkvgui/share/icons/16x16/*
|
|
install -Dm444 -t "$out"/share/icons/hicolor/32x32/apps ../makemkv-oss-"$version"/makemkvgui/share/icons/32x32/*
|
|
install -Dm444 -t "$out"/share/icons/hicolor/64x64/apps ../makemkv-oss-"$version"/makemkvgui/share/icons/64x64/*
|
|
install -Dm444 -t "$out"/share/icons/hicolor/128x128/apps ../makemkv-oss-"$version"/makemkvgui/share/icons/128x128/*
|
|
install -Dm444 -t "$out"/share/icons/hicolor/256x256/apps ../makemkv-oss-"$version"/makemkvgui/share/icons/256x256/*
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
passthru = {
|
|
inherit srcs;
|
|
updateScript = lib.getExe (writeShellApplication {
|
|
name = "update-makemkv";
|
|
runtimeInputs = [
|
|
common-updater-scripts
|
|
curl
|
|
rubyPackages.nokogiri
|
|
];
|
|
runtimeEnv.oldVersion = version;
|
|
text = ''
|
|
get_version() {
|
|
# shellcheck disable=SC2016
|
|
curl --fail --silent 'https://forum.makemkv.com/forum/viewtopic.php?f=3&t=224' \
|
|
| nokogiri -e 'puts $_.css("head title").first.text.match(/\bMakeMKV (\d+\.\d+\.\d+) /)[1]'
|
|
}
|
|
newVersion=$(get_version)
|
|
if [ "$oldVersion" == "$newVersion" ]; then
|
|
echo "$0: New version same as old version, nothing to do." >&2
|
|
exit
|
|
fi
|
|
update-source-version makemkv "$newVersion" --source-key=passthru.srcs.bin
|
|
update-source-version makemkv "$newVersion" --source-key=passthru.srcs.oss --ignore-same-version
|
|
'';
|
|
});
|
|
};
|
|
|
|
meta = {
|
|
description = "Convert blu-ray and dvd to mkv";
|
|
longDescription = ''
|
|
makemkv is a one-click QT application that transcodes an encrypted
|
|
blu-ray or DVD disc into a more portable set of mkv files, preserving
|
|
subtitles, chapter marks, all video and audio tracks.
|
|
|
|
Program is time-limited -- it will stop functioning after 60 days. You
|
|
can always download the latest version from makemkv.com that will reset the
|
|
expiration date.
|
|
'';
|
|
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
|
license = [
|
|
lib.licenses.unfree
|
|
lib.licenses.lgpl21
|
|
];
|
|
homepage = "https://makemkv.com";
|
|
platforms = [ "x86_64-linux" ];
|
|
maintainers = with lib.maintainers; [ jchw ];
|
|
};
|
|
}
|
|
)
|