Name:           hyprland
Version:        0.29.1
Release:        %autorelease
Summary:        Dynamic tiling Wayland compositor that doesn't sacrifice on its looks

# main source code is BSD-3-Clause
# subprojects/hyprland-protocols is BSD-3-Clause
# subprojects/wlroots is MIT
# subproject/udis86 is BSD-2-Clause
License:        BSD-3-Clause AND MIT AND BSD-2-Clause
URL:            https://github.com/hyprwm/Hyprland
Source:         %{url}/releases/download/v%{version}/source-v%{version}.tar.gz

# Revert passing git information to meson to avoid a build requirment on git.
# https://github.com/hyprwm/Hyprland/commit/0eebf3ab1614a34433cc4d208be84b930b88e25c
# Patch:          0001-Partially-revert-meson-add-DGIT-arguments-321.patch

# The dependency is optional, and xcb-errors is not yet packaged in Fedora.
# The system wlroots disables this dependency as well.
Patch0:          0002-Disable-xcb-errors-in-bundled-wlroots.patch

BuildRequires:  meson
BuildRequires:  gcc-c++
BuildRequires:  jq

# dependencies found by running:
# grep --recursive --include meson.build dependency

# meson.build
BuildRequires:  (git)
BuildRequires:  pkgconfig(xcb)
BuildRequires:  cmake
BuildRequires:  pkgconfig(libsystemd)
# protocols/meson.build
BuildRequires:  pkgconfig(wayland-protocols)
BuildRequires:  pkgconfig(wayland-scanner)
BuildRequires:  pkgconfig(wayland-server)
# src/meson.build
BuildRequires:  pkgconfig(wayland-server)
BuildRequires:  pkgconfig(wayland-client)
BuildRequires:  pkgconfig(cairo)
BuildRequires:  pkgconfig(libdrm)
BuildRequires:  pkgconfig(egl)
BuildRequires:  pkgconfig(xkbcommon)
BuildRequires:  pkgconfig(libinput)
BuildRequires:  pkgconfig(pixman-1)
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(pango)
BuildRequires:  pkgconfig(pangocairo)
# subprojects/wlroots/meson.build
BuildRequires:  pkgconfig(wayland-server)
BuildRequires:  pkgconfig(libdrm)
BuildRequires:  pkgconfig(xkbcommon)
BuildRequires:  pkgconfig(pixman-1)
# subprojects/wlroots/backend/drm/meson.build
BuildRequires:  pkgconfig(hwdata)
BuildRequires:  pkgconfig(libdisplay-info)
BuildRequires:  pkgconfig(libliftoff)
# subprojects/wlroots/backend/libinput/meson.build
BuildRequires:  pkgconfig(libinput)
# subprojects/wlroots/backend/session/meson.build
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(libseat)
# subprojects/wlroots/backend/wayland/meson.build
BuildRequires:  pkgconfig(wayland-client)
# subprojects/wlroots/backend/x11/meson.build
BuildRequires:  pkgconfig(xcb)
BuildRequires:  pkgconfig(xcb-dri3)
BuildRequires:  pkgconfig(xcb-present)
BuildRequires:  pkgconfig(xcb-render)
BuildRequires:  pkgconfig(xcb-renderutil)
BuildRequires:  pkgconfig(xcb-shm)
BuildRequires:  pkgconfig(xcb-xfixes)
BuildRequires:  pkgconfig(xcb-xinput)
# subprojects/wlroots/protocol/meson.build
BuildRequires:  pkgconfig(wayland-protocols)
BuildRequires:  pkgconfig(wayland-scanner)
# subprojects/wlroots/render/meson.build
BuildRequires:  pkgconfig(egl)
BuildRequires:  pkgconfig(gbm)
# subprojects/wlroots/render/allocator/meson.build
BuildRequires:  pkgconfig(gbm)
# subprojects/wlroots/render/gles2/meson.build
BuildRequires:  pkgconfig(glesv2)
# subprojects/wlroots/render/pixman/meson.build
BuildRequires:  pkgconfig(pixman-1)
# subprojects/wlroots/render/vulkan/meson.build
BuildRequires:  pkgconfig(vulkan)
BuildRequires:  glslang
# subprojects/wlroots/xwayland/meson.build
BuildRequires:  pkgconfig(xwayland)
BuildRequires:  pkgconfig(xcb)
BuildRequires:  pkgconfig(xcb-composite)
BuildRequires:  pkgconfig(xcb-ewmh)
BuildRequires:  pkgconfig(xcb-icccm)
BuildRequires:  pkgconfig(xcb-render)
BuildRequires:  pkgconfig(xcb-res)
BuildRequires:  pkgconfig(xcb-xfixes)


Requires: %{name}-wlroots = %{version}-%{release}

Recommends: mesa-dri-drivers%{?_isa}
# Upstream insists on always building against very current snapshots of
# wlroots, and doesn't provide a method for building against a system copy.
# https://github.com/hyprwm/Hyprland/issues/302
# Provides:       bundled(wlroots) = 0.17.0~^1.765bbbbb

# Currently this library is only used by hyprland, so we'll keep it bundled for
# now until something else needs it as a system package.
Provides:       bundled(hyprland-protocols) = 0.1^1.d7d403b

# udis86 is packaged in Fedora, but the copy bundled here is actually a
# modified fork.
Provides:       bundled(udis86) = 1.7.2^1.5336633

%description
Hyprland is a dynamic tiling Wayland compositor based on wlroots that doesn't
sacrifice on its looks.  It supports multiple layouts, fancy effects, has a
very flexible IPC model allowing for a lot of customization, a powerful plugin
system and more.

%package docs
Summary: Man documentations for Hyprland
Requires: %{name}%{?_isa} = %{version}-%{release}

%description docs
Man based documentation for Hyprland

%package wlroots
Summary: WLRoots library bundled in Hyprland
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: wlroots = 0.17.0~^1.765bbbb
Conflicts: wlroots < 0.17.0

%description wlroots
WLRoots upstream bundled version of Hyprland

%prep
%autosetup -p 1 -n hyprland-source
cp subprojects/hyprland-protocols/LICENSE LICENSE-hyprland-protocols
cp subprojects/udis86/LICENSE LICENSE-udis86
cp subprojects/wlroots/LICENSE LICENSE-wlroots


%build
%meson
%meson_build


%install
%meson_install

# remove wlroots development files
#rm -r %{buildroot}%{_includedir}/wlr
#rm -r %{buildroot}%{_libdir}/libwlroots.a
#rm -r %{buildroot}%{_libdir}/pkgconfig/wlroots.pc

# remove hyprland-protocols development files
#rm %{buildroot}%{_datadir}/pkgconfig/hyprland-protocols.pc
#rm %{buildroot}%{_datadir}/protocols/hyprland-toplevel-export-v1.xml
#rm %{buildroot}%{_datadir}/protocols/hyprland-global-shortcuts-v1.xml


%files
%license LICENSE LICENSE-hyprland-protocols LICENSE-udis86 LICENSE-wlroots
%{_bindir}/Hyprland
%{_bindir}/hyprctl
%{_datadir}/hyprland
%{_datadir}/wayland-sessions/hyprland.desktop
%{_datadir}/pkgconfig/hyprland-protocols.pc
%{_includedir}/hyprland
%{_datadir}/hyprland-protocols/protocols/hyprland-global-shortcuts-v1.xml
%{_datadir}/hyprland-protocols/protocols/hyprland-toplevel-export-v1.xml
%{_datadir}/pkgconfig/hyprland.pc
%{_datadir}/xdg-desktop-portal/hyprland-portals.conf

%files docs
%{_mandir}/man1/Hyprland.1*
%{_mandir}/man1/hyprctl.1*


%files wlroots
%{_includedir}/wlr
%{_libdir}/pkgconfig/wlroots.pc
%{_libdir}/libwlroots.a

%changelog
%autochangelog