diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/wayland')
3 files changed, 246 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/wayland/darwin.patch b/nixpkgs/pkgs/development/libraries/wayland/darwin.patch new file mode 100644 index 000000000000..965294dfa5ff --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/wayland/darwin.patch @@ -0,0 +1,74 @@ +diff --git a/meson.build b/meson.build +index 35c3b95..f27e472 100644 +--- a/meson.build ++++ b/meson.build +@@ -16,7 +16,7 @@ config_h.set_quoted('PACKAGE', meson.project_name()) + config_h.set_quoted('PACKAGE_VERSION', meson.project_version()) + + cc_args = [] +-if host_machine.system() != 'freebsd' ++if host_machine.system() not in ['darwin', 'freebsd'] + cc_args += ['-D_POSIX_C_SOURCE=200809L'] + endif + add_project_arguments(cc_args, language: 'c') +@@ -52,7 +52,7 @@ foreach f: have_funcs + endforeach + config_h.set10('HAVE_XUCRED_CR_PID', cc.has_member('struct xucred', 'cr_pid', prefix : '#include <sys/ucred.h>')) + have_broken_msg_cmsg_cloexec = false +-if host_machine.system() == 'freebsd' ++if host_machine.system() in ['darwin', 'freebsd'] + have_broken_msg_cmsg_cloexec = not cc.compiles(''' + #include <sys/param.h> /* To get __FreeBSD_version. */ + #if __FreeBSD_version < 1300502 || \ +@@ -69,7 +69,7 @@ endif + config_h.set10('HAVE_BROKEN_MSG_CMSG_CLOEXEC', have_broken_msg_cmsg_cloexec) + + if get_option('libraries') +- if host_machine.system() == 'freebsd' ++ if host_machine.system() in ['darwin', 'freebsd'] + # When building for FreeBSD, epoll(7) is provided by a userspace + # wrapper around kqueue(2). + epoll_dep = dependency('epoll-shim') +diff --git a/src/event-loop.c b/src/event-loop.c +index 37cf95d..49a38cb 100644 +--- a/src/event-loop.c ++++ b/src/event-loop.c +@@ -48,6 +48,13 @@ + + #define TIMER_REMOVED -2 + ++#ifdef __APPLE__ ++struct itimerspec { ++ struct timespec it_interval; ++ struct timespec it_value; ++}; ++#endif ++ + struct wl_event_loop; + struct wl_event_source_interface; + struct wl_event_source_timer; +diff --git a/src/wayland-os.c b/src/wayland-os.c +index a9066ca..483fe64 100644 +--- a/src/wayland-os.c ++++ b/src/wayland-os.c +@@ -69,17 +69,19 @@ wl_os_socket_cloexec(int domain, int type, int protocol) + { + int fd; + ++#ifdef SOCK_CLOEXEC + fd = socket(domain, type | SOCK_CLOEXEC, protocol); + if (fd >= 0) + return fd; + if (errno != EINVAL) + return -1; ++#endif + + fd = socket(domain, type, protocol); + return set_cloexec_or_close(fd); + } + +-#if defined(__FreeBSD__) ++#if defined(__APPLE__) || defined(__FreeBSD__) + int + wl_os_socket_peercred(int sockfd, uid_t *uid, gid_t *gid, pid_t *pid) + { diff --git a/nixpkgs/pkgs/development/libraries/wayland/default.nix b/nixpkgs/pkgs/development/libraries/wayland/default.nix new file mode 100644 index 000000000000..fbed7a3b5206 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/wayland/default.nix @@ -0,0 +1,127 @@ +{ lib +, stdenv +, fetchurl +, substituteAll +, meson +, pkg-config +, ninja +, wayland-scanner +, expat +, libxml2 +, withLibraries ? stdenv.isLinux || stdenv.isDarwin +, withTests ? stdenv.isLinux +, libffi +, epoll-shim +, withDocumentation ? withLibraries && stdenv.hostPlatform == stdenv.buildPlatform +, graphviz-nox +, doxygen +, libxslt +, xmlto +, python3 +, docbook_xsl +, docbook_xml_dtd_45 +, docbook_xml_dtd_42 +}: + +# Documentation is only built when building libraries. +assert withDocumentation -> withLibraries; + +# Tests are only built when building libraries. +assert withTests -> withLibraries; + +let + isCross = stdenv.buildPlatform != stdenv.hostPlatform; +in +stdenv.mkDerivation rec { + pname = "wayland"; + version = "1.22.0"; + + src = fetchurl { + url = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${version}/downloads/${pname}-${version}.tar.xz"; + hash = "sha256-FUCvHqaYpHHC2OnSiDMsfg/TYMjx0Sk267fny8JCWEI="; + }; + + patches = [ + ./darwin.patch + ]; + + postPatch = lib.optionalString withDocumentation '' + patchShebangs doc/doxygen/gen-doxygen.py + '' + lib.optionalString stdenv.hostPlatform.isStatic '' + # delete line containing os-wrappers-test, disables + # the building of os-wrappers-test + sed -i '/os-wrappers-test/d' tests/meson.build + ''; + + outputs = [ "out" "bin" "dev" ] ++ lib.optionals withDocumentation [ "doc" "man" ]; + separateDebugInfo = true; + + mesonFlags = [ + "-Ddocumentation=${lib.boolToString withDocumentation}" + "-Dlibraries=${lib.boolToString withLibraries}" + "-Dtests=${lib.boolToString withTests}" + ]; + + depsBuildBuild = [ + pkg-config + ]; + + nativeBuildInputs = [ + meson + pkg-config + ninja + ] ++ lib.optionals isCross [ + wayland-scanner + ] ++ lib.optionals withDocumentation [ + (graphviz-nox.override { pango = null; }) # To avoid an infinite recursion + doxygen + libxslt + xmlto + python3 + docbook_xml_dtd_45 + docbook_xsl + ]; + + buildInputs = [ + expat + libxml2 + ] ++ lib.optionals withLibraries [ + libffi + ] ++ lib.optionals (withLibraries && !stdenv.hostPlatform.isLinux) [ + epoll-shim + ] ++ lib.optionals withDocumentation [ + docbook_xsl + docbook_xml_dtd_45 + docbook_xml_dtd_42 + ]; + + postFixup = '' + # The pkg-config file is required for cross-compilation: + mkdir -p $bin/lib/pkgconfig/ + cat <<EOF > $bin/lib/pkgconfig/wayland-scanner.pc + wayland_scanner=$bin/bin/wayland-scanner + + Name: Wayland Scanner + Description: Wayland scanner + Version: ${version} + EOF + ''; + + passthru = { inherit withLibraries; }; + + meta = with lib; { + 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 = licenses.mit; # Expat version + platforms = platforms.unix; + maintainers = with maintainers; [ primeos codyopel qyliss ]; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/wayland/protocols.nix b/nixpkgs/pkgs/development/libraries/wayland/protocols.nix new file mode 100644 index 000000000000..dc53bbb54d2a --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/wayland/protocols.nix @@ -0,0 +1,45 @@ +{ lib, stdenv, fetchurl +, pkg-config +, meson, ninja, wayland-scanner +, python3, wayland +}: + +stdenv.mkDerivation rec { + pname = "wayland-protocols"; + version = "1.32"; + + # https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/48 + doCheck = stdenv.hostPlatform == stdenv.buildPlatform && stdenv.targetPlatform.linker == "bfd" && wayland.withLibraries; + + src = fetchurl { + url = "https://gitlab.freedesktop.org/wayland/${pname}/-/releases/${version}/downloads/${pname}-${version}.tar.xz"; + hash = "sha256-dFl5nTQMgpa2le+FfAfd7yTFoJsJq2p097kmQNKxuhE="; + }; + + postPatch = lib.optionalString doCheck '' + patchShebangs tests/ + ''; + + depsBuildBuild = [ pkg-config ]; + nativeBuildInputs = [ meson ninja wayland-scanner ]; + nativeCheckInputs = [ python3 wayland ]; + + mesonFlags = [ "-Dtests=${lib.boolToString doCheck}" ]; + + meta = { + description = "Wayland protocol extensions"; + longDescription = '' + wayland-protocols contains Wayland protocols that add functionality not + available in the Wayland core protocol. Such protocols either add + completely new functionality, or extend the functionality of some other + protocol either in Wayland core, or some other protocol in + wayland-protocols. + ''; + homepage = "https://gitlab.freedesktop.org/wayland/wayland-protocols"; + license = lib.licenses.mit; # Expat version + platforms = lib.platforms.all; + maintainers = with lib.maintainers; [ primeos ]; + }; + + passthru.version = version; +} |