Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / wayland / default.nix
blob52a1d9db3d2814099d8bc6f7c5102d425718f2a5
1 { lib
2 , stdenv
3 , fetchurl
4 , meson
5 , pkg-config
6 , ninja
7 , wayland-scanner
8 , expat
9 , libxml2
10 , withLibraries ? stdenv.isLinux || stdenv.isDarwin
11 , withTests ? stdenv.isLinux
12 , libffi
13 , epoll-shim
14 , withDocumentation ? withLibraries && stdenv.hostPlatform == stdenv.buildPlatform
15 , graphviz-nox
16 , doxygen
17 , libxslt
18 , xmlto
19 , python3
20 , docbook_xsl
21 , docbook_xml_dtd_45
22 , docbook_xml_dtd_42
25 # Documentation is only built when building libraries.
26 assert withDocumentation -> withLibraries;
28 # Tests are only built when building libraries.
29 assert withTests -> withLibraries;
31 let
32   isCross = stdenv.buildPlatform != stdenv.hostPlatform;
34 stdenv.mkDerivation rec {
35   pname = "wayland";
36   version = "1.22.0";
38   src = fetchurl {
39     url = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${version}/downloads/${pname}-${version}.tar.xz";
40     hash = "sha256-FUCvHqaYpHHC2OnSiDMsfg/TYMjx0Sk267fny8JCWEI=";
41   };
43   patches = [
44     ./darwin.patch
45   ];
47   postPatch = lib.optionalString withDocumentation ''
48     patchShebangs doc/doxygen/gen-doxygen.py
49   '' + lib.optionalString stdenv.hostPlatform.isStatic ''
50     # delete line containing os-wrappers-test, disables
51     # the building of os-wrappers-test
52     sed -i '/os-wrappers-test/d' tests/meson.build
53   '';
55   outputs = [ "out" "bin" "dev" ] ++ lib.optionals withDocumentation [ "doc" "man" ];
56   separateDebugInfo = true;
58   mesonFlags = [
59     "-Ddocumentation=${lib.boolToString withDocumentation}"
60     "-Dlibraries=${lib.boolToString withLibraries}"
61     "-Dtests=${lib.boolToString withTests}"
62   ];
64   depsBuildBuild = [
65     pkg-config
66   ];
68   nativeBuildInputs = [
69     meson
70     pkg-config
71     ninja
72   ] ++ lib.optionals isCross [
73     wayland-scanner
74   ] ++ lib.optionals withDocumentation [
75     (graphviz-nox.override { pango = null; }) # To avoid an infinite recursion
76     doxygen
77     libxslt
78     xmlto
79     python3
80     docbook_xml_dtd_45
81     docbook_xsl
82   ];
84   buildInputs = [
85     expat
86     libxml2
87   ] ++ lib.optionals withLibraries [
88     libffi
89   ] ++ lib.optionals (withLibraries && !stdenv.hostPlatform.isLinux) [
90     epoll-shim
91   ] ++ lib.optionals withDocumentation [
92     docbook_xsl
93     docbook_xml_dtd_45
94     docbook_xml_dtd_42
95   ];
97   postFixup = ''
98     # The pkg-config file is required for cross-compilation:
99     mkdir -p $bin/lib/pkgconfig/
100     cat <<EOF > $bin/lib/pkgconfig/wayland-scanner.pc
101     wayland_scanner=$bin/bin/wayland-scanner
103     Name: Wayland Scanner
104     Description: Wayland scanner
105     Version: ${version}
106     EOF
107   '';
109   passthru = { inherit withLibraries; };
111   meta = with lib; {
112     description = "Core Wayland window system code and protocol";
113     longDescription = ''
114       Wayland is a project to define a protocol for a compositor to talk to its
115       clients as well as a library implementation of the protocol.
116       The wayland protocol is essentially only about input handling and buffer
117       management, but also handles drag and drop, selections, window management
118       and other interactions that must go through the compositor (but not
119       rendering).
120     '';
121     homepage = "https://wayland.freedesktop.org/";
122     license = licenses.mit; # Expat version
123     platforms = platforms.unix;
124     maintainers = with maintainers; [ primeos codyopel qyliss ];
125   };