about summary refs log tree commit diff
path: root/nixpkgs/pkgs/by-name/li/libcamera/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/by-name/li/libcamera/package.nix')
-rw-r--r--nixpkgs/pkgs/by-name/li/libcamera/package.nix114
1 files changed, 114 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/by-name/li/libcamera/package.nix b/nixpkgs/pkgs/by-name/li/libcamera/package.nix
new file mode 100644
index 000000000000..a6a0fe8fa7c3
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/li/libcamera/package.nix
@@ -0,0 +1,114 @@
+{ stdenv
+, fetchgit
+, lib
+, fetchpatch
+, meson
+, ninja
+, pkg-config
+, makeFontsConf
+, openssl
+, libdrm
+, libevent
+, libyaml
+, lttng-ust
+, gst_all_1
+, gtest
+, graphviz
+, doxygen
+, python3
+, python3Packages
+, systemd # for libudev
+, withQcam ? false
+, qt5 # withQcam
+, libtiff # withQcam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libcamera";
+  version = "0.2.0";
+
+  src = fetchgit {
+    url = "https://git.libcamera.org/libcamera/libcamera.git";
+    rev = "v${version}";
+    hash = "sha256-x0Im9m9MoACJhQKorMI34YQ+/bd62NdAPc2nWwaJAvM=";
+  };
+
+  outputs = [ "out" "dev" "doc" ];
+
+  postPatch = ''
+    patchShebangs utils/
+  '';
+
+  strictDeps = true;
+
+  buildInputs = [
+    # IPA and signing
+    openssl
+
+    # gstreamer integration
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+
+    # cam integration
+    libevent
+    libdrm
+
+    # hotplugging
+    systemd
+
+    # lttng tracing
+    lttng-ust
+
+    # yamlparser
+    libyaml
+
+    gtest
+  ] ++ lib.optionals withQcam [ libtiff qt5.qtbase qt5.qttools ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    python3Packages.jinja2
+    python3Packages.pyyaml
+    python3Packages.ply
+    python3Packages.sphinx
+    graphviz
+    doxygen
+    openssl
+  ] ++ lib.optional withQcam qt5.wrapQtAppsHook;
+
+  mesonFlags = [
+    "-Dv4l2=true"
+    "-Dqcam=${if withQcam then "enabled" else "disabled"}"
+    "-Dlc-compliance=disabled" # tries unconditionally to download gtest when enabled
+    # Avoid blanket -Werror to evade build failures on less
+    # tested compilers.
+    "-Dwerror=false"
+  ];
+
+  # Fixes error on a deprecated declaration
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  # Silence fontconfig warnings about missing config
+  FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ ]; };
+
+  # libcamera signs the IPA module libraries at install time, but they are then
+  # modified by stripping and RPATH fixup. Therefore, we need to generate the
+  # signatures again ourselves.
+  #
+  # If this is not done, libcamera will still try to load them, but it will
+  # isolate them in separate processes, which can cause crashes for IPA modules
+  # that are not designed for this (notably ipa_rpi.so).
+  postFixup = ''
+    ../src/ipa/ipa-sign-install.sh src/ipa-priv-key.pem $out/lib/libcamera/ipa_*.so
+  '';
+
+  meta = with lib; {
+    description = "An open source camera stack and framework for Linux, Android, and ChromeOS";
+    homepage = "https://libcamera.org";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ citadelcore ];
+  };
+}