mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-08 23:03:07 +00:00
61922738bb
Per the adjusted FFmpeg pinning advice, packages that work on the default version should use the unversioned variants to ease the migration to future versions and reduce the number of packages that end up referencing old versions. I have left HandBrake pinned as it builds a custom patched FFmpeg.
158 lines
3.9 KiB
Nix
158 lines
3.9 KiB
Nix
{
|
||
lib,
|
||
stdenv,
|
||
fetchFromGitHub,
|
||
writeTextFile,
|
||
|
||
pkg-config,
|
||
cmake,
|
||
ninja,
|
||
cargo,
|
||
rustc,
|
||
corrosion,
|
||
rustPlatform,
|
||
|
||
gpac,
|
||
protobufc,
|
||
libpng,
|
||
zlib,
|
||
utf8proc,
|
||
freetype,
|
||
ffmpeg,
|
||
libarchive,
|
||
curl,
|
||
libiconv,
|
||
|
||
enableOcr ? true,
|
||
leptonica,
|
||
tesseract,
|
||
}:
|
||
|
||
stdenv.mkDerivation (finalAttrs: {
|
||
pname = "ccextractor";
|
||
version = "0.94-unstable-2024-08-12";
|
||
|
||
src = fetchFromGitHub {
|
||
owner = "CCExtractor";
|
||
repo = "ccextractor";
|
||
rev = "92f2ce0fa026b01fb07db6751210e6bd8c8944d3";
|
||
hash = "sha256-bp7T9uJK4bauR2Co4lKqqnM6oGa3WZ+1toEKmzOx4mI=";
|
||
};
|
||
|
||
patches = [
|
||
./remove-default-commit-hash.patch
|
||
./remove-vendored-libraries.patch
|
||
] ++ finalAttrs.cargoDeps.patches;
|
||
|
||
cmakeDir = "../src";
|
||
|
||
cargoRoot = "src/rust";
|
||
|
||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||
inherit (finalAttrs) src;
|
||
sourceRoot = "${finalAttrs.src.name}/${finalAttrs.cargoRoot}";
|
||
patches = [ ./use-rsmpeg-0.15.patch ];
|
||
patchFlags = [ "-p3" ];
|
||
hash = "sha256-jh8hHKAad+tCJGwuGdoJp/TMm/IsMrZmz8aag9lj0BA=";
|
||
};
|
||
|
||
nativeBuildInputs = [
|
||
pkg-config
|
||
cmake
|
||
ninja
|
||
cargo
|
||
rustc
|
||
corrosion
|
||
rustPlatform.cargoSetupHook
|
||
rustPlatform.bindgenHook
|
||
];
|
||
|
||
buildInputs =
|
||
[
|
||
gpac
|
||
protobufc
|
||
libpng
|
||
zlib
|
||
utf8proc
|
||
freetype
|
||
ffmpeg
|
||
libarchive
|
||
curl
|
||
libiconv
|
||
]
|
||
++ lib.optionals enableOcr [
|
||
leptonica
|
||
tesseract
|
||
];
|
||
|
||
cmakeFlags =
|
||
[
|
||
# The tests are all part of one `cargo test` invocation, so let’s
|
||
# get the output from it.
|
||
(lib.cmakeFeature "CMAKE_CTEST_ARGUMENTS" "--verbose")
|
||
|
||
# TODO: This (and the corresponding patch) should probably be
|
||
# removed for the next stable release.
|
||
(lib.cmakeFeature "GIT_COMMIT_HASH" finalAttrs.src.rev)
|
||
]
|
||
++ lib.optionals enableOcr [
|
||
(lib.cmakeBool "WITH_OCR" true)
|
||
(lib.cmakeBool "WITH_HARDSUBX" true)
|
||
];
|
||
|
||
env = {
|
||
FFMPEG_INCLUDE_DIR = "${lib.getDev ffmpeg}/include";
|
||
|
||
# Upstream’s FFmpeg binding crate needs an explicit path to a shared
|
||
# object to do dynamic linking. The key word is *an* explicit path;
|
||
# they don’t support passing more than one. This linker script hack
|
||
# pulls in all the FFmpeg libraries they bind to.
|
||
#
|
||
# See: <https://github.com/CCExtractor/rusty_ffmpeg/pull/69>
|
||
FFMPEG_DLL_PATH =
|
||
let
|
||
ffmpegLibNames = [
|
||
"avcodec"
|
||
"avdevice"
|
||
"avfilter"
|
||
"avformat"
|
||
"avutil"
|
||
"swresample"
|
||
"swscale"
|
||
];
|
||
ffmpegLibDir = "${lib.getLib ffmpeg}/lib";
|
||
ffmpegLibExt = stdenv.hostPlatform.extensions.library;
|
||
ffmpegLibPath = ffmpegLibName: "${ffmpegLibDir}/lib${ffmpegLibName}.${ffmpegLibExt}";
|
||
ffmpegLinkerScript = writeTextFile {
|
||
name = "ccextractor-ffmpeg-linker-script";
|
||
destination = "/lib/ffmpeg.ld";
|
||
text = "INPUT(${lib.concatMapStringsSep " " ffmpegLibPath ffmpegLibNames})";
|
||
};
|
||
in
|
||
"${ffmpegLinkerScript}/lib/ffmpeg.ld";
|
||
};
|
||
|
||
doCheck = true;
|
||
|
||
postPatch = lib.optionalString enableOcr ''
|
||
substituteInPlace src/lib_ccx/ocr.c \
|
||
--replace-fail 'getenv("TESSDATA_PREFIX")' '"${tesseract}/share"'
|
||
'';
|
||
|
||
meta = {
|
||
homepage = "https://www.ccextractor.org/";
|
||
changelog = "${finalAttrs.src.meta.homepage}/blob/${finalAttrs.src.rev}/docs/CHANGES.TXT";
|
||
description = "Tool that produces subtitles from closed caption data in videos";
|
||
longDescription = ''
|
||
A tool that analyzes video files and produces independent subtitle files from
|
||
closed captions data. CCExtractor is portable, small, and very fast.
|
||
It works on Linux, Windows, and OSX.
|
||
'';
|
||
platforms = lib.platforms.unix;
|
||
sourceProvenance = [ lib.sourceTypes.fromSource ];
|
||
license = lib.licenses.gpl2Only;
|
||
maintainers = [ lib.maintainers.emily ];
|
||
mainProgram = "ccextractor";
|
||
};
|
||
})
|