chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / cc / ccextractor / package.nix
blob0ddfdfe3f3c8ca140ffa7f19e429e80517383126
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   writeTextFile,
7   pkg-config,
8   cmake,
9   ninja,
10   cargo,
11   rustc,
12   corrosion,
13   rustPlatform,
15   gpac,
16   protobufc,
17   libpng,
18   zlib,
19   utf8proc,
20   freetype,
21   ffmpeg_7,
22   libarchive,
23   curl,
24   libiconv,
26   enableOcr ? true,
27   leptonica,
28   tesseract,
31 stdenv.mkDerivation (finalAttrs: {
32   pname = "ccextractor";
33   version = "0.94-unstable-2024-08-12";
35   src = fetchFromGitHub {
36     owner = "CCExtractor";
37     repo = "ccextractor";
38     rev = "92f2ce0fa026b01fb07db6751210e6bd8c8944d3";
39     hash = "sha256-bp7T9uJK4bauR2Co4lKqqnM6oGa3WZ+1toEKmzOx4mI=";
40   };
42   patches = [
43     ./remove-default-commit-hash.patch
44     ./remove-vendored-libraries.patch
45   ] ++ finalAttrs.cargoDeps.patches;
47   cmakeDir = "../src";
49   cargoRoot = "src/rust";
51   cargoDeps = rustPlatform.fetchCargoTarball {
52     inherit (finalAttrs) src;
53     sourceRoot = "${finalAttrs.src.name}/${finalAttrs.cargoRoot}";
54     patches = [ ./use-rsmpeg-0.15.patch ];
55     patchFlags = [ "-p3" ];
56     hash = "sha256-jh8hHKAad+tCJGwuGdoJp/TMm/IsMrZmz8aag9lj0BA=";
57   };
59   nativeBuildInputs = [
60     pkg-config
61     cmake
62     ninja
63     cargo
64     rustc
65     corrosion
66     rustPlatform.cargoSetupHook
67     rustPlatform.bindgenHook
68   ];
70   buildInputs =
71     [
72       gpac
73       protobufc
74       libpng
75       zlib
76       utf8proc
77       freetype
78       ffmpeg_7
79       libarchive
80       curl
81       libiconv
82     ]
83     ++ lib.optionals enableOcr [
84       leptonica
85       tesseract
86     ];
88   cmakeFlags =
89     [
90       # The tests are all part of one `cargo test` invocation, so let’s
91       # get the output from it.
92       (lib.cmakeFeature "CMAKE_CTEST_ARGUMENTS" "--verbose")
94       # TODO: This (and the corresponding patch) should probably be
95       # removed for the next stable release.
96       (lib.cmakeFeature "GIT_COMMIT_HASH" finalAttrs.src.rev)
97     ]
98     ++ lib.optionals enableOcr [
99       (lib.cmakeBool "WITH_OCR" true)
100       (lib.cmakeBool "WITH_HARDSUBX" true)
101     ];
103   env = {
104     FFMPEG_INCLUDE_DIR = "${lib.getDev ffmpeg_7}/include";
106     # Upstream’s FFmpeg binding crate needs an explicit path to a shared
107     # object to do dynamic linking. The key word is *an* explicit path;
108     # they don’t support passing more than one. This linker script hack
109     # pulls in all the FFmpeg libraries they bind to.
110     #
111     # See: <https://github.com/CCExtractor/rusty_ffmpeg/pull/69>
112     FFMPEG_DLL_PATH =
113       let
114         ffmpegLibNames = [
115           "avcodec"
116           "avdevice"
117           "avfilter"
118           "avformat"
119           "avutil"
120           "swresample"
121           "swscale"
122         ];
123         ffmpegLibDir = "${lib.getLib ffmpeg_7}/lib";
124         ffmpegLibExt = stdenv.hostPlatform.extensions.library;
125         ffmpegLibPath = ffmpegLibName: "${ffmpegLibDir}/lib${ffmpegLibName}.${ffmpegLibExt}";
126         ffmpegLinkerScript = writeTextFile {
127           name = "ccextractor-ffmpeg-linker-script";
128           destination = "/lib/ffmpeg.ld";
129           text = "INPUT(${lib.concatMapStringsSep " " ffmpegLibPath ffmpegLibNames})";
130         };
131       in
132       "${ffmpegLinkerScript}/lib/ffmpeg.ld";
133   };
135   doCheck = true;
137   postPatch = lib.optionalString enableOcr ''
138     substituteInPlace src/lib_ccx/ocr.c \
139       --replace-fail 'getenv("TESSDATA_PREFIX")' '"${tesseract}/share"'
140   '';
142   meta = {
143     homepage = "https://www.ccextractor.org/";
144     changelog = "${finalAttrs.src.meta.homepage}/blob/${finalAttrs.src.rev}/docs/CHANGES.TXT";
145     description = "Tool that produces subtitles from closed caption data in videos";
146     longDescription = ''
147       A tool that analyzes video files and produces independent subtitle files from
148       closed captions data. CCExtractor is portable, small, and very fast.
149       It works on Linux, Windows, and OSX.
150     '';
151     platforms = lib.platforms.unix;
152     sourceProvenance = [ lib.sourceTypes.fromSource ];
153     license = lib.licenses.gpl2Only;
154     maintainers = [ lib.maintainers.emily ];
155     mainProgram = "ccextractor";
156   };