about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/wayland/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/wayland/default.nix')
-rw-r--r--nixpkgs/pkgs/development/libraries/wayland/default.nix105
1 files changed, 105 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/wayland/default.nix b/nixpkgs/pkgs/development/libraries/wayland/default.nix
new file mode 100644
index 000000000000..7ec8936267bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/wayland/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, meson
+, pkg-config
+, substituteAll
+, ninja
+, libffi
+, libxml2
+, wayland
+, expat ? null # Build wayland-scanner (currently cannot be disabled as of 1.7.0)
+, withDocumentation ? stdenv.hostPlatform == stdenv.buildPlatform
+, graphviz-nox
+, doxygen
+, libxslt
+, xmlto
+, python3
+, docbook_xsl
+, docbook_xml_dtd_45
+, docbook_xml_dtd_42
+}:
+
+# Require the optional to be enabled until upstream fixes or removes the configure flag
+assert expat != null;
+let
+  isCross = stdenv.buildPlatform != stdenv.hostPlatform;
+in
+stdenv.mkDerivation rec {
+  pname = "wayland";
+  version = "1.18.0";
+
+  src = fetchurl {
+    url = "https://wayland.freedesktop.org/releases/${pname}-${version}.tar.xz";
+    sha256 = "0k995rn96xkplrapz5k648j651wc43kq817xk1x8280h16gsfxa6";
+  };
+
+  patches = [
+    # Fix documentation to be reproducible.
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/wayland/wayland/-/commit/e53e0edf0f892670f3e8c5dd527b3bb22335d32d.patch";
+      sha256 = "15sbhi86m9k72lsj56p7zr20ph2b0y4svl639snsbafn2ir1zdb2";
+    })
+    (substituteAll {
+      src = ./0001-add-placeholder-for-nm.patch;
+      nm = "${stdenv.cc.targetPrefix}nm";
+    })
+  ];
+
+  outputs = [ "out" ] ++ lib.optionals withDocumentation [ "doc" "man" ];
+  separateDebugInfo = true;
+
+  mesonFlags = [ "-Ddocumentation=${lib.boolToString withDocumentation}" ];
+
+  postPatch = lib.optionalString withDocumentation ''
+    patchShebangs doc/doxygen/gen-doxygen.py
+  '';
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    ninja
+  ] ++ lib.optionals isCross [
+    wayland # For wayland-scanner during the build
+  ] ++ lib.optionals withDocumentation [
+    (graphviz-nox.override { pango = null; }) # To avoid an infinite recursion
+    doxygen
+    libxslt
+    xmlto
+    python3
+    docbook_xml_dtd_45
+  ];
+
+  buildInputs = [
+    libffi
+    expat
+    libxml2
+  ] ++ lib.optionals withDocumentation [
+    docbook_xsl
+    docbook_xml_dtd_45
+    docbook_xml_dtd_42
+  ];
+
+  meta = {
+    description = "Core Wayland window system code and protocol";
+    longDescription = ''
+      Wayland is a project to define a protocol for a compositor to talk to its
+      clients as well as a library implementation of the protocol.
+      The wayland protocol is essentially only about input handling and buffer
+      management, but also handles drag and drop, selections, window management
+      and other interactions that must go through the compositor (but not
+      rendering).
+    '';
+    homepage = "https://wayland.freedesktop.org/";
+    license = lib.licenses.mit; # Expat version
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ primeos codyopel ];
+  };
+
+  passthru.version = version;
+}