Files
Marvin Preuss a3a26de1bb makemkv: fetch sources over https
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)
2026-07-20 11:11:39 +02:00

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 ];
};
}
)