From c53db95d253182b6d3c160ad18ce8aeb73fdb786 Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Tue, 17 Jan 2023 07:54:27 +0100 Subject: [PATCH] mir: init at 2.11.0 Co-authored-by: OPNA2608 --- pkgs/servers/mir/default.nix | 222 ++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 224 insertions(+) create mode 100644 pkgs/servers/mir/default.nix diff --git a/pkgs/servers/mir/default.nix b/pkgs/servers/mir/default.nix new file mode 100644 index 00000000000..03d9f85f439 --- /dev/null +++ b/pkgs/servers/mir/default.nix @@ -0,0 +1,222 @@ +{ stdenv +, lib +, fetchFromGitHub +, fetchpatch +, gitUpdater +, cmake +, pkg-config +, python3 +, doxygen +, libxslt +, boost +, egl-wayland +, freetype +, glib +, glm +, glog +, libdrm +, libepoxy +, libevdev +, libglvnd +, libinput +, libuuid +, libxcb +, libxkbcommon +, libxmlxx +, libyamlcpp +, lttng-ust +, mesa +, nettle +, udev +, wayland +, xorg +, xwayland +, dbus +, gtest +, umockdev +, wlcs +}: + +let + doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform; + pythonEnv = python3.withPackages(ps: with ps; [ + pillow + ] ++ lib.optionals doCheck [ + pygobject3 + python-dbusmock + ]); +in + +stdenv.mkDerivation rec { + pname = "mir"; + version = "2.11.0"; + + src = fetchFromGitHub { + owner = "MirServer"; + repo = "mir"; + rev = "v${version}"; + hash = "sha256-103PJZEoSgtSbDGCanD2/XdpX6DXXx678GmghdZI7H4="; + }; + + patches = [ + # These four patches fix various path concatenation problems and missing GNUInstallDirs variable uses that affect + # install locations and generated pkg-config files + # Remove when MirServer/mir/pull/2786 merged & a version > 2.11.0 has the fixes + (fetchpatch { + name = "0001-mir-Better-pkg-config-path-concatenations.patch"; + url = "https://github.com/MirServer/mir/pull/2786/commits/a322be08002ae7b2682d3ca7037c314ce900d3c7.patch"; + hash = "sha256-6nScVan3eefXZb+0T9TvCjRQt+rCMj27sukpdGMVJzY="; + }) + (fetchpatch { + name = "0002-mir-Improve-mirtest-pkg-config.patch"; + url = "https://github.com/MirServer/mir/pull/2786/commits/7a739fde27f5f5eff0ec33f766a807c3ff462663.patch"; + hash = "sha256-C2cDN4R0C4654Km27PJwKrNiFi/d0iz9/rcABS6eRVI="; + }) + (fetchpatch { + name = "0003-mir-Fix-GNUInstallDirs-variable-concatenations-in-CMake.patch"; + url = "https://github.com/MirServer/mir/pull/2786/commits/543e1ec0162f95611b282d33a2e81a642dc75374.patch"; + hash = "sha256-nxgj8tTfSqjRxqi67hAuWM9d604TAwhNjUXwGDAEW6A="; + }) + (fetchpatch { + name = "0004-mir-More-GNUInstallDirs-variables-less-FULL.patch"; + url = "https://github.com/MirServer/mir/pull/2786/commits/0cb0a1d5e3ac4aca25ca2ebacdcb984d7ff3a66a.patch"; + hash = "sha256-rnDvr8ul/GgajHYbpale+szNE6VDgENRY6PnBhfGMN8="; + }) + ]; + + postPatch = '' + # Fix scripts that get run in tests + patchShebangs tools/detect_fd_leaks.bash tests/acceptance-tests/wayland-generator/test_wayland_generator.sh.in + + # Fix LD_PRELOADing in tests + for needsPreloadFixing in \ + cmake/MirCommon.cmake \ + tests/umock-acceptance-tests/CMakeLists.txt \ + tests/unit-tests/platforms/gbm-kms/kms/CMakeLists.txt \ + tests/unit-tests/CMakeLists.txt + do + substituteInPlace $needsPreloadFixing \ + --replace 'LD_PRELOAD=liblttng-ust-fork.so' 'LD_PRELOAD=${lib.getLib lttng-ust}/lib/liblttng-ust-fork.so' \ + --replace 'LD_PRELOAD=libumockdev-preload.so.0' 'LD_PRELOAD=${lib.getLib umockdev}/lib/libumockdev-preload.so.0' + done + + # Patch in which tests we want to skip + substituteInPlace cmake/MirCommon.cmake \ + --replace 'set(test_exclusion_filter)' 'set(test_exclusion_filter "${lib.strings.concatStringsSep ":" [ + # These all fail in the same way: GDK_BACKEND expected to have "wayland", actually has "wayland,x11". + # They succeed when run interactively, don't know how to fix them. + "ExternalClient.empty_override_does_nothing" + "ExternalClient.strange_override_does_nothing" + "ExternalClient.another_strange_override_does_nothing" + ]}")' + + # Fix Xwayland default + substituteInPlace src/miral/x11_support.cpp \ + --replace '/usr/bin/Xwayland' '${xwayland}/bin/Xwayland' + + # Fix paths for generating drm-formats + substituteInPlace src/platform/graphics/CMakeLists.txt \ + --replace "/usr/include/drm/drm_fourcc.h" "${lib.getDev libdrm}/include/libdrm/drm_fourcc.h" \ + --replace "/usr/include/libdrm/drm_fourcc.h" "${lib.getDev libdrm}/include/libdrm/drm_fourcc.h" + + # Fix date in generated docs not honouring SOURCE_DATE_EPOCH + # Install docs to correct dir + substituteInPlace cmake/Doxygen.cmake \ + --replace '"date"' '"date" "--date=@'"$SOURCE_DATE_EPOCH"'"' \ + --replace "\''${CMAKE_INSTALL_PREFIX}/share/doc/mir-doc" "\''${CMAKE_INSTALL_DOCDIR}" + + # Not installed on Mir HEAD anymore, hence not part of the MirServer/mir/pull/2786 patches + substituteInPlace examples/miral-kiosk/CMakeLists.txt \ + --replace "\''${CMAKE_INSTALL_PREFIX}/bin" "\''${CMAKE_INSTALL_BINDIR}" + ''; + + strictDeps = true; + + nativeBuildInputs = [ + cmake + doxygen + glib # gdbus-codegen + libxslt + lttng-ust # lttng-gen-tp + pkg-config + pythonEnv + ]; + + buildInputs = [ + boost + egl-wayland + freetype + glib + glm + glog + libdrm + libepoxy + libevdev + libglvnd + libinput + libuuid + libxcb + libxkbcommon + libxmlxx + libyamlcpp + lttng-ust + mesa + nettle + udev + wayland + xorg.libX11 + xorg.libXcursor + xorg.xorgproto + xwayland + ] ++ lib.optionals doCheck [ + gtest + umockdev + wlcs + ]; + + checkInputs = [ + dbus + ]; + + buildFlags = [ "all" "doc" ]; + + cmakeFlags = [ + "-DMIR_PLATFORM='gbm-kms;x11;eglstream-kms;wayland'" + "-DMIR_ENABLE_TESTS=${if doCheck then "ON" else "OFF"}" + # Eventually renamed to MIR_SIGBUS_HANDLER_ENVIRONMENT_BROKEN + "-DMIR_BAD_BUFFER_TEST_ENVIRONMENT_BROKEN=ON" + # These get built but don't get executed by default, yet they get installed when tests are enabled + "-DMIR_BUILD_PERFORMANCE_TESTS=OFF" + "-DMIR_BUILD_PLATFORM_TEST_HARNESS=OFF" + ]; + + inherit doCheck; + + preCheck = '' + export XDG_RUNTIME_DIR=$TMPDIR + ''; + + outputs = [ "out" "dev" "doc" ]; + + passthru = { + updateScript = gitUpdater { + rev-prefix = "v"; + }; + # More of an example than a fully functioning shell, some notes for the adventurous: + # - ~/.config/miral-shell.config is one possible user config location, + # accepted options=value are according to `mir-shell --help` + # - default icon theme setting is DMZ-White, needs vanilla-dmz installed & on XCURSOR_PATH + # or setting to be changed to an available theme + # - terminal emulator setting may need to be changed if miral-terminal script + # does not know about preferred terminal + providedSessions = [ "mir-shell" ]; + }; + + meta = with lib; { + description = "A display server and Wayland compositor developed by Canonical"; + homepage = "https://mir-server.io"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ onny OPNA2608 ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 26da6522e88..c879f7c61a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24664,6 +24664,8 @@ with pkgs; miniflux = callPackage ../servers/miniflux { }; + mir = callPackage ../servers/mir { }; + icinga2 = callPackage ../servers/monitoring/icinga2 { }; icinga2-agent = callPackage ../servers/monitoring/icinga2 {