easytier: 2.1.1 -> 2.1.2 (#376259)
[NixPkgs.git] / pkgs / by-name / li / libcamera / package.nix
bloba26adf10b65efe5dfff3ce7c95b3401b74735187
2   stdenv,
3   fetchgit,
4   lib,
5   meson,
6   ninja,
7   pkg-config,
8   makeFontsConf,
9   openssl,
10   libdrm,
11   libevent,
12   libyaml,
13   gst_all_1,
14   gtest,
15   graphviz,
16   doxygen,
17   python3,
18   python3Packages,
19   systemd, # for libudev
20   withTracing ? lib.meta.availableOn stdenv.hostPlatform lttng-ust,
21   lttng-ust, # withTracing
22   withQcam ? false,
23   qt6, # withQcam
24   libtiff, # withQcam
27 stdenv.mkDerivation rec {
28   pname = "libcamera";
29   version = "0.4.0";
31   src = fetchgit {
32     url = "https://git.libcamera.org/libcamera/libcamera.git";
33     rev = "v${version}";
34     hash = "sha256-m55SojGt5v5AEatBZiVqQA3xP9eeRWqHa+C3JsTiErQ=";
35   };
37   outputs = [
38     "out"
39     "dev"
40   ];
42   postPatch = ''
43     patchShebangs src/py/ utils/
44   '';
46   # libcamera signs the IPA module libraries at install time, but they are then
47   # modified by stripping and RPATH fixup. Therefore, we need to generate the
48   # signatures again ourselves. For reproducibility, we use a static private key.
49   #
50   # If this is not done, libcamera will still try to load them, but it will
51   # isolate them in separate processes, which can cause crashes for IPA modules
52   # that are not designed for this (notably ipa_rpi.so).
53   preBuild = ''
54     ninja src/ipa-priv-key.pem
55     install -D ${./ipa-priv-key.pem} src/ipa-priv-key.pem
56   '';
58   postFixup = ''
59     ../src/ipa/ipa-sign-install.sh src/ipa-priv-key.pem $out/lib/libcamera/ipa_*.so
60   '';
62   strictDeps = true;
64   buildInputs =
65     [
66       # IPA and signing
67       openssl
69       # gstreamer integration
70       gst_all_1.gstreamer
71       gst_all_1.gst-plugins-base
73       # cam integration
74       libevent
75       libdrm
77       # hotplugging
78       systemd
80       # pycamera
81       python3Packages.pybind11
83       # yamlparser
84       libyaml
86       gtest
87     ]
88     ++ lib.optionals withTracing [ lttng-ust ]
89     ++ lib.optionals withQcam [
90       libtiff
91       qt6.qtbase
92       qt6.qttools
93     ];
95   nativeBuildInputs = [
96     meson
97     ninja
98     pkg-config
99     python3
100     python3Packages.jinja2
101     python3Packages.pyyaml
102     python3Packages.ply
103     python3Packages.sphinx
104     graphviz
105     doxygen
106     openssl
107   ] ++ lib.optional withQcam qt6.wrapQtAppsHook;
109   mesonFlags = [
110     "-Dv4l2=true"
111     (lib.mesonEnable "tracing" withTracing)
112     (lib.mesonEnable "qcam" withQcam)
113     "-Dlc-compliance=disabled" # tries unconditionally to download gtest when enabled
114     # Avoid blanket -Werror to evade build failures on less
115     # tested compilers.
116     "-Dwerror=false"
117     # Documentation breaks binary compatibility.
118     # Given that upstream also provides public documentation,
119     # we can disable it here.
120     "-Ddocumentation=disabled"
121   ];
123   # Fixes error on a deprecated declaration
124   env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
126   # Silence fontconfig warnings about missing config
127   FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ ]; };
129   meta = with lib; {
130     description = "Open source camera stack and framework for Linux, Android, and ChromeOS";
131     homepage = "https://libcamera.org";
132     changelog = "https://git.libcamera.org/libcamera/libcamera.git/tag/?h=${src.rev}";
133     license = licenses.lgpl2Plus;
134     maintainers = with maintainers; [ citadelcore ];
135     badPlatforms = [
136       # Mandatory shared libraries.
137       lib.systems.inspect.platformPatterns.isStatic
138     ];
139   };